———————————————————————————————————————————— spa
定時器中斷應用實例 設計
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -3d
設計要求: code
每秒點亮P1.0口的發光二極管一次,而後熄滅,使發光二極管造成閃爍效果 blog
實現思路: it
須要計數每秒的話,計數921600時溢出便可,在四種方式定時方式中,最大的計數範圍是方式2:65536,將921600分解成20份,每份計數46080時溢出,當溢出20次時燈閃爍,每次定時器溢出都要從新裝填 class
模塊設計 定時器
實現代碼im
1 #include <reg52.h> 2 #include <intrins.h> 3 typedef unsigned char uchar; 4 sbit LED = P1 ^ 0; 5 uchar count = 0; 6 void Interrupt() interrupt 1 7 { 8 TH0 = (65536 - 46080) / 256; //觸發中斷時從新裝填計時 9 TL0 = (65536 - 46080) % 256; 10 if (count == 20) 11 { 12 LED = ~LED; 13 count = 0; 14 } 15 else ++count; 16 } 17 void main(void) 18 { 19 LED = 0xff; //初始化LED 20 TMOD = 0x01; //初始化TMOD,定時器0,方式1 21 TH0 = (65536 - 46080) / 256; //裝填計數 22 TL0 = (65536 - 46080) % 256; 23 EA = 1; //開放全部中斷 24 ET0 = 1; //開放定時器0中斷控制位 25 TR0 = 1; //定時器0開始計時 26 while(1) 27 { 28 _nop_(); 29 } 30 }