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

標(biāo)題: 在單片機主程序通訊中的delay(),怎樣避開中斷的干擾 [打印本頁]

作者: liuhailan5757    時間: 2019-9-11 09:03
標(biāo)題: 在單片機主程序通訊中的delay(),怎樣避開中斷的干擾
單片機控制一串幻彩LED燈串,這幻彩LED是又驅(qū)動IC的,單片機和驅(qū)動IC要通訊。通訊協(xié)議是:send_1(){dat=0;delay_us(4);dat=1;delay_us(12);}這就是發(fā)送數(shù)據(jù)1,send_0(){dat=0;delay_us(4);dat=1;delay_us(6);}這就是發(fā)送數(shù)據(jù)0,send_end(){dat=0;delay_us(4);dat=1;delay_us(20);}這就是發(fā)送數(shù)據(jù)結(jié)束碼,發(fā)了結(jié)束碼之后,驅(qū)動IC就把LED點亮。單片機每點亮一個LED要發(fā)32+1=33個碼,前8個碼是LED驅(qū)動IC的地址,再接著8個是紅色led占空比值,再接著8個是藍色色led占空比值,再接著8個是綠色led占空比值,再加一個結(jié)束碼。現(xiàn)在問題就來了:我在主程序里發(fā)送碼值驅(qū)動LED燈時,完全OK,但是只要一開定時器中斷,就不行了,因為定時器中斷后,使delay_us();延時的值變了,導(dǎo)致通訊數(shù)據(jù)錯誤。 所以看看哪位高人指點一下,萬分感謝

作者: f556    時間: 2019-9-11 11:00
在通訊開始的時候,關(guān)閉定時器中斷或總中斷,通訊結(jié)束時再打開中斷即可。
作者: liuhailan5757    時間: 2019-9-11 13:55
首先謝謝您的回答 ,按照您的方法的話,那定時器的定時又不準(zhǔn)了,因為我要用定時器解碼紅外遙控器,開控制這個LED的
作者: yong761228    時間: 2019-9-11 19:13
通訊協(xié)議里的延時用定時器來做呢?
作者: yzwzfyz    時間: 2019-9-11 21:50
很簡單,延時不要用DELAY做!!!
作者: whx.000    時間: 2019-9-12 08:21
liuhailan5757 發(fā)表于 2019-9-11 13:55
首先謝謝您的回答 ,按照您的方法的話,那定時器的定時又不準(zhǔn)了,因為我要用定時器解碼紅外遙控器,開控制 ...

難道只有一個定時器嗎,可以用其他的定時器啊
作者: 笨笨兔    時間: 2019-9-12 14:57
看起來,樓主還是不理解什么是單片機啊。
作者: liuhailan5757    時間: 2019-9-12 17:18
笨笨兔 發(fā)表于 2019-9-12 14:57
看起來,樓主還是不理解什么是單片機啊。

請高手指教。單片機規(guī)格:晶振最高4M 2T,兩個定時器,不要奢望定時器產(chǎn)生4uS的延時
作者: 溫酒斬華騰    時間: 2019-9-12 17:46
delay之前關(guān)中斷,結(jié)束后開中斷即可
作者: suncat0504    時間: 2019-9-12 22:57
中央處理器同一時刻只能處理一個事務(wù),所以在有中斷事務(wù)的場合,外部處理是一定會被打斷的,如果在外部處理中有和時序有關(guān)的通訊,是肯定會出問題的。你可以采用雙單片機,單片機之間使用串口通訊方式收發(fā)數(shù)據(jù),由于串口之間有自己的通訊機制,不會被其他中斷處理打斷。或者在單片機與驅(qū)動IC之間加入數(shù)據(jù)緩沖電路進行隔離,類似于DMA通訊方式。單片機與數(shù)據(jù)緩沖電路之間,嚴(yán)格使用脈沖的上升或者下降沿來鎖存數(shù)據(jù),這樣也不會受到中斷的影響。
你現(xiàn)在的電路不改,想完全通過軟件來調(diào)整是有難度的。
建議你還是通過硬件電路實現(xiàn)和驅(qū)動IC之間的通訊時序。
作者: liuhailan5757    時間: 2019-9-14 09:59
溫酒斬華騰 發(fā)表于 2019-9-12 17:46
delay之前關(guān)中斷,結(jié)束后開中斷即可

現(xiàn)在只能用這個方法了,有外部中斷(按鍵或是紅外遙控)就停止發(fā)碼,開定時器。
作者: liuhailan5757    時間: 2019-9-14 10:00
f556 發(fā)表于 2019-9-11 11:00
在通訊開始的時候,關(guān)閉定時器中斷或總中斷,通訊結(jié)束時再打開中斷即可。

有外部中斷(按鍵或是紅外遙控)就停止發(fā)碼,開啟定時器
作者: liuhailan5757    時間: 2019-9-14 10:05
suncat0504 發(fā)表于 2019-9-12 22:57
中央處理器同一時刻只能處理一個事務(wù),所以在有中斷事務(wù)的場合,外部處理是一定會被打斷的,如果在外部處理 ...

我這個LED控制器的單片機才2毛錢一個,沒有串口,更不可能用雙單片機控制。現(xiàn)在的唯一的辦法就是,只要有外部中斷(中斷和遙控)就停止發(fā)碼,開定時器,因為處理一個按鍵和遙控器的時間也就幾十個毫秒,反應(yīng)到LED上看不出來。謝謝您的參與
作者: 高峰.c    時間: 2019-9-14 14:15
延時的時候一般不用delay()的,delay()函數(shù)會一直占用CPU,單片機執(zhí)行delay的時候就不能干其他的工作了。這樣是很浪費資源的。一般延時可以用中斷來做,解放CPU去執(zhí)行其他工作,




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