51微控制器定時器中斷程式

時間 2021-08-14 09:28:02

1樓:m愛人

再次重新啟動。

用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出一個機器週期,機器週期=12/n(n指晶振頻率),假設你要定時的時間為m,那麼定時的初值為:m/機器週期=初值;

th0=(65536-初值)%256;

tl0=(65536-初值)/256;

將(65536-初值)所得的值化成16進位制,其高位就是th0的值,低位為tl0的值,例如用12m晶振做1ms定時計算如下:

機器週期=12/12*10^6=1us(微秒)

定時初值=(1*10^-3)/(1*10^-6)=1000;

所以:th0=(65536-1000)%256;

tl0=(65536-1000)/256;

將65536-1000=64536化為16進製為:0xfc18,th0=0xfc,tl0=0x18;

定好初值後要延遲一秒就定一個延時引數,這裡使用1000就行了(定時為1ms)中斷程式為:timer0() interrupt 1 // 1ms延時(12.0mhz)

2樓:硬體開發

我來幫你寫一個,程式太簡單了,下面是我幫你寫的程式我測試過能滿足你的要求,希望我的回答對你有幫助!/**

****

****

****

****/#include "reg52.h"/***/sbit led_a = p1^0;

sbit led_b = p1^1;

sbit led_c = p1^2;

unsigned char time_base;

unsigned char mact_endb;

unsigned char rece_errp;

/** 定時器初始化

*/void systeminit(void)int main(void)

/* 判斷是否5秒時間到 */

else if(rece_errp ==1)else if(rece_errp == 2)else

}}void timer0_irq(void) interrupt 1} }

3樓:匿名使用者

這個不難吧?

a亮,延時,再b亮,再延時,用個while(1),可以讓亮的過程只走一回。

晚上給你編一個。

你先想想,想不出來晚上給你弄一個。

微控制器定時器中斷功能和定時器定時功能有什麼區別,什麼情況需要中斷,什麼時候不需要呢,講好必採納

小灰狼 定時器的定時,就像你設定的鬧鐘,中斷,就像你設定的鬧鐘到點自動發出聲音。如果只是定時,不產生中斷,就需要你編寫的主程式經常去檢視定時的時間到了沒,而且就算檢視到定時時間到了,你也不知道是什麼時候到的,如果有中斷,則會自動跳到中斷函式執行你安排好的 鬧鐘發出聲音就是安排好的,也可以是震動 硬體...

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 開定時...

51微控制器定時器中斷方式實現P1 0輸出週期1s的方波的方法

方法有很多的,給你一個,你可以除錯一下,你可以通過不同的晶振去計算定時器初值,如果你懂定時器這部分很好調通的 include sbit p1 0 p1 0 int i 全域性變數void timing void 晶振為3.6864m 定時中斷函式 void time0 int interrupt 1...