寫定時器中斷遇到的問題

2021-07-09 11:08:13 字數 713 閱讀 7285

寫中斷的時候,把中斷時只需要執行一次的東西寫到中斷函式裡,不要寫到main函式的while迴圈中,否則會導致極短的時間內條件不斷的滿足,從而只需要執行一次的判斷不斷被執行,不斷被滿足。

看下面的例子:

第一種情況:

void main(void)	}}

void time0int()interrupt 1

在這種情況下,雖然看似沒什麼問題,但實際上每當count0==0而下一次中斷還未觸發的時候,while迴圈中的led迴圈左移條件不斷滿足,因此在極短時間內左移多次;

第二種情況:

void main(void)

void time0int()interrupt 1

}

在這種情況下,每當count==0,中斷函式執行一次,那麼led左移函式便執行一次,滿足每500ms移動一次的條件

定時器中斷

系統初始化的時候在預設的系統初始化函式 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...