(2)用定时器0的方式1编程,采用中断方式。程序如下: include <reg51. h> sbit p1 0=P10 void time(void) interrupt I using1/*T/CO中断服务程序入口* {P10=!P10; P1.0取反* TH0=-(100256); /*重新装载计数初值* void main( void I TMOD=0X01; /*T/C0工作在定时器非门控制方式1*/ P10=0 THO=-(1000/256) /*预置计数初值* IL0=-(1000%256); EA=1; /*CPU中断开放* ET0=1; TCO中断开放* TR0=1; /*启动TC0开始定时* 3 while(1): /*等待中断*
单片机C语言应用程序设计 (2) 用定时器0的方式1编程,采用中断方式。程序如下: # include <reg51.h> sbit P1_0=P1^0 ; void time (void) interrupt 1 using 1 /* T/C0中断服务程序入口*/ { P1_0=!P1_0 ; /* P1.0取反*/ TH0= -(1000/256); / * 重新装载计数初值*/ } void main( void ) { TMOD=0x01 ; /* T/C0工作在定时器非门控制方式1 */ P1_0=0; TH0= -(1000/256 ); /* 预置计数初值*/ TL0= -(1000%256) ; EA=1 ; /* CPU中断开放 */ ET0= 1 ; /* T/C0中断开放*/ TR0=1 ; /* 启动T/C0开始定时*/ do { } while(1) ; /* 等待中断 */ }
例3采用10MHz晶振,在P1.0脚上输出周期为2.5s,占空 比20%的脉冲信号。 10MHz晶振,使用定时器最大定时几十毫秒。取10ms定时, 周期2.5s需250次中断,占空比20%,高电平应为50次中断 10ms定时,晶振fosc=10MHz。 需定时器计数次数=10×103×10/12=8333 include <regal.h> define uchar unsigned char uchar period=250 uchar high=50
单片机C语言应用程序设计 例3 采用10 MHz晶振,在P1.0脚上输出周期为2.5 s,占空 比20%的脉冲信号。 10 MHz晶振,使用定时器最大定时几十毫秒。取10 ms定时, 周期2.5 s需250次中断,占空比20%,高电平应为50次中断。 10 ms定时,晶振fosc=10 MHz。 需定时器计数次数=10×103×10/12=8333 # include <reg51.h> # define uchar unsigned char uchar period=250; uchar high=50;
timer(interrupt I using 1 /*TC0中断服务程序* THO=-8333/256 /*重置计数值* TL0=-8333%256; if(++time==high )P1=0; /*高电平时间到变低* else if(time==period /*周期时间到变高* t time=0 Pl=1;
单片机C语言应用程序设计 timer0( )interrupt 1 using 1 /* T/C0中断服务程序*/ {TH0= - 8333/256 ; /* 重置计数值 */ TL0= - 8333%256 ; if(++time==high)P1=0; /* 高电平时间到变低*/ else if (time==period) /* 周期时间到变高 */ {time=0 ; P1=1 ; } }
main( I TMOD=0X01 /*定时器0方式1* TH0=-8333/256; /*预置计数初值* L0=-8333%256; EA=1; /*开CPU中断* ET0=1; /*开T(C0中断* TR0=1; /*启动TC0* do while(1)
单片机C语言应用程序设计 main( ) { TMOD=0x01 ; /* 定时器0方式1 */ TH0= - 8333/256 ; /* 预置计数初值 */ TL0= - 8333%256 ; EA=1; /* 开CPU中断 */ ET0=1 ; /* 开T/C0中断*/ TR0=1 ; /* 启动T/C0 */ do { }while(1) ; }
中断次数加1 Y 次数=高电平的 P1.0=0 N 次数=周期的 Y P10=1 返回 中断服务程序流程图
单片机C语言应用程序设计 图2.2 中断服务程序流程图