標題: 單片機程序由于進中斷過于頻繁導致主函數(shù)無法正常運行如何解決? [打印本頁]

作者: fhff    時間: 2022-12-6 21:34
標題: 單片機程序由于進中斷過于頻繁導致主函數(shù)無法正常運行如何解決?
51單片機波形發(fā)生器程序
有沒有大佬幫忙看看這個問題怎么解決啊:用定時中斷來產(chǎn)生波形,通過設置定時時間來設置波形頻率,但是當頻率到100hz后,程序由于進中斷函數(shù)頻率過高導致數(shù)碼管顯示異常,到1000hz后連按鍵掃描也失效了,這種由于進中斷過于頻繁導致主函數(shù)無法正常運行的問題怎么解決。

1.png (87.43 KB, 下載次數(shù): 72)

1.png

2.png (150.24 KB, 下載次數(shù): 59)

2.png

3.png (92.78 KB, 下載次數(shù): 72)

3.png

作者: npn    時間: 2022-12-7 08:29
定時器0中斷程序處理時間,超過初值時間導致溢出。
溢出后TF0硬件置1,包含 intrins.h 頭文件后,中斷底部加一句判斷有無溢出: if(_testbit_(TF0)) { }  溢出后if條件會成立,更換1T單片機或使用更高頻率晶振。
作者: 1261867136qq    時間: 2022-12-7 09:23
100hz =100次/秒 ,T = 10ms  
51假如用12M晶振,12000000次/S,T =1/12, Tcy = 12* 1/12 = 1us

一個周期64個采樣點,就是要花10ms, 那每個采樣時間段156.25us,

似乎要加濾波電路吧


作者: xuyaqi    時間: 2022-12-7 09:45
有直接輸出波形不要cpu
作者: xuyaqi    時間: 2022-12-7 09:51
有直接輸出波形不要cpu參與的單片機,為什么會有越來越多高級單片機,就是老單片機功能不夠用。
作者: 人中狼    時間: 2022-12-7 10:05
程序結(jié)構(gòu)問題,1khz頻率不算高,按鍵或許會反應遲鈍,但不會沒有反應,而且需要確定1khz和定時器中斷時間的對應關系
作者: coody_sz    時間: 2022-12-7 11:13
你先測出來中斷耗時多少,然后保證中斷間隔大于這個時間。
作者: Longan.Wang    時間: 2022-12-7 11:59
中斷服務程序盡量短!
作者: fhff    時間: 2022-12-7 13:28
npn 發(fā)表于 2022-12-7 08:29
定時器0中斷程序處理時間,超過初值時間導致溢出。
溢出后TF0硬件置1,包含 intrins.h 頭文件后,中斷底部 ...

加了溢出檢測后確實溢出了

1.png (143.46 KB, 下載次數(shù): 75)

1.png

2.png (19.5 KB, 下載次數(shù): 74)

2.png

作者: fhff    時間: 2022-12-7 13:30
xuyaqi 發(fā)表于 2022-12-7 09:51
有直接輸出波形不要cpu參與的單片機,為什么會有越來越多高級單片機,就是老單片機功能不夠用。

主要是要求用的51單片機
作者: liangzz    時間: 2022-12-7 14:09
這種通過定時器產(chǎn)生高頻率波形輸出對于很多51單片機是搞不定的,很多51的單片機定時器中斷時間設置少于50us以下就開始沒法勝任,你自己可以算一下最多能輸出多高的方波,像你這種最好不要用定時器而是拉到有pwm功能輸出的腳上。
作者: yzwzfyz    時間: 2022-12-7 14:27
說明的時序設計不合理。
事件的處理不要放在中斷服務處理程序中,放中主程序中。
中斷服務程序要盡量短,做個事件的標記即可!
在主程序中,根據(jù)標記處理事件。




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