下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
...wd......wd......wd...上一講我們講解了串口的發(fā)送操作。這一講我們繼續(xù)講解串口的接收。在學(xué)習(xí)這個(gè)串口接收的過(guò)程中,我們要穩(wěn)固這個(gè)狀態(tài)機(jī)的寫(xiě)法,也再熟悉熟悉前幾講講解的內(nèi)容。 首先回憶一下異步串口通信的數(shù)據(jù)格式:由于在空閑狀態(tài)時(shí),傳送線為邏輯“1〞狀態(tài),而數(shù)據(jù)的傳送總是以一個(gè)起始位“0〞開(kāi)場(chǎng),所以當(dāng)接收器檢測(cè)到一個(gè)從“1〞向“0〞的跳變時(shí),便視為可能的起始位〔要排除干擾引起的跳變〕;起始位被確認(rèn)后,就知道發(fā)送器已開(kāi)場(chǎng)發(fā)送,接收器就可以按這個(gè)數(shù)據(jù)通信格式接收后續(xù)的數(shù)據(jù)了;當(dāng)檢測(cè)到停頓位“1〞后就說(shuō)明一幀字符數(shù)據(jù)已發(fā)送完畢。關(guān)于接收器的設(shè)計(jì)最主要的一點(diǎn)是如何提高采樣的準(zhǔn)確率,最好是保證采樣點(diǎn)處于被采樣數(shù)據(jù)的時(shí)間中間點(diǎn)。所以,在接收采樣時(shí)要用比數(shù)據(jù)波特率高n倍(n≥1)速率的時(shí)鐘對(duì)數(shù)據(jù)進(jìn)展采樣。在本程序中用16倍波特率時(shí)鐘進(jìn)展采樣。結(jié)合圖示,我們講解一下如何讓采樣時(shí)刻處于被采樣數(shù)據(jù)的時(shí)間中間點(diǎn):在t1時(shí)刻假設(shè)檢測(cè)到低電平,就開(kāi)場(chǎng)對(duì)這個(gè)低電平進(jìn)展連續(xù)的檢測(cè)當(dāng)檢測(cè)了8個(gè)時(shí)鐘周期后,到達(dá)t2,此刻,假設(shè)前面的8個(gè)周期都是低電平,則認(rèn)為檢測(cè)到了起始脈沖。否則就認(rèn)為是干擾,重新檢測(cè)。在檢測(cè)到起始位后,再計(jì)數(shù)16個(gè)采樣時(shí)鐘周期就到達(dá)了第一個(gè)數(shù)據(jù)位的時(shí)間中間點(diǎn)t3,在此刻采樣數(shù)據(jù)并進(jìn)展保存。然后再經(jīng)過(guò)16個(gè)周期,就是第二個(gè)數(shù)據(jù)位的時(shí)間中間點(diǎn),在此時(shí)刻進(jìn)展采樣;然后,再經(jīng)過(guò)16個(gè)周期,就是第三個(gè)數(shù)據(jù)位的時(shí)間中間點(diǎn),在此時(shí)刻進(jìn)展采樣…..一直這樣采樣,直到把所有的數(shù)據(jù)位采樣完畢。在理解完上面這個(gè)流程后,我們來(lái)按這個(gè)編制一下程序。逐行解釋?zhuān)?1:bclk為波特率的16倍。這個(gè)同uart_t。12:一幀數(shù)據(jù)接收完畢信號(hào),可以通知頂層模塊來(lái)提取數(shù)據(jù)。該信號(hào)在復(fù)位后為“0”,在接收完一幀數(shù)據(jù)后變高,然后直到下一次檢測(cè)到起始位后,即下一幀數(shù)據(jù)到來(lái)時(shí)才復(fù)位到“0”19:用type聲明一種枚舉類(lèi)型,用來(lái)表示接收狀態(tài)機(jī)的狀態(tài)。共有五狀態(tài):r_idle----空閑狀態(tài),r_sample_start_bit----采樣起始位狀態(tài),r_sample_data_bit-----采樣數(shù)據(jù)位狀態(tài),r_stop----采樣停頓位狀態(tài)。24-31:通過(guò)一個(gè)D觸發(fā)器,先把串口的輸入信號(hào)整形一下,這樣可減少干擾引起的檢測(cè)誤判。D觸發(fā)器的原理的工作機(jī)制大家應(yīng)該明白吧,這里就不再贅述了。33-35:定義一些變量。count為時(shí)鐘bclk的計(jì)數(shù)器,因?yàn)椴捎昧?6倍頻的時(shí)鐘,所以一個(gè)數(shù)據(jù)位會(huì)維持16個(gè)bclk時(shí)鐘周期,需要用count來(lái)計(jì)數(shù)。rcnt是對(duì)接收到的數(shù)據(jù)位進(jìn)展計(jì)數(shù)。這個(gè)和串口的發(fā)送程序有點(diǎn)類(lèi)似的。32-95:通過(guò)狀態(tài)機(jī)來(lái)接收一幀數(shù)據(jù)。37-41:系統(tǒng)復(fù)位。38:復(fù)位后狀態(tài)機(jī)設(shè)置為空閑狀態(tài)。39-40:清零計(jì)數(shù)器。41:置r_ready為0,表示數(shù)據(jù)還沒(méi)接收完畢。42-93:系統(tǒng)正常工作,通過(guò)狀態(tài)機(jī)的變化實(shí)現(xiàn)一幀數(shù)據(jù)的接收,用case語(yǔ)句實(shí)現(xiàn)狀態(tài)轉(zhuǎn)變。44-53:描述空閑狀態(tài)時(shí)的執(zhí)行動(dòng)作。45-49:假設(shè)傳送線上檢測(cè)到低電平則立即轉(zhuǎn)入r_sample_start_bit狀態(tài),并清零計(jì)數(shù)器。反之,假設(shè)沒(méi)有檢測(cè)到低電平,則還是使系統(tǒng)處于r_idle狀態(tài),還需要不斷的去檢測(cè)傳送線的狀態(tài)。55-68:描述采樣到起始位后執(zhí)行的動(dòng)作。56-68:假設(shè)在44-53句中檢測(cè)到的低電平是起始位,則這個(gè)低電平應(yīng)該持續(xù)16個(gè)時(shí)鐘〔因?yàn)槭?6倍頻采樣的〕。在這16個(gè)時(shí)鐘周期內(nèi),假設(shè)是干擾,則可能會(huì)在這16個(gè)時(shí)鐘的時(shí)間內(nèi)檢測(cè)到高電平。假設(shè)有,那么狀態(tài)機(jī)就回到x_idle狀態(tài),否則就認(rèn)為已經(jīng)檢測(cè)到了起始位。57-64:在檢測(cè)到起始位后的8個(gè)時(shí)鐘里總線假設(shè)一直是低電平,則認(rèn)為是檢測(cè)到了起始位,狀態(tài)機(jī)切換至r_sample_data_bit,并初始化一些計(jì)數(shù)器,準(zhǔn)備開(kāi)場(chǎng)采樣數(shù)據(jù)位。70-85:描述采樣數(shù)據(jù)位時(shí)執(zhí)行的動(dòng)作。71-73:連續(xù)計(jì)數(shù)16個(gè)bclk時(shí)鐘74-85:當(dāng)計(jì)數(shù)到16個(gè)bclk后,就開(kāi)場(chǎng)采樣傳送線的電平狀態(tài)。75-78:在檢測(cè)傳送線數(shù)據(jù)前首先判斷是否已經(jīng)接收完數(shù)據(jù)位,假設(shè)是就使?fàn)顟B(tài)機(jī)轉(zhuǎn)入r_stop狀態(tài),并清零計(jì)數(shù)器。79-83:假設(shè)數(shù)據(jù)位還沒(méi)有接收完畢,則80句,保持狀態(tài)機(jī)處于r_sample_data_bit狀態(tài),并清零count。82句,把當(dāng)前傳送線的電平狀態(tài)送入到接收緩沖器rbufs,并通過(guò)83句將接收到的數(shù)據(jù)位計(jì)數(shù)器加1。86-89:描述采樣停頓位時(shí)執(zhí)行的動(dòng)作。在本程序中,我們省略了對(duì)停頓位的采樣,這樣做對(duì)功能本身不會(huì)產(chǎn)生影響。87:置r_ready為1,通知外部數(shù)據(jù)接收完畢88:更新數(shù)據(jù)輸出緩沖器89:使?fàn)顟B(tài)機(jī)重新會(huì)到x_idle狀態(tài),開(kāi)場(chǎng)下一輪的接收檢測(cè)。90-91:描述狀態(tài)機(jī)處于其它狀態(tài)時(shí)的動(dòng)作〔假設(shè)狀態(tài)機(jī)跑飛〕。 在其它狀態(tài)時(shí),將狀態(tài)機(jī)置為x_idle,使?fàn)顟B(tài)機(jī)正常工作。以上只是編寫(xiě)了一個(gè)串口接收的元件,現(xiàn)在編寫(xiě)一個(gè)頂層調(diào)用模塊,調(diào)用這個(gè)接收元件來(lái)接收PC機(jī)上通過(guò)“串口調(diào)試助手〞發(fā)送的數(shù)據(jù),并根據(jù)接收到的數(shù)據(jù)點(diǎn)亮不同的LED。代碼如下:程序代碼比擬簡(jiǎn)單,就不再贅述了,大家可以自己去體會(huì)。假設(shè)有什么不明白的,請(qǐng)聯(lián)系我們〔qq:1438801646〕。還是按串口發(fā)送中所說(shuō)的那樣連接好串口線,選中串口調(diào)試助手的“按十六進(jìn)制發(fā)送〞?!卜駝t在發(fā)送框里填入的是ASCII碼,無(wú)法與程序中的case條件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度酒店會(huì)議及豪華住宿體驗(yàn)合同
- 2025年度股票委托交易與金融科技企業(yè)合作合同
- 二零二五年度診所與高校醫(yī)院合作教學(xué)合同
- 應(yīng)急培訓(xùn)說(shuō)明會(huì)
- 店長(zhǎng)管理基礎(chǔ)知識(shí)培訓(xùn)
- 學(xué)校電工工作計(jì)劃
- 主管工作匯報(bào)模板
- 2025最專(zhuān)業(yè)勞動(dòng)合同范本
- 2025公證授權(quán)合同范本
- 2025期房轉(zhuǎn)讓合同范文
- 廣東省惠州市2024-2025學(xué)年高一上學(xué)期期末考試英語(yǔ)試題(含答案)
- 醫(yī)院骨科2025年帶教計(jì)劃(2篇)
- 環(huán)境保護(hù)應(yīng)急管理制度執(zhí)行細(xì)則
- 2024-2030年中國(guó)通航飛行服務(wù)站(FSS)行業(yè)發(fā)展模式規(guī)劃分析報(bào)告
- 機(jī)械制造企業(yè)風(fēng)險(xiǎn)分級(jí)管控手冊(cè)
- 地系梁工程施工方案
- 藏文基礎(chǔ)-教你輕輕松松學(xué)藏語(yǔ)(西藏大學(xué))知到智慧樹(shù)章節(jié)答案
- 2024電子商務(wù)平臺(tái)用戶隱私保護(hù)協(xié)議3篇
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 英語(yǔ) 含答案
- 醫(yī)學(xué)教程 常見(jiàn)體表腫瘤與腫塊課件
- 內(nèi)分泌系統(tǒng)異常與虛勞病關(guān)系
評(píng)論
0/150
提交評(píng)論