欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機中斷函數執行太快,導致按鍵掃描功能失效? [打印本頁]

作者: yermsir    時間: 2021-8-10 21:13
標題: 單片機中斷函數執行太快,導致按鍵掃描功能失效?
我自己編寫了一個用按鍵選擇DA輸出不同波形的函數。按鍵0按下,顯示三角波;按鍵1按下,顯示鋸齒波;除了1、2以外的按鍵按下,顯示正弦波。按鍵值可以在數碼管中顯示。  使用硬件:吳鑒鷹開發板     使用編譯器:Keil
我把DA輸出的函數、和按鍵在數碼管中顯示的函數,都在中斷函數中執行,如果定時10ms進入一次中斷,就可以實現根據按鍵值來輸出波形。如果1ms進入一次中斷,不管按哪個按鍵,都顯示三角波。我按鍵值的掃描時在main函數中執行的,只要有按鍵按下,就應該能檢測到才對,能夠檢測到按鍵值,就能選擇好輸出的到底是哪個波形。然后中斷函數執行的時候,就會輸出對應波形的各個點的值。為什么會受進入中斷的時間影響呢?

PCF8591_DA_Wave.rar

43.15 KB, 下載次數: 8

Keil工程文件


作者: yermsir    時間: 2021-8-10 21:21


作者: lkc8210    時間: 2021-8-10 23:17
因為你的Switch沒有Default case, 若Key_Data的值不在你預定的16個case內
Key_Value值會維持為零(因初值預設為零)
而你又用Key_Value是零作為輸出三角波的條件
結果令你覺得按什么都是零
其實什么都不是
驗證方法,
                  if(0!=Key_Data)
                        {Key_Value=4;//先為Key_Value附值
                                switch(Key_Data)

看看是否按什么都出正弦波

至于為什么會受中斷時間影響
可能是你的按鍵掃描用了長時間(對單片機來說)的delay吧

                       
       
                                                        

作者: yermsir    時間: 2021-8-11 09:39
lkc8210 發表于 2021-8-10 23:17
因為你的Switch沒有Default case, 若Key_Data的值不在你預定的16個case內
Key_Value值會維持為零(因初值預 ...

謝謝您詳細的回復,非常感謝。我按照您的意見追加了Key_Value=4;的語句,并不是如預想的那樣顯示正弦波,不管按哪個鍵還是顯示三角波。
另外,按鍵掃描用了長時間的延遲delay怎么會影響到中斷函數呢?中斷函數每個1ms理論上觸發一次,只要按鍵值有變化,就會被捕捉到。
作者: Jiang_YY    時間: 2021-8-11 10:00
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定時的時間(1ms),程序會一直在響應中斷,跑不到其它的地方,或者響應很慢。
作者: 946248446    時間: 2021-8-11 10:05
中斷服務函數里的兩個函數延時加太長了
作者: yermsir    時間: 2021-8-11 10:42
Jiang_YY 發表于 2021-8-11 10:00
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定 ...

不好意思,中斷函數的處理時間怎么來確認呢?
作者: yermsir    時間: 2021-8-11 10:56
Jiang_YY 發表于 2021-8-11 10:00
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定 ...

謝謝您的回復,您能否指教以下如何確認中斷函數的處理時間?單是從Keil編譯器自帶的sec指標來看,進入中斷和出中斷中間只差0.6ms,這個時間準不準?
作者: lkc8210    時間: 2021-8-11 11:43
yermsir 發表于 2021-8-11 10:56
謝謝您的回復,您能否指教以下如何確認中斷函數的處理時間?單是從Keil編譯器自帶的sec指標來看,進入中 ...

最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17腳的高電平時間
作者: npn    時間: 2021-8-11 12:35
yermsir 發表于 2021-8-11 10:42
不好意思,中斷函數的處理時間怎么來確認呢?

這個需要用邏輯分析儀捕捉一下
作者: npn    時間: 2021-8-11 13:34
lkc8210 發表于 2021-8-11 11:43
最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17 ...

P17上電瞬間高電平,建議將電平反過來。
作者: yermsir    時間: 2021-8-11 13:48
lkc8210 發表于 2021-8-11 11:43
最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17 ...

謝謝,我已經按照您的方法測試,中斷執行時間是2ms。我把定時器的時間定為3ms的時候,就解決了問題,可以驗證是因為中斷函數占用的時間太長導致的。非常感謝。
作者: yermsir    時間: 2021-8-11 13:48
npn 發表于 2021-8-11 12:35
這個需要用邏輯分析儀捕捉一下

非常感謝,已經解決了問題。
作者: yermsir    時間: 2021-8-11 16:22
本帖已經找到原因所在,中斷函數的執行時間是2ms。我把定時器的時間定為1ms的時候,那么程序會一直進入中斷;我修改為3ms,就解決了問題,可以驗證是因為中斷函數占用的時間太長導致的。非常感謝各位的幫助。
作者: lkc8210    時間: 2021-8-11 16:39
npn 發表于 2021-8-11 13:34
P17上電瞬間高電平,建議將電平反過來。

不用理會上電那一瞬間,因為中斷是不斷執行的




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1