1、讓中斷參與進來計數是為了更加的準確,如果對時間要求不是很嚴格的話,可以讓單片機執行一些重復的語句(例如int i = 40000; while(i--;)以消耗時間,但具體消耗了多少時間要進入軟件調試才能得知。
2、進入中斷的時間由TH0,TL0的值來決定(也就是定時器的初值),舉個例子:當你所有的定時器設置正確,初值為TH0 = 0XFC;TL0 = 0X18;,這樣就是1ms進入一次中斷,每次進入中斷后,中斷函數的靜態變量i就自加一次(也就是相當于進入了多少次中斷),當i = 1000時(也就是相當于進入了1000次中斷了),1ms進入一次,進入了1000次,是不是就等于1ms*1000=1s?
3、如果進入中斷時間不對(也就是觸發TF0的時間不對),請確認定時器初值是否設置正確(也就是TH0與TL0的值是否正確)。
4、TMOD=TMOD|0x01;這句語句的意思是 TMOD的前7位不變,最后一位置1(如果是設置定時器0的工作模式1的話TMOD應如下設置:TMOD = TMOD & 0XF0;TMOD = TMOD | 0X01;)這樣就不會影響到TMOD的高4位(也就是設置定時器1的那4位)。
5、假如不給TH0/TL0重新賦值的話,那么將會導致TH0/TL0溢出,表現出來的結果就是定時時間不準確;舉個例子:假如TH0 = 0XFC;TL0 = 0X18;當定時時間到了1ms之后,立馬給TH0/TL0重新賦值,這樣定時器下一次進入中斷的時間又會變成1ms進入一次,如果不重新賦值,那么進入中斷的時間不能確定(也就是定時時間不確定)。
6、以下為個人看法:
(1)能將不懂的事情問出來是好事,就怕不懂又不問。
(2)視頻教程不能只看一遍就過了,多看幾次,直到徹底理解為止,不然視頻中總有遺漏的地方,
(3)我不是大神,我只是一個正在學習51單片機的人,所以,以上觀點我不敢保證一定沒問題。如有發現不對的地方請不吝賜教。 |