單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第6章 單片機(jī)串口數(shù)據(jù)通信_(tái)第1頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第6章 單片機(jī)串口數(shù)據(jù)通信_(tái)第2頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第6章 單片機(jī)串口數(shù)據(jù)通信_(tái)第3頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第6章 單片機(jī)串口數(shù)據(jù)通信_(tái)第4頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第6章 單片機(jī)串口數(shù)據(jù)通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

定時(shí)/計(jì)數(shù)器第6章在單片機(jī)控制系統(tǒng)中,經(jīng)常需要多個(gè)控制系統(tǒng)配合工作,這就要求在多個(gè)單片機(jī)系統(tǒng)之間進(jìn)行通信。通信的方法多種,本章僅從單片機(jī)串行通信角度介紹串行傳輸?shù)囊话愀拍罴盎緫?yīng)用,從單片機(jī)的串口結(jié)構(gòu)、工作方式、串行通信RS-232接口標(biāo)準(zhǔn)、通信協(xié)議等方面進(jìn)行介紹,并對(duì)單片機(jī)與單片機(jī)之間、單片機(jī)與計(jì)算機(jī)之間、單片機(jī)與計(jì)算機(jī)之間的通信應(yīng)用進(jìn)行介紹。引言目錄串行通信基礎(chǔ)知識(shí)1單片機(jī)的串口及控制寄存器2本章小結(jié)7單片機(jī)的串口應(yīng)用3本章習(xí)題8行業(yè)PPT模板/hangye/項(xiàng)目訓(xùn)練一單片機(jī)雙機(jī)通信5串行通信接口RS-232標(biāo)準(zhǔn)4項(xiàng)目訓(xùn)練二ESP8266無線網(wǎng)絡(luò)透?jìng)?6.1串行通信基礎(chǔ)知識(shí)6.1.1串行通信與并行通信的比較1.通信一般分為并行通信和串行通信兩種方式。并行通信:通過一組數(shù)據(jù)線,同時(shí)將數(shù)據(jù)的各個(gè)位進(jìn)行傳輸,每個(gè)數(shù)據(jù)位占據(jù)一根數(shù)據(jù)線,如圖6-1所示。并行通信的優(yōu)點(diǎn)是控制簡(jiǎn)單、傳輸速度快;缺點(diǎn)是傳輸線較多,長(zhǎng)距離傳輸時(shí)成本高。串行通信:使用一根線數(shù)據(jù)線,將數(shù)據(jù)一位接一位地依次傳輸,每位數(shù)據(jù)占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度,如圖6-2所示。串行通信的優(yōu)點(diǎn)是傳輸線少,長(zhǎng)距離傳送時(shí)成本低;缺點(diǎn)是傳輸速度慢。

6.1.2串行通信的制式串行通信的制式有:?jiǎn)喂?、半雙工和雙工。單工:如果在通信過程的任意時(shí)刻,信息只能由一方A(B)傳到另一方B(A)。半雙工:如果在任意時(shí)刻,信息既可由A傳到B,又能由B傳A,但一個(gè)時(shí)刻只能由一個(gè)方向上的傳輸存在。全雙工:如果在任意時(shí)刻,線路上同時(shí)存在A到B和B到A的雙向信息傳輸。6.1.3同步串行通信與異步串行通信同步串行通信與異步串行通信都要規(guī)定通信雙方的傳輸速率.同步串行通信采用數(shù)據(jù)包形式來裝載數(shù)據(jù)。數(shù)據(jù)包中有特殊的“同步位”,可以用來協(xié)調(diào)并統(tǒng)一通信雙方的傳輸步調(diào)。它一次可以收發(fā)幾十到幾千個(gè)字節(jié),效率較高。6.1.3同步串行通信與異步串行通信異步串行通信采用數(shù)據(jù)幀形式來裝載數(shù)據(jù)。每個(gè)數(shù)據(jù)幀都包括起始位、數(shù)據(jù)位、校驗(yàn)位和停止位,如下圖所示。異步串行通信每收/發(fā)一幀數(shù)據(jù)就調(diào)整一次雙方的步調(diào),保證傳輸?shù)恼_M(jìn)行。6.1.4串行通信的校驗(yàn)方式1.奇偶校驗(yàn)在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)位尾隨的1位為奇偶校驗(yàn)位(1或0)。奇校驗(yàn)時(shí),數(shù)據(jù)中“1”的個(gè)數(shù)與校驗(yàn)位“1”的個(gè)數(shù)之和應(yīng)為奇數(shù);偶校驗(yàn)時(shí),數(shù)據(jù)中“1”的個(gè)數(shù)與校驗(yàn)位“1”的個(gè)數(shù)之和應(yīng)為偶數(shù)。2.代碼和校驗(yàn)代碼和校驗(yàn)是指發(fā)送方對(duì)所發(fā)送數(shù)據(jù)塊求和(或各字節(jié)異或)運(yùn)算,產(chǎn)生1B的校驗(yàn)字符(校驗(yàn)和),附加到數(shù)據(jù)塊末尾。接收方在接收數(shù)據(jù)的同時(shí)對(duì)數(shù)據(jù)塊(除校驗(yàn)字節(jié)外)進(jìn)行同樣的運(yùn)算并和接受的結(jié)果比較。3.循環(huán)冗余校驗(yàn)(CRC)循環(huán)冗余校驗(yàn)是通過某種數(shù)學(xué)運(yùn)算實(shí)現(xiàn)有效信息與校驗(yàn)位之間的循環(huán)校驗(yàn),常用于對(duì)磁盤信息的傳輸、存儲(chǔ)區(qū)的完整性校驗(yàn)等。這種校驗(yàn)方法的糾錯(cuò)能力強(qiáng),廣泛應(yīng)用于各種通信系統(tǒng)中。6.1.5傳輸速率與傳輸距離1.傳輸速率比特率(BitRate):每秒傳輸二進(jìn)制代碼的位數(shù),單位是bit/s。例如,每秒傳送240幀數(shù)據(jù),而每個(gè)數(shù)據(jù)幀格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的比特率為 10×240=2400(bit/s)波特率(BaudRate):傳輸數(shù)據(jù)中每秒信號(hào)的變化量。2.傳輸距離(1)板級(jí):<0.5m。標(biāo)準(zhǔn)串行總線(IIC):EEPROM:24CXX;CLOCK:PCF8563。非標(biāo)準(zhǔn)串行總線:X5045(EEPROM&WATCHDOG);CLOCK:DS1302;A/D:TLC549;D/A:MAX1241。(2)設(shè)備級(jí):1->15m。常用串行設(shè)備:鍵盤;條碼掃描器;IC卡;顯示器;鼠標(biāo);USB口。(3.)網(wǎng)絡(luò)、遠(yuǎn)程級(jí):>15m,從幾十米到全球到的距離。INTERNET,工業(yè)局部總線,計(jì)算機(jī)之間通信。6.2

單片機(jī)的串口及控制寄存器6.2.1單片機(jī)的串口結(jié)構(gòu)8051單片機(jī)串口的內(nèi)部結(jié)構(gòu)如圖所示。其中,SBUF為串口的收/發(fā)緩沖器,它是一個(gè)特殊的專用寄存器,其中包含了接收寄存器和發(fā)送寄存器,可以實(shí)現(xiàn)全雙工通信,但這兩個(gè)寄存器具有同一地址(99H)。8051單片機(jī)的串行數(shù)據(jù)傳輸很簡(jiǎn)單,只要向SBUF(發(fā)送)寫入數(shù)據(jù)即可發(fā)送數(shù)據(jù),而從SBUF(接收)中讀出數(shù)據(jù)即可接收數(shù)據(jù)。1.串口控制(SCON,SerialControl)寄存器串行口控制寄存器SCON,它是一個(gè)可位尋址的專用寄存器,用于串行數(shù)據(jù)的通信控制,單元地址是98H,其結(jié)構(gòu)格式如下:(1)SM0,SM1:取00,01,10,11分別選擇串口工作方式0,1,2,和3,如下表所示。一般只是使用方式0移位方式和方式1(10位為一幀的異步串行通信方式)。6.2.2

單片機(jī)的串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98H位符號(hào)SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式用途波特率0008位移位寄存器I/O晶振頻率/1201110位UART可變10211位UART晶振頻率/32或/6411311位UART可變(2)SM2:在多機(jī)通信時(shí),子機(jī)先讓SM2=1,待收到的地址(RB8=1)與本機(jī)地址相符時(shí),將SM2改為0,接收隨后的數(shù)據(jù)。(3)REN:允許接收控制位,僅在不使用串口或采用單工通信方式(只發(fā)送不接收)時(shí)將設(shè)置為0,在一般通信程序中,都應(yīng)將其設(shè)置為1。(4)TB8:發(fā)送數(shù)據(jù)第9位,用于在方式2和方式3下存放發(fā)送數(shù)據(jù)第9位。TB8由軟件置位或復(fù)位。(5)RB8:接收數(shù)據(jù)第9位,用于在方式2和方式3下存放接收數(shù)據(jù)第9位。在方式1下,若SM2=0,則RB8用于存放收到的停止位;在方式0下,不使用RB8。(6)TI:發(fā)送中斷標(biāo)志位,用于指示一幀數(shù)據(jù)發(fā)送是否完成。硬件自動(dòng)置位,需軟件清零。(7)RI:接收中斷標(biāo)志位,用于指示一幀數(shù)據(jù)是否接收完。硬件自動(dòng)置位,需軟件清零。6.2.2

單片機(jī)的串行口控制寄存器1.串口控制(SCON,SerialControl)寄存器串行口控制寄存器SCON,它是一個(gè)可尋址的專用寄存器,用于串行數(shù)據(jù)的通信控制,單元地址是98H,其結(jié)構(gòu)格式如下:(1)SM0,SM1:取00,01,10,11分別選擇串口工作方式0,1,2,和3,如下表所示。一般只是使用方式0移位方式和方式1(10位為一幀的異步串行通信方式)。6.2.2

單片機(jī)的串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98H位符號(hào)SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式用途波特率0008位移位寄存器I/O晶振頻率/1201110位UART可變10211位UART晶振頻率/32或/6411311位UART可變2.電源管理(PCON,PowerControl)寄存器PCON寄存器主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,單元地址是87H,其結(jié)構(gòu)格式如表6-3所示。在CHMOS型單片機(jī)中,除SMOD位外,其他位均為虛設(shè)位。SMOD是串口波特率倍增位,當(dāng)SMOD=1時(shí),串口的波特率加倍。系統(tǒng)復(fù)位,默認(rèn)SMOD=0。3.中斷允許(IE,InterruptEnable)寄存器IE對(duì)中斷的允許(開放)實(shí)行兩級(jí)控制,即以EA位為總控制位,以各中斷源的中斷允許控制位為分控制位。它的單元地址為A8H,其結(jié)構(gòu)格式如表6-4所示。其中ES位為串行中斷允許控制位,在EA=1的情況下,ES=1表示允許串行中斷,ES

=

0表示禁止串行中斷。6.2.2

單片機(jī)的串行口控制寄存器PCOND7D6D5D4D3D2D1D0位符號(hào)SMOD———GF1GF0PDIDLPCONAFHAEHADHACHABHAAHA9HA8H位符號(hào)EA——ESET1EX1ET0EX0在使用串口前,應(yīng)對(duì)其進(jìn)行初始化,主要設(shè)置用來產(chǎn)生波特率的T1、串口控制和中斷控制。具體步驟如下。(1)確定T1的工作方式(編程TMOD寄存器)。(2)計(jì)算T1的初值,裝載TH1、TL1。(3)啟動(dòng)T1(編程TCON中的TR1位)。(4)確定串口控制(編程SCON寄存器)。(5)串口在中斷方式下工作時(shí),要對(duì)其進(jìn)行中斷設(shè)置(編程IE、IP寄存器)。6.2.2

單片機(jī)的串行口控制寄存器6.3

單片機(jī)的串口應(yīng)用6.3.1方式0在方式0下,串口為同步移位寄存器的輸入和輸出方式,主要用于擴(kuò)展并行I/O口;數(shù)據(jù)由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出;發(fā)送和接收的均為8位數(shù)據(jù),且低位在前、高位在后,如圖6-10、圖6-11所示;波特率固定為fosc/12。圖6-11方式0輸入時(shí)序圖圖6-10方式0輸出時(shí)序圖6.3.1方式0方式0主要作為I/O口的擴(kuò)展來使用,當(dāng)I/O口不夠用時(shí),可以考慮使用擴(kuò)展的方式。通過搭配串行移位輸入或輸出轉(zhuǎn)換芯片,可以實(shí)現(xiàn)多個(gè)I/O口的擴(kuò)展,增加I/O口的數(shù)量。搭配的串行移位輸出芯片可以采用74LS164或74HC595,串行移位輸入芯片采用74LS165。如圖:6.3.1方式0【例6-1】

用8位串入并出移位寄存器74HC595擴(kuò)展單片機(jī)的輸出口,電路如圖

6-13所示。試編寫程序完成:依次點(diǎn)亮8個(gè)LED,即D1~D8,待所有LED均點(diǎn)亮后,重新開始。要求采用中斷方式編程。程序?qū)崿F(xiàn)分析:采用的是串行移位輸出的方式,所以可以將LED點(diǎn)亮的數(shù)據(jù)放在一個(gè)數(shù)組中,按照間隔的時(shí)間要求將數(shù)據(jù)寫入SBUF即可。unsignedchardataPatten[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//流水燈數(shù)據(jù)6.3.1方式0硬件電路分析74HC595具有一個(gè)8位移位寄存器和一個(gè)8位存儲(chǔ)寄存器,還具有三態(tài)輸出功能。其中,移位寄存器和存儲(chǔ)寄存器使用不同的時(shí)鐘。8位移位寄存器有一個(gè)串行移位輸入(DS)端口、一個(gè)串行移位輸出(Q7')端口和一個(gè)異步的低電平復(fù)位端口。存儲(chǔ)寄存器有一個(gè)并行8位的三態(tài)總線輸出端口,當(dāng)使能OE時(shí)(為低電平),存儲(chǔ)寄存器的數(shù)據(jù)輸出到三態(tài)總線上。74HC595的內(nèi)部結(jié)構(gòu)框圖(僅列出數(shù)據(jù)端口)如圖6-14所示。6.3.1方式0函數(shù)功能:定時(shí)器中斷服務(wù)程序voidTime0(void)interrupt1using1{CNT++; //50ms時(shí)間到,計(jì)數(shù)值加1if(CNT==10){ //500ms定時(shí)時(shí)間到 CNT=0; //計(jì)數(shù)值清零 SBUF=Patten[i];//啟動(dòng)單片機(jī)串口輸出 i++; if(i==8)i=0; //8位輸出結(jié)束后重新開始}TH0=0x3c; //重裝定時(shí)器初值TL0=0xb0;}主要實(shí)現(xiàn)程序:函數(shù)功能:串口中斷服務(wù)程序voidSerial(void)interrupt4using2{TI=0;

//清零,發(fā)送結(jié)束標(biāo)志RCK=0;

//鎖存時(shí)鐘,上升沿有效RCK=1;}6.3.2方式1方式1是10位數(shù)據(jù)的異步通信口。其中,TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳。方式1數(shù)據(jù)幀的格式如圖6-15所示,包括1位起始位,8位數(shù)據(jù)位,1位停止位。1.方式1輸出時(shí)序方式1輸出時(shí)序圖如圖6-16所示。當(dāng)數(shù)據(jù)寫入SBUF時(shí),串口按照數(shù)據(jù)幀格式,以低位在前、高位在后的順序?qū)⒏魑话l(fā)送到TXD引腳。當(dāng)發(fā)送完最后一位時(shí),TI標(biāo)志置1。2.方式1輸入時(shí)序方式1輸入時(shí)序圖如圖6-17所示。當(dāng)RXD引腳為低電平時(shí),數(shù)據(jù)在位采樣脈沖的作用下被送到SBUF中存放,并置位RI標(biāo)志。6.3.3方式2和方式3方式2和方式3都是11位異步收發(fā)方式。兩者的差異僅在于通信波特率有所不同:方式2的波特率由8051主頻fosc經(jīng)32或64分頻后提供;方式3的波特率由定時(shí)器T1的溢出率經(jīng)32分頻后提供,故它的波特率是可調(diào)的。方式2和方式3的發(fā)送過程類似方式1,所不同的是方式2和方式3有9位有效數(shù)據(jù)位。方式2和方式3的接收過程也與方式1類似,所不同的是:在方式1下,RB8中存放的是停止位;在方式2或方式3下,RB8中存放的是第9數(shù)據(jù)位。因此,在方式2和方式3下,必須滿足接收有效字符的條件變?yōu)镽I=0和SM2=0或收到的第9數(shù)據(jù)位為1,只有上述兩個(gè)條件同時(shí)滿足,收到的字符才能被送入SBUF,第9數(shù)據(jù)位才能被裝入RB8,并使RI=1;否則,這次收到的數(shù)據(jù)無效,RI也不置位。6.3.4波特率的計(jì)算方式0的波特率=fosc/12方式2的波特率=方式1的波特率=方式3的波特率=式中,k為定時(shí)器T1的位數(shù),在方式2下,定時(shí)器T1的位數(shù)為8,因此定時(shí)器T1溢出率就為T1溢出率=串口由于輸入的移位時(shí)鐘的來源不同,各種方式的波特率計(jì)算公式也不相同。T1溢出率

=在單片機(jī)的應(yīng)用中,常用的晶振頻率為12MHz和11.0592MHz,選用的波特率也相對(duì)固定。一般串口通信時(shí)選用11.0592MHz的晶振,原因是定時(shí)器初值的計(jì)算能夠正好取得整數(shù)。波特率/(bit/s)fosc=12MHzfosc=11.0592MHzSMODT1方式初值SMODT1方式初值19200---12FDH9600---02FDH480012F3H02FAH240012F3H02F4H120002E6H02E8H6.3.2方式1【例6-2】設(shè)單片機(jī)采用11.0592MHz的晶振,串口以方式1工作,波特率選定為9600bit/s。試編程實(shí)現(xiàn)單片機(jī)從串口輸出數(shù)字0~9。(1)分析:因?yàn)榫д癫捎?1.0592MHz,所以根據(jù)波特率,可查詢表6-5獲得定時(shí)器的初值。這里輸出數(shù)字不是直接把該值輸出,而是要輸出其ASCII碼。#include<reg51.h>unsignedcharASCII=0x30;//字母0的ASCII碼值unsignedcharCOUNT=0;//用來記錄發(fā)送的數(shù)字個(gè)數(shù)voidmain(void){ SP=0x60;

//設(shè)棧指針 TMOD=0x20; //設(shè)T1工作于方式2,作為定時(shí)器使用 TL1=0xFD; //設(shè)波特率為9600bit/s TH1=0xFD; //設(shè)置重置值 PCON=0x00; //SMOD=0,波特率不倍增 TR1=1; //啟動(dòng)T1運(yùn)行 SCON=0x40; //設(shè)串口工作于方式1,關(guān)接收

for(;COUNT<10;COUNT++)

{SBUF=ASCII; //發(fā)送字符"0"while(!TI); //查詢方式,等待發(fā)送結(jié)束TI=0; //清除發(fā)送完成標(biāo)志ASCII++;//ASCII碼值加1

}

while(1);}6.3.2方式1在Keil上編譯該程序,進(jìn)入調(diào)試模式,把串口窗口UART#1打開,運(yùn)行該程序,如圖

6-18所示。拓展練習(xí):把例6-2的程序改為以中斷方式發(fā)送。

6.4串行通信接口

RS-232標(biāo)準(zhǔn)串行通信接口按電氣標(biāo)準(zhǔn)及協(xié)議來分,包括RS-232、RS-422、RS-485、USB等。RS-232、RS-422與RS-485標(biāo)準(zhǔn)只對(duì)接口的電氣特性做出規(guī)定,不涉及接插件、電纜或協(xié)議。目前,RS-232是計(jì)算機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn)。RS-232采取不平衡傳輸方式,即單端通信。由于RS-232是在TTL電路之前研制的,所以與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同,RS-232是用正負(fù)電平來表示邏輯狀態(tài)的。RS-232采用負(fù)邏輯:+5~+15V為邏輯“0”;-15~-5V為邏輯“1”;-5~+5V為過渡區(qū)。RS-232物理接口標(biāo)準(zhǔn)可分成25芯和9芯D型插座兩種,均有公頭(針)、母頭(孔)之分。其中,TX(發(fā)送數(shù)據(jù))、RX(接收數(shù)據(jù))和GND(信號(hào)地)是3條最基本的引線,可以實(shí)現(xiàn)簡(jiǎn)單的全雙工通信。按照RS-232標(biāo)準(zhǔn),傳輸速率一般不超過20kbit/s,傳輸距離一般不超過15m。實(shí)際使用時(shí),傳輸速率最高可達(dá)115200bit/s。6.4.1RS-232引腳定義設(shè)備之間的串行通信線的連接方式,取決于設(shè)備接口的定義。設(shè)備之間采用RS-232串行電纜連接時(shí)有以下兩類連接方式:直通線:相同信號(hào)(RXD對(duì)RXD、TXD對(duì)TXD)相連,用于DTE與DCE相連,如計(jì)算機(jī)與MODEM(或DTU)相連。交叉線:不同信號(hào)(RXD對(duì)TXD、TXD對(duì)RXD)相連,用于DTE與DTE相連,如計(jì)算機(jī)與計(jì)算機(jī)相連、計(jì)算機(jī)與采集器相連、計(jì)算機(jī)與單片機(jī)相連、單片機(jī)與單片機(jī)相連。6.4.2RS-232接口的基本接線原則三線連接方式:兩端設(shè)備的串口只連接收、發(fā)送、地3根線,如圖6-19所示。一般情況下,三線連接方式即可滿足要求,如監(jiān)控主機(jī)與采集器及大部分智能設(shè)備相連.簡(jiǎn)易接口方式:兩端設(shè)備的串口除連接收、發(fā)、地3根線外,還增加了一對(duì)握手信號(hào)(一般是DSR和DTR)。6.4.3RS-232的三線方式6.5項(xiàng)目訓(xùn)練一

單片機(jī)雙機(jī)通信6.5.1項(xiàng)目要求設(shè)計(jì)一個(gè)單片機(jī)之間的短距離通信電路,假設(shè)一個(gè)為主機(jī),一個(gè)為從機(jī)。要求主機(jī)通過按鍵發(fā)送一位數(shù)據(jù)給從機(jī),從機(jī)接收數(shù)據(jù)后通過LED數(shù)碼管顯示出來,并將數(shù)據(jù)加上1后返回給主機(jī),主機(jī)顯示收到的數(shù)據(jù)。要求通信波特率為9600bit/s,采用中斷方式進(jìn)行收發(fā)。6.5.2項(xiàng)目分析該通信電路因?yàn)榫嚯x較短,所以可以采用直連的方法,即使用導(dǎo)線直接連接,信號(hào)電平均為TTL電平,而無須轉(zhuǎn)換為RS-232電平。主機(jī)電路設(shè)計(jì)可以參考之前的矩陣鍵盤電路,按鍵檢測(cè)程序也可以參考矩陣鍵盤檢測(cè)程序。因?yàn)椴ㄌ芈蕿?600bit/s,所以只能用串口工作方式1和方式3,而又因?yàn)橹挥袃蓚€(gè)單片機(jī)進(jìn)行通信,所以可采用方式1來通信。6.5.3電路圖設(shè)計(jì)電路圖設(shè)計(jì)參考圖6-20,需要注意兩個(gè)單片機(jī)的串口的接線,要求兩者的發(fā)送端和接收端相互交叉。6.5.4程序設(shè)計(jì)1.串口應(yīng)用流程一般串口的應(yīng)用流程如下。首先,要對(duì)串口進(jìn)行初始化,內(nèi)容包括波特率的選擇、工作方式的選擇、定時(shí)器初始化,以及選擇采用何種方式進(jìn)行數(shù)據(jù)的發(fā)送和接收,如采用中斷方式時(shí)需要打開中斷。其次,要確定通信協(xié)議。這里所謂的協(xié)議,就是指確定數(shù)據(jù)幀格式,包括特殊數(shù)據(jù)的含義、數(shù)據(jù)校驗(yàn)方法、出錯(cuò)處理方法等。最后,進(jìn)行數(shù)據(jù)的收發(fā),可以采用查詢方式,也可以采用中斷方式。2.串口中斷的處理串口在產(chǎn)生中斷時(shí),要先判斷這是由接收數(shù)據(jù)引起的還是由發(fā)送數(shù)據(jù)數(shù)據(jù)引起的,并據(jù)此做相應(yīng)的處理。6.5.4程序設(shè)計(jì)3.主要程序(1)主機(jī)程序程序功能:串口發(fā)送數(shù)據(jù)voidsentData(unsignedcharsd){SBUF=sd;//將數(shù)據(jù)送到SBUF(發(fā)送)中}程序功能:串口接收數(shù)據(jù),采用中斷方式接收voidSerialISR(void)interrupt4using3{unsignedcharrcdata=0;//存放接收數(shù)據(jù)

if(RI)

//判斷是由誰引起的中斷

{

REN=0;

//暫時(shí)關(guān)閉接收功能 RI=0;

//清除接收完成標(biāo)志

rcdata=SBUF;

//讀取接收緩沖寄存器中的數(shù)據(jù) P0=table[rcdata];//接收數(shù)據(jù)顯示 REN=1;

//打開接收功能

}

elseif(TI)

{

TI=0; //清除發(fā)送完成標(biāo)志,待進(jìn)行下一次發(fā)送

}}//程序功能:串口初始化voidserialInit(void){TMOD=0x20;//設(shè)定時(shí)器1工作于方式2SCON=0x50;//工作方式1,允許接收PCON=0x00;//波特率不加倍ES=1; //打開串口中斷EA=1;

//打開全局中斷TH1=0xFD;

//波特率為9600的定時(shí)器初值TL1=0xFD;TR1=1;//定時(shí)器工作}6.5.4程序設(shè)計(jì)(2)從機(jī)程序程序功能:串口接收數(shù)據(jù),采用中斷方式接收,同時(shí)將數(shù)據(jù)送到數(shù)碼管中進(jìn)行顯示voidSerialISR(void)interrupt4using1{

unsignedcharrcdata=0; //存放接收數(shù)據(jù)

if(RI)

{

REN=0; RI=0; //清接收完成標(biāo)志 rcdata=SBUF;//讀取SBUF(接收)中的數(shù)據(jù) P0=table[rcdata];//接收數(shù)據(jù)顯示 SBUF=rcdata+1;//將接收的數(shù)據(jù)+1后發(fā)送給主機(jī) REN=1;

}

elseif(TI)

{

TI=0;

}}6.5.5

拓展訓(xùn)練(1)如果將上面的中斷服務(wù)程序中對(duì)TI判斷清零的語句刪除,會(huì)產(chǎn)生什么后果?(2)將以上程序改為查詢方式,編寫程序?qū)崿F(xiàn)。6.6

項(xiàng)目訓(xùn)練二

ESP8266無線網(wǎng)絡(luò)透?jìng)?.6.1項(xiàng)目要求設(shè)計(jì)一個(gè)單片機(jī)與計(jì)算機(jī)之間的無線通信電路,假設(shè)計(jì)算機(jī)為服務(wù)器,單片機(jī)為客戶端。要求單片機(jī)通過串口與ESP8266芯片(ESP-12F模塊)連接,經(jīng)ESP8266芯片轉(zhuǎn)發(fā)后連接遠(yuǎn)程服務(wù)器。采用AT指令方式,單片機(jī)通過串口發(fā)送字符串"WifiTestsuccess"給服務(wù)器,實(shí)現(xiàn)串口到服務(wù)器的網(wǎng)絡(luò)透?jìng)鞴δ堋?.6.2項(xiàng)目分析使用一臺(tái)計(jì)算機(jī)當(dāng)作服務(wù)器,在計(jì)算機(jī)中,使用網(wǎng)絡(luò)調(diào)試助手軟件建立一個(gè)“TCPServer”,采用本地主機(jī)地址作為服務(wù)器的地址(假設(shè)為02),主機(jī)端口號(hào)為8888。設(shè)置Wi-Fi熱點(diǎn)名稱為linlimcupc(可以自己設(shè)定),密碼為12345678。要實(shí)現(xiàn)這些功能,需要了解ESP8266芯片AT指令的用法。表6-8列出了一部分與本項(xiàng)目相關(guān)的AT指令的格式和功能,更多指令請(qǐng)參考芯片手冊(cè)中的說明。6.6.3通信連接設(shè)計(jì)通信連接設(shè)計(jì)參考圖6-22,單片機(jī)通過串口連接Wi-Fi模塊ESP-12F,ESP-12F模塊通過無線Wi-Fi連接遠(yuǎn)程服務(wù)器。6.6.4程序設(shè)計(jì)要使用AT指令發(fā)送數(shù)據(jù),需要通過串口來發(fā)送字符串,因此可以設(shè)計(jì)一個(gè)函數(shù)UARTSendString(unsignedchar*p_Str),該函數(shù)調(diào)用發(fā)送單個(gè)字符函數(shù)UARTSendData(unsignedchar)完成字符串的發(fā)送。字符串發(fā)送函數(shù):voidUARTSendString(unsignedchar*p_Str){ while(*p_Str) //判斷是否

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論