




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、串口中斷接收與發(fā)送以前一直寫串II程序都是發(fā)送一個字符,然后等待TI=1時再發(fā)另一個字符,覺得這樣很浪 費時間,因為在波特率為9600時,每發(fā)一個字符差不多要1ms的時間:接收則接收一個字 符即存入數(shù)組,直到有結(jié)束標志出現(xiàn),后來發(fā)現(xiàn)這種做法很局限,因為在與一些串II設(shè)備通 訊時,返回的數(shù)據(jù)很雅以最后一個字符為結(jié)束標志符。于是現(xiàn)在重新變換了一下串口發(fā)送(接收)的思路:發(fā)送:中斷只管發(fā)送,程序把要發(fā)送的數(shù)組寫入緩存然后觸發(fā)發(fā)送信號,剩下的則由中斷處 理,當識別到結(jié)束標志時,發(fā)送完畢,及置位發(fā)送完畢標志。接收:中斷只管接收并存入緩存,程序每循環(huán)一次則檢測一次緩存是否有數(shù)據(jù)變化,若有則 讀緩存,若無則
2、跳過。在讀完最后一個緩存字符之后若n (設(shè)n=100)次循環(huán)檢測緩存再無 變化,則認為一組數(shù)據(jù)發(fā)送完畢。程序流程圖如下所示:讀取緩存計數(shù)復(fù)位計數(shù)減1接收完畢數(shù)據(jù)處理其他程序于是寫了如下程序。,* *:$:*;$:*:$:*:$:* * *:*串I中斷接收(發(fā)送)數(shù)據(jù)單片機接收完一組數(shù)據(jù)后將其再從串11發(fā)回串I測試直接可運行#iiiclude#inc lude#mclude#define uchai unsigned char#define umt unsigned mtsbit Rxd=PlA0;sbit Txd=PlAl;接收腳(模擬串I I)發(fā)送腳0 x010 x020 x030 x040
3、 x05#define RSTdefine NEW#define CMGR#define BEGINdefine STOP#define NEXT 0 x06#define NEXTBEGIN 0 x07#define START#define TRUE#define FALSE0 x080 x090 x0a新短信標志讀短信標志儀表數(shù)據(jù)開始讀儀表數(shù)據(jù)結(jié)束讀/準備讀短信內(nèi)容開始讀短信開始讀發(fā)送短信的手機號碼準備讀號碼,也作為新短信讀取后的標志沒有新短信數(shù)據(jù)存儲數(shù)據(jù)長度標志發(fā)送狀態(tài)標志讀取串11數(shù)據(jù)記錄的位置(書簽)/讀串I標志計數(shù)250void iniCsenallQ;void send_lis
4、ttable(ucharvoid receive_listtable();uchai xdata table_send140;發(fā)送緩存uchai SendLength=O;uchai xdata table_receive32;接收緩存uchai ReceiveLength=O;uchai xdata table_dat 100=MHello world ?nM;uchai DatLength=O;uchai SendFlag=O;uchai ReadMaik=0;uchai ReadFlag;umt EndFlag=250:串I I初始化為方式1:9600,n,8,1串I發(fā)送一個字符串串I緩
5、存接收主程序umtj=1000;while(j-);開啟程序時先等待一會(一直還沒明白為什串I I初始化先試發(fā)一串數(shù)據(jù)么要這樣,不然下完程序后第一次發(fā)送出錯)init_seiiall();send_listtable(table_dat);while(l)receiveJisttableQ;if(ReadFlag=STOP)讀緩存讀取完一組數(shù)據(jù)ReadFlag=RST;sendjisttable(table_dat);將讀取的數(shù)據(jù)發(fā)回串I 1(調(diào)試用)void init_senallQSendFlag=STOP;ReadFlag=RST;TMOD|=0X20;TH1=OXFD;TL1=OXFD
6、:SM0=0;開啟串I I收發(fā)設(shè)置波特率9600SM1=1;REN=1;RI=0;TI=0;TR1=1;ES=1;EA=1;方式1, 10位異步收發(fā)數(shù)據(jù)接收允許void send_listtable(uchar *list) 并觸發(fā)發(fā)送uchar lislength=O;iRSendFlagSTOP)do串I I發(fā)送程序,將list數(shù)據(jù)存入緩存,數(shù)據(jù)發(fā)送完標志table_sendlislength=listlislength;)while(listlislength+?=,n,);/結(jié)束標志SendFlag=BEGIN;發(fā)送開始標志,且標志著發(fā)送沒有結(jié)束TI=1;)void receive_l
7、isttable()讀取串口緩存數(shù)據(jù)/DatLength=O;while(ReadMark!=ReceiveLength)進入若緩存數(shù)據(jù)發(fā)生變化,則table_datDatLength=table_receiveReadMaik; 將緩存數(shù)據(jù)讀出 table_datDatLength+ DatLengtli+;ReadMaik=+ReadMark&Ox 1 f;EndFlag=100;ReadFlag=BEGIN;ifReadFlag=BEGIN)讀位置標記計數(shù)復(fù)位形如讀了if(EndFlag=O)掃描100次若緩存未再有在收到最后一個字符后數(shù)據(jù)輸入,則認為本段數(shù)據(jù)傳輸完畢DatLength=O:ReadFlag=STOP;一組數(shù)據(jù)讀取結(jié)束) elseEndFlag-;計數(shù)減1void serial IQ mtemipt 4串I 1數(shù)據(jù)讀完(寫完)1個數(shù)據(jù)后中斷讀串IRI=0;table_receiveReceiveLength=SBUF;緩存16位,循環(huán)存入ReceiveLengtli=+ReceiveLength&Ox 1 f;)else if(table_send
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流輔助服務(wù)合同范本
- 廣告印刷合同范本
- 個人顧問服務(wù)合同范本
- 2025天津市安全員-A證考試題庫附答案
- 農(nóng)村水泥房拆除合同樣本
- 共同投資種植合同樣本
- 分期買車定金合同樣本
- 學前教育服務(wù)企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 高品質(zhì)鋨材及鋨加工材企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 公眾號寫手合同樣本
- 糖尿病科普教育的社交媒體推廣-洞察分析
- 自動噴水滅火系統(tǒng)的工作原理和應(yīng)用
- 數(shù)學與科技的融合跨學科教學在小學數(shù)學中的實踐
- 產(chǎn)品包裝流程與規(guī)范
- 小學道德與法治實踐性作業(yè)的設(shè)計與評價
- 氣候風險與企業(yè)綠色創(chuàng)新
- 基礎(chǔ)醫(yī)學題庫(含參考答案)
- 2024年中考語文試題分類匯編:非連續(xù)性文本閱讀(教師版)
- 中職語文高二上學期拓展模塊上冊期末模擬卷2打印版
- 中建質(zhì)量樣板實施方案
- 20以內(nèi)進位退位加減法計算題-
評論
0/150
提交評論