1樓:
你的問題:計數溢位時,執行中斷程式,這裡是系統跑了45872個機器週期後,開始執行中斷程式,而不是你說的1s後執行中斷程式,注意,這是你的錯誤。
不管num等於多少,tr0一直都開著,因為你程式其它地方根本沒有關閉,也就是說此時定時器還在計數,所以,即使在執行if語句的時候定時器還在計數,如果你的if語句過長的話,大於中斷的延時時間45872個機器週期了,那麼if語句內容根本還沒有執行完,又開始下一次中斷了,執行過程就是這樣子的。
不過,對於你的程式,你完全沒有必要擔心,因為:
while(1)
這句話,遠遠的小於45872個機器週期,也就是說,你上面那幾個語句執行了好幾次,中斷還沒發生一次。
不過,一個良好的電子工程師,尤其是做工業控制的,他的定時器應該這樣寫:
void to_time()interrupt 1
即,直接把數值賦值給th0和tl0,這樣避免在中斷中運算,節省時間,因為,對於所有的中斷,時間越短越好。
2樓:網友
那是你要自己判斷的事情。
首先 中斷的概念說明不應該是過於頻繁的。
所以是1s的話 這一秒 你可以處理很多事情。
要注意的是:
中斷處理函式要儘量短。
不要做複雜的運算 最好只是提交資料 資料的處理過程 放到中斷下文中等等。
來避免 你說的問題。
keil4**時,單步執行直接跳到中斷去執行了,不知道是怎麼回事
keil c 中的關於中斷程式退出狀態問題
3樓:網友
你的困惑根源在於對按鍵按下/抬起瞬間的狀態認識不足。
事實上,在按鍵按下/抬起瞬間,按鍵埠上會有一個持續抖動的電平(類似於不規則鋸齒波,你可以上網查詢一下),因此在一段時間之內上採集的電平將是不斷變化的0-1-0序列。你所增加的for(;;只判斷一種電平,所以也並不能起到去抖的作用。
一般較通用的按鍵處理流程是:當int0#檢測到跳變沿中斷時,置一個標誌,關閉ex0中斷使能;主迴圈中憑藉此標誌延時20~100ms去抖(說白了就是避過按鍵電平不穩定的這段時間),然後重新採集狀態,仍舊是低電平才判定為有效按鍵變化。
對於連線線較長或者易受干擾的場合,按鍵處理應增加至少一階的數字濾波。
關於C 的簡單問題,關於C 的一個簡單問題
include using namespace std class tdate void display void getyear void getmonth void getday void tdate display void tdate getmonth void tdate getday i...
簡單的問題,一個簡單的問題
老師對你的看法其實並不重要。實話告訴你,我也與你一樣。想開些吧,只要覺得自己做好就行了。也許是你的心理作用呢,只要你做得好,老師一定會重視你,喜歡你。就算真的是你想象的那樣,也不要被人左右,咱自己學自己的,讓別人說去吧!有句話說得好 山不轉水轉,說不定哪天你當了老師,也一定會理解老師現在的心情的。不...
C語言一個簡單的問題,一個簡單c語言小問題?
問題出在這裡 int a,b a 10 b 20 你的 a,b 都沒有初始化,指向了未知的地方,也就是所謂的野指標。可以設定兩個變數x,y,將 a,b 指向這兩個變數,然後作為引數呼叫 swap 函式。另外,你的 swap 函式忘寫函式名了吧?指標一般以小寫字母 p 開頭,表示 pointer,好習...