寫中斷的時候,把中斷時只需要執行一次的東西寫到中斷函式裡,不要寫到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...