定時器的使用與我之前所說的中斷使用差不多。首先也是設定初始化定時器。先上**:
#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...