跟我學51單片機(二):單片機內部定時/計數器和中斷系統(tǒng)
void timer0(void) interrupt 1 (13)
{
TH0=(65536-50000)/256; (14)
TL0=(65536-50000)%256; (15)
count++; (16)
if(count==10) (17)
{
count=0; (18)
led=!led; (19)
}
}
1. 程序詳細說明:
?。?)頭文件包含。程序接下來調用的P0_0 就是該頭文件中定義好的一個寄存器地址。在對單片機內部的寄存器操作之前,應申明其來處,有興趣的讀者可以看看AT89X52.h 文件中的內容。
?。?)宏定義led,便于直觀理解也便于程序修改,將P0_0 口命名為led,這樣在程序中就可以用led代替P0_0 口進行操作。
?。?)定義一個8 位的全局變量。
?。?)主函數入口。主函數不傳遞參數也不返回值。
?。?)設定定時器0 工作在模式1,為16 位的計數器。
(6)定時器高8 位賦初值。對256 取整。
?。?)定時器低8 位賦初值。對256 取余。
?。?)開總中斷。
(9)開定時器0 中斷。
(10)定時器0 啟動,開始計數。
(11)設置開定時器0 中斷為優(yōu)先中斷。
?。?2)死循環(huán),等待中斷。
(13)定時器0 中斷服務函數入口。
(14)定時器高8 位賦初值。對256 取整。
?。?5)定時器低8 位賦初值。對256 取余。
(16)對變量count 進行加1 操作。
?。?7)如果count 增長到10。
?。?8)count 變量清0。
?。?9)led 輸出取反。
2. 程序流程圖與實驗現(xiàn)象
程序流程如圖2 所示。經編譯下載程序到單片機內運行后,可以看到實驗板上P0_0 口外接的LED 燈有規(guī)律的一亮一滅的閃爍見圖3。亮滅的時間可以計算為10×50000×1.085μs=542.5ms。
實際的時間要比這稍多幾個ms,這是因為沒有把條件判斷和程序調用的指令時間算在內。在要求非常精確的場合,應當實際微調。
圖2 主程序和中斷服務函數流程圖
圖3 實驗現(xiàn)象效果
四、總結
本講主要介紹了51 單片機內部定時器和中斷系統(tǒng)以及編寫第一個簡單的定時器實驗程序。通過該講,大家可以發(fā)現(xiàn)單片機內的定時器和中斷系統(tǒng)并不難學,只要記住應用的相關操作步驟多進行幾次實踐就可以很熟練的掌握這些資源的用法。鑒于本講的理論內容較多,希望讀者多*時間記下或者熟悉。下一講,將要介紹如果單片機串口通信并給出實例,敬請期待。
塵埃粒子計數器相關文章:塵埃粒子計數器原理
評論