![第9章 串口通信_第1頁](http://file4.renrendoc.com/view/092c364ada26563da1fa631a62a91e28/092c364ada26563da1fa631a62a91e281.gif)
![第9章 串口通信_第2頁](http://file4.renrendoc.com/view/092c364ada26563da1fa631a62a91e28/092c364ada26563da1fa631a62a91e282.gif)
![第9章 串口通信_第3頁](http://file4.renrendoc.com/view/092c364ada26563da1fa631a62a91e28/092c364ada26563da1fa631a62a91e283.gif)
![第9章 串口通信_第4頁](http://file4.renrendoc.com/view/092c364ada26563da1fa631a62a91e28/092c364ada26563da1fa631a62a91e284.gif)
![第9章 串口通信_第5頁](http://file4.renrendoc.com/view/092c364ada26563da1fa631a62a91e28/092c364ada26563da1fa631a62a91e285.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章串口通信9.1概述單片機與外界進(jìn)行信息交換,稱為通信。通信有并行通信和串行通信兩種基本方式。并行通信是多位數(shù)據(jù)同時被發(fā)送或接收,如圖9-1(a)所示;串行通信則是數(shù)據(jù)逐位依次被發(fā)送或接收,如圖9-1(b)所示。并行通信和串行通信各有其優(yōu)缺點,具體如表9-1所列。(a)并行通信 (b)串行通信圖9-1通信方式表9-1并行通信和串行通信的特點通信方式優(yōu)點缺點并行通信多位數(shù)據(jù)同時傳輸,傳送速度快線路位數(shù)多,不便長距離傳送串行通信適合長距離通信,節(jié)省傳輸線路,有一定的糾錯能力多位數(shù)據(jù)逐位依次傳輸,傳送速度較慢9.1.1串行通信串行通信適合長距離、節(jié)省傳輸線、有糾錯能力的突出優(yōu)點,使其逐漸成為單片機與其它系統(tǒng)通信的主要方式。串行通信又細(xì)分為異步通信和同步通信,單片機主要采用異步通信方式。1、 異步通信異步通信數(shù)據(jù)按幀傳輸,一幀數(shù)據(jù)包含起始位、數(shù)據(jù)位、校驗位和停止位。異步通信憑借傳輸信息中設(shè)置的起始位、停止位來保持通信同步。異步通信對硬件要求不高,容易實現(xiàn)且靈活,適用于數(shù)據(jù)的隨機發(fā)送/接收,但因傳送一個字節(jié)的數(shù)據(jù)就要建立一次同步,加上起始位、校驗位和停止位,使得工作速度相對較低。2、 同步通信同步通信傳輸?shù)男畔?,是??2個同步字符和多字節(jié)數(shù)據(jù)位組成。同步字符用于保持通信同步并作為起始位,用以觸發(fā)同步時鐘開始發(fā)送或接收數(shù)據(jù);多字節(jié)數(shù)據(jù)之間不能有空隙,每位占用的時間相等。同步通信傳輸速度快,但需要準(zhǔn)確的時鐘來實現(xiàn)收發(fā)雙方的嚴(yán)格同步,硬件要求高,多用于批量數(shù)據(jù)傳送。9.1.2串行通信的制式串行通信按照數(shù)據(jù)傳送方向的不同,有三種傳輸方式:1、單工制式單工傳輸,是指通信雙方傳輸信息時,只能從發(fā)送方單方向傳送數(shù)據(jù)給接收方,如圖9-2所示。圖9-2單工通信
2、半雙工制式半雙工傳輸,是指通信雙方都有接收器和發(fā)送器,都能夠進(jìn)行數(shù)據(jù)的發(fā)送和接收,但不能在同一時刻接收和發(fā)送數(shù)據(jù),即發(fā)送時不能接收,接收時不能發(fā)送。如圖9-3所示。圖9-3圖9-3半雙工通信3、全雙工制式全雙工傳輸,是指通信雙方均設(shè)有發(fā)送器和接收器,通信信道相互獨立,既有發(fā)送信道又有接收信道。因此,全雙工傳輸可實現(xiàn)通信雙方數(shù)據(jù)的同時發(fā)送和接收,即發(fā)送時可以接收,接收時也可以發(fā)送。如圖9-4所示。圖9-4全雙工通信51單片機內(nèi)部的串行接口是全雙工的,即它能同時發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫入而不能讀出,接收緩沖器只能讀出而不能寫入。串行口還具有接收緩沖功能,即從接收緩沖器中讀出前一個已收到的字節(jié)數(shù)據(jù)之前,就可以開始接收第二字節(jié)數(shù)據(jù)了。串行口的內(nèi)部結(jié)構(gòu)如圖9-5所示。發(fā)送SBUF(99H)接收SBUF(99H)門發(fā)送SBUF(99H)接收SBUF(99H)門TXD(P3.1)RXD(P3.0)圖9-5串行口結(jié)構(gòu)示意圖單片機知識:串口緩沖器SBUF串口緩沖器SBUF,是在物理上彼此獨立的兩個緩沖器:一個是接收緩沖器,用于存放接收到的數(shù)據(jù);另一個是發(fā)送緩沖器,用于存放待發(fā)送的數(shù)據(jù)。所以,數(shù)據(jù)的發(fā)送和接收可以同時進(jìn)行。兩個緩沖器共用一個地址99H,通過對SBUF的讀、寫語句,可以區(qū)分當(dāng)前進(jìn)行的操作是針對接收緩沖器還是發(fā)送緩沖器:如果CPU在寫SBUF,操作的對象就是發(fā)送緩沖器;而CPU在讀SBUF時,操作的對象就是接收緩沖器了。例如:SBUF=send[i];//發(fā)送第i個數(shù)據(jù)buffer[i]=SBUF;//接收數(shù)據(jù)9.2單片機間的串口通信功能說明:單片機a與單片機b,通過串行口進(jìn)行通信。a機發(fā)送數(shù)據(jù),b機接收3機發(fā)送
的數(shù)據(jù),并進(jìn)行相應(yīng)處理。按鍵K1每按下一次,連接在b機P2.0引腳的蜂鳴器就報警鳴響一次,同時,連接在b機P2.7引腳的發(fā)光二極管D1閃爍一次。按鍵K2按下一次,連接在b機P2.0引腳的蜂鳴器報警鳴響兩次,同時,連接佃機P2.7引腳的發(fā)光二極管D1閃爍兩次。硬件說明:1、 硬件電路連接如圖9-6所示,單片機a的P3.1引腳(TXD),連接到單片機b的P3.0引W(RXD)02、 按鍵K1和K2分別連接到單片機a的P1.0和P1.1引腳;圖9-6雙機串口通信硬件連接圖P3.0(RXD)P31圖9-6雙機串口通信硬件連接圖P3.0(RXD)P31(TXD)P3.2(INTO)P3.3QNT1)P3.4(TO)P3.5(T1)P3.6(WRP3.7(RD)P1.0vccP1.1PO.OP1.2P0.1P1.3P0.2PL4P0.3P1.5P0.4P1.6P0.5P1.7P0.6RSTP3.0(RXD)P0.7EAP3.1(TXD)ALEP3.2(INT0)PSENP3.3(INT1)P2.7P3.4<T0)P2.6P3.5CTDP2.5P3.6(WR)P2.4P3.7(RD)P2.3vssP2.0main()main(){TMOD=0x20;TL1=0xf4;TH1=0xf4;TR1=1;SCON=0x50;while(1){if(k1==0)程序清單如下:〃雙機串口通信,a機發(fā)送數(shù)據(jù)程序#include<reg52.h>#defineucharunsignedcharsbitk1=P1A0;sbitk2=P1A1;uchari=0;//************************************************************voiddelay(uchari) //延時子函數(shù){ucharj,k;for(k=0;k<i;k++)for(j=0;j<110;j++);}//************************************************************〃主函數(shù)〃定時器1工作于方式2//波特率為2400b/s〃設(shè)置串行口工作在方式1,允許接收delay(5);if(k1==0)i=1;if(k2==0)delay(5);if(k2==0)i=2;if(i!=0)SBUF=i; //發(fā)送數(shù)據(jù)iwhile(TI==0); //查詢等待發(fā)送是否完成TI=0; //發(fā)送完成,TI由軟件清0i=0;//雙機串口通信,b接收數(shù)據(jù)程序#include<reg52.h>#defineucharunsignedcharsbitbeep=P2A0;sbitD1=P2A7;ucharx,y;//************************************************************voiddelay(uchari) //延時子函數(shù){ucharj,k;for(k=0;k<i;k++)for(j=0;j<110;j++);}//************************************************************main()r〃主函數(shù){TMOD=0x20;TL1=0xf4;TH1=0xf4;TR1=1;SCON=0x50;ES=1;EA=1;while(1)〃定時器1工作于方式2//波特率為2400b/s〃設(shè)置串行口工作在方式1,允許接收〃開串行口中斷〃開總中斷允許位
{if(x==1)//k1控制報警閃爍一次{beep=0;D1=0;delay(200);beep=1;D1=1;}if(x==2)//k2控制報警閃爍兩次{for(y=x;y>0;y--){beep=0;D1=0;delay(100);beep=1;D1=1;}}}}//************************************************************voidserial(void)interrupt4〃串口中斷類型號為4{EA=0;〃關(guān)中斷RI=0;〃軟件清除中斷標(biāo)志位x=SBUF;//接收數(shù)據(jù)EA=1;〃開中斷允許位}單片機知識:串行口1、串行口的工作寄存器51串行口工作時,需要進(jìn)行相關(guān)寄存器的設(shè)置。只有設(shè)置正確,串行口才能正常工作。需要進(jìn)行設(shè)置的寄存器,有串行口控制寄存器SCON、電源控制器PCON、中斷允許寄存器IE和中斷優(yōu)先級寄存器IP。其中IE和IP寄存器已在第4章有過詳細(xì)介紹,此處重點介紹SCON和PCON。(1)串行口控制寄存器SCON串行口控制寄存器SCON是一個8位的寄存器,如表9-2所列。系統(tǒng)復(fù)位時,SCON中的所有位都被清0。其各位功能及含義如下:表9-2SCON寄存器位7位6位5位4位3位2位1位0SM0SM1SM2RENTB8RB8TIRI?位7、位6——SM0、SM1:串行口操作方式選擇位。SM0和SM1這兩個選擇位組合后,對應(yīng)串行口的四種工作方式,具體如表9-3所示。表9-3串行口方式選擇SM0SM1方式功能說明波特率000同步移位寄存器方式,8位全部是數(shù)據(jù),無起始停止位fosc/1201110位UART(其中1位起始位,8位數(shù)據(jù)位,1位停止位)可變10211位UART(其中1位起始位,9位數(shù)據(jù)位,1位停止位)fosc/64或fosc/32113同方式2可變?位5——SM2:方式2和3的多機通信使能位。在方式2或方式3中,若SM2為0,則不論接收到的第9位數(shù)據(jù)RB8是0還是1,均可使接收到的數(shù)據(jù)進(jìn)入SBUF,并激活接受中斷標(biāo)志位RI;若SM2為1,且接收到的第9位數(shù)據(jù)RB8為1,則接收到的數(shù)據(jù)進(jìn)入SBUF,并激活接受中斷標(biāo)志位RI;若SM2為1,且接收到的第9位數(shù)據(jù)RB8為0,則接收到的數(shù)據(jù)被丟棄,接收中斷標(biāo)志RI不會被激活。在方式1中,若SM2=1,則只有在收到有效的停止位時,才會激活RI。在方式0中,SM2必須置為0。?位4——REN:串行數(shù)據(jù)接收允許位。REN=1,允許串行口接受數(shù)據(jù);REN=0,禁止串行口接受數(shù)據(jù)。該位由軟件置位或清零。?位3——TB8:方式0和方式1中不使用該位。在方式2和方式3中,TB8中的值(1位二進(jìn)制數(shù))是發(fā)送數(shù)據(jù)的第9位,可按需要由軟件指定其功能(數(shù)據(jù)的奇偶校驗位或多機通信中的地址幀/數(shù)據(jù)幀的標(biāo)志,一般1是地址幀,0是數(shù)據(jù)幀)。?位2——RB8:是方式2和3中已接收到的第9位數(shù)據(jù)。在方式1中,若SM『0,RB8是接收到的停止位。在方式0中,不使用RB8位。?位1——TI:發(fā)送中斷標(biāo)志位。在方式0中,當(dāng)串行發(fā)送完8位數(shù)據(jù)時,由硬件置1,表明發(fā)送中斷有請求;在其他方式中,在發(fā)送停止位時,由內(nèi)部硬件置1。需要特別注意的是,無論在何種方式,該位都必須由軟件來清0。?位0——RI:接收中斷標(biāo)志位。在方式0中,當(dāng)串行接收到8位數(shù)據(jù)結(jié)束時,由硬件置1。無論在何種方式,該位都必須由軟件來清0。(2) 電源控制器PCONPCON是一個特殊功能寄存器,它是一個8位寄存器。在串口通信中,只用到8位中SMOD這一位(位7)。該位是波特率選擇位,在串行口工作在方式為1、2或3時,若SMOD=1,則波特率提高一倍。復(fù)位時,SMOD值為0。(3) 中斷允許寄存器IE中斷允許寄存器IE的位4(ES)是串行口中斷允許位,ES=1,允許串行口中斷(總開關(guān)EA=1時);ES=0,禁止串行口中斷。中斷允許寄存器IE如表9-4所列。表9-4IE寄存器位7位6位5位4位3位2位1位0EAESET1EX1ET0EX0(4)中斷優(yōu)先級寄存器IP中斷優(yōu)先級寄存器IP的位4(PS),是串行口中斷優(yōu)先級控制位。PS=1,串行口定義為高優(yōu)先級中斷源;PS=0,串行口定義為低優(yōu)先級中斷源。2、串行口工作方式串行口的工作方式由SM0和SM1定義,編碼和功能如表9-3所示,下面分別介紹4種工作方式及其用途。(1)方式0串行口的工作方式0為同步移位寄存器輸入輸出方式,可外接移位寄存器,以擴展I/O口,也可外接同步I/O設(shè)備。當(dāng)串行口在方式0下發(fā)送(輸出)數(shù)據(jù)時,數(shù)據(jù)串行逐位從RXD引腳輸出;而TXD引腳則作移位脈沖的輸出端,輸出移位需要的同步時鐘。當(dāng)串行口在方式0下接收(輸入)數(shù)據(jù)時,RXD端為數(shù)據(jù)輸入端,TXD仍為同步脈沖信號輸出端。接收器接收RXD端輸入的數(shù)據(jù)信息,波特率是振蕩頻率的1/12。方式0主要用于I/O擴展的場合。此方式下的串行口,通過外接串入并出移位寄存器,可擴展輸出口;通過外接并入串出移位寄存器,可擴展輸入口。串行口工作在方式0時,需要注意以下兩點:①方式0發(fā)送或接收完8位數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI或接收中斷標(biāo)志RI,由硬件置1。但在CPU響應(yīng)了發(fā)送中斷或接收中斷的中斷請求,并轉(zhuǎn)入中斷服務(wù)程序時,CPU并不自動將TI或RI清0,因此,用戶必須編程將中斷標(biāo)志TI或RI清0。②串行口在方式0下工作時,SM2位必須為0。(2)方式1串行口工作在方式1時,是一個波特率可變的10位異步通信接口,即1位起始位,8位數(shù)據(jù)位(低位在先)和1位停止位,其中起始位和停止位是在發(fā)送時自動插入的。波特率的大小,取決于定時器1或定時器2的溢出速率。當(dāng)串行口在方式1下發(fā)送(輸出)數(shù)據(jù)時,TI必須為0。當(dāng)CPU執(zhí)行任何一條以SBUF為目的寄存器的指令或語句,都啟動一次發(fā)送。數(shù)據(jù)發(fā)送完時,發(fā)送中斷標(biāo)志位TI置1。當(dāng)串行口在方式1下接收(輸入)數(shù)據(jù)時,其接收的前提條件是,串行口控制寄存器SCON的REN位為1,同時還要滿足兩個條件:①RI必須為0,②SM2=0或者接收到的停止位為1,否則接收到的數(shù)據(jù)會被丟棄。如果正確接收,則接收到的數(shù)據(jù)被裝載進(jìn)SBUF和RB8位,接收中斷標(biāo)志位RI被置1。方式1一般多用于兩個單片機之間的數(shù)據(jù)通信。串行口工作在方式1時,發(fā)送中斷標(biāo)志TI或接收中斷標(biāo)志RI,須由用戶清0。(3)方式2和方式3串行口工作在方式2和方式3,是11位的異步通信接口。方式2和方式3的操作過程完全一樣,僅僅是波特率不同。方式2的波特率固定,為fosc/32或fosc/64;方式3的波特率可變,取決于定時器1或定時器2溢出速率。方式2和方式3的幀格式如表9-5所示。表9-5方式2和方式3的幀格式位0位1位2位3位4位5位6位7位8位9位10起始D0D1D2D3D4D5D6D7TB8/RB8停止當(dāng)串行口在方式2或者3下發(fā)送(輸出)數(shù)據(jù)時,任何一條寫SBUF的語句,都可啟動一次發(fā)送。當(dāng)?shù)?位數(shù)據(jù)(TB8)輸出之后,發(fā)送中斷標(biāo)志位TI被置1。當(dāng)串行口在方式2或者3下接收(輸入)數(shù)據(jù)時,其前提條件依然是,SCON寄存器的REN位為1;同時還要滿足兩個條件一一RI必須為0,SM2=0或者接收到的停止位為1,否則接收到的數(shù)據(jù)會被丟棄。如果正確接收,則接收到的數(shù)據(jù)被裝載進(jìn)SBUF和RB8位,接收中斷標(biāo)志位RI被置1。需要注意的是,在方式2和方式3中,裝入RB8的是第9位數(shù)據(jù),而不是停止位;但在方式1中,裝入的RB8第9位是停止位。3、波特率串行口每秒鐘發(fā)送(或接收)的二進(jìn)制數(shù)的位數(shù)稱為波特率。設(shè)發(fā)送一位數(shù)據(jù)所需要的時間為T,則波特率為1/T。為保證數(shù)據(jù)的正確發(fā)送和接收,單片機間必須使用相同的波特率。串行口以方式0工作時,波特率固定為時鐘振蕩器頻率的1/12;以方式2工作時,波特率為時鐘振蕩器頻率的1/64或1/32(PCON中的SMOD位為1對應(yīng)1/32;PCON中的SMOD位為0對應(yīng)1/64)。方式1和3的波特率,由定時器1的溢出率所決定。當(dāng)定時器1作波特率發(fā)生器時,波特率由下式確定:波特率=2SMOD(T1溢出率)/n式中,T1溢出率,是定時器1在1秒鐘內(nèi)溢出的次數(shù)。n為32或16(若SMOD=0,則n=32;若SMOD=1,則n=16)。在串行通信的實際使用中,單片機的晶振頻率必須選用11.0592MHz,否則,在定時器1的初值計算時,將會出現(xiàn)晶振頻率不能被整除的問題,使波特率存在較大誤差,從而導(dǎo)致串行通信的質(zhì)量變差。9.3單片機多機通信9.3.1多機通信概述承前所述,串行口以方式2和方式3接收時,若SM2為1,則只有當(dāng)接收器接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才被裝入接收緩沖器,并將接收中斷標(biāo)志RI位置1,同時向CPU發(fā)出中斷申請;如果接收到的第9位數(shù)據(jù)為0,則不產(chǎn)生中斷標(biāo)志,接收到的數(shù)據(jù)也將被丟棄;而SM2為0時,當(dāng)接收到一個數(shù)據(jù)信息后,不管第9位數(shù)據(jù)是1還是0,都使接收中斷標(biāo)志位RI置1,并將接收到的數(shù)據(jù)裝入接收緩沖器。通過上述這種方式,就可以實現(xiàn)多個單片機之間的通信。如圖9-7所示,為一種簡單的主從式的多機通信系統(tǒng),主機控制它與各個從機之間的通信,而各個從機之間的通信也必須經(jīng)過主機才能實現(xiàn),可見,從機是被動的。圖9-7多機通信連接原理圖從機的初始化程序(或相關(guān)的處理程序)中,將從機的串行口設(shè)置在方式2或方式3下,用于接收數(shù)據(jù),且置SM2為1和允許串行口中斷。當(dāng)主機準(zhǔn)備發(fā)送一數(shù)據(jù)塊給從機時,主機首先送出一個地址字節(jié),用于辨認(rèn)目標(biāo)從機??捎冒l(fā)送數(shù)據(jù)的第9位來區(qū)別當(dāng)前發(fā)送的是地址字節(jié)信息還是數(shù)據(jù)字節(jié)信息:發(fā)出地址信息時第9位為1,發(fā)數(shù)據(jù)(包括命令)信息時第9位為0。主機發(fā)送的是地址信息,所以發(fā)送數(shù)據(jù)的第9位為1;而各從機接收到主機發(fā)送來的地址信息中,接收到的第9位信息(RB8)必定為1。由于此時所有從機的SM2都為1,所以,所有從機將其接收中斷標(biāo)志RI置1,并將接收到的地址信息存進(jìn)SBUF中。這時,讓每一臺從機都檢查一下,看自己的地址與接收到主機發(fā)送來的地址是否相符。若某一臺從機的地址與接收到的地址相符,則將該從機的SM2位清0;其它地址不相符的從機,則保持SM2=1的狀態(tài)不變。地址相符的從機,將SM2位清0的目的,是準(zhǔn)備接收主機即將發(fā)送來的數(shù)據(jù)(或命令)。在主機發(fā)送數(shù)據(jù)時,地址相符的從機由于SM2=0,則不論接收的第9位(RB8)是0還是1,它都將接收到的數(shù)據(jù)存入SBUF,并激活接收中斷標(biāo)志RI。相反,那些地址不相符的從機,由于SM2依舊保持為1,則當(dāng)主機發(fā)送數(shù)據(jù)時(主機發(fā)送的第9位數(shù)
據(jù)是0,0代表的是數(shù)據(jù),而1代表的是地址),這些從機接收到的第9位數(shù)據(jù)也是0,于是,這些從機將所接收到的數(shù)據(jù)丟失,同時并不激活接收中斷標(biāo)志位RI。這樣,就實現(xiàn)了主機僅對地址相符的那一臺從機傳輸數(shù)據(jù)信息的功能。9.3.2單片機多機通信實例功能說明:A、B、C三個單片機中,A為主機,B和C為從機。獨立按鍵K1是主機A外部中斷0的中斷源。當(dāng)K1被第一次按下時,數(shù)碼管1顯示數(shù)字1,數(shù)碼管2顯示字符“A”(“A”是主機A的編號);同時,連接到主機A上P1.0引腳的LED燈,點亮1秒鐘時間。當(dāng)K1被第二次按下時,數(shù)碼管1顯示數(shù)字2,數(shù)碼管2顯示字符“B”(“B”是從機B的編號,此值由從機B傳回到主機);同時,連接到從機B上的P1.0引腳的LED燈,點亮1秒鐘時間。當(dāng)K1被第三次按下時,數(shù)碼管1顯示數(shù)字3,數(shù)碼管2顯示字符“C”(“C”是從機C的編號,此值由機C傳回到主機);同時,連接到從機C上的P1.0引腳的LED燈,點亮1秒鐘時間。當(dāng)K1被第四次按下時,數(shù)碼管1顯示數(shù)字1,數(shù)碼管2顯示字符“A”(“A”是主機A的編號);同時,連接到主機A上P1.0引腳的LED燈,點亮1秒鐘時間……。上述過程循環(huán)進(jìn)行。硬件說明:1、硬件電路如圖9-8所示。主機A的P0口和P2口,分別連接共陰數(shù)碼管1和2,數(shù)碼管使用74HC573驅(qū)動;獨立按鍵K1連接到主機A的P3.2引腳(外部中斷0輸入引腳);主機A上P1口的P1.0引腳連接有一只發(fā)光二極管D3;從機B和從機C的P3.1引腳,都連接到主機A的P3.0引腳;從機B和從機C的P3.0引腳都連接到主機A的P3.1引腳。2、 從機B和從機C,除跟主機通過串行線連接外,其P1口分別連接一只發(fā)光二極管。P1.0VCCPl.lPO.OPl2P0.1Pl3P0.2PL4P03PL5P0_4P1.0VCCPl.lPO.OPl2P0.1Pl3P0.2PL4P03PL5P0_4Pl-6P0.5PL7P0_6RSTP0_7P3.0(RXD)EAP3.1(TXD)ALEP3.2(INT0)PSENP3.3(INT1)P2.7P3.4(T0)P2.6P3.5(T1)P2.5P3.6(Wt)P2.4P3.7(RD)P23XTAL2P2.2XTAL1P2.1VSSP2.0AT89C51從機cU3TXD10RXD11PLOVCCPl.lPO-OPl2PO-lPl3P0_2PL4P0-3PL5P0.4PL6P0.5Pl.7P0.6RSTP0.7P3.0(RXD)EAP3.1(TXD)ALEP3.2(INT0)PSENP3.3(INT1)P2.7P3.4(T0)P2_6P3.5(T1)P2.5P3.6(WR)P2.4P3.7(RD)P2.3XTAL2P2.2XTAL1P2.1VSSP2.0AT89C51ttfLA3938373635343332q31J30今29J2827262524232221Vcc40T34567S9TXD10RXD1112o13714C151617¥18。M 19201105921P1.0vccPl.lPO.OPl.2P0.1Pl.3P0.2Pl.4P0.3Pl.5P0.4Pl.6P0.5Pl.7P0.6RSTP0.7P3.0(RXD)EAP3.1(TXD)ALEP3.2(INT0)PSENP3.3QNT1)P2.7P3.4(T0)P2.6P3.5(T1)P2.5P3.6(WR)P2.4P3.7(RD)P2.3XTAL2P2.2XTAL1P2.1vssP2.03938373635343332-3130292827262524232221392383374365356347338329』31103027T26fa225eb324dc423cd522be621af7JT8dp9186174162151149131012511±VccVcc20~T1971861741621511491310125aacflb1g1dJ:comgdpdp圖9-8單片機多機通信硬件連接圖程序清單如下:〃多機通信主機A程序#include<reg52.h>
#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};ucharmode;sbitD3=P1A0;//************************************************************voidinit(){〃設(shè)定時器1〃設(shè)定時器1的工作方式為方式2〃設(shè)置串行口波特率為9600TH1=0xfd;TL1=0xfd;〃設(shè)置串行口的工作方式為方式3〃設(shè)置串行口的工作方式為方式3,允許接收〃開串行口中斷〃開外部中斷0//INT0下降沿觸發(fā)〃開總中斷允許位SCON=0xd0;ES=1;EX0=1;IT0=1;EA=1;TI=0;}//************************************************************voiddelay(uinti) //延時子函數(shù){uintj,k;for(k=0;k<i;k++)for(j=0;j<110;j++);}//************************************************************voidserial_procedure(ucharc) //本機串口發(fā)送程序{SBUF=c;while(TI==0);TI=0;}//************************************************************voidhost_control(ucharAdd,ucharCmd)//主機控制處理程序{//地址信息標(biāo)志//地址信息標(biāo)志serial_procedure(Add);delay(50);//數(shù)據(jù)信息標(biāo)志//數(shù)據(jù)信息標(biāo)志serial_procedure(Cmd);delay(50);}
//外中斷//外中斷0中斷處理程序voidINT_EX0(void)interrupt0{//模式數(shù)據(jù)送//模式數(shù)據(jù)送P0口顯示if(mode==0){P2=table[10];D3=0;delay(1000);D3=1;}elseif(mode==1){D3=1;host_control('A','O');}elseif(mode==2){D3=1;host_control('C','O');}mode=(mode+1)%3;}//************************************************************voidUART(void)interrupt4 〃串口數(shù)據(jù)接收中斷處理程序{if(RI){RI=0;if(SBUF=='B')P2=table[12];if(SBUF=='C')P2=table[13];}}//************************************************************main(void) //主程序{P0=0x00;P1=0xff;P2=0x00;init();mode=0;while(1);
〃多機通信從機B程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitD2=P1A0;ucharRecData;//************************************************************voidinit(){〃設(shè)定定時器1〃設(shè)定定時器1的工作方式為方式2〃設(shè)置串行口波特率為9600TH1=0xfd;TL1=0xfd;〃設(shè)置串行口的工作方式為方式3〃設(shè)置串行口的工作方式為方式3,允許接收〃開串行口中斷〃設(shè)置串口中斷為高優(yōu)先級〃開總中斷允許位SCON=0xf0;ES=1;PS=1;EA=1;}//************************************************************voiddelay(uinti) //延時子函數(shù){uintj,k;for(k=0;k<i;k++)for(j=0;j<110;j++);}//************************************************************voidserial_procedure(ucharc) //本機串口發(fā)送程序{SBUF=c;while(TI==0);TI=0;}〃串口數(shù)據(jù)接收中斷處理程序//************************************************************〃串口數(shù)據(jù)接收中斷處理程序voidUART(void)interrupt4{if(RI){RecData=SBUF;//地址//地址if(RB8==1){//接收地址與自己地址相符//接收地址與自己地址相符,置SM2=0,準(zhǔn)備接受數(shù)據(jù){
SM2=0;serial_procedure('B');//接收地址與自己地址不相符〃丟棄數(shù)據(jù)//接收地址與自己地址不相符〃丟棄數(shù)據(jù)//數(shù)據(jù)接收SM2=1;if(RB8==0)if(RecData=='O')D2=0;delay(500);D2=1;if(RecData=='C')D2=1;SM2=1;}}}//************************************************************main(){P0=0xff;P1=0xff;init();while(1);}〃多機通信從機C程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitD1=P1A0;ucharRecData;//************************************************************voidinit(){〃設(shè)定定時器1〃設(shè)定定時器1的工作方式為方式2〃設(shè)置串行口波特率為9600TH1=0xfd;TL1=0xfd;TR1=1;〃設(shè)置串行口的工作方式為方式3〃設(shè)置串行口的工作方式為方式3,允許接收〃開串行口中斷〃設(shè)置串口中斷為高優(yōu)先級ES=1;PS=1;
〃開總中斷允許位EA=1;〃開總中斷允許位}//************************************************************voiddelay(uinti) //延時子函數(shù){uintj,k;for(k=0;k<i;k++)for(j=0;j<110;j++);}//************************************************************voidserial_procedure(ucharc) //本機串口發(fā)送程序{SBUF=c;while(TI==0);TI=0;}〃串口數(shù)據(jù)接收中斷處理程序//************************************************************〃串口數(shù)據(jù)接收中斷處理程序voidUART(void)interrupt4{if(RI){RecData=SBUF;//地址//地址//接收地址與自己地址相符//接收地址與自己地址相符,置SM2=0,準(zhǔn)備接收數(shù)據(jù)SM2=0;serial_procedure('B');//接收地址與自己地址不相符//接收地址與自己地址不相符〃丟棄數(shù)據(jù)//數(shù)據(jù)接收//數(shù)據(jù)接收if(RB8==0){if(RecData=='O'){D1=0;delay(500);D1=1;}if(RecData=='C')D1=1;SM2=1;//************************************************************main() //主程序P0=0xff;P1=0xff;init();while(1);9.4單片機與PC機間通信9.4.1RS-232C串行通信總線標(biāo)準(zhǔn)及其接口單片機和PC機間的通信,是單片機應(yīng)用系統(tǒng)中非常重要的一種數(shù)據(jù)交換方式。PC機上的COM1和COM2是PC機和單片機連接的主要接口,它們采用的是RS-232C接口標(biāo)準(zhǔn)。此處有必要介紹一下RS-232C標(biāo)準(zhǔn)(協(xié)議)°RS-232C標(biāo)準(zhǔn)(協(xié)議)的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中EIA(ElectronicIndustryAssociation)代表美國電子工業(yè)協(xié)會,RS(RecommededStandard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識號,C代表RS232的最新一次修改。常用標(biāo)準(zhǔn)還有RS-232-C、RS-422-A、RS-423A、RS-485等。這里只介紹RS-232-C標(biāo)準(zhǔn)(簡稱RS232)。1、 電氣特性EIA-RS-232C對電器特性、邏輯電平和各種信號線的功能都作了詳細(xì)的規(guī)定。在TxD和RxD上:邏輯1(MARK)=-3V?-15V邏輯0(SPACE)=+3?+15V在RTS、CTS、DSR、DTR和DCD等控制線上:信號有效(接通,ON狀態(tài),正電壓)=+3V?+15V信號無效(斷開,OFF狀態(tài),負(fù)電壓)=-3V?-15V2、 連接器的機械特性:連接器:由于RS-232C并未定義連接器的物理特性,因此,出現(xiàn)了)B-25、DB-15和DB-9等多種類型的連接器。目前,較為常用的串口是9針串口(DB-9),下面重點介紹DB-9連接器。常見的9針串口及其電路符號如圖9-9所示,其中(a)圖稱為公頭,一般作為主板上COM1和COM2兩個串行接口的連接器;(b)圖為母頭,用作連接線的接頭。在實際使用中應(yīng)注意區(qū)別。公頭和母頭的針腳順序完全相同,電路符號也相同,如圖9-9(c)所示。DB-9的9根引腳功能及含義如表9-6所示。(a) (b) (c)圖9-9DB-9串口接頭表9-69針串口DB9信號引腳說明針號縮寫功能說明1DCD數(shù)據(jù)載波檢測2RXD接收數(shù)據(jù)3TXD發(fā)送數(shù)據(jù)4DTR數(shù)據(jù)終端準(zhǔn)備5GND信號地6DSR數(shù)據(jù)設(shè)備準(zhǔn)備好7RTS請求發(fā)送8CTS清除發(fā)送9DELL振鈴指示接線方式通信距離較近時(小于12米),可以用電纜線直接連接標(biāo)準(zhǔn)RS232端口;若通信距離較遠(yuǎn),則需附加調(diào)制解調(diào)器(MODEM)。最簡單、最常用的接線方式是三線制接法,即通信雙方的接收數(shù)據(jù)線(RXD)、發(fā)送數(shù)據(jù)線(TXD)和信號地線(GND)三根線連接即可,注意,雙方的信號地線直接連接,而接受數(shù)據(jù)線和發(fā)送數(shù)據(jù)線則是交錯連接的,如圖9-10所示。圖9-10串口三線通信示意圖4、串口調(diào)試中的注意事項(1) 連接纜線長度,在通信速率低于20kb/s時,RS-232C能連接的最大物理距離為15米;(2) 不同編碼機制不能混接,如RS232C不能直接與RS422接口相連,必須通過轉(zhuǎn)換器才能連接;(3) 串口調(diào)試時使用專門調(diào)試工具,如串口調(diào)試助手、串口精靈、超級終端等,可以收到事半功倍的效果;(4) 不要帶電插撥串口,否則可能導(dǎo)致串口損壞。如上所述,RS-232通信的典型工作電平為+3?+12V與-3?-12V,而單片機常用的是TTL電平,二者是不能夠直接進(jìn)行連接的,否則會燒壞單片機。因此,要實現(xiàn)單片機和計算機之間的RS-232通信,就必須選用相應(yīng)的接口轉(zhuǎn)換芯片。MAX232是由美國Maxim公司推出的一款兼容RS232標(biāo)準(zhǔn)的芯片。通過該芯片,可以在RS232工作電平與單片機TTL/CMOS電平之間架起一座橋梁,方便二者的連接和通信。MAX232實物如圖9-11所示,DIP封裝引腳圖如圖9-12所示。該器件內(nèi)部包含2個驅(qū)動器、2個接收器和一個電壓發(fā)生器,其內(nèi)部結(jié)構(gòu)如圖9-13所示。MAX232的典型接法如圖9-14所示。
+5VINPUTC3 n16+10V圖9-11MAX232芯片實物ci+|T云]Vccv+|T宜GNDci-[T/l/l/IXI/klHoutC2+4MAX22013+5VINPUTC3 n16+10V圖9-11MAX232芯片實物ci+|T云]Vccv+|T宜GNDci-[T/l/l/IXI/klHoutC2+4MAX22013R1inMAX232C2-|TMAX232A訶R1outv-[T111TIinT20UT|T1p|T2inR2|n醫(yī)j]R2quTTTL/CMOSNPUTSTTL/CMOSOUTPUTS圖9-13MAX232內(nèi)部結(jié)構(gòu)圖+5VT0+10VC1-VOLTAGEDOUBLERC2+ +10VTO-10VC2-VOLTAG!INVERTER6-10V蕓4RS-232INPUTS圖9-12MAX232DIP封裝引腳圖MAX232C8-——vcc104MA+A§R2]NT1INT2INC1+Cl-104TJTJT1T1±1-uu)l]-川2ooooc2112112RRTT104TJTJT1T1±1-uu)l]-川2ooooc2112112RRTT9.4.2單片機向PC機發(fā)送數(shù)據(jù)實例功能說明:單片機通過串口向PC機發(fā)送數(shù)據(jù)。上位機PC通過串口調(diào)試軟件,顯示接收到的數(shù)據(jù)“Thisisatestprogram!”。硬件說明:硬件連接如圖9-15所示。單片機連接芯片MAX232,經(jīng)DB9連線接至PC機的COM口。11.0592P1.0vccPl.lPO.O11.0592P1.0vccPl.lPO.OPl.2P0.1Pl.3P0.2Pl.4P0.3Pl.5P0.4Pl.6P0.5Pl.7P0.6RSTP0.7P3.0(RXD)TJP3.1(HDjMEP3.3(WJP3.30NTT]尚ENP2.7P3.4(T0)P2.6P3.5(T1)P2.5P3,6WP2.4P3.7(1W)P2.3瀏L?P2.2XTAL1P2.1vssP2.0393837363534333231u30r29u282?262524232221一一一Jnn:=>nIzGX7I2IJ=—JCC圖9-15單片機向PC機傳送數(shù)據(jù)硬件連接圖軟件說明:PC機串口調(diào)試助手接收到單片機發(fā)送來的數(shù)據(jù),顯示結(jié)果如圖9-16所示。圖9-16圖9-16串口調(diào)試助手接收到單片機發(fā)送來的數(shù)據(jù)程序清單如下:〃單片機串口向PC發(fā)送數(shù)據(jù)程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintbitflag=0; 〃發(fā)送標(biāo)志位ucharcodetext[]="Thisisatestprogram!\r\n\n";//************************************************************voidserial_procedure(ucharc){〃發(fā)送數(shù)據(jù)〃設(shè)置發(fā)送標(biāo)志位〃發(fā)送數(shù)據(jù)〃設(shè)置發(fā)送標(biāo)志位flag=1;while(flag);}//************************************************************voidsend(uchar*c){while((*c)!='\0'){serial_procedure(*c);//發(fā)送一位數(shù)據(jù)c++; //指針指向下一位數(shù)據(jù)}}//************************************************************main(){TMOD=0x20;TL1=0xFD;TH1=0xFD;SCON=0x50;PCON=0x00;TR1=1;ET0=1;ES=1;EA=1;while(1){send(text);}}//************************************************************voidUART(void){TI=0;flag=0;}//判斷數(shù)據(jù)是否發(fā)送完畢〃設(shè)置波特率為9600和定時器1工作方式//設(shè)置初始值〃設(shè)置串行口工作方式1,允許接收〃啟動定時器〃開串行中斷〃開總中斷〃發(fā)送數(shù)據(jù)serial_procedureinterrupt4〃發(fā)送完一個數(shù)據(jù)//清標(biāo)志位9.4.3PC機向單片機發(fā)送數(shù)據(jù)實
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度攪拌車環(huán)保排放達(dá)標(biāo)檢測合同
- 農(nóng)村墓地合同范本
- 兄弟借款合同范例
- 商鋪租賃轉(zhuǎn)讓合同范本
- 中介墊資合同范例
- 不簽訂招標(biāo)合同范例
- 砂、碎石供貨合同范本
- 農(nóng)場出售轎車合同范本
- 油料運輸設(shè)備租賃合同
- 蘋果果園承包合同范本
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識題庫及答案(共330題) (二)
- 2025-2030年中國反滲透膜行業(yè)市場發(fā)展趨勢展望與投資策略分析報告
- 湖北省十堰市城區(qū)2024-2025學(xué)年九年級上學(xué)期期末質(zhì)量檢測道德與法治試題 (含答案)
- 2025年山東省濟寧高新區(qū)管委會“優(yōu)才”招聘20人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年中國社會科學(xué)評價研究院第一批專業(yè)技術(shù)人員招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- (2024年高考真題)2024年普通高等學(xué)校招生全國統(tǒng)一考試數(shù)學(xué)試卷-新課標(biāo)Ⅰ卷(含部分解析)
- HCIA-AI H13-311 v3.5認(rèn)證考試題庫(含答案)
- 市場調(diào)查 第三版 課件全套 夏學(xué)文 單元1-8 市場調(diào)查認(rèn)知 - 市場調(diào)查報告的撰寫與評估
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 春季高考英語《大綱短語》(218個核心詞匯相關(guān)短語)
- 護(hù)理文書書寫規(guī)范ppt課件
評論
0/150
提交評論