|
xiaobendan001 發表于 2024-5-10 10:30 只要是中斷,都是不建議有延時的,反正linux內核的中斷是這樣的思想 |
xjtong 發表于 2024-5-10 17:33 我用KEIL 4編譯你程序不過,修改下int0 通過,程序一切正常,沒有亂入問題 |
|
就是用單片機操作續電器,續電器控制風扇。 有一個2。4G雷達,有運動就開風扇,開的時間用延時控制。 中斷的作用是改變延時的時候,從而改變風扇運行的時候。 #include <STC8G.h> 這樣基本就沒問題的。就是中斷重入的問題。開始LED閃爍明顯不對。現在一切正常了。 |
xjtong 發表于 2024-5-10 14:28 再發生中斷會掛起pending,退出中斷處理程序后會再次進入中斷處理程序。 |
| 不關是不是重復中斷,這樣延時的閃爍都應該正常才對啊,先軟件模擬一下看看那些變量都是多少 |
npn 發表于 2024-5-10 15:39 恩,直接用杜邦線點GND,按鍵都省了。 |
tyrl800 發表于 2024-5-10 15:30 編譯一直沒問題,就是中斷是亂的。應該是中斷重入的問題。 |
問題解決了。void int0() interrupt 0 這樣就好了。 |
| 外部中斷接的是什么? 如果是按鍵需要消抖處理。 |
| 都說了編譯通不過呀 |
xjtong 發表于 2024-5-10 14:28 "中斷里的程序還沒處理完又發生中斷" 單片機會繼續運行中斷函數 直到運行完畢跳出中斷函數 單片機會立刻再次運行中斷函數 |
Longan.Wang 發表于 2024-5-10 09:57 一次是10ms,20次是200ms |
lkc8210 發表于 2024-5-10 13:06 你說對了。 我覺得是抖動的問題,所以在中斷是把EA關了呀。 在中斷里延時也是怕抖動的問題。 重點是有一個邏輯我沒弄明白。比如中斷里的程序還沒處理為又發生中斷,這時單片機怎么處理,是直接無視,還是排對處理呀??? |
|
|
沒電路圖盲猜按鍵接中斷 你沒加按鍵消抖,并在中斷里延時了 于是中斷在延時期間收到抖動信號,誤判了 反復進入中斷 |
lightday 發表于 2024-5-10 09:35 樓主的中斷只是用來接收開關信號的,又不是定時器中斷,加點延時咋了? |
cy009 發表于 2024-5-10 09:28 有啥不科學的? |
| 編程技巧先不說,延時短了,眼睛根本看不到閃 |
| 編譯沒通過吧 |
|
中斷程序加延時是大忌,完全偏離中斷的意義。 可以在中斷里改變閃爍次數變量,然后在主程序里實現閃爍。 |
| EA放在中斷函數里不科學吧! |
| 中斷觸發方式呢? |