使用計數(shù)器T0,工作在方式0,對外部脈沖進行計數(shù),當外部脈沖數(shù)量累計達到1000后LED顯示值加1。其實驗電路如圖所示
分析: 使用計數(shù)器與使用定時器類似,只是計數(shù)脈沖由系統(tǒng)時鐘脈沖改為外部脈沖。也可以使用中斷查詢的方式進行編程,就是先給定時器寄存器賦初值,當計滿后就清掉溢出標志TF0.再進入下一輪中斷,當然也可以不使用中斷查詢,而直接使用數(shù)值比較完成要求,數(shù)值比較其實就是每次都將TH0和TL0與預(yù)設(shè)的Hight和Lower進行比較,當比較的結(jié)果都為真時,進行計數(shù)到后的服務(wù)程序。下面依次給出其程序清單。
(1)使用中斷查詢方式的程序清單如下:
sfr data_buf=0xA0; //顯示數(shù)據(jù)端口
unsigned char conter; //全局變量,用于保存計數(shù)值
void main(void)
{
conter=0;
Conter_Init();
while(1)
{
Conter0();
disply(conter);
}
}
void Conter_Init(void)
{
TMOD=0x04; //工作方式設(shè)置
/*計數(shù)器初值設(shè)置*/
TH0=0xe0; //初始值設(shè)置,7192轉(zhuǎn)為13位后的高8位
TL0=0x18; //初始值設(shè)置,7192轉(zhuǎn)為13位后的低5位
/*關(guān)閉計數(shù)器中斷*/
EA=0 ; //關(guān)中斷
ET0=0 ; //關(guān)T0中斷
/*啟動計數(shù)器*/
TR0=1 ; //啟動T0
}
void Conter0(void)
{
if(TF0==1)
{
TF0=0;
/*計數(shù)器初值設(shè)置*/
TH0=0xe0; // 初始值設(shè)置
TL0=0x18;
conter++;
if(conter >=99)
conter=0;
}
}
void disply(unsigned char BCD) //顯示函數(shù)
{
unsigned char x,y; //定義x,y兩個變量
x=BCD%10; //取i的個位字符BCD編碼放于x中
y=BCD/10; //取i的十位字符BCD編碼放于y中
y< <=4; //x左移4位
data_buf=y|x; //返回個位與十位的組合BCD編碼并送P2口顯示
}
通過上面案例可以看出使用定時器/計數(shù)器的基本步驟如下。
1 寫TMOD,設(shè)置定時器/計數(shù)器的工作方式。
2 計算定時器/計數(shù)器的初值,并將初值寫入TH0/TH1、TL0/TL1。
3 設(shè)置IE、IP,以開放或關(guān)閉相應(yīng)的中斷和設(shè)定中斷優(yōu)先級。
4 啟動定時/計數(shù)器。
5 根據(jù)條件調(diào)用定時器/計數(shù)器服務(wù)函數(shù)。
-
寄存器
+關(guān)注
關(guān)注
31文章
5367瀏覽量
121222 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2271瀏覽量
95025 -
中斷
+關(guān)注
關(guān)注
5文章
900瀏覽量
41776 -
定時器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115410 -
CD4511
+關(guān)注
關(guān)注
3文章
24瀏覽量
29570
發(fā)布評論請先 登錄
相關(guān)推薦
評論