![]() |
發布時間: 2022-12-6 21:34
正文摘要:51單片機波形發生器程序 有沒有大佬幫忙看看這個問題怎么解決啊:用定時中斷來產生波形,通過設置定時時間來設置波形頻率,但是當頻率到100hz后,程序由于進中斷函數頻率過高導致數碼管顯示異常,到1000hz后連按鍵 ... |
說明的時序設計不合理。 事件的處理不要放在中斷服務處理程序中,放中主程序中。 中斷服務程序要盡量短,做個事件的標記即可! 在主程序中,根據標記處理事件。 |
這種通過定時器產生高頻率波形輸出對于很多51單片機是搞不定的,很多51的單片機定時器中斷時間設置少于50us以下就開始沒法勝任,你自己可以算一下最多能輸出多高的方波,像你這種最好不要用定時器而是拉到有pwm功能輸出的腳上。 |
xuyaqi 發表于 2022-12-7 09:51 主要是要求用的51單片機 |
npn 發表于 2022-12-7 08:29 加了溢出檢測后確實溢出了 |
中斷服務程序盡量短小! |
你先測出來中斷耗時多少,然后保證中斷間隔大于這個時間。 |
程序結構問題,1khz頻率不算高,按鍵或許會反應遲鈍,但不會沒有反應,而且需要確定1khz和定時器中斷時間的對應關系 |
有直接輸出波形不要cpu參與的單片機,為什么會有越來越多高級單片機,就是老單片機功能不夠用。 |
有直接輸出波形不要cpu |
100hz =100次/秒 ,T = 10ms 51假如用12M晶振,12000000次/S,T =1/12, Tcy = 12* 1/12 = 1us 一個周期64個采樣點,就是要花10ms, 那每個采樣時間段156.25us, 似乎要加濾波電路吧 |
定時器0中斷程序處理時間,超過初值時間導致溢出。 溢出后TF0硬件置1,包含 intrins.h 頭文件后,中斷底部加一句判斷有無溢出: if(_testbit_(TF0)) { } 溢出后if條件會成立,更換1T單片機或使用更高頻率晶振。 |