導航:首頁 > 操作系統 > 單片機定時中斷程序

單片機定時中斷程序

發布時間:2023-07-17 07:09:48

㈠ 51單片機中斷定時

30秒這個時間比較長,不知道你的晶振選用的什麼頻率。一般來說16位方式也很難做到30秒,所以需要藉助一個全局的counter變數來輔助提升定時器位數。

㈡ 幫我解釋一下單片機定時中斷程序,每一條語句的詳細詳細含義。比如TMOD=0x11中的11是什麼意思

TMOD是一個8位的寄存器,不能位定址,所以必須整體寫入用來控制定時器模式的,低四位用來控制定時器T0,高四位控制T1。對於每個定時器的四位寄存器,低兩位用來定義定時器的工作方式,方式一方式二等;第三位是功能選擇位,定義計時器為定時或計數;第四位為門控位,用來決定INTx引腳輸入電平的影響,可以理解為是否引入外部控制來控制定時器的啟停動作。
TMOD=0x11,轉為二進制就是00010001,即T0和T1的最低兩位均為01,工作方式為方式1--16位定時器或計數器。第三位為0,設定T0,T1為定時器,對內部脈沖進行計數,用來折算時間。第四位也是0,說明不參考INTx引腳電平,由內部寄存器來控制定時器的啟停。
TH0和TL0,是T0的初值,分別寫入計時器的高八位和低八位,定時器從這個值開始進行加1計算,直到16位寄存器計滿溢出則輸出中斷。TH1和TL1對應T1。

TR是定時器啟動位,TR0和TR1分別對應T0和T1,TR=1時定時器啟動,TR=0時停止。這里要注意,前面說的門控位,如果門控位為1,則定時器的啟動除TR=1以外,還要求INTx引腳輸入1。
ET0可以理解為T0的中斷開關,只有ET0=1的時候,T0才可能輸出中斷。
EA則是中斷的總開關,EA=0的時候,所有的中斷都無效。

寫的很繁瑣,要是看不懂可以繼續問我。

㈢ 單片機定時器1的中斷函數

void T0_init(void)
{
TMOD=0X10; //盯鎮定時器1
ET1=0; //打開定時租則橋器1中斷
EA=1; //打開總中斷
TR1=0; //啟動定時器1
TH1=0xxx; //算吧
TL1=0xxx;
}
void t0(void) interrupt 3
{
TF1=0;
time_count++;
TH1=0xxx; /弊猛/重裝
TL1=0xxx;
}

㈣ 51單片機定時中斷C語言的寫法步驟,可追加分數

程序說明:51單片機定時器0工作於方式一,定時50ms中斷一次
晶振為12M
#include

void
main
{
TOMD
=
0X01;
//配置定時器0工作於方式一
TH1
=
(65536-50000)/256;
//高八位裝入初值
TL1
=
(65536-50000)%256;
//低八位裝入初值
ET0
=
1;
//開定時器0中斷
EA
=
1;
//開總中斷
TR0
=
1;
//啟動定時器0
while(1)
{

}
}
void
Timer0_int()
interrupt
1
{
//重新裝初值
TH1
=
(65536-50000)/256;
//高八位裝入初值
TL1
=
(65536-50000)%256;
//低八位裝入初值
}
/***************************************************************************************************************/
上面是比較好理解的。如果實在要求簡潔的話,看下面的,跟上面功能一樣
#include

void
main
{
TOMD
=
0X01;
//配置定時器0工作於方式一
TH1
=
0x3c;
//高八位裝入初值
TL1
=
0xb0;
//低八位裝入初值
IE
=
0x82;//開總中斷並開定時器0中斷
TR0
=
1;
//啟動定時器0
while(1)
{

}
}
void
Timer0_int()
interrupt
1
{
//重新裝初值
TH1
=
0x3c;
//高八位裝入初值
TL1
=
0xb0;
//低八位裝入初值}

㈤ 單片機定時器中斷程序,C語言程序設計

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar keyval;
uchar led1=0xfe,led2=0x55,led3=0x0f;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(keyval)
{
case 1:
P0=led1;
led1=_crol_(led1,1)
break;
case 2:
P0=led2;
led2=~led2;
break;
case 3:
P0=led3;
led3=~led3;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
keyval++;
keyval%=4;
}
}
}

閱讀全文

與單片機定時中斷程序相關的資料

熱點內容
阿里雲伺服器遠程鏈接 瀏覽:247
墨鏡慧眼怎麼下載廠商的app 瀏覽:61
iphone加密專線 瀏覽:491
aes產生加密文件 瀏覽:413
編程實現藍牙通信 瀏覽:768
怎麼恢復掉簽的app 瀏覽:847
伺服器部署ip地址 瀏覽:321
涉密場所周邊安全防護距離演算法 瀏覽:672
安卓fpse模擬器怎麼設置加速 瀏覽:946
建行app怎麼生成電子簽章 瀏覽:508
獲取當前時間javadate 瀏覽:73
帶密碼的wifi如何加密 瀏覽:237
伺服器怎麼變成陣列 瀏覽:718
web前端黑客技術pdf 瀏覽:71
育兒百科全書pdf 瀏覽:600
任務欄啟動命令 瀏覽:912
編譯優化等級區別 瀏覽:757
unix網關命令 瀏覽:877
想自己做網站要學編程嗎 瀏覽:599
租個伺服器開個私服需要什麼 瀏覽:273