久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3572|回復: 14
收起左側

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

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

PCF8591_DA_Wave.rar

43.15 KB, 下載次數: 8

Keil工程文件

回復

使用道具 舉報

ID:959891 發表于 2021-8-10 21:21 | 顯示全部樓層
捕獲.JPG
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:479619 發表于 2021-8-11 10:05 | 顯示全部樓層
中斷服務函數里的兩個函數延時加太長了
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

ID:57657 發表于 2021-8-11 12:35 | 顯示全部樓層
yermsir 發表于 2021-8-11 10:42
不好意思,中斷函數的處理時間怎么來確認呢?

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

使用道具 舉報

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

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

使用道具 舉報

ID:959891 發表于 2021-8-11 13:48 | 顯示全部樓層
lkc8210 發表于 2021-8-11 11:43
最好當然是在硬件上測量,我的做法是在中斷第一行寫P17 = 1;在中斷尾寫P17 = 0;然后用邏輯分析儀測量P17 ...

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

使用道具 舉報

ID:959891 發表于 2021-8-11 13:48 | 顯示全部樓層
npn 發表于 2021-8-11 12:35
這個需要用邏輯分析儀捕捉一下

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

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:161164 發表于 2021-8-11 16:39 | 顯示全部樓層
npn 發表于 2021-8-11 13:34
P17上電瞬間高電平,建議將電平反過來。

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区网站 | 日韩在线免费播放 | 欧美日韩免费在线 | 国产精品一二三区在线观看 | 亚洲国产成人av好男人在线观看 | 久久美国| 亚洲+变态+欧美+另类+精品 | 欧美精品网站 | 欧美电影免费观看高清 | 成人久久久 | 日本在线一区二区 | 麻豆国产精品777777在线 | 欧美日韩一区二区在线观看 | 国产成人精品免高潮在线观看 | 韩国av一区二区 | 久久蜜桃av| www.久| 久久成人精品视频 | 久久新视频| 国内精品视频免费观看 | 超碰地址 | 国产精品无码专区在线观看 | 黄色亚洲 | 99国内精品久久久久久久 | 91不卡在线 | 成年人在线观看视频 | 久久com| 国产视频一区在线观看 | 亚洲精品久久久一区二区三区 | 日韩at| 日韩欧美黄色 | 九九99靖品 | av色噜噜 | 久久久不卡网国产精品一区 | 成人午夜精品 | 久久久久久久国产精品影院 | 中国一级特黄真人毛片 | 在线成人免费视频 | 四虎最新视频 | 亚洲一区在线观看视频 | 国产一级毛片精品完整视频版 |