㈠ 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;
}
}
}