久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4277|回復: 13
收起左側

在單片機主程序通訊中的delay(),怎樣避開中斷的干擾

[復制鏈接]
ID:387856 發表于 2019-9-11 09:03 | 顯示全部樓層 |閱讀模式
20黑幣
單片機控制一串幻彩LED燈串,這幻彩LED是又驅動IC的,單片機和驅動IC要通訊。通訊協議是:send_1(){dat=0;delay_us(4);dat=1;delay_us(12);}這就是發送數據1,send_0(){dat=0;delay_us(4);dat=1;delay_us(6);}這就是發送數據0,send_end(){dat=0;delay_us(4);dat=1;delay_us(20);}這就是發送數據結束碼,發了結束碼之后,驅動IC就把LED點亮。單片機每點亮一個LED要發32+1=33個碼,前8個碼是LED驅動IC的地址,再接著8個是紅色led占空比值,再接著8個是藍色色led占空比值,再接著8個是綠色led占空比值,再加一個結束碼。現在問題就來了:我在主程序里發送碼值驅動LED燈時,完全OK,但是只要一開定時器中斷,就不行了,因為定時器中斷后,使delay_us();延時的值變了,導致通訊數據錯誤。 所以看看哪位高人指點一下,萬分感謝

回復

使用道具 舉報

ID:517466 發表于 2019-9-12 22:57 | 顯示全部樓層
中央處理器同一時刻只能處理一個事務,所以在有中斷事務的場合,外部處理是一定會被打斷的,如果在外部處理中有和時序有關的通訊,是肯定會出問題的。你可以采用雙單片機,單片機之間使用串口通訊方式收發數據,由于串口之間有自己的通訊機制,不會被其他中斷處理打斷。或者在單片機與驅動IC之間加入數據緩沖電路進行隔離,類似于DMA通訊方式。單片機與數據緩沖電路之間,嚴格使用脈沖的上升或者下降沿來鎖存數據,這樣也不會受到中斷的影響。
你現在的電路不改,想完全通過軟件來調整是有難度的。
建議你還是通過硬件電路實現和驅動IC之間的通訊時序。

評分

參與人數 2黑幣 +46 收起 理由
liuhailan5757 + 6 感謝參與
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:282850 發表于 2019-9-11 11:00 | 顯示全部樓層
在通訊開始的時候,關閉定時器中斷或總中斷,通訊結束時再打開中斷即可。

評分

參與人數 1黑幣 +9 收起 理由
liuhailan5757 + 9 現在只有這個方法可行了

查看全部評分

回復

使用道具 舉報

ID:387856 發表于 2019-9-11 13:55 | 顯示全部樓層
首先謝謝您的回答 ,按照您的方法的話,那定時器的定時又不準了,因為我要用定時器解碼紅外遙控器,開控制這個LED的
回復

使用道具 舉報

ID:405193 發表于 2019-9-11 19:13 | 顯示全部樓層
通訊協議里的延時用定時器來做呢?
回復

使用道具 舉報

ID:123289 發表于 2019-9-11 21:50 | 顯示全部樓層
很簡單,延時不要用DELAY做!!!
回復

使用道具 舉報

ID:138097 發表于 2019-9-12 08:21 | 顯示全部樓層
liuhailan5757 發表于 2019-9-11 13:55
首先謝謝您的回答 ,按照您的方法的話,那定時器的定時又不準了,因為我要用定時器解碼紅外遙控器,開控制 ...

難道只有一個定時器嗎,可以用其他的定時器啊
回復

使用道具 舉報

ID:158375 發表于 2019-9-12 14:57 | 顯示全部樓層
看起來,樓主還是不理解什么是單片機啊。
回復

使用道具 舉報

ID:387856 發表于 2019-9-12 17:18 | 顯示全部樓層
笨笨兔 發表于 2019-9-12 14:57
看起來,樓主還是不理解什么是單片機啊。

請高手指教。單片機規格:晶振最高4M 2T,兩個定時器,不要奢望定時器產生4uS的延時
回復

使用道具 舉報

ID:490330 發表于 2019-9-12 17:46 | 顯示全部樓層
delay之前關中斷,結束后開中斷即可

評分

參與人數 1黑幣 +9 收起 理由
liuhailan5757 + 9 只能用這個方法了

查看全部評分

回復

使用道具 舉報

ID:387856 發表于 2019-9-14 09:59 | 顯示全部樓層
溫酒斬華騰 發表于 2019-9-12 17:46
delay之前關中斷,結束后開中斷即可

現在只能用這個方法了,有外部中斷(按鍵或是紅外遙控)就停止發碼,開定時器。
回復

使用道具 舉報

ID:387856 發表于 2019-9-14 10:00 | 顯示全部樓層
f556 發表于 2019-9-11 11:00
在通訊開始的時候,關閉定時器中斷或總中斷,通訊結束時再打開中斷即可。

有外部中斷(按鍵或是紅外遙控)就停止發碼,開啟定時器
回復

使用道具 舉報

ID:387856 發表于 2019-9-14 10:05 | 顯示全部樓層
suncat0504 發表于 2019-9-12 22:57
中央處理器同一時刻只能處理一個事務,所以在有中斷事務的場合,外部處理是一定會被打斷的,如果在外部處理 ...

我這個LED控制器的單片機才2毛錢一個,沒有串口,更不可能用雙單片機控制。現在的唯一的辦法就是,只要有外部中斷(中斷和遙控)就停止發碼,開定時器,因為處理一個按鍵和遙控器的時間也就幾十個毫秒,反應到LED上看不出來。謝謝您的參與
回復

使用道具 舉報

ID:611393 發表于 2019-9-14 14:15 | 顯示全部樓層
延時的時候一般不用delay()的,delay()函數會一直占用CPU,單片機執行delay的時候就不能干其他的工作了。這樣是很浪費資源的。一般延時可以用中斷來做,解放CPU去執行其他工作,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线一区二区三区 | 天天久久| 欧美在线a| 99精品久久 | 日本a∨精品中文字幕在线 亚洲91视频 | 国产精品成人在线播放 | 亚洲久久一区 | 久久精品视频99 | 日韩午夜在线播放 | 国产精品精品视频一区二区三区 | 国产精品久久久久久妇女6080 | 免费观看黄 | 亚洲电影成人 | 国产精品一区二区久久 | 国产精品三级久久久久久电影 | 日韩高清www | 91资源在线 | 一级黄色裸片 | 美女爽到呻吟久久久久 | 国产色 | 久久久这里只有17精品 | 国内精品视频 | 久久青| 色综合天天网 | 波多野结衣中文字幕一区二区三区 | 国产精品久久久久久52avav | 国内自拍偷拍一区 | 在线观看国产三级 | 成人三级av| 国产日韩欧美在线 | 久久宗合色 | 国精日本亚洲欧州国产中文久久 | 亚洲欧美综合 | 中文字幕一区二区三区四区五区 | www.天堂av.com| 亚洲国产精品一区二区www | 精品欧美一区二区久久久伦 | 亚洲 日本 欧美 中文幕 | 久在线| 一级二级三级在线观看 | 久久久久久91|