此程序為51單片機用定時器T1中斷控制兩個LED以不同周期閃爍,可以通過它直觀了解如何使用51單片機定時器,對學習串口通訊等有一定幫助。文件內包括仿真。
單片機源程序如下:
- #include<reg51.h> // 包含51單片機寄存器定義的頭文件
- sbit D1=P2^0; //將D1位定義為P2.0引腳
- sbit D2=P2^1; //將D2位定義為P2.1引腳
- unsigned char Countor1; //設置全局變量,儲存定時器T1中斷次數
- unsigned char Countor2; //設置全局變量,儲存定時器T1中斷次數
- /**************************************************************
- 函數功能:主函數
- **************************************************************/
- void main(void)
- {
- EA=1; //開總中斷
- ET1=1; //定時器T1中斷允許
- TMOD=0x10; //使用定時器T1的模式1
- TH1=(65536-46083)/256; //定時器T1的高8位賦初值
- TL1=(65536-46083)%256; //定時器T1的高8位賦初值
- TR1=1; //啟動定時器T1
- Countor1=0; //從0開始累計中斷次數
- Countor2=0; //從0開始累計中斷次數
- while(1)//無限循環(huán)等待中斷
- ;
- }
- /**************************************************************
- 函數功能:定時器T1的中斷服務程序
- **************************************************************/
- void Time1(void) interrupt 3 using 0 //“interrupt”聲明函數為中斷服務函數
- //其后的3為定時器T1的中斷編號;0表示使用第0組工作寄存器
- {
- Countor1++; //Countor1自加1
- Countor2++; //Countor2自加1
- if(Countor1==2) //若累計滿2次,即計時滿100ms
- {
- D1=~D1; //按位取反操作,將P2.0引腳輸出電平取反
- Countor1=0; //將Countor1清0,重新從0開始計數
- }
- if(Countor2==8) //若累計滿8次,即計時滿400ms
- {
- D2=~D2; //按位取反操作,將P2.1引腳輸出電平取反
- Countor2=0; //將Countor1清0,重新從0開始計數
- }
- TH1=(65536-46083)/256; //定時器T1的高8位重新賦初值
- TL1=(65536-46083)%256; //定時器T1的高8位重新賦初值
- }
復制代碼
全部資料51hei下載地址:
ex45.rar
(33.91 KB, 下載次數: 12)
2020-2-21 08:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|