新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)(二):?jiǎn)纹瑱C(jī)內(nèi)部定時(shí)/計(jì)數(shù)器和中斷系統(tǒng)

51單片機(jī)(二):?jiǎn)纹瑱C(jī)內(nèi)部定時(shí)/計(jì)數(shù)器和中斷系統(tǒng)

作者: 時(shí)間:2012-07-27 來源:網(wǎng)絡(luò) 收藏

三、程序設(shè)計(jì)

器0 應(yīng)用測(cè)試程序( 控制D1 閃爍)。

#includeAT89X52.h> (1)

#define led P0_0 (2)

unsigned char count=0; (3)

void main(void) (4)

{

TMOD=0X01; (5)

TH0=(65536-50000)/256; (6)

TL0=(65536-50000)%256; (7)

EA=1; (8)

ET0=1; (9)

TR0=1; (10)

PT0=1; (11)

while(1) ; (12)

}

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ì)說明:

(1)頭文件包含。程序接下來調(diào)用的P0_0 就是該頭文件中定義好的一個(gè)寄存器地址。在對(duì)的寄存器操作之前,應(yīng)申明其來處,有興趣的讀者可以看看AT89X52.h 文件中的內(nèi)容。

(2)宏定義led,便于直觀理解也便于程序修改,將P0_0 口命名為led,這樣在程序中就可以用led代替P0_0 口進(jìn)行操作。

(3)定義一個(gè)8 位的全局變量。

(4)主函數(shù)入口。主函數(shù)不傳遞參數(shù)也不返回值。

(5)設(shè)定器0 工作在模式1,為16 位的。

(6)器高8 位賦初值。對(duì)256 取整。

(7)定時(shí)器低8 位賦初值。對(duì)256 取余。

(8)開總。

(9)開定時(shí)器0 。

(10)定時(shí)器0 啟動(dòng),開始計(jì)數(shù)。

(11)設(shè)置開定時(shí)器0 為優(yōu)先中斷。

(12)死循環(huán),等待中斷。

(13)定時(shí)器0 中斷服務(wù)函數(shù)入口。

(14)定時(shí)器高8 位賦初值。對(duì)256 取整。

(15)定時(shí)器低8 位賦初值。對(duì)256 取余。

(16)對(duì)變量count 進(jìn)行加1 操作。

(17)如果count 增長到10。

(18)count 變量清0。

(19)led 輸出取反。

塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉