版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8.1概述
單片機(jī)應(yīng)用于數(shù)據(jù)采集或工業(yè)控制時(shí),往往作為前端機(jī)安裝在工業(yè)現(xiàn)場(chǎng),遠(yuǎn)離主機(jī),現(xiàn)場(chǎng)數(shù)據(jù)采用串行通信方式發(fā)往主機(jī)進(jìn)行處理,以降低通信成本,提高通信可靠性。如下圖所示。第八章單片機(jī)串行通信1數(shù)據(jù)通信方式有兩種:并行通信與串行通信。下面是兩種通信方式的示意圖:★并行通信:所傳送數(shù)據(jù)的各位同時(shí)發(fā)送或接收,數(shù)據(jù)有多少位就需要多少根數(shù)據(jù)線。特點(diǎn):速度快,成本高,適合近距離傳輸,如計(jì)算機(jī)并口,打印機(jī)接口,8255并口等?!锎型ㄐ牛核鶄魉蛿?shù)據(jù)的各位按順序一位一位地發(fā)送或接收。只需一根數(shù)據(jù),一根地線,共2根(如雙向通信發(fā)送和接收各需1根數(shù)據(jù)線)。特點(diǎn):成本低,硬件簡(jiǎn)單,適合遠(yuǎn)距離通信,傳輸速度低。2
通信的雙方應(yīng)該有一個(gè)約定,什么時(shí)候開始發(fā)送,什么時(shí)候發(fā)送完畢;接收方收到的信息是否正確等,這就是通信協(xié)議。
串行通信的分類:同步串行通信和異步串行通信一、異步通信:異步串行通信一幀數(shù)據(jù)格式:一個(gè)起始位“0”,表示字符的開始,然后是5~8位數(shù)據(jù)即該字符的代碼,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位(可省略),最后以停止位“1”表示字符的結(jié)束。優(yōu)點(diǎn):硬件結(jié)構(gòu)簡(jiǎn)單。缺點(diǎn):傳輸速度慢?!璓1D0D1D2D3D4D5D6D7P10第n個(gè)字符(一幀)n-1n+10D0…起始位數(shù)據(jù)位(5~8位)校驗(yàn)位停止位3SYN字符1SYN字符2數(shù)據(jù)1數(shù)據(jù)2….數(shù)據(jù)n連續(xù)傳送n個(gè)數(shù)據(jù)校驗(yàn)二、同步通信在同步通信中,發(fā)送方在數(shù)據(jù)或字符開始處就用同步字符(常約定1~2個(gè)字節(jié))指示一幀的開始,由時(shí)鐘來實(shí)現(xiàn)發(fā)送端和接收端同步,接收方一旦檢測(cè)到與規(guī)定的同步字符符合,下面就連續(xù)按順序傳送若干個(gè)數(shù)據(jù),最后發(fā)校驗(yàn)字節(jié)。見下圖:三、串行通信的功能在串行傳輸中,通信的雙方都按通信協(xié)議進(jìn)行,所謂通信協(xié)議就是通信雙方必須共同遵守的一種約定,約定包括數(shù)據(jù)的格式、同步的方式、傳送的步驟、檢糾錯(cuò)方式及控制字符的定義等。串行接口的基本任務(wù)就是:41.實(shí)現(xiàn)數(shù)據(jù)格式化
因?yàn)镃PU發(fā)出的數(shù)據(jù)是字符數(shù)據(jù),接口電路應(yīng)能將這些數(shù)據(jù)根據(jù)不同通信方式進(jìn)行數(shù)據(jù)格式化的任務(wù)。如自動(dòng)生成起止方式的幀數(shù)據(jù)格式(異步方式)或在待傳送的數(shù)據(jù)塊前加上同步字符(同步方式)等。2.進(jìn)行串、并轉(zhuǎn)換在發(fā)送端,接口將CPU送來的并行信號(hào)轉(zhuǎn)換成串行數(shù)據(jù)進(jìn)行傳送;而在接收端,接口要將接收到串行數(shù)據(jù)變成并行數(shù)據(jù)送往CPU。3.控制數(shù)據(jù)的傳輸速率接口應(yīng)具備對(duì)數(shù)據(jù)傳輸率—波特率的選擇控制能力,即自身有波特率發(fā)生器。4.進(jìn)行傳送錯(cuò)誤檢測(cè)在發(fā)送時(shí),對(duì)傳送的數(shù)據(jù)自動(dòng)生成校驗(yàn)位或校驗(yàn)碼,在接收端能檢查校驗(yàn)位或校驗(yàn)碼,以確定傳送中是否有誤碼,并能自動(dòng)將冗余碼消除。
51系列單片機(jī)內(nèi)有一個(gè)全雙工的異步通信接口,通過對(duì)串行接口寫控制字可以選擇其數(shù)據(jù)格式,同時(shí)內(nèi)部有波特率發(fā)生器,提供可選的波特率,來完成雙機(jī)通信或多機(jī)通信。5
四、串行通信接口串行接口通常分為兩種類型:串行通信接口和串行擴(kuò)展接口。串行通信接口(SerialCommunicationInterface,SCI)是指設(shè)備之間的互連接口,它們連接的距離比較長(zhǎng)。如當(dāng)代PC機(jī)的COM接口(COM1-COM4)和USB接口。USB(UniversalSerialBus,通用串行總線)是近幾年開發(fā)的新規(guī)范,它使得設(shè)備間的連接簡(jiǎn)單快捷,并且支持熱插拔,易于擴(kuò)展,被廣泛應(yīng)用于PC機(jī)和嵌入式系統(tǒng)上。近年來推出有RS-422/423、RS-485等串行通信標(biāo)準(zhǔn),其采用平衡通信接口,即在發(fā)送端將TTL電平信號(hào)轉(zhuǎn)換成差分信號(hào)輸出,接收端將差分信號(hào)變成TTL電平信號(hào)輸入,大大提高了抗干擾能力,使通信距離增加到幾十米至上千米,并且增加了多點(diǎn)和雙向通信的能力。
PC機(jī)上的COM1-COM4口使用的是RS-232C串行通信標(biāo)準(zhǔn)接口,本章僅介紹RS-232C接口,其它接口可參考有關(guān)資料。以上標(biāo)準(zhǔn)都有專用芯片實(shí)現(xiàn)通信協(xié)議,這些接口芯片稱為收發(fā)器。串行擴(kuò)展接口是設(shè)備內(nèi)部器件之間的互連接口,常用的串行擴(kuò)展接口規(guī)范有SPI、I2C等。串行擴(kuò)展接口的芯片很多,可以根據(jù)需要選擇。6
五、波特率(Baudrate)和比特率(bps)
在通信中,衡量通信速率的單位有兩種:波特率和比特率。7比特率:每秒傳送的二進(jìn)制位數(shù),單位:bit/s。波特率:每秒傳送的N進(jìn)制位數(shù),單位:baud/s。兩者的關(guān)系:比特率=波特率×log2NN是數(shù)的進(jìn)制。例:傳16進(jìn)制數(shù)時(shí),比特率=4×波特率。計(jì)算機(jī)內(nèi)部均采用二進(jìn)制,故比特率=波特率例如異步傳送數(shù)據(jù)的速率每秒為120個(gè)字符,每個(gè)字符由1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位組成,則字符傳送速率為:10×120=1200波特/秒傳送一個(gè)波特所需的時(shí)間為:T1=1/1200=0.833ms
在上面?zhèn)魉椭?,只?個(gè)數(shù)據(jù)位才是有用的信息,起始位和停止位用于傳送信息的輔助,所以信息的速率為:8×120=960比特/秒。傳送一個(gè)比特需要的時(shí)間為:T2=1/960=1.04ms六.串行通信總線標(biāo)準(zhǔn)及接口(一)通信線的連接
通信速率和通信距離這兩個(gè)方面是相互制約的,降低通信速率,可以提高通信距離,不同的通信距離,串行通信電路有不同的連接方法:近距離傳送電路RXDTXDGNDRXDTXDGND微機(jī)微機(jī)或其他設(shè)備較遠(yuǎn)距離傳送電路(RS232)電平轉(zhuǎn)換RXDTXDGNDRXDTXDGND電平轉(zhuǎn)換RXDTXDGNDRXDTXDGND8(二)串行通信接口總線標(biāo)準(zhǔn)1.1測(cè)控系統(tǒng)中常用的總線標(biāo)準(zhǔn)測(cè)控系統(tǒng)中,計(jì)算機(jī)通信主要采用異步串行通信方式,常用的異步總線標(biāo)準(zhǔn)有三種:RS-232(RS-232ARS-232BRS-232C)RS-449(RS422RS423RS485)20mA電流環(huán)這里重點(diǎn)介紹RS-232,速率:20Kbit/S,最大通信距離:15m1.2抗干擾能力采用標(biāo)準(zhǔn)的通信接口,本身具有一定的抗干擾能力,但是工業(yè)現(xiàn)場(chǎng)的情況往往很惡劣,因而要根據(jù)具體情況進(jìn)行選擇。
RS232C:一般場(chǎng)合
RS422:抗共模干擾信號(hào)比較強(qiáng)光纖:抗電磁干擾較強(qiáng)9101、RS-232C
最早用的最廣泛的串行接口,采用+15V-15V電平,負(fù)邏輯。主要解決儀器設(shè)備與PC機(jī)的通信,屬于點(diǎn)對(duì)點(diǎn)的通信。2、RS-449
RS-449標(biāo)準(zhǔn)的電器特性有兩個(gè)標(biāo)準(zhǔn),即平衡式的RS-422標(biāo)準(zhǔn)和非平衡式的RS-423標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)在保持與RS-232C兼容的前提下重新定義了信號(hào)電平,并改進(jìn)了電路方式,以達(dá)到較高的傳輸速率和較大的傳輸距離。RS-422電氣標(biāo)準(zhǔn)是平衡方式標(biāo)準(zhǔn),它的發(fā)送器、接收器分別采用平衡發(fā)送器和差動(dòng)接收器,由于采用完全獨(dú)立的雙線平衡傳輸,抗串?dāng)_能力大大增強(qiáng)。信號(hào)電平定義為±6伏的負(fù)邏輯。
RS-423電氣標(biāo)準(zhǔn)是非平衡標(biāo)準(zhǔn),它采用單端發(fā)送器(即非平衡發(fā)送器)和差動(dòng)接收器。雖然發(fā)送器與RS-232C標(biāo)準(zhǔn)相同,但由于接收器采用差動(dòng)方式,所以傳輸距離和速度仍比RS-232C有較大的提高。113、RS-485由于RS-232-C接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要是:(1)接口的信號(hào)電平值較高,與TTL電平不兼容。(2)傳輸速率較低,在異步傳輸時(shí),波特率為20Kbps。(3)抗噪聲干擾性弱。
(4)傳輸距離有限。
于是就不斷出現(xiàn)了一些新的接口標(biāo)準(zhǔn),RS-485就是其中之一,它具有以下特點(diǎn):(1)接口電平與TTL電平兼容,可方便與TTL電路連接。(2)RS-485的數(shù)據(jù)最高傳輸速率為10Mbps。(3)RS-485接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗噪聲干擾性好。(4)最大傳輸距離可達(dá)3000米,另外RS-232-C接口在總線上只允許連接1個(gè)收發(fā)器,即單站能力。而RS-485接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器。即具有多站能力,可以利用RS-485構(gòu)建設(shè)備網(wǎng)絡(luò)。
三、RS-232C美國(guó)電子工業(yè)協(xié)會(huì)(EIA)公布的一種異步通信標(biāo)準(zhǔn)。RS232C標(biāo)準(zhǔn)是:設(shè)備之間通信的距離不大于15米最大傳輸速率20KB/S采用負(fù)邏輯:“1”——―5V∽―15V“0”——+5V∽+15V不帶負(fù)載時(shí)輸出電平:―25V∽+25V輸出短路電流:<0.5A最大負(fù)載電容:2500p12
當(dāng)計(jì)算機(jī)采用RS232標(biāo)準(zhǔn)時(shí)必須轉(zhuǎn)換電平,MAX232是EIA和TTL電平轉(zhuǎn)換芯片。內(nèi)部具有電壓提升電路,并有兩路收發(fā)器。
TTL電平可以由專用集成電路轉(zhuǎn)換成RS232C標(biāo)準(zhǔn);
如:MC1488或75188TTLRS232CMC1489或75189RS232CTTL
由于MC1488需要采用±12V電源,一般在單片機(jī)通信中大量使用的是只需要+5V電源、具有發(fā)送和接收的一體化芯片,如:MAX232、ICL232、ADM202等。MAX232的引腳和電路如下:13MCS—51之間的雙機(jī)通信MCS—51和PC機(jī)的雙機(jī)通信RXDTXDGNDRXDTXDGND8XX518XX51148.2MCS-51的串行口結(jié)構(gòu)一、串行口的內(nèi)部結(jié)構(gòu)51單片機(jī)有一個(gè)可編程的全雙工異步串行通信接口,它可作異步串行通信(UART)用,也可作同步移位寄存器,其幀格式可有8位、10位或ll位,并能設(shè)置各種波特率,給使用者帶來很大的靈活性。
輸出移位寄存器串行控制寄器SCON(98H)定時(shí)器T1接收控制器發(fā)送控制器≥1串行中斷TXDP3.1RXDP3.0TIRI發(fā)送SBUF(99H)輸入移位寄存器內(nèi)部總線接收SBUF(99H)波特率發(fā)生器1551單片機(jī)通過引腳RXD(P3.0)串行數(shù)據(jù)接收端和引腳TXD(P3.1)串行數(shù)據(jù)發(fā)送端與外界進(jìn)行通信。圖中有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H,可同時(shí)發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出,CPU寫SBUF,一是更新發(fā)送寄存器,同時(shí)啟動(dòng)串行數(shù)據(jù)發(fā)送;接收緩沖器只能讀出、不能寫入。讀SBUF,就是讀接收寄存器。
串行控制寄存器SCON用以存放串行口的控制和狀態(tài)信息。8XX51串行口正是通過對(duì)上述專用寄存器的設(shè)置、檢測(cè)與讀取來管理串行通信的。特殊功能寄存器PCON的最高位SMOD為串行口波特率的倍增控制位。波特率發(fā)生器可以有兩種選擇:1.定時(shí)器T1作波特率發(fā)生器,改變計(jì)數(shù)初值就可以改變串行通信的速率,稱為可變波特率。2.以內(nèi)部時(shí)鐘的分頻器作波特率發(fā)生器,因內(nèi)部時(shí)鐘頻率一定,稱為固定波特率16
甲方發(fā)送時(shí),CPU執(zhí)行指令MOVSBUF,A啟動(dòng)了發(fā)送過程,數(shù)據(jù)并行送入SBUF
,在發(fā)送時(shí)鐘shift的控制下由低位到高位一位一位發(fā)送,乙方在接收時(shí)鐘shift的控制下由低位到高位順序進(jìn)入移位寄存器SBUF
,甲方一幀數(shù)據(jù)發(fā)送完畢,置位發(fā)送中斷標(biāo)志TI,該位可作為查詢標(biāo)志(或引起中斷),CPU可再發(fā)送下一幀數(shù)據(jù)。乙方一幀數(shù)據(jù)到齊即接收緩沖器滿,置位接收中斷標(biāo)志RI,該位可作為查詢標(biāo)志(或引起接收中斷),通過MOVA,SBUFCPU將這幀數(shù)據(jù)并行讀入。二、串行通信的傳送過程用下面簡(jiǎn)圖說明shift串行數(shù)據(jù)CPUMOVA,SBUFshiftMOVSBUF,A并行數(shù)據(jù)甲方(發(fā)送)乙方(接收)TIRICPUSBUF并行數(shù)據(jù)SBUF17由上述可知:甲、乙方的移位時(shí)鐘頻率應(yīng)相同,即應(yīng)具有相同的波特率,否則會(huì)造成數(shù)據(jù)丟失。發(fā)送方是先發(fā)數(shù)據(jù)再查標(biāo)志,接收方是先查標(biāo)志再收數(shù)據(jù)。CPU通過指令和SBUF并行交換數(shù)據(jù),并不能控制數(shù)據(jù)的串行移位,它只能查詢標(biāo)志位來確定數(shù)據(jù)的移位是否完成。三、串行口的控制寄存器51單片機(jī)串行口是一個(gè)可編程接口,對(duì)它的編程只用兩個(gè)控制字分別寫入特殊功能寄存器:串行口控制寄存器SCON(98H)
電源控制寄存器PCON(97H)188.3串行口的控制寄存器8.3.1串行口的控制寄存器SCON8XX51串行通信的方式選擇,接收和發(fā)送控制及串行口的標(biāo)志均由專用寄存器SCON控制和指示,其格式如下:SM0SM1SM2RENTB8RB8TIRI方式選擇多機(jī)控制串行接收允許/禁止欲發(fā)的第九位收到的第九位發(fā)送完的標(biāo)志接收到的標(biāo)志SCONSerialPortControlRegister00000000ValueafterresetSM0SM1SM2REMTB8RB8TIRIBitnamebit7bit6bit5bit4bit3bit2bit1bit0SM0SM1SerialmodeExplanationBaudrate0008-bitshiftregisterOscillator/120118-bitUARTSetbytimer1or2*1029-bitUARTOscillator/32*1139-bitUARTSetBytimer1or2*19SM0.SM1:串行口工作方式控制位。
00---方式0,01---方式110---方式2,11---方式3REN:串行接收允許位。0---禁止接收,1---允許接收TB8:在方式2,3中,TB8是發(fā)送機(jī)要發(fā)送的第9位數(shù)據(jù)。RB8:在方式2,3中,RB8是接受機(jī)收到的第9位數(shù)據(jù),該數(shù)據(jù)來自發(fā)送機(jī)的TB8。TI:發(fā)送中斷標(biāo)志位。發(fā)送前必須用軟件清零,發(fā)送過程中TI保持零電平,發(fā)送完一幀數(shù)據(jù)后,由硬件置“1”,如果再發(fā)送,必須用軟件再清零。RI:接收中斷標(biāo)志位。接收前,必須用軟件清零,接收過程中RI保持零電平,接收完一幀數(shù)據(jù)后由片內(nèi)硬件自動(dòng)置“1”。如果再接收必須用軟件清零。SM2:多機(jī)通信控制位,僅用于方式2和方式3。當(dāng)選擇方式2或方式3時(shí),發(fā)送機(jī)設(shè)置SM2=1,并發(fā)送第九位TB8=1(地址標(biāo)志),表示此次發(fā)送的字節(jié)是要通信的從機(jī)的地址,各個(gè)從機(jī)初始化時(shí)設(shè)置SM2=1,若接收到的第九位數(shù)據(jù)RB8=1都能產(chǎn)生中斷,進(jìn)入各自的中斷子程,將接收到的地址與自己的相比較,若相等,則置SM2-=0,不相等的維持SM2=1。然后,主機(jī)開始發(fā)數(shù)據(jù),但此時(shí)它的TB8=0(數(shù)據(jù)標(biāo)志),從機(jī)收到RB8=0,只有SM2=0的可以響應(yīng),產(chǎn)生中斷接收數(shù)據(jù),而SM2=1的不予響應(yīng),20綜上所述,SM2的作用為:在方式2,3中,發(fā)送機(jī)SM2=1(程序設(shè)置),接收機(jī)SM2=1,若RB8=1,激活RI,引起接收中斷.RB8=0,不激活RI,不引起接收中斷.SM2=0,無論RB8=1還是RB8=0均激活RI引起接收中斷。TB8=1SM2=1SM2=1SM2=1SM2=0TB8=021SMODXXXXXXX8.3.2電源控制寄存器PCONPCON的格式如下圖所示,串行通信只用其中的最高位SMODSMOD:波特率加倍位。在計(jì)算串行方式1、2、3
的波特率時(shí),SMOD=0不加倍;SMOD=
1加倍。PCON的字節(jié)地址為87H,無位地址,只能字節(jié)尋址.,初始化時(shí)SMOD=0PCONPowerControl(87H)00000000ValueafterresetSMOD---@GF1@GF2PDIDLBitnamebit7bit6bit5bit4bit3bit2bit1bit0(2SMOD/32)*fosc12*(256-X)因?yàn)椴ㄌ芈?228.4串行口的工作方式
根據(jù)串行通信數(shù)據(jù)格式和波特率的不同,51系列單片機(jī)的串行通信有四種工作方式,通過編程進(jìn)行選擇,各工作方式的特點(diǎn)如下:1.方式0(P3.1)(P3.0)Mode0ReceiveTiming:(P3.0)(P3.1)Mode0TransmitTiming:(P3.0)(P3.1)方式0的數(shù)據(jù)格式為8位,低位在前,高位在后。RXD為串行數(shù)據(jù)的發(fā)送端或接收端,TXD輸出頻率為fosc/12的時(shí)鐘脈沖。波特率固定為fosc/12(fosc為單片機(jī)晶振頻率)。232.方式1為10位異步通信方式,每幀數(shù)據(jù)由1個(gè)起始位“0”,8個(gè)數(shù)據(jù)位和1個(gè)停止位“1”共10位構(gòu)成.其中起始位和停止位在發(fā)送時(shí)是自動(dòng)插入的。以TXD為串行數(shù)據(jù)的發(fā)送端,T1提供移位時(shí)鐘,RXD為數(shù)據(jù)的接收端,由T1提供移位時(shí)鐘,是波特率可變方式。波特率=(2SMOD/32)×(T1的溢出率)=(2SMOD/32)×(fosc/12(256-x))
根據(jù)給定的波特率,可以計(jì)算T1的計(jì)數(shù)初值X。(P3.0)(P3.1)(P3.1)(P3.0)243.方式211位異步發(fā)送/接收方式,即每幀數(shù)據(jù)由有一個(gè)起始位“0”,9個(gè)數(shù)據(jù)位和1個(gè)停止位“1”組成。發(fā)送時(shí)的第九個(gè)數(shù)據(jù)位,由SCON寄存器的TB8位提供,接收到的第九位數(shù)據(jù)存放在SCON寄存器的RB8位,第九位數(shù)據(jù)可作為檢驗(yàn)位,也可用于多機(jī)通信中識(shí)別傳送的是地址還是數(shù)據(jù)的特征位。波特率固定為(2SMOD/64)×fosc。(P3.0)(P3.1)Mode2/3TransmitTiming:Mode2/3ReceiverTiming:(P3.1)(P3.0)254.方式3
數(shù)據(jù)格式同方式3,所不同的是波特率可變,計(jì)算方式同方式1。8.5串行口的應(yīng)用編程串行口的波特率有兩種方式:固定波特率可變波特率注意:使用可變波特率時(shí),先確定T1的計(jì)數(shù)初值,并對(duì)T1進(jìn)行初始化串行通信的編程方式:查詢方式:查TI或RI是否為“1”。中斷方式:如果預(yù)先開了中斷,當(dāng)TI、RI為“1”,會(huì)自動(dòng)產(chǎn)生中斷。注意:兩種方式中當(dāng)發(fā)送或接受數(shù)據(jù)后都要人為地清TI或RI。268.5.1
查詢方式方式1通信的查詢方式發(fā)送和接收流程圖查詢方式發(fā)送流程圖結(jié)束YNYNTI=1?清TI全部數(shù)據(jù)發(fā)送完?修改地址指針和塊長(zhǎng)度計(jì)數(shù)器置發(fā)送數(shù)據(jù)塊首址數(shù)據(jù)塊長(zhǎng)度計(jì)數(shù)器發(fā)送數(shù)據(jù)T1初始化、啟動(dòng)T1工作開始設(shè)定串行通信方式查詢方式接收流程圖結(jié)束YNYNRI=1?清RI全部數(shù)據(jù)接收完?修改地址指針和塊長(zhǎng)度計(jì)數(shù)器置接收數(shù)據(jù)塊首址接收數(shù)據(jù)塊長(zhǎng)度接收數(shù)據(jù)T1初始化、啟動(dòng)T1工作開始設(shè)定串行通信方式允許接收278.5.2中斷方式
中斷方式的初始化編程同查詢方式,不同的是要開中斷,即置位EA和ES,編寫中斷服務(wù)程序。方式1通信的中斷方式串行通信的程序流程見下圖:方式1中斷方式接收流程圖T1初始化、啟動(dòng)T1工作設(shè)定串行通信方式置接收數(shù)據(jù)塊首址數(shù)據(jù)塊長(zhǎng)度計(jì)數(shù)器等待中斷1EA,1ES主程序Y中斷返回0EA,0ES中斷服務(wù)程序修改地址指針和塊長(zhǎng)度計(jì)數(shù)器清RI接收數(shù)據(jù)N全部數(shù)據(jù)接收完?28例8-1.在內(nèi)部數(shù)據(jù)存貯器20H~3FH單元中共有32個(gè)數(shù)據(jù),要求采用方式1串行發(fā)送出去,傳送速率為1200波特,設(shè)fosc=12MHZ。解:T1工作于方式2作波特率發(fā)生器,取SMOD=0,T1的時(shí)間常數(shù)計(jì)算如下:波特率=(2SMD/32)(fosc/(12(256-X)))
代入:1200=(1/32)×12×106/12(256-x),解得:X=230=E6H發(fā)送程序:ORG0000HMOVTMOD,#20H;設(shè)置波特率,T1方式2MOVTH1,#0E6HMOVTL1,#0E6H;T1時(shí)間常數(shù)
SETBTR1;啟動(dòng)T1MOVSCON,#40H;串行口工作于方式1MOVR0,#20H;R0指發(fā)送緩沖區(qū)首址
MOVR7,#32;R7作發(fā)送數(shù)據(jù)計(jì)數(shù)
LO:MOVSBUF,@R0;發(fā)送數(shù)據(jù)
JNBTI,$;一幀未發(fā)完繼續(xù)查詢
CLRTI;一幀發(fā)完清TIINCR0DJNZR7,LO;數(shù)據(jù)塊未發(fā)完繼續(xù)
SJMP$29接收程序:
ORG0000HMOVTMOD,#20H;設(shè)置波特率
MOVTH1,#0E6HMOVTL1,#0E6HSETBTR1;初始化T1,并啟動(dòng)T1MOVSCON,#50H;設(shè)定串行方式1,并允許接收
MOVR0,#20HMOVR7,#32LOOP:JNBRI,$;一幀收完?CLRRI;收完清RIMOV@R0,SBUF;將數(shù)據(jù)讀入
INCR0DJNZR7,LOOPSJMP$30查詢方式C語(yǔ)言發(fā)送程序:#include<reg51.h>main(){unsingnedchari;char*p;TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0x40;p=0x20;for(i=0;i<=32;i++){SBUF=*pp++while(!TI);TI=0;
}}查詢方式C語(yǔ)言接收程序#include<reg51.h>main(){unsingnedchari;char*p;TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0x50;p=0x20;for(i=0;i<=32;i++){while(!RI);RI=0;*p=SBUF;
p++}}31main(){unsingnedchari;char*p;TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;EA=1;ES=1;SCON=0x40;p=0x20;SBUF=*p;for(i=0;i<32;);/*等待中斷*/}#include<reg51.hTrsinterrupt4{TI=0;
i++;p++;SBUF=*p;}中斷方式C語(yǔ)言發(fā)送程序32main(){unsingnedchari;char*p;TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;EA=1;ES=1;SCON=0x50;p=0x20;for(i=0;i<32;);
}#include<reg51.h>Trsinterrupt4{RI=0;
i++;*p=SBUF;p++;}中斷方式C語(yǔ)言接收程序33RXD89C51TXDP1.0例8-2接線如圖,編一個(gè)自發(fā)自收程序,檢查單片機(jī)的串行口是否完好,f=12MHz,波特率=600,取SMOD=0。解:依據(jù)公式波特率=求得:MOVTMOD,#20MOVTH1,#0CCMOVTL1,#0CCH;設(shè)定波特率SETBTR1MOVSCON,#50HABC:CLRTIMOVP1,#0FEH;LED滅ACALLDELAY;延時(shí)MOVA,#0FFHMOVSBUF,A;發(fā)送數(shù)據(jù)FFHJNBRI,$;RI=0等待CLRRIMOVA,SBUF;接收數(shù)據(jù),A=FFHMOVP1,A;燈亮JNBTI,$ ;TI=0等待ACALLDELAY;延時(shí)SJMPABCDELAY:MOVR0,#0DAL:MOVR1,#0 DJNZR1,$DJNZR0,DAL RET34例8-2C語(yǔ)言編程:#include<reg51.h>Main(){ unsignedintI; TMOD=0x20;TH1=0xcc;TL1=0xcc;/*初始化T1*/ TR1=1; SCON=0x50; While(1)/*無限循環(huán)執(zhí)行一下發(fā)送和接收語(yǔ)句*/ {TI=0; P1=0xfe;/*LED滅*/ for(I=0;I<10000;I++);/*延時(shí)*/ SBUF=0xff;/*發(fā)送數(shù)據(jù)FFH*/ while(RI==0);/*RI=0等待*/ RI=0;/*RI=1清RI*/ P1=SBUF; /*接收數(shù)據(jù)并送P1口,燈亮*/ TI=0;(while(TI==0);)
/*讓TI=0*/for(I=0;I<10000;I++);/*延時(shí)*/ }}35例8-4例如串行通信方式0,擴(kuò)展I/O接口,接八個(gè)數(shù)碼管,使內(nèi)部數(shù)據(jù)存儲(chǔ)器58H~5FH單元的內(nèi)容在數(shù)碼管上顯示。
分析:由于TXD,RXD運(yùn)行在工作方式0時(shí),可方便的連接串入并出移位寄存器74LS164,TXD發(fā)送移位脈沖,RXD發(fā)送數(shù)據(jù),P3.3用于顯示器的輸入控制,通過74LS164接八個(gè)數(shù)碼管,電路如下圖所示。Ω**36例8-4程序如下:
ORG0050H SETBP3.3;允許移位寄存器工作
MOVSCON,#0;選串行通信方式0 MOVR7,#08H;顯示八個(gè)字符
MOVR0,#5FH;先送最后一個(gè)顯示字符
MOVDPTR,#TBA;DPTR指向字形表首址
DLO:MOVA,@R0;取待顯示數(shù)碼
MOVCA,@A+DPTR;查字形表
MOVSBUF,A;送出顯示
JNBTI,$;一幀輸出完?
CLRTI ;已完,清中斷標(biāo)志
DECR0;修改顯示數(shù)據(jù)地址
DJZNR7,DLOCLRP3.3;8位送完,關(guān)發(fā)送脈沖
SJMP$TBA:DB0C0H,0F9H,0A4H,B0H,99H,92H DB82H,0F8H,80H,90H,83H,83H,0C6H DB0A1H,86H,84H
3738例8-5GPS數(shù)據(jù)的獲?。篏PS作為定位、授時(shí)、測(cè)量、同步已經(jīng)得到廣泛地應(yīng)用。下面介紹基本的GPS模塊的應(yīng)用。右圖是常見的模塊的形式,常常有外殼封裝,以便在戶外應(yīng)用。
它內(nèi)部有接收天線和其他一些開發(fā)芯片及其外圍電路組成。其控制內(nèi)核是一個(gè)DSP處理器,該處理器具有很強(qiáng)的數(shù)據(jù)運(yùn)算處理能力,能將接收到的衛(wèi)星信號(hào)進(jìn)行計(jì)算,求出方位、時(shí)間等等信息。它具有標(biāo)準(zhǔn)的串口,方便與外部設(shè)備互聯(lián)。主要的連線如右圖所示。紅色VCC,黑線RXD,白線TXD,屏蔽線GNDTxdRxdVccGNDRxdTxdVccGND80C51與單片機(jī)的連接GPS模塊39GPS信號(hào)的格式(每秒依次發(fā)送以下信號(hào))序號(hào)命令說明最大幀長(zhǎng)1$GPGGA全球定位數(shù)據(jù)722$GPGSA衛(wèi)星PRN數(shù)據(jù)653$GPGSV衛(wèi)星狀態(tài)信息2104$GPRMC運(yùn)輸定位數(shù)據(jù)705$GPVTG地面速度信息346$GPGLL大地坐標(biāo)信息7$GPZDAUTC時(shí)間和日期注:發(fā)送次序$PZDA、$GPGGA、$GPGLL、$GPVTG、$GPGSA、$GPGSV*3、$GPRMC 該協(xié)議采用ASCII碼,其串行通信默認(rèn)參數(shù)為:波特率=4800bps,數(shù)據(jù)位=8bit,開始位=1bit,停止位=1bit,無奇偶校驗(yàn)。正好和51單片機(jī)串口工作方式1吻合。 40現(xiàn)在要獲得時(shí)間信號(hào),根據(jù)這幾組數(shù)據(jù),可以發(fā)現(xiàn):GPGGA這一組可以滿足要求。
它是GPS固定數(shù)據(jù)輸出語(yǔ)句,這是一幀GPS定位的主要數(shù)據(jù),也是使用最廣的數(shù)據(jù)。它的數(shù)據(jù)格式如下:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF><1>UTC時(shí)間,格式為hhmmss.sss。<2>緯度,格式為ddmm.mmmm(前導(dǎo)位數(shù)不足則補(bǔ)0)。。。。。。。。。。。。
這樣,只要識(shí)別一開始是$GPGGA再加一個(gè)逗號(hào),
然后,再接收hhmmss6個(gè)字節(jié),就可以把時(shí)分秒的數(shù)據(jù)獲取。所以軟件程序就按這個(gè)思路來編寫。 41采用查詢方法的keilC編程(假設(shè)采用默認(rèn)的4800波特率,先要設(shè)好波特率):#include<reg51.h>#defineucharunsignedcharbitflag=0;uchar*pdat;ucharnum;/*計(jì)數(shù)變量*/uchargpsdat[10];pdat=gpsdat;uchargps_receive(){while(!=RI);RI=0;if(SBUF!=$)return0;while(!=RI);RI=0;if(SBUF!=‘G’)return0; while(!=RI);RI=0;if(SBUF!=‘P’)return0;while(!=RI);RI=0;if(SBUF!=‘G’)return0;while(!=RI);RI=0;if(SBUF!=‘G’)return0;while(!=RI);RI=0;if(SBUF!=‘A’)return0;For(num=0;num<6;num++;){while(!+RI);*pdat=SBUF;pdat++;}flag=1;}42#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharGPS_ASC=[‘GPGGA’];ucharRS_BUF[10];ucharRSTime[10]uintGetuart(){uinti=0,j=0;while(!=RI){if(i++>30000){j=256;returnj;}j=SBUF;RI=0;returnj;}采用中斷方法的keilC編程(假設(shè)采用默認(rèn)的4800波特率,先要設(shè)好波特率):VoidGetgps_Data()intrrupt4{ucharm,n;RI=0;if(SBUF==‘$’){for(m=1;m<5;m++){n=Getuart();if(n<256){RS_BUF[m]=n;if(RS_BUF[m]!=GPS_ASC[m])return;}for(m=0;m<6;m++){n=Getuart();if(n<256)RSTime[m]=n;elsebreak;}}
8.4串行口小結(jié)1.在長(zhǎng)距離通信中采用串行傳送方式具有成本低,通信可靠的優(yōu)點(diǎn)。51系列單片機(jī)內(nèi)有一個(gè)全雙工的異步通信接口,可以工作于四種工作方式,四種工作方式的特點(diǎn)見教材表8.3。2.在串行通信的編程中,如果是方式1和方式3,初始化程序中必須對(duì)定時(shí)計(jì)數(shù)器T1進(jìn)行初始化編程以選擇波特率。發(fā)送程序應(yīng)注意先發(fā)送,再檢查狀態(tài)TI,再發(fā)送;而接收程序應(yīng)注意先檢查狀態(tài)RI再接收,即發(fā)送過程是先發(fā)后查,而接收過程是先查后收。無論是查詢方式還是中斷方式,發(fā)送或接收后都不會(huì)自動(dòng)清狀態(tài)標(biāo)志,必須用程序?qū)I和RI清零。3.為保證發(fā)送和接收正確可靠,可以加校驗(yàn),如加奇/偶校驗(yàn)位或累加和校驗(yàn)字節(jié)等。為達(dá)到發(fā)送和接收的同步,發(fā)方可以先發(fā)一個(gè)雙方約定的符號(hào),收方收到后向發(fā)送方發(fā)出回答信號(hào),發(fā)送方收到回答信號(hào)后,確認(rèn)接收方已作好接收的準(zhǔn)備,發(fā)送方再發(fā)送信息長(zhǎng)度,然后發(fā)送正式信息,最后發(fā)送校驗(yàn)字節(jié)。接收方按發(fā)送方發(fā)過來的信息長(zhǎng)度進(jìn)行接收,按雙方約定的校驗(yàn)方式進(jìn)行校驗(yàn),根據(jù)信息的正確與否進(jìn)行相應(yīng)處理。其中每一步的發(fā)送
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人健身房設(shè)備租賃合同(2024版)3篇
- 2025版仲裁申請(qǐng)書行政公文范本制作與培訓(xùn)服務(wù)合同2篇
- 2025版論行政合同中行政主體權(quán)益保護(hù)與義務(wù)履約4篇
- 2024版商業(yè)房產(chǎn)銷售合同條款樣本
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)土地承包協(xié)議范本4篇
- 2025年度茶葉行業(yè)人才培訓(xùn)與就業(yè)合作合同4篇
- 二零二五年方管行業(yè)質(zhì)量標(biāo)準(zhǔn)制定合同3篇
- 2025年度智能家居系統(tǒng)瓷磚采購(gòu)合同協(xié)議書4篇
- 專利技術(shù)成果應(yīng)用許可合同2024版一
- 二零二五年度裝配式建筑構(gòu)件設(shè)計(jì)、制造與施工合同3篇
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- 垃圾車駕駛員聘用合同
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個(gè)人合同模板
- 八年級(jí)語(yǔ)文下冊(cè) 成語(yǔ)故事 第十五課 諱疾忌醫(yī) 第六課時(shí) 口語(yǔ)交際教案 新教版(漢語(yǔ))
- 2024年1月高考適應(yīng)性測(cè)試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- EPC項(xiàng)目采購(gòu)階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 四川2024年專業(yè)技術(shù)人員公需科目“數(shù)字經(jīng)濟(jì)與驅(qū)動(dòng)發(fā)展”參考答案(通用版)
- 煤炭裝卸服務(wù)合同
- 廣東省佛山市順德區(qū)2023學(xué)年中考一模物理試題(含答案解析)
評(píng)論
0/150
提交評(píng)論