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

標題: AVR單片機的串口通信被中斷打亂的問題 [打印本頁]

作者: mxlslf    時間: 2021-6-4 09:51
標題: AVR單片機的串口通信被中斷打亂的問題
ATMEGA328P單片機在接收串口信號時,INT0外部中斷發生。串口信號是否會被打亂,顯示出亂碼或完全接收不到串口信號了?

作者: taotie    時間: 2021-6-4 10:49
補一下中斷優先級
作者: cn_zhx    時間: 2021-6-4 11:54
你看看外部中斷和串口中斷的優先級,51單片機的外部中斷0的優先級最高,如果你沒有把串口設為高優先級的話,肯定是會被打斷的。
作者: mxlslf    時間: 2021-6-4 13:50
很多朋友們都對我說要設定一下中斷優先級,其實我的問題是:是否串口通信會被外部中斷打亂,并不是如何讓串口通信正常而忽略外部中斷。
作者: mxlslf    時間: 2021-6-4 13:51
其實我是想問當串口通訊和外部中斷都存在時,串口通信是否會被外部中斷打亂導致亂碼。并不是設置優先級的問題。
作者: ly1972001    時間: 2021-6-4 13:59
會不會被打亂,確實與優先級有關。所以那個中斷更重要,就要提高哪個中斷的優先級。
當外部中斷優先級更高時,串口通信肯定會被打亂,導致亂碼,甚至通訊失敗。
作者: mxlslf    時間: 2021-6-4 14:01
好的,感謝感謝
作者: kmsj    時間: 2021-6-4 21:58
AVR單片機有關中斷優先級的指令,一條都沒有,AVR單片機響應第一中斷,就會自動關閉所有中斷,需要響應第二中斷,就要在進入第一中斷打開第二中斷的允許,需要響應第三中斷,就要在進入第二中斷打開第三中斷的允許,越往后打開的中斷,優先級越高,退出第一中斷,又自動打開被允許的所有中斷,AVR的這種中斷處理方式比51單片機先進很多,51單片機也可以用這種方式處理中斷,只是退出中斷時要把關閉的中斷打開,不必設置中斷優先級。
接收串口信號時,INT0外部中斷發生。串口信號是否會被打亂?這個要看具體情況,INT0外部中斷從響應到退出的最大時間,不大于串口接收一個字節的時間,串口信號不會打亂,反之,肯定會打亂,只有在INT0外部中斷里加一個串口接收中斷的允許,相當于串口接收的優先級高于INT0外部中斷,也就是串口接收中斷可以嵌套于INT0外部中斷,這個還必須保證串口接收中斷不能影響INT0外部中斷,否則還要另外想辦法。最理想的編程方式是主程序和各個中斷程序互不影響,最近我用兩片ATMEGA8編串口程序,從機發給主機的主要數據只有三個字節,次要數據也是三個字節,我就用四個字節當數據頭,加上六個數據,一共十個數據,就在INT0外部中斷里發送,我的INT0外部中斷是過零信號,也就是0.01秒響應一次,這個INT0外部中斷不能被任何程序打斷,否則過零觸發可控硅就不準確了,那么我只要保證這個INT0外部中斷程序的最大時間不大于0.01秒就可以了,用INT0外部中斷計數,每十次發一個數據,那么我發送一個數據的時間不超過0.1秒,INT0外部中斷和發送程序就互不干擾,連發送中斷都不需要,主機每0.1秒接收一次數據,相當于有了一個每0.1秒進入一次接收數據的中斷,就保證了兩個單片機的時鐘同步,主機發送給從機的數據僅有一個字節,就一秒鐘發一次,只要從機的任何程序不超過一秒鐘,接收就沒有問題,從機肯定沒有超過一秒的程序,隨便找個空閑的地方,打開接收中斷允許,進入接收中斷收到數據后立即關閉接收中斷。這樣的結果是從機發給主機到接收到主機的信號,最大時間是兩秒鐘了,然而對我控制的電器沒有影響,編任何單片機程序都應該把輕重緩急搞清楚,該快的地方快速處理,可以慢的地方慢慢處理,所有程序互不影響。
作者: mxlslf    時間: 2021-6-4 22:20
kmsj 發表于 2021-6-4 21:58
AVR單片機有關中斷優先級的指令,一條都沒有,AVR單片機響應第一中斷,就會自動關閉所有中斷,需要響應第二 ...

感謝你的分享。
與你寫的方法類似,我現在也是用2片單片機,第一片單片機用來接收外部中斷,10個中斷后發送一個串口指令給第2片單片機,并且連發,當第2片單片機接收到完整的一串指令后回復,只有第1個單片機得到回復指令后,才會停止發送。第2片單片機主要用來處理數據和接收完整的數據。
作者: kmsj    時間: 2021-6-5 22:15
mxlslf 發表于 2021-6-4 22:20
感謝你的分享。
與你寫的方法類似,我現在也是用2片單片機,第一片單片機用來接收外部中斷,10個中斷后 ...

不用謝!那你只要把串口收發中斷設置為高優先級,就不會被外部中斷打亂,串口收發中斷不影響外部中斷,程序就不難編。無論是51還是AVR,我編的串口程序很少,這次編串口程序發現,按一定的時間一個數據一個數據的收發,比收發一串數據更簡單,我傳送的是溫度和重量值,這些值是漸變,不是突變,我就可以慢慢傳,我編程序喜歡慢中求穩。
作者: chenzou    時間: 2021-6-6 11:27
你先確保只有串口一個中斷時,顯示是否正常,如果正常,在排查其他方面吧。至少保證第一步接收不會時亂碼




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