![]() |
發布時間: 2020-7-15 18:22
正文摘要:這是完整的程序,讓小燈循環點亮一秒,熄滅一秒 請問最后一張圖中的 i 是什么?為什么要判斷 i 等于1000? 教程里說 i 起始是1毫秒,這是為什么? 求大佬們解答,謝謝! |
定時器初始化計數器1ms進入一次中斷服務函數,進入一次中斷服務函數后讓i的值加一,即每1ms進入一次中斷,i值加一。因此若要1s改變一次燈狀態的話,就要進入1000次中斷服務函數(1s=1000ms)。 |
1.先要了解單片機的定時器功能。 void Timer0 Interupt 1() 函數,就是你的定時器中斷函數,單片機會每隔一個固定的時間,進來執行一次這個中斷函數。 固定時間就是1ms 。 為什么是1ms , 因為你 Timer0 Init()函數里面已經給定了初值,另外,每次進入中斷函數后,又給TH0 和 TL0重新賦值。 依次循環。 為什么TH0 和 TL0 賦值就可以循環? 請自行惡補 定時器工作原理。 2.知道了1ms定時器工作原理, 就可以明白,每隔1ms,i++; 加到1000以后,就重新賦值為0 (其實這里判斷條件改成 >=1000更合理,因為不知道你的單片機還會不會響應其它更高級別的中斷),括號里面的內容,不懂就不用看了, 以后慢慢會懂的。 |
1. 請問最后一張圖中的 i 是什么?為什么要判斷 i 等于1000? 答:i就是時間量,單位是毫秒,初始值設置的為0,定時器設定的1毫秒產生一次中斷,在中斷中進行了i++的操作,也就是說,i每過1毫秒就加1,所以 “判斷i等于1000” 就是要判斷i是否達到了1000毫秒,如果達到了,就讓燈改變狀態,同時,還要讓i變為初值,進行下一輪的計時。 2. 教程里說 i 起始是1毫秒,這是為什么? 答:教程寫錯了,i起始是0毫秒。 |
藍魄 發表于 2020-7-16 08:13 謝謝! |
還有誰? 發表于 2020-7-16 09:31 謝謝指點 |
一個經驗告訴你,當你對一些代碼的意思不是很了解時,你可以改變數字看看變化現象,多試幾次!代碼的意思與目地你就知道是怎么回事了 |
i就是個變量啊,定時器1ms中斷一次,中斷一次i就累加一次,當i加到1000,就是1000ms,1000ms等于1秒,清零變量 i 的值,取反輸出LED的狀態,這樣就能實現你說的功能了 |