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