我们用定时中断来改写第一个程序。
#include<reg52.h> unsigned int num1; sbit Led1=P0^0; void main() { TMOD=0x01; //定时器工作模式1 TH0=(65536-1000)/256; //定时器初始值晶振12MHz TL0=(65536-1000)%256; EA=1; //开总中断 ET0=1; //定时中断开 TR0=1; //定时器开 while(1) { if(num1==1000) { num1=0; Led1=~Led1; } } } void T0_time() interrupt 1 { TH0=(65536-1000)/256; //定时器初始值,决定波特率,晶振12MHz TL0=(65536-1000)%256; num1++; } |
我们用上述的方式实现三个灯的闪烁。
#include<reg52.h> unsigned int num1; unsigned int num2; unsigned int num3; sbit Led1=P0^0; sbit Led2=P0^1; sbit Led3=P0^2; void main() { TMOD=0x01; //定时器工作模式1 TH0=(65536-1000)/256; //定时器初始值晶振12MHz TL0=(65536-1000)%256; //定时1ms EA=1; //开总中断 ET0=1; //定时中断开 TR0=1; //定时器开 while(1) { if(num1==1000) { num1=0; Led1=~Led1; } if(num2==5000) { num2=0; Led2=~Led2; } if(num3==10000) { num3=0; Led3=~Led3; } } } void T0_time() interrupt 1 { TH0=(65536-1000)/256; //定时器初始值,决定波特率,晶振12MHz TL0=(65536-1000)%256; //定时1ms num1++; num2++; num3++; } |
上面的方式能应对大部分情况了。