單片機的串行口及其應用課件_第1頁
單片機的串行口及其應用課件_第2頁
單片機的串行口及其應用課件_第3頁
單片機的串行口及其應用課件_第4頁
單片機的串行口及其應用課件_第5頁
已閱讀5頁,還剩147頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2022/11/261項目6單片機的串行口及其應用串行口的結構串行口控制寄存器單片機串行口的設計方法本章主要內容:2022/11/261項目6單片機的串行口及其應用串行口的本章目錄6.1任務1認識串行通信與串行口6.2任務2單片機的雙機通信6.3任務3單片機與PC串行通信6.4任務4遠程控制交通燈的設計

本章目錄6.1任務1認識串行通信與串行口2022/11/2636.1任務1認識串行通信與串行口

6.1.1串行通信的概念通信的基本方式分為并行通信和串行通信兩種。2022/11/2636.1任務1認識串行通信與串行口并行通信是構成數(shù)據(jù)信息的各位同時進行傳送的通信方式。例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。優(yōu)點是傳輸速度快。缺點是需要多條傳輸線,當距離較遠、位數(shù)又多時,導致通信線路復雜且成本高。并行通信是構成數(shù)據(jù)信息的各位同時進行傳送的通信方式。例如8位串行通信是數(shù)據(jù)一位接一位地順序傳送。特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)通信(如電話線),從而大大地降低了成本,特別適用于遠距離通信。缺點是傳送速度慢。串行通信是數(shù)據(jù)一位接一位地順序傳送。串行通信可分為異步傳送和同步傳送兩種基本方式。1.串行通信的分類(1)異步通信異步傳送的特點是數(shù)據(jù)在線路上的傳送不連續(xù),在傳送時,數(shù)據(jù)是以字符為單位組成字符幀進行傳送的。在異步通信中,接收端是依靠字符幀(CharacterFrame)格式來判斷發(fā)送端是何時開始發(fā)送,何時結束發(fā)送的。字符幀格式是異步通信的一個重要指標,是CPU與外設之間事先的約定。字符幀也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗位和停止位4個部分組成。串行通信可分為異步傳送和同步傳送兩種基本方式。1.串行通圖6-2串行異步傳送的字符格幀式在串行通信中,兩相鄰字符幀之間,可以沒有空閑位,也可以有若干空閑位,這由用戶來決定。圖6-2(a)為無空閑位的字符幀,圖6-2(b)表示有3個空閑位的字符幀格式。

圖6-2串行異步傳送的字符格幀式在串行通信中,兩相鄰字符幀之(2)同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,1次通信只傳輸一幀信息,即1次傳送1組數(shù)據(jù)。這里的信息幀和異步通信的字符幀不同,通常有若干個數(shù)據(jù)字符,如圖6-3所示。圖6-3(a)為單同步字符幀結構,圖6-3(b)為雙同步字符幀結構圖6-3同步通信的字符幀格式(2)同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,12.串行通信的制式在串行通信中數(shù)據(jù)是在兩個站之間進行傳送的,按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種制式。

(1)單工制式:在這種制式下,通信線的一端接發(fā)送器,另一端接接收器,數(shù)據(jù)只能按照一個固定的方向傳送。(2)半雙工制式:數(shù)據(jù)可實現(xiàn)雙向傳送,但不能同時進行。(3)全雙工制式:全雙工通信系統(tǒng)的每端都有發(fā)送器和接收器,可以同時發(fā)送和接收。2.串行通信的制式在串行通信中數(shù)據(jù)是在兩個站之間進行傳送3.串行通信的接口電路串行接口電路的種類和型號很多。能夠完成異步通信的硬件電路稱為UART,即通用異步接收器/發(fā)送器;能夠完成同步通信的硬件電路稱為USRT;既能夠完成異步又能同步通信的硬件電路稱為USART.從本質上說,所有的串行接口電路都是以并行數(shù)據(jù)形式與CPU接口,以串行數(shù)據(jù)形式與外部邏輯接口。它們的基本功能都是從外部邏輯接收串行數(shù)據(jù),轉換成并行數(shù)據(jù)后傳送給CPU,或從CPU接收并行數(shù)據(jù),轉換成串行數(shù)據(jù)后輸出到外部邏輯。3.串行通信的接口電路串行接口電路的種類和型號很多。6.1.2串行通信的接口異步串行通信接口標準主要有三類:RS-232C接口RS-449、RS-422和RS-485接口20mA電流環(huán)1.RS-232C接口

(1)RS-232C信息格式標準6.1.2串行通信的接口異步串行通信接口標準主要有三類:1(2)RS-232C總線規(guī)定及其電平轉換器RS-232C采用的是負邏輯,即:

邏輯“0”:+5V~+15V邏輯“1”:-5V~-15V因此,RS-232C不能和TTL電平直接相連,使用時必須進行電平轉換。常用的電平轉換集成電路是傳輸線驅動器MC1488和傳輸線接收器MC1489。圖6-6接收器和發(fā)送器電平轉換集成電路(2)RS-232C總線規(guī)定及其電平轉換器RS-232C采用(3)RS-232C總線規(guī)定RS-232C標準總線為25根,采用標準的DB-25或DB-9的D形插頭座。目前計算機上只保留有兩個DB-9插頭,即COM1和COM2兩個串行接口。圖6-8RS-232C引腳圖(3)RS-232C總線規(guī)定RS-232C標準總線為25根,表6-1DB-9連接器各引腳各引腳定義引腳名稱功能引腳名稱功能1DCD載波檢測6DSR數(shù)據(jù)準備完成2RXD發(fā)送數(shù)據(jù)7RTS發(fā)送請求3TXD接收數(shù)據(jù)8CTS發(fā)送清除4DTR數(shù)據(jù)終端準備完成9RI振鈴指示5SG(GND)信號地線在最簡單的全雙工系統(tǒng)中,僅用發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和信號地三根線即可,對于MCS-51單片機,利用其RXD(串行數(shù)據(jù)接收端)線、TXD(串行數(shù)據(jù)發(fā)送端)線和一根地線,就可以構成符合RS-232C接口標準的全雙工通信口。表6-1DB-9連接器各引腳各引腳定義引腳名稱功在遠距離通信時,一般要加MODEM(調制解調器),當計算機與MODEM連接時,只要將編號相同的引腳連接起來即可。圖6-9RS-232-C(DB9)與調制解調器的連接圖在遠距離通信時,一般要加MODEM(調制解調器),當計算機與在距離較近(小于15m)的情況下進行通信時,不需要使用MODEM,兩個計算機的RS-232-C接口可以直接互連。圖6-10兩個RS-232C(DB9)終端設備的連接圖在距離較近(小于15m)的情況下進行通信時,不需要使用MOD2.RS-449、RS-422A、RS-485標準接口RS-449標準除了與RS-232C兼容外,在提高傳輸速率,增加傳輸距離,改善電氣性能等方面有了很大改進。

(1)RS-449標準接口RS-449在很多方面可以代替RS-232C使用。RS-449與RS-232C的主要差別在于信號在導線上的傳輸方法不同:RS-232C是利用傳輸信號與公共地的電壓差,RS-449是利用信號導線之間的信號電壓差,在1219.2m的24-AWG雙鉸線上進行數(shù)字通信。RS-449規(guī)定了兩種接口標準連接器,一種為37腳,一種為9腳。RS-449可以不使用調制解調器,它比RS-232C傳輸速率高,通信距離長,且由于RS-449系統(tǒng)用平衡信號差傳輸高速信號,所以噪聲低,又可以多點或者使用公共線通信,故RS-449通信電纜可與多個設備并聯(lián)。2.RS-449、RS-422A、RS-485標準接口R(2)RS-422A接口RS-422A輸出驅動器為雙端平衡驅動器,如圖6-11所示。如果其中一條線為邏輯“1”狀態(tài),另一條線就為邏輯“0”,比采用單端不平衡驅動對電壓的放大倍數(shù)大一倍。RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。圖6-11RS-422A接口(2)RS-422A接口RS-422A輸出驅動器為雙端平衡(2)RS-485接口RS-485的信號傳輸采用兩線間的電壓來表示邏輯1和邏輯0,如圖6-12所示。由于發(fā)送方需要兩根傳輸線,接收方也需要兩根傳輸線。傳輸線采用差動信道,所以它的干擾抑制性極好,又因為它的阻抗低,無接地問題,所以傳輸距離可達1200米,傳輸速率可達1Mbps。圖6-12RS-485接口

(2)RS-485接口RS-485的信號傳輸采用兩線間的電6.1.3單片機串行口的結構與控制寄存器MCS-5l單片機的串行口主要由兩個獨立的數(shù)據(jù)緩沖器SBUF、一個輸入移位寄存器PCON(9位)、一個串行控制寄存器SCON和一個波特率發(fā)生器T1等組成。其結構見圖6-13。

圖6-13串行口結構框圖6.1.3單片機串行口的結構與控制寄存器MCS-5l單片1.串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立的接收、發(fā)送寄存器,是可以直接尋址的專用寄存器。一個用于存放接收到的數(shù)據(jù),另一個用于存放欲發(fā)送的數(shù)據(jù),可同時發(fā)送和接收數(shù)據(jù)。兩個緩沖器共用一個地址99H,通過對SBUF的讀、寫指令來區(qū)別是對接收緩沖器還是發(fā)送緩沖器進行操作。CPU在寫SBUF時,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器的內容。接收或發(fā)送數(shù)據(jù),是通過串行口對外的兩條獨立收發(fā)信號線RXD(P3.0)、TXD(P3.1)來實現(xiàn)的,因此可以同時發(fā)送、接收數(shù)據(jù),其工作方式為全雙工制式。串口的接收/發(fā)送端具有緩沖的功能,由SBUF特殊功能寄存器實現(xiàn)該功能。接收緩沖器是雙緩沖的,發(fā)送緩沖器為單緩沖。1.串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立2.串行口控制寄存器SCON該專用寄存器的主要功能是選擇串行口的工作方式、接收和發(fā)送控制以及串行口的狀態(tài)標志指示等,可以位尋址,字節(jié)地址為98H。收發(fā)雙方都有對SCON的編程,單片機復位時,SCON的所有位全為0。SCON的各位含義如圖6-14所示。2.串行口控制寄存器SCON該專用寄存器的主要功能是選擇串(1)SM0、SM1(SCON.7、SCON.6)

串行口的工作方式選擇位。其定義如表6-2所示。SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/120l方式l10位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變表6-2串行方式的定義(1)SM0、SM1(SCON.7、SCON.6)串行口的(2)SM2多機通信控制位,用于方式2和方式3中。在方式2和方式3處于接收時,若SM2=1,且接收到的第9位數(shù)據(jù)RB8為0時,則不激活RI;若SM2=1,且RB8=1時,則置RI=1;若SM2=0,不論接收到第9位RB8為0還是為1,TI、RI都以正常方式被激活。在方式1處于接收時,若SM2=1,則只有當收到有效的停止位后,RI才置1。在方式0中,SM2應為0。(3)REN允許串行接收控制位。由軟件置位或清零。REN=1時,允許接收;REN=0時,禁止接收。(4)TB8發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,由軟件置位或復位,一般用做奇偶校驗位。在多機通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標識位,一般約定地址幀時TB8為1,數(shù)據(jù)幀時TB8為0。(2)SM2(5)RB8接收數(shù)據(jù)的第9位。功能同TB8。(6)TI發(fā)送中斷標志位。在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在發(fā)送停止位之初由硬件置位。因此TI是發(fā)送完一幀數(shù)據(jù)的標志,可以用指令來查詢是否發(fā)送結束。TI=1時,也可向CPU申請中斷,響應中斷后必須由軟件清除TI。(7)RI接收中斷標志位。在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在接收停止位時由硬件置位。因此RI是接收完一幀數(shù)據(jù)的標志,也可以通過指令來查詢是否接收完一幀數(shù)據(jù)。RI=1時,也可向CPU申請中斷,響應中斷后也必須由軟件清除RI。(5)RB83.電源和波特率控制寄存器PCONPCON是一個特殊功能寄存器,其字節(jié)地址為87H,只能進行字節(jié)尋址,不能按位尋址。其格式如下圖6-15所示。PCON的最高位D7位作為SMOD,是串行口波特率的選擇位。在工作方式1、2、3時,串行通信的波特率與SMOD有關。當SMOD=1時,波特率加倍,當SMOD=0時,波特率不變。系統(tǒng)復位后,SMOD位為0。其他各位用于電源管理。3.電源和波特率控制寄存器PCONPCON是一個特殊功能6.1.4單片機串行口的工作方式MCS-51的串行口有4種工作方式,通過SCON中的SM1、SM0位來決定。1.方式0在方式0下,串行口作同步移位寄存器用,以8位數(shù)據(jù)為一幀。無起始位和停止位。其波特率固定為fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴展I/O口,外接移位寄存器實現(xiàn)數(shù)據(jù)并行輸入或輸出。6.1.4單片機串行口的工作方式MCS-51的串行口有4種2.方式1當SM0=0、SM1=1時,串行口被定義為方式1。在方式1下,串行口為波特率可調的10位通用異步接口UART,發(fā)送或接收的一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。圖6-18方式1下10位數(shù)據(jù)幀格式2.方式1當SM0=0、SM1=1時,串行口被定義為方式1。3.方式2當SM0=1、SM1=0時,串行口被定義為方式2。方式2下,串行口為11位通用異步接口UART,這種方式可接收或發(fā)送11位數(shù)據(jù),傳送波特率與PCON的最高位SMOD有關。發(fā)送或接收的一幀數(shù)據(jù)包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(D8)和1位停止位1,共11位。第9個數(shù)據(jù)位即D8位可以通過軟件來控制它。圖6-19方式2下11位數(shù)據(jù)幀格式3.方式2當SM0=1、SM1=0時,串行口被定義為方式4.方式3方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。串行口工作于方式2和方式3時,與方式1不同之處是,進入RB8的是第9位數(shù)據(jù),而不是停止位。接收到的停止位的值與SBUF、RB8或RI是無關的。這一個特點可用于多機通信。注意:4.方式3方式3為波特率可變的11位UART通信方式,除了波6.1.5串行口的波特率串行口通過編程可以有4種工作方式,其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可變,由定時器1的溢出率決定。1.方式0和方式2在方式0中,波特率為時鐘頻率的1/12,即,固定不變。在方式2中,波特率取決于PCON中的SMOD值,當SMOD=0時,波特率為;當SMOD=1時,波特率為,即波特率6.1.5串行口的波特率串行口通過編程可以有4種工作方式2.方式1和方式3在方式1和方式3下,波特率由定時器T1的溢出率和SMOD共同決定。即:波特率2.方式1和方式3在方式1和方式3下,波特率由定時器T1的表6-3定時器T1產生的常用波特率波特率(b/s)SMOD定時器T1方式初始值方式0:1M12××××方式2:375K121×××方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH表6-3定時器T1產生的常用波特率波特率(b/s)SM6.2任務2單片機的雙機通信采用兩臺AT89C51單片機甲和乙進行雙機串行通信設計。單片機甲的按鍵K1產生控制碼,通過串行口TXD端將控制碼以方式1的方式發(fā)送至單片機乙的RXD端,乙機再利用該控制碼分別實現(xiàn)LED1閃爍、LED2閃爍、LED1和LED2同時閃爍、關閉所有LED功能。通過本任務的學習,使讀者掌握MCS-51系列單片機串行通信的基本原理及控制方法、波特率設計等串行口應用知識。6.2任務2單片機的雙機通信采用兩臺AT89C51單6.2.1硬件電路與軟件程序設計1.硬件電路設計根據(jù)單片機雙機通信距離、抗干擾性等要求,可以選擇直接TTL電平傳輸、RS-232-C、RS-422A等串行接口方法。本設計采用標準RS-232接口芯片MAX232進行通信,硬件電路如圖6-20所示。6.2.1硬件電路與軟件程序設計1.硬件電路設計根據(jù)圖6-20單片機串行口雙機通信硬件電路圖6-20單片機串行口雙機通信硬件電路2.程序設計程序設計時,首先需要進行串口初始化,主要任務是設置定時器1,串口控制和中斷控制等。本任務中,兩片單片機的串口均工作在方式1下,所以甲機程序中設置SCON=0X40,乙機程序中設SCON=0X50,兩者都設為方式1,但乙機還將REN位設為1以允許接收。需要說明的是,本例甲機不接收數(shù)據(jù),因此兩機的SCON都設成0X50也不影響運行結果;程序中設TH1=TL1=0XFD(即253),PCON=0X00(PCON的最高位SMOD=0,波特率不倍增);本例中兩單片機均使用查詢方式,甲機通過循環(huán)查詢TI標志判斷是否發(fā)送完畢,乙機通過查詢RI判斷是否接收到數(shù)據(jù)。每一次收發(fā)前都需要通過程序將TI和RI清零。2.程序設計程序設計時,首先需要進行串口初始化,主要任務甲機程序代碼:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;sbitK1=P1^0;//延時voidDelayMS(uintms){uchari;while(ms--)for(i=0;<120;i++);}//向串口發(fā)送字符voidPutc_to_SerialPort(ucharc){SBUF=c;while(TI==0);TI=0;}甲機程序代碼:#include<reg51.h>//主程序voidmain(){ucharOperation_No=0;SCON=0x40;//串口模式1TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;TL1=0xfd;TI=0;TR1=1;//啟動T1while(1){if(K1==0)//按下K1時選擇操作代碼0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;}//主程序switch(Operation_No)//根據(jù)操作代碼發(fā)送A/B/C或停止發(fā)送{case0:LED1=LED2=1; break;case1:Putc_to_SerialPort('A'); LED1=~LED1;LED2=1;

break;case2:Putc_to_SerialPort('B'); LED2=~LED2;LED1=1;

break;case3:Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break;}DelayMS(100);}}switch(Operation_No)//根乙機程序代碼:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;//延時voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}乙機程序代碼:#include<reg51.h>//主程序voidmain(){SCON=0x50;//串口模式1,允許接收TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;//波特率9600TL1=0xfd;RI=0;TR1=1;LED1=LED2=1;while(1){if(RI)//如收到則LED閃爍{ RI=0;//主程序switch(SBUF)//根據(jù)所收到的不同命令字符完成不同動作{case'A':LED1=~LED1;LED2=1; //LED1閃爍 break;case'B':LED2=~LED2;LED1=1;//LED2閃爍 break;case'C':LED1=~LED1;LED2=LED1;//雙閃爍}}elseLED1=LED2=1;//關閉LEDDelayMS(100);}}switch(SBUF)//根據(jù)所收到的不同命令字符完成不6.2.2調試與仿真運行圖6-21單片機串行口雙機通信仿真圖6.2.2調試與仿真運行圖6-21單片機串行口雙機通信6.3任務3單片機與PC串行通信6.3.1任務與計劃(1)單片機接收PC機發(fā)來的數(shù)字串,并逐個顯示在數(shù)碼管上,為了顯示接收到的數(shù)據(jù),在單片機的P0口連接數(shù)碼管。(2)當按下單片機系統(tǒng)的按鍵時,會有一串中文字符由單片機串口發(fā)送給PC機,并顯示在接收窗口。6.3任務3單片機與PC串行通信6.3.1任務與6.3.2硬件電路與軟件程序設計1.硬件電路設計圖6-22單片機與PC之間串行通信硬件電路6.3.2硬件電路與軟件程序設計1.硬件電路設計圖6-22.程序設計(1)PC機控制程序PC主機的通信程序可以采用TurboC、VC、VB、Delphi等高級語言編寫,也可以直接借助于現(xiàn)有的“串口調試助手”應用軟件完成,用戶要由PC機向單片機發(fā)送數(shù)據(jù),只要把波特率參數(shù)設置好就行了,無須自己編程。(2)單片機串口通信程序使用Keil軟件建立“receive”工程項目,建立源程序文件“receive.c”,輸入如下源程序:2.程序設計(1)PC機控制程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharReceive_Buffer[101];//接收緩沖ucharBuf_Index=0;//緩存空間//數(shù)碼管編碼ucharcodeDsy_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//延時voidDelay(uintx){

uchari;

while(--x)for(i=0;i<120;i++);}#include<reg51.h>voidmain()//主函數(shù){ uchari; P0=0x00; Receive_Buffer[0]=-1; SCON=0x50;//串口模式1,允許接收

TMOD=0x20;//T1方式2 PCON=0x00; TH1=TL1=0xFD;//波特率=9600EA=1;EX0=1;IT0=1;//允許外部中斷0,下降沿觸發(fā)

ES=1;//允許串口中斷

IP=0x01;//外部中斷0為高優(yōu)先級

TR1=1;//啟動定時器

while(1) {

for(i=0;i<100;i++) {

if(Receive_Buffer[i]==-1)break;//有-1結束顯示

P0=Dsy_code[Receive_Buffer[i]]; Delay(200); } Delay(200); }}voidmain()//主函數(shù)//接收中斷函數(shù)

voidSerial_INT()interrupt4{ ucharc;

if(RI==0)return; ES=0;//關閉串口中斷

RI=0;//清除接收標志位

c=SBUF;//讀字符

if(c>=‘0’&&c<=’9’) {

//接收每個字符后存放-1為結束標志

Receive_Buffer[Buf_Index]=c–‘0’; Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)%100; } ES=1;//允許串口中斷}//接收中斷函數(shù)//外部中斷0

voidEX_INT0()interrupt0{ uchar*s=“單片機發(fā)送的字符串!\r\n”; uchari=0;

while(s[i]!=‘\0’) { SBUF=s[i];

while(TI==0); TI=0; i++; }}//外部中斷06.3.3調試與仿真運行圖6-23單片機與PC通信仿真圖6.3.3調試與仿真運行圖6-23單片機與PC通信仿真圖6-24串口調試助手圖6-24串口調試助手6.4任務4遠程控制交通燈的設計6.4.1任務要求設計并實現(xiàn)單片機交通燈控制系統(tǒng),實現(xiàn)以下三種情況下的交通燈控制。(1)正常情況下雙方向輪流點亮,交通燈的狀態(tài)如表6-4所示。(2)特殊情況時A道運行。(3)有緊急車輛通行時,AB道均為紅燈。緊急情況優(yōu)先級高于特殊情況。6.4任務4遠程控制交通燈的設計6.4.1任務表6-4交通燈顯示狀態(tài)東西方向(簡稱A方向)南北方向(簡稱B方向)狀態(tài)說明紅燈黃燈綠燈紅燈黃燈綠燈滅滅亮亮滅滅A方向通行,B方向禁行滅滅閃爍亮滅滅A方向警告,B方向禁行滅亮滅亮滅滅A方向警告,B方向禁行亮滅滅滅滅亮A方向禁行,B方向通行亮滅滅滅滅閃爍A方向禁行,B方向警告亮滅滅滅亮滅A方向禁行,B方向警告表6-4交通燈顯示狀態(tài)東西方向(簡稱A方向)南北方向(簡稱本任務實現(xiàn)用PC作為控制主機、單片機控制信號燈為從機的遠程控制系統(tǒng)。主、從機雙方除了要有統(tǒng)一的數(shù)據(jù)格式、波特率外,還要約定一些握手應答信號,即通信協(xié)議,如表6-5所示。表6-5交通燈控制系統(tǒng)PC與單片機通信協(xié)議主機(PC)從機(單片機)發(fā)送命令接收應答信息接收命令回發(fā)應答信息01H01H01H01H命令含義:緊急情況,要求所有方向均為紅燈,直到解除命令02H02H02H02H命令含義:解除命令,恢復正常交通指示燈狀態(tài)本任務實現(xiàn)用PC作為控制主機、單片機控制信號燈為從機的遠程控6.4.2電路及元器件表6-6交通燈控制端口線分配及控制狀態(tài)

P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P1端口數(shù)據(jù)狀態(tài)說明無關無關A紅燈A黃燈A綠燈B紅燈B黃燈B綠燈000011000CH狀態(tài)1:A通行,B禁行00000、1交替10004H或0CH狀態(tài)2:A綠燈閃,B禁行0001010014H狀態(tài)3:A警告,B禁行0010000121H狀態(tài)4:A禁行,B通行00100000、1交替20H或21H狀態(tài)5:A禁行,B綠燈閃0010001022H狀態(tài)6:A禁行,B警告6.4.2電路及元器件表6-6交通燈控制端口線分配及控制單片機的串行口及其應用課件表6-7交通燈控制電路元器件清單表6-7交通燈控制電路元器件清單6.4.3程序設計1.程序設計流程圖①①②②圖6-27正常情況程序流程

6.4.3程序設計1.程序設計流程圖①①②②圖6-27圖6-28中斷情況下交通狀態(tài)流程圖6-28中斷情況下交通狀態(tài)流程圖6-29通信程序流程

圖6-29通信程序流程2.源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharled[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};ucharDispX[]={0x04,0x0c,0x04,0x0c,0x14,0x20,0x21,0x20,0x21,0x22};

voidAFangXing(void); //函數(shù)聲明

voidShanShuo(uchar*PTR);

voidJingGao(uchar*PTR);

voidBFangXing(void);

2.源程序#include<reg51.h>voiddelay_5ms(void)//5ms定時

{ uchari;

for(i=0;i<5;i++)//T0方式1,定時1毫秒,循環(huán)5次即實現(xiàn)5毫秒定時

{ TH0=0xfc; TL0=0x18; TR0=1; //T/C0開始工作

while(!TF0); TF0=0;}}voiddelay_5ms(void)//5ms定時voidint_0()interrupt0{ uinti,x,y,l,m; EA=0;//關中斷

i=P1;l=TH1;m=TL1; EA=1;P1=0x24;

for(x=10;x>0;x--) {

for(y=100;y>0;y--) { P2=0x01; P0=led[x%10]; delay_5ms(); P2=0x02; P0=led[x/10];//緊急情況倒計時

delay_5ms();}} EA=0;P1=i;TH1=l;TL1=m; EA=1;}voidint_0()interrupt0voidint_1()interrupt2//特殊情況中斷{ uinti,l,m,x,y; EA=0;//關中斷

i=P1;l=TH1;m=TL1; EA=1;P1=0x21;

for(x=10;x>0;x--) {

for(y=100;y>0;y--) { P2=0x01; P0=led[x%10];delay_5ms(); P2=0x02; P0=led[x/10];//特殊情況倒計時

delay_5ms();}} EA=0;P1=i; TH1=l;TL1=m; EA=1;}voidint_1()interrupt2//特殊情voidmain()//主函數(shù){ uchar*PTR=&DispX; TMOD=0x21; //工作方式寄存器TMOD用于選擇定時器/計數(shù)器的工作模式和工作方式

TH1=0xf4;//由波特率為2400kb/s,晶振為11.0592MHz,//可知定時器T1的初值,T1采用方式2,8位初值自動重裝入

TL1=0xf4; TR0=1; TR1=1; SCON=0x50;

//SCON為串行口控制寄存器,采用方式1,允許串行接收

PCON=0x00; //設置波特率SMOD IE=0x95;//IE為中斷允許寄存器,允許串行口中斷,//允許外部中斷1中斷,允許外部中斷0中斷

IP=0x11;//串行口中斷、外部中斷0設定為高優(yōu)先級中斷

IT0=1;//外部中斷0的中斷請求信號為邊沿觸發(fā)voidmain()//主函數(shù)

IT1=1;//外部中斷1的中斷請求信號為邊沿觸發(fā)

while(1){ AFangXing();//A道綠燈,B道紅燈(計時55秒)

ShanShuo(PTR);//A綠燈閃爍4次(2秒),B道紅燈

ShanShuo(++PTR); ShanShuo(++PTR);ShanShuo(++PTR); JingGao(++PTR);//A道黃燈(2秒),B道紅燈

BFangXing(); //B道綠燈,A道紅燈(計時55秒)

ShanShuo(++PTR);//B綠燈閃爍4次(2秒),A道紅燈

ShanShuo(++PTR); ShanShuo(++PTR);ShanShuo(++PTR); JingGao(++PTR);//B道黃燈(2秒),A道紅燈

PTR=&DispX;//重新給PTR指針賦值,開始新的一輪

}} IT1=1;//外部中斷1的中斷請求信號為邊沿觸發(fā) wvoidAFangXing(void)//A向通行函數(shù){ uchari,j; P1=0x0c;//A道綠燈B道紅燈

for(i=55;i>0;i--) {

for(j=50;j>0;j--) { P2=0x01; P0=led[i%10];//顯示A方向秒個位

delay_5ms();P2=0x02; P0=led[i/10];//顯示A方向秒十位

delay_5ms();P2=0x04; P0=led[(i)%10];//顯示B方向秒個位

delay_5ms(); P2=0x08; P0=led[(i)/10];//顯示B方向秒十位

delay_5ms(); } }}voidAFangXing(void)//A向通行voidShanShuo(uchar*PTR)//綠燈閃爍函數(shù){

uchari,j;

for(i=1;i>0;i--) { P1=*PTR;

for(j=25;j>0;j--) { P2=0x01; P0=led[i%10];//顯示A方向秒個位

delay_5ms();P2=0x02; P0=led[i/10];//顯示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//顯示B方向個位

delay_5ms();P2=0x08; P0=led[i/10];//顯示B方向十位

delay_5ms(); } }}voidShanShuo(uchar*PTR)//voidJingGao(uchar*PTR)//黃燈警告函數(shù){ uchari,j; P1=*PTR;

for(i=2;i>0;i--) {

for(j=50;j>0;j--) { P2=0x01; P0=led[i%10];//顯示A方向秒個位

delay_5ms();P2=0x02; P0=led[i/10];//顯示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//顯示B方向個位

delay_5ms(); P2=0x08; P0=led[i/10];//顯示B方向十位

delay_5ms(); }}}voidJingGao(uchar*PTR)//黃voidBFangXing(void)//B向通行函數(shù){uchari,j;P1=0x21;//A道紅燈B道綠燈

for(i=55;i>0;i--){

for(j=50;j>0;j--){ P2=0x01; P0=led[(i)%10];//顯示A方向秒個位

delay_5ms();P2=0x02; P0=led[(i)/10];//顯示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//顯示B方向個位

delay_5ms(); P2=0x08; P0=led[i/10];//顯示B方向秒十位

delay_5ms();}}}voidBFangXing(void)//B向voidserial()interrupt4//PC機控制程序

{uchari;EA=0;

if(RI==1){ RI=0;

if(SBUF==0x01){ SBUF=0x01;

while(!TI); TI=0;i=P1; P1=0x24;

while(SBUF!=0x02){

while(!RI); RI=0;

}

SBUF=0x02;

while(!TI); TI=0;P1=i;EA=1;

}else{ EA=1;}}}voidserial()interrupt4//6.4.4PROTEUS仿真運行(1)Proteus仿真系統(tǒng)和串口調試軟件同時安裝在一臺PC上,PC有兩個物理串口,兩者分別占用一個端口,然后使用交叉串口線連接兩個端口,并將兩個串行端口的屬性參數(shù)設置一致。(2)采用虛擬串口,使用虛擬串口驅動軟件VirtualSerialPortDriver(VSPD)。虛擬兩個串行端口,如COM2、COM3,并虛擬配對連接。將COM3分配給COMPIM,COM2分配給“串口調試助手”,運行同一臺PC屮的“串口調試助手”軟件和Proteus的單片機的仿真系統(tǒng),即可實現(xiàn)兩者之間的通信,與物理連接方式一樣。6.4.4PROTEUS仿真運行(1)Proteus仿真6.4.5任務小結交通燈控制中用到定時計數(shù)器、外部中斷INT0、INT1、LED動態(tài)顯示和串行通信的知識。因此該設計是單片機的綜合應用。單片機和PC串行通信時,在硬件設計上,需要熟悉端口電平轉換芯片的使用,在軟件設計上,要掌握串行通信協(xié)議編程,端口的參數(shù)設置要一致。

單片機異步通信的程序設計通常采用兩種方法:查詢法和中斷法。本設計任務采用的是中斷法,但在進入串口中斷函數(shù)后又使用了查詢方法。6.4.5任務小結交通燈控制中用到定時計數(shù)器、外部中斷IN總結與思考本項目結合單片機的雙機通信、單片機與PC串行通信、簡易交通燈的設計等任務,主要介紹了串行通信通信協(xié)議、單片機串行口結構與編程以及RS232C串行通信總線標準和接口設計。重點介紹了系列單片機串行口結構,該串口是一個全雙工的異步串行通信I/O口,有四種工作方式:方式0、1、2、3。其波特率和幀格式可以編程設定。數(shù)據(jù)幀格式有10位、11位。方式0和方式2的傳送波特率是固定的,方式1和方式3的波特率是可變的,由定時器T1的溢出率決定。最終完成遠程控制交通燈的設計??偨Y與思考本項目結合單片機的雙機通信、單片機與PC串行通信、2022/11/2677項目6單片機的串行口及其應用串行口的結構串行口控制寄存器單片機串行口的設計方法本章主要內容:2022/11/261項目6單片機的串行口及其應用串行口的本章目錄6.1任務1認識串行通信與串行口6.2任務2單片機的雙機通信6.3任務3單片機與PC串行通信6.4任務4遠程控制交通燈的設計

本章目錄6.1任務1認識串行通信與串行口2022/11/26796.1任務1認識串行通信與串行口

6.1.1串行通信的概念通信的基本方式分為并行通信和串行通信兩種。2022/11/2636.1任務1認識串行通信與串行口并行通信是構成數(shù)據(jù)信息的各位同時進行傳送的通信方式。例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。優(yōu)點是傳輸速度快。缺點是需要多條傳輸線,當距離較遠、位數(shù)又多時,導致通信線路復雜且成本高。并行通信是構成數(shù)據(jù)信息的各位同時進行傳送的通信方式。例如8位串行通信是數(shù)據(jù)一位接一位地順序傳送。特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)通信(如電話線),從而大大地降低了成本,特別適用于遠距離通信。缺點是傳送速度慢。串行通信是數(shù)據(jù)一位接一位地順序傳送。串行通信可分為異步傳送和同步傳送兩種基本方式。1.串行通信的分類(1)異步通信異步傳送的特點是數(shù)據(jù)在線路上的傳送不連續(xù),在傳送時,數(shù)據(jù)是以字符為單位組成字符幀進行傳送的。在異步通信中,接收端是依靠字符幀(CharacterFrame)格式來判斷發(fā)送端是何時開始發(fā)送,何時結束發(fā)送的。字符幀格式是異步通信的一個重要指標,是CPU與外設之間事先的約定。字符幀也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗位和停止位4個部分組成。串行通信可分為異步傳送和同步傳送兩種基本方式。1.串行通圖6-2串行異步傳送的字符格幀式在串行通信中,兩相鄰字符幀之間,可以沒有空閑位,也可以有若干空閑位,這由用戶來決定。圖6-2(a)為無空閑位的字符幀,圖6-2(b)表示有3個空閑位的字符幀格式。

圖6-2串行異步傳送的字符格幀式在串行通信中,兩相鄰字符幀之(2)同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,1次通信只傳輸一幀信息,即1次傳送1組數(shù)據(jù)。這里的信息幀和異步通信的字符幀不同,通常有若干個數(shù)據(jù)字符,如圖6-3所示。圖6-3(a)為單同步字符幀結構,圖6-3(b)為雙同步字符幀結構圖6-3同步通信的字符幀格式(2)同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,12.串行通信的制式在串行通信中數(shù)據(jù)是在兩個站之間進行傳送的,按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種制式。

(1)單工制式:在這種制式下,通信線的一端接發(fā)送器,另一端接接收器,數(shù)據(jù)只能按照一個固定的方向傳送。(2)半雙工制式:數(shù)據(jù)可實現(xiàn)雙向傳送,但不能同時進行。(3)全雙工制式:全雙工通信系統(tǒng)的每端都有發(fā)送器和接收器,可以同時發(fā)送和接收。2.串行通信的制式在串行通信中數(shù)據(jù)是在兩個站之間進行傳送3.串行通信的接口電路串行接口電路的種類和型號很多。能夠完成異步通信的硬件電路稱為UART,即通用異步接收器/發(fā)送器;能夠完成同步通信的硬件電路稱為USRT;既能夠完成異步又能同步通信的硬件電路稱為USART.從本質上說,所有的串行接口電路都是以并行數(shù)據(jù)形式與CPU接口,以串行數(shù)據(jù)形式與外部邏輯接口。它們的基本功能都是從外部邏輯接收串行數(shù)據(jù),轉換成并行數(shù)據(jù)后傳送給CPU,或從CPU接收并行數(shù)據(jù),轉換成串行數(shù)據(jù)后輸出到外部邏輯。3.串行通信的接口電路串行接口電路的種類和型號很多。6.1.2串行通信的接口異步串行通信接口標準主要有三類:RS-232C接口RS-449、RS-422和RS-485接口20mA電流環(huán)1.RS-232C接口

(1)RS-232C信息格式標準6.1.2串行通信的接口異步串行通信接口標準主要有三類:1(2)RS-232C總線規(guī)定及其電平轉換器RS-232C采用的是負邏輯,即:

邏輯“0”:+5V~+15V邏輯“1”:-5V~-15V因此,RS-232C不能和TTL電平直接相連,使用時必須進行電平轉換。常用的電平轉換集成電路是傳輸線驅動器MC1488和傳輸線接收器MC1489。圖6-6接收器和發(fā)送器電平轉換集成電路(2)RS-232C總線規(guī)定及其電平轉換器RS-232C采用(3)RS-232C總線規(guī)定RS-232C標準總線為25根,采用標準的DB-25或DB-9的D形插頭座。目前計算機上只保留有兩個DB-9插頭,即COM1和COM2兩個串行接口。圖6-8RS-232C引腳圖(3)RS-232C總線規(guī)定RS-232C標準總線為25根,表6-1DB-9連接器各引腳各引腳定義引腳名稱功能引腳名稱功能1DCD載波檢測6DSR數(shù)據(jù)準備完成2RXD發(fā)送數(shù)據(jù)7RTS發(fā)送請求3TXD接收數(shù)據(jù)8CTS發(fā)送清除4DTR數(shù)據(jù)終端準備完成9RI振鈴指示5SG(GND)信號地線在最簡單的全雙工系統(tǒng)中,僅用發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和信號地三根線即可,對于MCS-51單片機,利用其RXD(串行數(shù)據(jù)接收端)線、TXD(串行數(shù)據(jù)發(fā)送端)線和一根地線,就可以構成符合RS-232C接口標準的全雙工通信口。表6-1DB-9連接器各引腳各引腳定義引腳名稱功在遠距離通信時,一般要加MODEM(調制解調器),當計算機與MODEM連接時,只要將編號相同的引腳連接起來即可。圖6-9RS-232-C(DB9)與調制解調器的連接圖在遠距離通信時,一般要加MODEM(調制解調器),當計算機與在距離較近(小于15m)的情況下進行通信時,不需要使用MODEM,兩個計算機的RS-232-C接口可以直接互連。圖6-10兩個RS-232C(DB9)終端設備的連接圖在距離較近(小于15m)的情況下進行通信時,不需要使用MOD2.RS-449、RS-422A、RS-485標準接口RS-449標準除了與RS-232C兼容外,在提高傳輸速率,增加傳輸距離,改善電氣性能等方面有了很大改進。

(1)RS-449標準接口RS-449在很多方面可以代替RS-232C使用。RS-449與RS-232C的主要差別在于信號在導線上的傳輸方法不同:RS-232C是利用傳輸信號與公共地的電壓差,RS-449是利用信號導線之間的信號電壓差,在1219.2m的24-AWG雙鉸線上進行數(shù)字通信。RS-449規(guī)定了兩種接口標準連接器,一種為37腳,一種為9腳。RS-449可以不使用調制解調器,它比RS-232C傳輸速率高,通信距離長,且由于RS-449系統(tǒng)用平衡信號差傳輸高速信號,所以噪聲低,又可以多點或者使用公共線通信,故RS-449通信電纜可與多個設備并聯(lián)。2.RS-449、RS-422A、RS-485標準接口R(2)RS-422A接口RS-422A輸出驅動器為雙端平衡驅動器,如圖6-11所示。如果其中一條線為邏輯“1”狀態(tài),另一條線就為邏輯“0”,比采用單端不平衡驅動對電壓的放大倍數(shù)大一倍。RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。圖6-11RS-422A接口(2)RS-422A接口RS-422A輸出驅動器為雙端平衡(2)RS-485接口RS-485的信號傳輸采用兩線間的電壓來表示邏輯1和邏輯0,如圖6-12所示。由于發(fā)送方需要兩根傳輸線,接收方也需要兩根傳輸線。傳輸線采用差動信道,所以它的干擾抑制性極好,又因為它的阻抗低,無接地問題,所以傳輸距離可達1200米,傳輸速率可達1Mbps。圖6-12RS-485接口

(2)RS-485接口RS-485的信號傳輸采用兩線間的電6.1.3單片機串行口的結構與控制寄存器MCS-5l單片機的串行口主要由兩個獨立的數(shù)據(jù)緩沖器SBUF、一個輸入移位寄存器PCON(9位)、一個串行控制寄存器SCON和一個波特率發(fā)生器T1等組成。其結構見圖6-13。

圖6-13串行口結構框圖6.1.3單片機串行口的結構與控制寄存器MCS-5l單片1.串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立的接收、發(fā)送寄存器,是可以直接尋址的專用寄存器。一個用于存放接收到的數(shù)據(jù),另一個用于存放欲發(fā)送的數(shù)據(jù),可同時發(fā)送和接收數(shù)據(jù)。兩個緩沖器共用一個地址99H,通過對SBUF的讀、寫指令來區(qū)別是對接收緩沖器還是發(fā)送緩沖器進行操作。CPU在寫SBUF時,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器的內容。接收或發(fā)送數(shù)據(jù),是通過串行口對外的兩條獨立收發(fā)信號線RXD(P3.0)、TXD(P3.1)來實現(xiàn)的,因此可以同時發(fā)送、接收數(shù)據(jù),其工作方式為全雙工制式。串口的接收/發(fā)送端具有緩沖的功能,由SBUF特殊功能寄存器實現(xiàn)該功能。接收緩沖器是雙緩沖的,發(fā)送緩沖器為單緩沖。1.串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立2.串行口控制寄存器SCON該專用寄存器的主要功能是選擇串行口的工作方式、接收和發(fā)送控制以及串行口的狀態(tài)標志指示等,可以位尋址,字節(jié)地址為98H。收發(fā)雙方都有對SCON的編程,單片機復位時,SCON的所有位全為0。SCON的各位含義如圖6-14所示。2.串行口控制寄存器SCON該專用寄存器的主要功能是選擇串(1)SM0、SM1(SCON.7、SCON.6)

串行口的工作方式選擇位。其定義如表6-2所示。SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/120l方式l10位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變表6-2串行方式的定義(1)SM0、SM1(SCON.7、SCON.6)串行口的(2)SM2多機通信控制位,用于方式2和方式3中。在方式2和方式3處于接收時,若SM2=1,且接收到的第9位數(shù)據(jù)RB8為0時,則不激活RI;若SM2=1,且RB8=1時,則置RI=1;若SM2=0,不論接收到第9位RB8為0還是為1,TI、RI都以正常方式被激活。在方式1處于接收時,若SM2=1,則只有當收到有效的停止位后,RI才置1。在方式0中,SM2應為0。(3)REN允許串行接收控制位。由軟件置位或清零。REN=1時,允許接收;REN=0時,禁止接收。(4)TB8發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,由軟件置位或復位,一般用做奇偶校驗位。在多機通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標識位,一般約定地址幀時TB8為1,數(shù)據(jù)幀時TB8為0。(2)SM2(5)RB8接收數(shù)據(jù)的第9位。功能同TB8。(6)TI發(fā)送中斷標志位。在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在發(fā)送停止位之初由硬件置位。因此TI是發(fā)送完一幀數(shù)據(jù)的標志,可以用指令來查詢是否發(fā)送結束。TI=1時,也可向CPU申請中斷,響應中斷后必須由軟件清除TI。(7)RI接收中斷標志位。在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在接收停止位時由硬件置位。因此RI是接收完一幀數(shù)據(jù)的標志,也可以通過指令來查詢是否接收完一幀數(shù)據(jù)。RI=1時,也可向CPU申請中斷,響應中斷后也必須由軟件清除RI。(5)RB83.電源和波特率控制寄存器PCONPCON是一個特殊功能寄存器,其字節(jié)地址為87H,只能進行字節(jié)尋址,不能按位尋址。其格式如下圖6-15所示。PCON的最高位D7位作為SMOD,是串行口波特率的選擇位。在工作方式1、2、3時,串行通信的波特率與SMOD有關。當SMOD=1時,波特率加倍,當SMOD=0時,波特率不變。系統(tǒng)復位后,SMOD位為0。其他各位用于電源管理。3.電源和波特率控制寄存器PCONPCON是一個特殊功能6.1.4單片機串行口的工作方式MCS-51的串行口有4種工作方式,通過SCON中的SM1、SM0位來決定。1.方式0在方式0下,串行口作同步移位寄存器用,以8位數(shù)據(jù)為一幀。無起始位和停止位。其波特率固定為fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴展I/O口,外接移位寄存器實現(xiàn)數(shù)據(jù)并行輸入或輸出。6.1.4單片機串行口的工作方式MCS-51的串行口有4種2.方式1當SM0=0、SM1=1時,串行口被定義為方式1。在方式1下,串行口為波特率可調的10位通用異步接口UART,發(fā)送或接收的一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。圖6-18方式1下10位數(shù)據(jù)幀格式2.方式1當SM0=0、SM1=1時,串行口被定義為方式1。3.方式2當SM0=1、SM1=0時,串行口被定義為方式2。方式2下,串行口為11位通用異步接口UART,這種方式可接收或發(fā)送11位數(shù)據(jù),傳送波特率與PCON的最高位SMOD有關。發(fā)送或接收的一幀數(shù)據(jù)包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(D8)和1位停止位1,共11位。第9個數(shù)據(jù)位即D8位可以通過軟件來控制它。圖6-19方式2下11位數(shù)據(jù)幀格式3.方式2當SM0=1、SM1=0時,串行口被定義為方式4.方式3方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。串行口工作于方式2和方式3時,與方式1不同之處是,進入RB8的是第9位數(shù)據(jù),而不是停止位。接收到的停止位的值與SBUF、RB8或RI是無關的。這一個特點可用于多機通信。注意:4.方式3方式3為波特率可變的11位UART通信方式,除了波6.1.5串行口的波特率串行口通過編程可以有4種工作方式,其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可變,由定時器1的溢出率決定。1.方式0和方式2在方式0中,波特率為時鐘頻率的1/12,即,固定不變。在方式2中,波特率取決于PCON中的SMOD值,當SMOD=0時,波特率為;當SMOD=1時,波特率為,即波特率6.1.5串行口的波特率串行口通過編程可以有4種工作方式2.方式1和方式3在方式1和方式3下,波特率由定時器T1的溢出率和SMOD共同決定。即:波特率2.方式1和方式3在方式1和方式3下,波特率由定時器T1的表6-3定時器T1產生的常用波特率波特率(b/s)SMOD定時器T1方式初始值方式0:1M12××××方式2:375K121×××方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH表6-3定時器T1產生的常用波特率波特率(b/s)SM6.2任務2單片機的雙機通信采用兩臺AT89C51單片機甲和乙進行雙機串行通信設計。單片機甲的按鍵K1產生控制碼,通過串行口TXD端將控制碼以方式1的方式發(fā)送至單片機乙的RXD端,乙機再利用該控制碼分別實現(xiàn)LED1閃爍、LED2閃爍、LED1和LED2同時閃爍、關閉所有LED功能。通過本任務的學習,使讀者掌握MCS-51系列單片機串行通信的基本原理及控制方法、波特率設計等串行口應用知識。6.2任務2單片機的雙機通信采用兩臺AT89C51單6.2.1硬件電路與軟件程序設計1.硬件電路設計根據(jù)單片機雙機通信距離、抗干擾性等要求,可以選擇直接TTL電平傳輸、RS-232-C、RS-422A等串行接口方法。本設計采用標準RS-232接口芯片MAX232進行通信,硬件電路如圖6-20所示。6.2.1硬件電路與軟件程序設計1.硬件電路設計根據(jù)圖6-20單片機串行口雙機通信硬件電路圖6-20單片機串行口雙機通信硬件電路2.程序設計程序設計時,首先需要進行串口初始化,主要任務是設置定時器1,串口控制和中斷控制等。本任務中,兩片單片機的串口均工作在方式1下,所以甲機程序中設置SCON=0X40,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論