A. 51單片機中的定時器中斷是怎麼用的
代碼如下:
//實現led燈一秒亮滅閃爍
void main()
{
TMOD=0x01;//設置定時器0為工作方式1(M1 M0為01)
TH0=(65536-45872)/256;//裝初值11.0582晶振定時50ms數為45872
TL0=(65536-45872)%256;
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0
while(1);//程序停止在這里等待中斷發生
}
void T0_time() interrupt 1
{
TMOD=0x01;//重裝初值
TH0=(65536-45872)/256;
num++;//num每加一次判斷一次是否到20次
if(num==20)//如果到了20次,說明1秒時間到
{
num=0;//num清0重新計數
led=~led1;
}
}
(1)單片機微秒中斷定時器擴展閱讀
定時器有兩種工作模式,分別為計數模式和定時模式。對Px,y的輸入脈沖進行計數為計數模式。定時模式,則是對MCU的主時鍾經過12分頻後計數。因為主時鍾是相對穩定的,所以可以通過計數值推算出計數所經過的時間。
51單片機計數器的脈沖輸入腳。主要的脈沖輸入腳有Px,y, 也指對應T0的P3.4和對應T1的P3.5,主要用來檢測片外來的脈沖。而引腳18和19則對應著晶振的輸入脈沖,脈沖的頻率和周期為
F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us
51計數器的計數值存放於特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C),T1(TL1-0x8B, TH1-0x8D)
定時器常用作定時時鍾,以實現定時檢測,定時響應、定時控制,並且可以產生ms寬的脈沖信號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是周期固定的脈沖則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
B. 51單片機定時器2的最短定時時間怎麼有限制
51單片機定時器,晶振是12MHZ、12分頻,理論上最短定時時間1微秒,
但是,CPU 運行指令 需要時間,只要中斷服務程序 的運行時間 不超過定時器 定時時間,
並且 有些餘量,則就不成問題,如果沒有餘量,則中斷結束 又進入 中斷,
如果 超過定時器 定時時間,則來不及 處理 定時也就不準確了。
用 C 語言編程,有可能 定時時間 過短 會有問題,有不好 計算中斷用去多少時間。
如果用 匯編語言 編程,晶振是12MHZ、12分頻,只是產生一個方波信號,30KHz 頻率沒有問題。
當然你要檢測 准確性 加入計數程序後 會佔用時間,
一般編程時, 在中斷 服務程序中 盡量少佔用時間,能不在中斷服務程序中處理的 事盡量 不在
中斷服務程序中 處理。
C. 51單片機定時器中斷程序
再次重新啟動。
D. 51單片機定時器中斷原理
原理很簡單,說白了就是用一個計數器對內部時鍾計數,計滿溢出時觸發定時器中斷,此時,程序會中斷執行當前代碼跳轉到一個固定地址(定時器中斷服務程序入口)去執行中斷服務程序,執行完畢再回到被中斷的代碼地址繼續執行。
E. 單片機定時器中斷問題!
因為當閃爍頻率大於10Hz,人眼基本就不能分辨了
添加一個分頻器即可,程序如下:
#include<12c5a.h>
sbitLED=P10;
unsignedcharTimes;
voidInit_Timer0()
{
TMOD=0X01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
voidmain()
{
Times=0;
Init_Timer0();
while(1);
}
voidTimer0_isr(void)interrupt1using1
{
//TH0=0x00;
//TL0=0x00;
if(--Times==0)
{
Times=20;//分頻數,可根據需要自行設置
LED=~LED;
}
}
如果時鍾為12M則20分頻後大約是1.3秒變換一下,
還有就是你的時鍾頻率是否和樣例相同??
F. 單片機中斷定時器,初值的計算方法
定時中斷初值計算方法是:
1、確定定時時間化為微妙t。
2、晶振頻率以M為單位f。
3、計算初值:s=65536-t*f/12
比如11.0592M晶振,定時10毫秒。
t=10*1000=10000us
f=11.0592
s=65536-10000*11.0592/12=65536-9216
4、給定時寄存器賦值。
THn=s/256
Tln=s%256