第43節(jié):通過串口用計數(shù)延時方式發(fā)送一串?dāng)?shù)據(jù)
從業(yè)近十年!手把手教你單片機(jī)程序框架 第43講
開場白:
上一節(jié)講了通過串口用delay延時方式發(fā)送一串?dāng)?shù)據(jù),這種方式要求發(fā)送一串?dāng)?shù)據(jù)的時候一氣呵成,期間不能執(zhí)行其它任務(wù),由于delay(400)這個時間還不算很長,所以可以應(yīng)用在很多簡單任務(wù)的系統(tǒng)中。但是在某些任務(wù)量很多的系統(tǒng)中,實時運行的主任務(wù)不允許被長時間和經(jīng)常性地中斷,這個時候就需要用計數(shù)延時來替代delay延時。本節(jié)要教會大家兩個知識點:
第一個:用計數(shù)延時方式發(fā)送一串?dāng)?shù)據(jù)的程序框架。
第二個:環(huán)形消息隊列的程序框架。
具體內(nèi)容,請看源代碼講解。
(1)硬件平臺:
基于朱兆祺51單片機(jī)學(xué)習(xí)板。
(2)實現(xiàn)功能:
波特率是:9600.
用朱兆祺51單片機(jī)學(xué)習(xí)板中的S1,S5,S9,S13作為獨立按鍵。
按一次按鍵S1,發(fā)送EB 00 55 01 00 00 00 00 41
按一次按鍵S5,發(fā)送EB 00 55 02 00 00 00 00 42
按一次按鍵S9,發(fā)送EB 00 55 03 00 00 00 00 43
按一次按鍵S13,發(fā)送EB 00 55 04 00 00 00 00 44
(3)源代碼講解如下:
總結(jié)陳詞:
前面幾個章節(jié)中,每個章節(jié)要么獨立地講解串口收數(shù)據(jù),要么獨立地講解發(fā)數(shù)據(jù),實際上在大部分的項目中,串口都需要“一收一應(yīng)答”的握手協(xié)議,上位機(jī)作為主機(jī),單片機(jī)作為從機(jī),主機(jī)先發(fā)一串?dāng)?shù)據(jù),從機(jī)收到數(shù)據(jù)后進(jìn)行校驗判斷,如果校驗正確則返回正確應(yīng)答指令,如果校驗錯誤則返回錯誤應(yīng)答指令,主機(jī)收到應(yīng)答指令后,如果發(fā)現(xiàn)是正確應(yīng)答指令則繼續(xù)發(fā)送其它的新數(shù)據(jù),如果發(fā)現(xiàn)是錯誤應(yīng)答指令,或者超時沒有接收到任何應(yīng)答指令,則繼續(xù)重發(fā),如果連續(xù)重發(fā)三次都是錯誤應(yīng)答或者無應(yīng)答,主機(jī)就進(jìn)行報錯處理。讀者只要把我的串口收發(fā)程序結(jié)合起來,就很容易實現(xiàn)這樣的功能,我就不再詳細(xì)講解了。從下一節(jié)開始我講解單片機(jī)掉電后數(shù)據(jù)保存的內(nèi)容,欲知詳情,請聽下回分解-----利用AT24C02進(jìn)行掉電后的數(shù)據(jù)保存。





