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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3843|回復: 14
打印 上一主題 下一主題
收起左側

單片機中斷函數執行太快,導致按鍵掃描功能失效?

[復制鏈接]
跳轉到指定樓層
樓主
我自己編寫了一個用按鍵選擇DA輸出不同波形的函數。按鍵0按下,顯示三角波;按鍵1按下,顯示鋸齒波;除了1、2以外的按鍵按下,顯示正弦波。按鍵值可以在數碼管中顯示。  使用硬件:吳鑒鷹開發板     使用編譯器:Keil
我把DA輸出的函數、和按鍵在數碼管中顯示的函數,都在中斷函數中執行,如果定時10ms進入一次中斷,就可以實現根據按鍵值來輸出波形。如果1ms進入一次中斷,不管按哪個按鍵,都顯示三角波。我按鍵值的掃描時在main函數中執行的,只要有按鍵按下,就應該能檢測到才對,能夠檢測到按鍵值,就能選擇好輸出的到底是哪個波形。然后中斷函數執行的時候,就會輸出對應波形的各個點的值。為什么會受進入中斷的時間影響呢?

PCF8591_DA_Wave.rar

43.15 KB, 下載次數: 8

Keil工程文件

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:959891 發表于 2021-8-10 21:21 | 只看該作者

回復

使用道具 舉報

板凳
ID:161164 發表于 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吧

                       
       
                                                        
回復

使用道具 舉報

地板
ID:959891 發表于 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理論上觸發一次,只要按鍵值有變化,就會被捕捉到。
回復

使用道具 舉報

5#
ID:959346 發表于 2021-8-11 10:00 | 只看該作者
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定時的時間(1ms),程序會一直在響應中斷,跑不到其它的地方,或者響應很慢。
回復

使用道具 舉報

6#
ID:479619 發表于 2021-8-11 10:05 | 只看該作者
中斷服務函數里的兩個函數延時加太長了
回復

使用道具 舉報

7#
ID:959891 發表于 2021-8-11 10:42 | 只看該作者
Jiang_YY 發表于 2021-8-11 10:00
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定 ...

不好意思,中斷函數的處理時間怎么來確認呢?
回復

使用道具 舉報

8#
ID:959891 發表于 2021-8-11 10:56 | 只看該作者
Jiang_YY 發表于 2021-8-11 10:00
如果只是修改了定時時間,確認一下中斷處理函數用的時間是多少,如果中斷處理函數的時間超出或者很接近你定 ...

謝謝您的回復,您能否指教以下如何確認中斷函數的處理時間?單是從Keil編譯器自帶的sec指標來看,進入中斷和出中斷中間只差0.6ms,這個時間準不準?
回復

使用道具 舉報

9#
ID:161164 發表于 2021-8-11 11:43 來自觸屏版 | 只看該作者
yermsir 發表于 2021-8-11 10:56
謝謝您的回復,您能否指教以下如何確認中斷函數的處理時間?單是從Keil編譯器自帶的sec指標來看,進入中 ...

最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17腳的高電平時間
回復

使用道具 舉報

10#
ID:57657 發表于 2021-8-11 12:35 | 只看該作者
yermsir 發表于 2021-8-11 10:42
不好意思,中斷函數的處理時間怎么來確認呢?

這個需要用邏輯分析儀捕捉一下
回復

使用道具 舉報

11#
ID:57657 發表于 2021-8-11 13:34 | 只看該作者
lkc8210 發表于 2021-8-11 11:43
最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17 ...

P17上電瞬間高電平,建議將電平反過來。
回復

使用道具 舉報

12#
ID:959891 發表于 2021-8-11 13:48 | 只看該作者
lkc8210 發表于 2021-8-11 11:43
最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17 ...

謝謝,我已經按照您的方法測試,中斷執行時間是2ms。我把定時器的時間定為3ms的時候,就解決了問題,可以驗證是因為中斷函數占用的時間太長導致的。非常感謝。
回復

使用道具 舉報

13#
ID:959891 發表于 2021-8-11 13:48 | 只看該作者
npn 發表于 2021-8-11 12:35
這個需要用邏輯分析儀捕捉一下

非常感謝,已經解決了問題。
回復

使用道具 舉報

14#
ID:959891 發表于 2021-8-11 16:22 | 只看該作者
本帖已經找到原因所在,中斷函數的執行時間是2ms。我把定時器的時間定為1ms的時候,那么程序會一直進入中斷;我修改為3ms,就解決了問題,可以驗證是因為中斷函數占用的時間太長導致的。非常感謝各位的幫助。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

15#
ID:161164 發表于 2021-8-11 16:39 | 只看該作者
npn 發表于 2021-8-11 13:34
P17上電瞬間高電平,建議將電平反過來。

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表