![]() |
wulin 發表于 2020-9-2 06:08 謝謝師傅指點 |
截屏會更好 |
本帖最后由 wulin 于 2020-9-2 06:34 編輯 定時器/計數器1外部脈沖高電平計數。3秒計時周期,脈沖個數小于2,led點亮輸出,否則led熄滅。 #include "reg51.h" sbit LED=P2^1; unsigned char count=0; void main() { TMOD= 0x51; //設置定時器模式 TL0 = 0xB0; //50毫秒@12.000MHz TH0 = 0x3C; TL1 = 0; TH1 = 0; TR0 = 1; //定時器0開始計時 TR1 = 1; //定時器0開始計數 ET0 = 1; //開定時器0中斷 EA = 1; //開總中斷 while(1); } void Timer0() interrupt 1 { TL0 = 0xB0; //設置定時初值 TH0 = 0x3C; //設置定時初值 count++; if(count>=60) //3秒 { count=0; if(TL1>=2) { LED=0; TL1=0; } else LED=1; } } |
P3.2外部中斷,下降沿觸發。3秒計時周期,脈沖個數小于2,led點亮輸出,否則led熄滅。 #include "reg51.h" sbit LED=P2^1; unsigned char num=0,count=0; void main() { TMOD= 0x01; //設置定時器模式 TL0 = 0xB0; //50毫秒@12.000MHz TH0 = 0x3C; TR0 = 1; //定時器0開始計時 ET0 = 1; //開定時器0中斷 IT0 = 1; //外部中斷下降沿觸發 EX0 = 1; //開外部中斷0 EA = 1; //開總中斷 while(1); } void Timer0() interrupt 1 { TL0 = 0xB0; //設置定時初值 TH0 = 0x3C; //設置定時初值 count++; if(count>=60) //3秒 { count=0; if(num>=2) { LED=0; num=0; } else LED=1; } } void exint0() interrupt 0 { num++; } |