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