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

下載本文檔

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

文檔簡介

2023/6/21項目6單片機的串行口及其應(yīng)用串行口的結(jié)構(gòu)串行口控制寄存器單片機串行口的設(shè)計方法本章主要內(nèi)容:單片機的串行口及其應(yīng)用全文共76頁,當前為第1頁。本章目錄6.1任務(wù)1認識串行通信與串行口6.2任務(wù)2單片機的雙機通信6.3任務(wù)3單片機與PC串行通信6.4任務(wù)4遠程控制交通燈的設(shè)計

單片機的串行口及其應(yīng)用全文共76頁,當前為第2頁。2023/6/236.1任務(wù)1認識串行通信與串行口

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

單片機的串行口及其應(yīng)用全文共76頁,當前為第7頁。(2)同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,1次通信只傳輸一幀信息,即1次傳送1組數(shù)據(jù)。這里的信息幀和異步通信的字符幀不同,通常有若干個數(shù)據(jù)字符,如圖6-3所示。圖6-3(a)為單同步字符幀結(jié)構(gòu),圖6-3(b)為雙同步字符幀結(jié)構(gòu)圖6-3同步通信的字符幀格式單片機的串行口及其應(yīng)用全文共76頁,當前為第8頁。2.串行通信的制式在串行通信中數(shù)據(jù)是在兩個站之間進行傳送的,按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種制式。

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

(1)RS-232C信息格式標準單片機的串行口及其應(yīng)用全文共76頁,當前為第11頁。(2)RS-232C總線規(guī)定及其電平轉(zhuǎn)換器RS-232C采用的是負邏輯,即:

邏輯“0”:+5V~+15V邏輯“1”:-5V~-15V因此,RS-232C不能和TTL電平直接相連,使用時必須進行電平轉(zhuǎn)換。常用的電平轉(zhuǎn)換集成電路是傳輸線驅(qū)動器MC1488和傳輸線接收器MC1489。圖6-6接收器和發(fā)送器電平轉(zhuǎn)換集成電路單片機的串行口及其應(yīng)用全文共76頁,當前為第12頁。(3)RS-232C總線規(guī)定RS-232C標準總線為25根,采用標準的DB-25或DB-9的D形插頭座。目前計算機上只保留有兩個DB-9插頭,即COM1和COM2兩個串行接口。圖6-8RS-232C引腳圖單片機的串行口及其應(yīng)用全文共76頁,當前為第13頁。表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ā)送端)線和一根地線,就可以構(gòu)成符合RS-232C接口標準的全雙工通信口。單片機的串行口及其應(yīng)用全文共76頁,當前為第14頁。在遠距離通信時,一般要加MODEM(調(diào)制解調(diào)器),當計算機與MODEM連接時,只要將編號相同的引腳連接起來即可。圖6-9RS-232-C(DB9)與調(diào)制解調(diào)器的連接圖單片機的串行口及其應(yīng)用全文共76頁,當前為第15頁。在距離較近(小于15m)的情況下進行通信時,不需要使用MODEM,兩個計算機的RS-232-C接口可以直接互連。圖6-10兩個RS-232C(DB9)終端設(shè)備的連接圖單片機的串行口及其應(yīng)用全文共76頁,當前為第16頁。2.RS-449、RS-422A、RS-485標準接口RS-449標準除了與RS-232C兼容外,在提高傳輸速率,增加傳輸距離,改善電氣性能等方面有了很大改進。

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

單片機的串行口及其應(yīng)用全文共76頁,當前為第19頁。6.1.3單片機串行口的結(jié)構(gòu)與控制寄存器MCS-5l單片機的串行口主要由兩個獨立的數(shù)據(jù)緩沖器SBUF、一個輸入移位寄存器PCON(9位)、一個串行控制寄存器SCON和一個波特率發(fā)生器T1等組成。其結(jié)構(gòu)見圖6-13。

圖6-13串行口結(jié)構(gòu)框圖單片機的串行口及其應(yīng)用全文共76頁,當前為第20頁。1.串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立的接收、發(fā)送寄存器,是可以直接尋址的專用寄存器。一個用于存放接收到的數(shù)據(jù),另一個用于存放欲發(fā)送的數(shù)據(jù),可同時發(fā)送和接收數(shù)據(jù)。兩個緩沖器共用一個地址99H,通過對SBUF的讀、寫指令來區(qū)別是對接收緩沖器還是發(fā)送緩沖器進行操作。CPU在寫SBUF時,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器的內(nèi)容。接收或發(fā)送數(shù)據(jù),是通過串行口對外的兩條獨立收發(fā)信號線RXD(P3.0)、TXD(P3.1)來實現(xiàn)的,因此可以同時發(fā)送、接收數(shù)據(jù),其工作方式為全雙工制式。串口的接收/發(fā)送端具有緩沖的功能,由SBUF特殊功能寄存器實現(xiàn)該功能。接收緩沖器是雙緩沖的,發(fā)送緩沖器為單緩沖。單片機的串行口及其應(yīng)用全文共76頁,當前為第21頁。2.串行口控制寄存器SCON該專用寄存器的主要功能是選擇串行口的工作方式、接收和發(fā)送控制以及串行口的狀態(tài)標志指示等,可以位尋址,字節(jié)地址為98H。收發(fā)雙方都有對SCON的編程,單片機復(fù)位時,SCON的所有位全為0。SCON的各位含義如圖6-14所示。單片機的串行口及其應(yīng)用全文共76頁,當前為第22頁。(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串行方式的定義單片機的串行口及其應(yīng)用全文共76頁,當前為第23頁。(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應(yīng)為0。(3)REN允許串行接收控制位。由軟件置位或清零。REN=1時,允許接收;REN=0時,禁止接收。(4)TB8發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,由軟件置位或復(fù)位,一般用做奇偶校驗位。在多機通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標識位,一般約定地址幀時TB8為1,數(shù)據(jù)幀時TB8為0。單片機的串行口及其應(yīng)用全文共76頁,當前為第24頁。(5)RB8接收數(shù)據(jù)的第9位。功能同TB8。(6)TI發(fā)送中斷標志位。在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在發(fā)送停止位之初由硬件置位。因此TI是發(fā)送完一幀數(shù)據(jù)的標志,可以用指令來查詢是否發(fā)送結(jié)束。TI=1時,也可向CPU申請中斷,響應(yīng)中斷后必須由軟件清除TI。(7)RI接收中斷標志位。在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其它方式中,在接收停止位時由硬件置位。因此RI是接收完一幀數(shù)據(jù)的標志,也可以通過指令來查詢是否接收完一幀數(shù)據(jù)。RI=1時,也可向CPU申請中斷,響應(yīng)中斷后也必須由軟件清除RI。單片機的串行口及其應(yīng)用全文共76頁,當前為第25頁。3.電源和波特率控制寄存器PCONPCON是一個特殊功能寄存器,其字節(jié)地址為87H,只能進行字節(jié)尋址,不能按位尋址。其格式如下圖6-15所示。PCON的最高位D7位作為SMOD,是串行口波特率的選擇位。在工作方式1、2、3時,串行通信的波特率與SMOD有關(guān)。當SMOD=1時,波特率加倍,當SMOD=0時,波特率不變。系統(tǒng)復(fù)位后,SMOD位為0。其他各位用于電源管理。單片機的串行口及其應(yīng)用全文共76頁,當前為第26頁。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ù)并行輸入或輸出。單片機的串行口及其應(yīng)用全文共76頁,當前為第27頁。2.方式1當SM0=0、SM1=1時,串行口被定義為方式1。在方式1下,串行口為波特率可調(diào)的10位通用異步接口UART,發(fā)送或接收的一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。圖6-18方式1下10位數(shù)據(jù)幀格式單片機的串行口及其應(yīng)用全文共76頁,當前為第28頁。3.方式2當SM0=1、SM1=0時,串行口被定義為方式2。方式2下,串行口為11位通用異步接口UART,這種方式可接收或發(fā)送11位數(shù)據(jù),傳送波特率與PCON的最高位SMOD有關(guān)。發(fā)送或接收的一幀數(shù)據(jù)包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(D8)和1位停止位1,共11位。第9個數(shù)據(jù)位即D8位可以通過軟件來控制它。圖6-19方式2下11位數(shù)據(jù)幀格式單片機的串行口及其應(yīng)用全文共76頁,當前為第29頁。4.方式3方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。串行口工作于方式2和方式3時,與方式1不同之處是,進入RB8的是第9位數(shù)據(jù),而不是停止位。接收到的停止位的值與SBUF、RB8或RI是無關(guān)的。這一個特點可用于多機通信。注意:單片機的串行口及其應(yīng)用全文共76頁,當前為第30頁。6.1.5串行口的波特率串行口通過編程可以有4種工作方式,其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可變,由定時器1的溢出率決定。1.方式0和方式2在方式0中,波特率為時鐘頻率的1/12,即,固定不變。在方式2中,波特率取決于PCON中的SMOD值,當SMOD=0時,波特率為;當SMOD=1時,波特率為,即波特率單片機的串行口及其應(yīng)用全文共76頁,當前為第31頁。2.方式1和方式3在方式1和方式3下,波特率由定時器T1的溢出率和SMOD共同決定。即:波特率單片機的串行口及其應(yīng)用全文共76頁,當前為第32頁。表6-3定時器T1產(chǎn)生的常用波特率波特率(b/s)SMOD定時器T1方式初始值方式0:1M12××××方式2:375K121×××方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH單片機的串行口及其應(yīng)用全文共76頁,當前為第33頁。6.2任務(wù)2單片機的雙機通信采用兩臺AT89C51單片機甲和乙進行雙機串行通信設(shè)計。單片機甲的按鍵K1產(chǎn)生控制碼,通過串行口TXD端將控制碼以方式1的方式發(fā)送至單片機乙的RXD端,乙機再利用該控制碼分別實現(xiàn)LED1閃爍、LED2閃爍、LED1和LED2同時閃爍、關(guān)閉所有LED功能。通過本任務(wù)的學習,使讀者掌握MCS-51系列單片機串行通信的基本原理及控制方法、波特率設(shè)計等串行口應(yīng)用知識。單片機的串行口及其應(yīng)用全文共76頁,當前為第34頁。6.2.1硬件電路與軟件程序設(shè)計1.硬件電路設(shè)計根據(jù)單片機雙機通信距離、抗干擾性等要求,可以選擇直接TTL電平傳輸、RS-232-C、RS-422A等串行接口方法。本設(shè)計采用標準RS-232接口芯片MAX232進行通信,硬件電路如圖6-20所示。單片機的串行口及其應(yīng)用全文共76頁,當前為第35頁。圖6-20單片機串行口雙機通信硬件電路單片機的串行口及其應(yīng)用全文共76頁,當前為第36頁。2.程序設(shè)計程序設(shè)計時,首先需要進行串口初始化,主要任務(wù)是設(shè)置定時器1,串口控制和中斷控制等。本任務(wù)中,兩片單片機的串口均工作在方式1下,所以甲機程序中設(shè)置SCON=0X40,乙機程序中設(shè)SCON=0X50,兩者都設(shè)為方式1,但乙機還將REN位設(shè)為1以允許接收。需要說明的是,本例甲機不接收數(shù)據(jù),因此兩機的SCON都設(shè)成0X50也不影響運行結(jié)果;程序中設(shè)TH1=TL1=0XFD(即253),PCON=0X00(PCON的最高位SMOD=0,波特率不倍增);本例中兩單片機均使用查詢方式,甲機通過循環(huán)查詢TI標志判斷是否發(fā)送完畢,乙機通過查詢RI判斷是否接收到數(shù)據(jù)。每一次收發(fā)前都需要通過程序?qū)I和RI清零。單片機的串行口及其應(yīng)用全文共76頁,當前為第37頁。甲機程序代碼:#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;}單片機的串行口及其應(yīng)用全文共76頁,當前為第38頁。//主程序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;}單片機的串行口及其應(yīng)用全文共76頁,當前為第39頁。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);}}單片機的串行口及其應(yīng)用全文共76頁,當前為第40頁。乙機程序代碼:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;//延時voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}單片機的串行口及其應(yīng)用全文共76頁,當前為第41頁。//主程序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;單片機的串行口及其應(yīng)用全文共76頁,當前為第42頁。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;//關(guān)閉LEDDelayMS(100);}}單片機的串行口及其應(yīng)用全文共76頁,當前為第43頁。6.2.2調(diào)試與仿真運行圖6-21單片機串行口雙機通信仿真圖單片機的串行口及其應(yīng)用全文共76頁,當前為第44頁。6.3任務(wù)3單片機與PC串行通信6.3.1任務(wù)與計劃(1)單片機接收PC機發(fā)來的數(shù)字串,并逐個顯示在數(shù)碼管上,為了顯示接收到的數(shù)據(jù),在單片機的P0口連接數(shù)碼管。(2)當按下單片機系統(tǒng)的按鍵時,會有一串中文字符由單片機串口發(fā)送給PC機,并顯示在接收窗口。單片機的串行口及其應(yīng)用全文共76頁,當前為第45頁。6.3.2硬件電路與軟件程序設(shè)計1.硬件電路設(shè)計圖6-22單片機與PC之間串行通信硬件電路單片機的串行口及其應(yīng)用全文共76頁,當前為第46頁。2.程序設(shè)計(1)PC機控制程序PC主機的通信程序可以采用TurboC、VC、VB、Delphi等高級語言編寫,也可以直接借助于現(xiàn)有的“串口調(diào)試助手”應(yīng)用軟件完成,用戶要由PC機向單片機發(fā)送數(shù)據(jù),只要把波特率參數(shù)設(shè)置好就行了,無須自己編程。(2)單片機串口通信程序使用Keil軟件建立“receive”工程項目,建立源程序文件“receive.c”,輸入如下源程序:單片機的串行口及其應(yīng)用全文共76頁,當前為第47頁。#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++);}單片機的串行口及其應(yīng)用全文共76頁,當前為第48頁。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結(jié)束顯示

P0=Dsy_code[Receive_Buffer[i]]; Delay(200); } Delay(200); }}單片機的串行口及其應(yīng)用全文共76頁,當前為第49頁。//接收中斷函數(shù)

voidSerial_INT()interrupt4{ ucharc;

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

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

c=SBUF;//讀字符

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

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

Receive_Buffer[Buf_Index]=c–‘0’; Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)%100; } ES=1;//允許串口中斷}單片機的串行口及其應(yīng)用全文共76頁,當前為第50頁。//外部中斷0

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

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

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

P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P1端口數(shù)據(jù)狀態(tài)說明無關(guān)無關(guān)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警告單片機的串行口及其應(yīng)用全文共76頁,當前為第57頁。單片機的串行口及其應(yīng)用全文共76頁,當前為第58頁。表6-7交通燈控制電路元器件清單單片機的串行口及其應(yīng)用全文共76頁,當前為第59頁。6.4.3程序設(shè)計1.程序設(shè)計流程圖①①②②圖6-27正常情況程序流程

單片機的串行口及其應(yīng)用全文共76頁,當前為第60頁。圖6-28中斷情況下交通狀態(tài)流程單片機的串行口及其應(yīng)用全文共76頁,當前為第61頁。圖6-29通信程序流程

單片機的串行口及其應(yīng)用全文共76頁,當前為第62頁。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);

單片機的串行口及其應(yīng)用全文共76頁,當前為第63頁。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;}}單片機的串行口及其應(yīng)用全文共76頁,當前為第64頁。voidint_0()interrupt0{ uinti,x,y,l,m; EA=0;//關(guān)中斷

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;}單片機的串行口及其應(yīng)用全文共76頁,當前為第65頁。voidint_1()interrupt2//特殊情況中斷{ uinti,l,m,x,y; EA=0;//關(guān)中斷

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;}單片機的串行口及其應(yīng)用全文共76頁,當前為第66頁。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; //設(shè)置波特率SMOD IE=0x95;//IE為中斷允許寄存器,允許串行口中斷,//允許外部中斷1中斷,允許外部中斷0中斷

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

IT0=1;//外部中斷0的中斷請求信號為邊沿觸發(fā)單片機的串行口及其應(yīng)用全文共76頁,當前為第67頁。

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指針賦值,開始新的一輪

}}單片機的串行口及其應(yīng)用全文共76頁,當前為第68頁。voidAFangXing(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(); } }}單片機的串行口及其應(yīng)用全文共76頁,當前為第69頁。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(); } }}單片機的串行口及其應(yīng)用全文共76頁,當前為第70頁。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方向個位

溫馨提示

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

評論

0/150

提交評論