Keil一個關於中斷的簡單問題,程式如下。。。

時間 2023-04-19 14:36:06

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,好習...