回覆列表
-
1 # 長沙妹子欣欣
-
2 # 使用者1158134898603
unsigned char rSecondCount; //秒計時數
unsigned char rMinuteCount; //分計時數
sbit IsOneSecondReach;
sbit Pulse_Sec=P1^0;
sbit Pulse_Min=P1^1;
main()
{
rSecondCount=0;
rMinuteCount=0;
TH1=0x3C;
TL1=0xAF; //定時器50ms產生一次中斷 (FFFF-3CAF)us
MOD = 0x10; //定時器1工作於模式1,(用工作於模式2也可以,而且更 簡便)
TR1=1; //使能定時器1
ET1=1; //開中斷
EA=1; //開全域性中斷
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0;
//do something,如果一秒延時標誌為1,則清除此標誌,等待下次1秒,在此處
//執行需要執行的程式
}
}
}
/* 定時器50ms產生一次中斷 */
void Timer(void) interrupt 3
{
/* 重新載入T1引數 */
TH1=0x3C;
TL1=0xAF;
/* 一秒累加 */
rSecondCount++;//秒計時+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1;
}
}
//
脈衝寬度為50ms,如果有其他要求的話,修改T1引數和“秒分”的引數湊下就行了.
用定時器來實現比較準確。比如你的晶振是12MHz,那麼微控制器執行的週期就是: 1/ ( 12M / 12) = 1uS.那麼,如果你想要定時一秒,需要微控制器執行 1000 000個指令週期。也就是說,從你讓定時器開始工作開始計時,當達到1000 000個指令週期之後,就是標準的1秒時間了。