51單片機(jī)-再次熟悉串口_第1頁
51單片機(jī)-再次熟悉串口_第2頁
51單片機(jī)-再次熟悉串口_第3頁
51單片機(jī)-再次熟悉串口_第4頁
51單片機(jī)-再次熟悉串口_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第第頁51單片機(jī)-再次熟悉串口串口是非常常用的一個調(diào)試工具,我們都必須熟練使用串口的各個功能。

1.題目要求和解決方案

我們要做的是,電腦端發(fā)送字符串過來給單片機(jī),然后單片機(jī)這邊接收完之后要回復(fù)給電腦端,回復(fù)內(nèi)容為“接收完成!”。單片機(jī)這邊把接收到的數(shù)據(jù)存放在定義好的全局變量數(shù)組里面,我們可以通過按K4發(fā)送回去給電腦端查看剛剛接收到的內(nèi)容并把它顯示出來。

我們要知道,一個漢字是需要兩個字節(jié)內(nèi)存的,比如電腦端發(fā)送的字符串為“好好學(xué)習(xí),天天向上!”其中的兩個標(biāo)點(diǎn)符號也是中文輸入法打上的話,一個標(biāo)點(diǎn)符號也是占用兩個字節(jié),這個字符串就是一共占用10*2=20個字節(jié)內(nèi)存。

那么怎樣判斷是否把字符串的數(shù)據(jù)都接收完成了呢?我們參考了宋老師的編程思想,使用定時計數(shù)器,也就是讓定時器0使用工作模式1計時,接收到第一個數(shù)據(jù)的時候我們先把TH0和TL0清0,然后打開定時器開始計時,當(dāng)接收到第二個數(shù)據(jù)的時候又把TH0和TL0清0讓他們從0開始再次計時,直到當(dāng)TH0大于等于200的時候證明時間過去了50ms左右(200*256*(12/11059200)=0.055秒),如果在這50ms里面都不再接收地到數(shù)據(jù),那么斷定已經(jīng)把字符串的數(shù)據(jù)都接收完成。

我們程序里定義的數(shù)組有關(guān)鍵字pdata,大家在《手把手教你學(xué)51單片機(jī)》文檔10.4節(jié)了解一下知識點(diǎn)即可。

2.main.c測試代碼

#include#include//詳見第六章第8講#include//詳見第十章第4講u8uart_i=0;u8pdataRXDBUF[64];voidCOUNT_TIMES(){TMOD//清0低四位TMOD|=0x01;//設(shè)置定時器0為工作模式1}voidmain(){u8key,x;KEY_Init();//初始化按鍵模塊EA=1;//閉合總中斷開關(guān)COUNT_TIMES();//初始化計數(shù)器ConfigUART(9600);while(1){key=KEY_Scan(0,500);if(key==4){printf_str("收到的內(nèi)容為:rn");printf_str(RXDBUF);//把接收到的字符串發(fā)送給電腦端for(x=0;x=200)//判斷是否把數(shù)據(jù)接收完畢{TR0=0;//關(guān)閉定時器,停止計時printf_str("rn接收完成!rn");RXDBUF[uart_i]=;//增加結(jié)束符,滿足了“printf_str(RXDBUF);”該發(fā)送多少數(shù)據(jù)就是多少uart_i=0;//uart_i歸0是為了下次接收新的字符串是從RXDBUF[0]開始存取數(shù)據(jù)TH0=0;//清零定時器的寄存器,下次再從0開始計時TL0=0;}}}voidInterruptUART()interrupt4{if(RI)//接收到字節(jié){RI=0;TH0=0;//每接收到一個字節(jié)數(shù)據(jù),就清0寄存器的值,定時時間又是從0開始計時,直到TH0大于等于200的時候,TL0=0;//時間超過50ms,也就是沒有再接收到數(shù)據(jù),因?yàn)榻邮盏綌?shù)據(jù)都會進(jìn)入“if(RI)”把TH0和TL0清0,TH0大于等于200,//超出了等待時間,證明后面沒有數(shù)據(jù)發(fā)送過來了TR0=1;//接收到第一個數(shù)據(jù)就打開定時器開始計時,后面接收到第二,第三個數(shù)據(jù)照樣打開定時器計時,直到在主函數(shù)里面被關(guān)閉為止RXDBUF[uart_i]=SBUF;//接收一個字節(jié)數(shù)據(jù)uart_i++;//RXDBUF從0號元素不停往下存取數(shù)據(jù)}}

3.實(shí)驗(yàn)現(xiàn)象

我們先把串口調(diào)試助手的設(shè)置選項選好打開串口之后,在輸入框打上“好好學(xué)習(xí),天天向上!”,點(diǎn)擊發(fā)送,可以看到如下界面我們在開發(fā)板上按下K4,把剛才接收到的字符串發(fā)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論