8951定時器的定時中斷模式

2021-08-28 23:31:12 字數 2154 閱讀 3468

定時器的使用與我之前所說的中斷使用差不多。首先也是設定初始化定時器。先上**:

#include#define uchar unsigned char

#define uint unsigned int

sbit led=p1^0;

sbit s1=p3^0;

sbit s2=p3^1;

uchar counter=0;

uchar temp=0;

uchar flag=0;

code uchar a[10]=;

void delay(uint t) }

void show()

void main()

}void et0_int(void) interrupt 1

if(counter==20) }

void ex0_isr(void) interrupt 0

}

這個篇**可能被我改的有些複雜,看不懂不要急。 只需要了解重點語句就好。

首先是定時器的初始化在main函式裡:

tmod=0x01; //設定t0定時器工作模式

th0=(65536-50000)/256;

tl0=(65536-50000)%256;

it0=1;//設定外部中斷0的觸發方式為低電平觸發

ex0=1;//外部中斷0的開關

et0=1;//定時器0的中斷設定必須要在啟動定時器之前

ea=1;

定時器的初始化比外部終端的初始化語句多一點。

首先是設定工作模式這裡是0x01,這種模式就像乙個鬧鐘,設定好時間,它每到時間就「報警」一次。總共有四種工作方式,在此先記這一種。

tmod=0x01; //設定t0定時器工作模式
上面這句就是設定定時器工作方式。前面說了它這種工作模式工作像鬧鐘,為此要設定他的工作時間間隔。

th0=(65536-50000)/256;

tl0=(65536-50000)%256;

哈哈,看不懂吧,不要急,慢慢來。它這種工作方式設定工作時間 還真不好理解。th和tl中分別有乙個h和l表示high和low的意思就是高位和地位的意思。對於乙個數如5201314來說吧,想要把520和1314分開,就要進行運算,想得到520就是:5201314/10000就等於520,而1314=5201314%10000然後把520給高位 1314給低位,只不過這裡必須對256運算。乙個數,高位在前,低位在後。對於這個65535是固定的,後面的50000表示50000us(50000us=50ms=0.05s)。這樣他就會每個0.05s執行一次中斷服務程式,也就是這個

void et0_int(void)	interrupt 1
函式裡面的語句。然後接著解釋**:

it0=1;//設定外部中斷0的觸發方式為低電平觸發

ex0=1;//外部中斷0的開關

et0=1;//定時器0的中斷設定必須要在啟動定時器之前

tr0=1;//啟用定時器

ea=1;

這個it0是外部中斷0的,在這個程式裡我使用了外部中斷0和定時器0。ex0也不多說了他也是外部中斷0的。主要是et0=1和tr0=1的順序不要寫錯。要是it0=1,ex0=1,ea=1都看不懂是什麼意思就不要往下看了,先去學習外部中斷。

設定好了,他就是隔0.05s執行那個函式,這個函式裡面有乙個counter++和兩個if語句,由此能看出來每次響應中斷服務時候都會對counter進行加一運算。當counter對於20時也就是執行了中斷響應服務20次,前面咱給他設定的時間間隔是0.05s執行了20次的時間就是0.05s×20=1s。所以說if(counter==20)裡的語句每個一秒執行一次。由此看之,設定每個多長時間做什麼,其實就是對執行次數的檢測。同理,另乙個if就是每隔0.5s執行一次led=!led語句。

在定時器這部分中,我覺著設定定時時間,這塊不好理解。上面的理解看不懂的可以這樣記憶也行。

th0=(65536-50000)/256;

tl0=(65536-50000)%256;

設定時間就用這樣設定,裡面的50000可以變。這裡50000us=0.05s,就是每隔0.05s執行一次中斷服務程式。於是可以自己算,想隔多少秒就把0.05s替換就好。

定時器中斷

系統初始化的時候在預設的系統初始化函式 systeminit 函式裡面已經初始化 apb1 的時鐘為 2 分頻,所以 apb1 的時鐘為 36m。當 apb1 的時鐘分頻數為 1 的時候,tim2 7 的時鐘為 apb1 的時鐘,而如果 apb1 的時鐘分頻數不為 1,那麼 tim2 7 的時鐘頻率...

定時器中斷

tmod 0x01 th0 65536 50000 256 tl0 65536 50000 6 ea 1 et0 1 tr0 1 void timer0 interrupt 1 ea 1 開總中斷允許 et0 1 開定時器0允許 tmod 0x01 定時器選擇軟體啟動,工作方式為1 th0 6553...

定時器 中斷

1 實現電視劇集中的10s定時炸彈功能 炸彈炸了用蜂鳴器模擬 include unsigned char code smgduan 17 unsigned int ms,sec 10,s sbit p1 0 p1 0 void delay unsigned int n void isr timer0...