1樓:娛樂小八卦啊
**如下:
//實現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;
擴充套件資料
定時器有兩種工作模式,分別為計數模式和定時模式。對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寬的脈衝訊號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是週期固定的脈衝則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
2樓:匿名使用者
所以中斷的使用:
1.開全域性中斷 51是 ea = 1
2.對應中斷使能 比如定時器1 et1 = 1、定時器0 et0 = 1
3.定時器工作方式配置: 有三種方式 雙8位定時 16位定時 還有捕捉方式 定時器2有4種 ,具體不介紹了 tmod 是定時器0和定時器1方式配置的暫存器 tmod = 0x01,定時器0工作在方式1(16位計數)
4.開啟定時器 tr0 = 1;定時器1開啟是 tr1 = 1;
5.中斷服務程式:就是定時時間到,你要處理的事務。
例子://50ms定時
void main(void)
void timer0_isr(void) intterupt 1 //中斷服務程式
51微控制器定時器中斷程式
m愛人 再次重新啟動。用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出一個機器週期,機器週期 12 n n指晶振頻率 假設你要定時的時間為m,那麼定時的初值為 m 機器週期 初值 th0 65536 初值 256 tl0 65536 ...
微控制器定時器中斷功能和定時器定時功能有什麼區別,什麼情況需要中斷,什麼時候不需要呢,講好必採納
小灰狼 定時器的定時,就像你設定的鬧鐘,中斷,就像你設定的鬧鐘到點自動發出聲音。如果只是定時,不產生中斷,就需要你編寫的主程式經常去檢視定時的時間到了沒,而且就算檢視到定時時間到了,你也不知道是什麼時候到的,如果有中斷,則會自動跳到中斷函式執行你安排好的 鬧鐘發出聲音就是安排好的,也可以是震動 硬體...
51微控制器定時器中斷方式實現P1 0輸出週期1s的方波的方法
方法有很多的,給你一個,你可以除錯一下,你可以通過不同的晶振去計算定時器初值,如果你懂定時器這部分很好調通的 include sbit p1 0 p1 0 int i 全域性變數void timing void 晶振為3.6864m 定時中斷函式 void time0 int interrupt 1...