版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目3單片機(jī)與PC機(jī)通信系統(tǒng)設(shè)計(jì)3.1項(xiàng)目要求
3.2理論知識(shí)
3.3項(xiàng)目分析及實(shí)施
3.4項(xiàng)目小結(jié)
習(xí)題
3.1項(xiàng)目要求
單片機(jī)與外部PC機(jī)進(jìn)行數(shù)據(jù)通信可以通過并行接口和串行接口兩種方式來實(shí)現(xiàn)。通常,單片機(jī)與外圍芯片之間,如與存儲(chǔ)器、I/O接口等之間常采用并行通信方式;而單片機(jī)與外部系統(tǒng)之間,如單片機(jī)與單片機(jī)、單片機(jī)與PC機(jī)等之間常采用串行通信方式。
本項(xiàng)目實(shí)現(xiàn)的就是單片機(jī)與PC機(jī)之間的雙向串行數(shù)據(jù)通信,利用單片機(jī)的串行口工作,連接單片機(jī)和PC機(jī),使雙方可以進(jìn)行數(shù)據(jù)傳輸和交換。通過這個(gè)項(xiàng)目要求掌握單片機(jī)串行口的工作方式,以及如何實(shí)現(xiàn)單片機(jī)與PC機(jī)之間的數(shù)據(jù)交換。項(xiàng)目重難點(diǎn):
(1)串行通信的基本知識(shí);
(2)串行通信接口標(biāo)準(zhǔn)RS-232C;
(3)51單片機(jī)串行通信接口的組成;
(4)51單片機(jī)的串行口工作原理;
(5)51單片機(jī)與外設(shè)通信的軟件編寫。
技能培養(yǎng):
(1)掌握51單片機(jī)串行口工作原理及應(yīng)用;
(2)掌握51單片機(jī)串行口工作電路的分析與設(shè)計(jì)方法;
(3)熟練編寫單片機(jī)串行口通信的發(fā)送和接收數(shù)據(jù)程序;
(4)掌握PC機(jī)與單片機(jī)串行口通信的工作方法。
3.2理論知識(shí)
3.2.1串行通信
1.串行通信的分類
按照串行數(shù)據(jù)的時(shí)鐘控制方式,串行通信可分為同步通信和異步通信兩類。
1)異步通信
在異步通信中,數(shù)據(jù)通常是以字符為單位組成字符幀傳送的。字符幀也稱數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位等4部分組成,異步通信的字符幀格式如圖3-1所示。圖3-1串行異步通信的字符幀格式
(1)起始位:位于字符幀開頭,只占1位,為邏輯低電平“0”,用來通知接收設(shè)備,發(fā)送端開始發(fā)送數(shù)據(jù)。線路上在不傳送字符時(shí)應(yīng)保持為“1”。接收端不斷檢測線路的狀態(tài),若連續(xù)為“1”,以后又測到1個(gè)“0”,就知道將要發(fā)來1個(gè)新字符,應(yīng)馬上準(zhǔn)備接收。
(2)數(shù)據(jù)位:數(shù)據(jù)位(D0~D7)緊接在起始位后面,通常為5~8位,依據(jù)數(shù)據(jù)位由低到高的順序依次傳送。
(3)奇偶校驗(yàn)位:奇偶校驗(yàn)位只占1位,緊接在數(shù)據(jù)位后面,表征串行通信中采用奇校驗(yàn)還是偶校驗(yàn),也可用這1位(I/O)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。
(4)停止位:位于字符幀的最后,表征字符的結(jié)束,它一定是高電平(邏輯“1”)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳完,同時(shí)也為接收下一字符作好準(zhǔn)備(只要再收到“0”就是新的字符的起始位)。若停止位以后不是緊接著傳送下一個(gè)字符,則讓線路上保持為“1”。圖3-1(a)表示1個(gè)字符緊接1個(gè)字符傳送的情況,上一個(gè)字符的停止位和下一個(gè)字符的起始位是緊相鄰的;圖3-1(b)則是2個(gè)字符間有空閑位的情況,空閑位為“1”,線路處于等待狀態(tài)。存在空閑位正是異步通信的特征之一。在異步通信中,字符幀由發(fā)送端一幀一幀地發(fā)送,每一幀數(shù)據(jù)均是低位在前,高位在后,通過傳輸線被接收端一幀一幀地接收。一幀字符與一幀字符之間可以是連續(xù)的,也可以是間斷的,這完全由發(fā)送方根據(jù)需要來決定。在進(jìn)行異步傳送時(shí),發(fā)送端和接收端可以有各自獨(dú)立的時(shí)鐘脈沖控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘彼此獨(dú)立,互不同步。由于發(fā)送端不需要傳送同步時(shí)鐘到接收端,因此異步通信對硬件要求較低,實(shí)現(xiàn)起來比較簡單、靈活,適用于數(shù)據(jù)的隨機(jī)發(fā)送/接收。但因其每個(gè)字節(jié)都要建立一次同步,即每個(gè)字符都要額外附加兩位,所以傳輸速度較低。在單片機(jī)中主要采用異步通信方式。
2)同步通信
同步通信時(shí),發(fā)送設(shè)備和接收設(shè)備采用同步時(shí)鐘頻率,發(fā)送設(shè)備先發(fā)送串行通信數(shù)據(jù)同步信號(hào)給接收設(shè)備,接收設(shè)備接收到同步信號(hào)后,開始進(jìn)行串行數(shù)據(jù)塊的傳送,當(dāng)串行數(shù)據(jù)塊傳送完畢時(shí),發(fā)送設(shè)備發(fā)送結(jié)束串行通信同步數(shù)據(jù),停止串行通信。同步通信的數(shù)據(jù)塊格式如圖3-2所示。同步串行通信一次發(fā)送的數(shù)據(jù)量大,但需要發(fā)送和接收設(shè)備的串行控制時(shí)鐘頻率保持嚴(yán)格同步,這在實(shí)際系統(tǒng)中較難實(shí)現(xiàn)也不經(jīng)濟(jì)。圖3-2串行同步通信的數(shù)據(jù)塊格式
2.串行通信的波特率
在串行通信中,數(shù)據(jù)是按位進(jìn)行傳送的,每秒內(nèi)傳送的二進(jìn)制數(shù)的位數(shù)就是波特率。單位是位/秒,用b/s表示。例如,某串行通信系統(tǒng)的波特率為9600b/s,就是說該串行通信系統(tǒng)每秒傳送9600個(gè)二進(jìn)制位。如果每個(gè)字符格式包含10個(gè)代碼位(個(gè)起始位和1個(gè)停止位、8個(gè)數(shù)據(jù)位),則該串行通信系統(tǒng)每秒傳送960個(gè)字符。
波特率是串行通信的重要指標(biāo),用于表征數(shù)據(jù)傳輸?shù)乃俣?。波特率越高,?shù)據(jù)的傳輸速度越快。異步傳送方式的波特率一般為50~9600b/s,同步傳送方式的波特率可達(dá)56kb/s或更高。
3.串行通信方式
串行通信根據(jù)數(shù)據(jù)傳送的方向及時(shí)間關(guān)系可分為單工、半雙工和全雙工三種制式,如圖3-3所示。圖3-3串行通信的三種制式
4.串行通信協(xié)議
通信協(xié)議是指單片機(jī)之間進(jìn)行信息傳輸時(shí)的一些約定,包括通信方式、波特率、雙機(jī)之間握手信號(hào)的約定等。為了保證單片機(jī)之間能準(zhǔn)確、可靠地通信,相互之間必須遵循統(tǒng)一的通信協(xié)議,在通信之前一定要設(shè)置好。
串行通信的格式及約定(如同步方式、通信速率、數(shù)據(jù)塊格式、信號(hào)電平等)不同,就形成了多種不同的串行通信的協(xié)議與接口標(biāo)準(zhǔn)。其中常見的有通用異步收發(fā)器(UART)、通用串行總線(USB)、I2C總線、CAN總線、SPI總線、RS-485,RS-232C,RS-449,RS-422A標(biāo)準(zhǔn)等。通用異步收發(fā)器UART(UniversalAsynchronousReceiver/Transmitter)是串行接口的核心部件,同步通信的接口電路稱為USRT(UniversalSychronousReceiver/Transmitter),異步和同步通信共用的接口電路稱為USART(UniversalSychronousAsychronousReceiver/Transmitter)。
3.2.2串行通信接口標(biāo)準(zhǔn)RS-232C
1.RS-232C信息格式標(biāo)準(zhǔn)
RS-232C采用串行格式。其標(biāo)準(zhǔn)規(guī)定:信息的開始為起始位,信息的結(jié)束為停止位;信息本身可以是5、6、7、8位再加一位奇偶校驗(yàn)位。如果兩個(gè)信息之間無信息,則為“1”,表示空,如圖3-4所示。圖3-4
RS-232C信息格式
2.RS-232C引腳定義
RS-232C接口規(guī)定使用25針“D”型口連接器,連接器的尺寸及每個(gè)插針的排列位置都有明確的定義。在微型計(jì)算機(jī)通信中,常常使用的有9根信號(hào)引腳,所以常用9針“D”型接口(DB9)連接器替代25針連接器。連接器引腳定義如圖3-5所示。RS-232C接口的主要信號(hào)線的功能定義如表3-1所示。圖3-5
DB9型連接器定義表3-1
RS-232C標(biāo)準(zhǔn)接口主要引腳定義
3.RS-232C電器特性
RS-232C采用單端連接方式,所以接口電路采用一條信號(hào)地線。由于通過地線的串音干擾大,為了提高該標(biāo)準(zhǔn)的抗干擾能力,規(guī)定了較高的信號(hào)電平。標(biāo)準(zhǔn)規(guī)定驅(qū)動(dòng)器的輸出電壓為±5V~±15V,接收器的輸入門限電壓為-3V~+3V。
RS-232C標(biāo)準(zhǔn)規(guī)定信號(hào)電平采用負(fù)邏輯,規(guī)定邏輯“1”為-5V~-15V,負(fù)載端要小于-3V,一般選用-12V。規(guī)定邏輯“0”為+5V~+15V,負(fù)載端要大于+3V,一般選用+12V。
RS-232電平與TTL電平不兼容。因此,當(dāng)計(jì)算機(jī)通過RS-232C與外設(shè)進(jìn)行通信時(shí),必須經(jīng)過相應(yīng)的電平轉(zhuǎn)換電路。MC1488和MC1489芯片可以完成這種功能。
MC1488是總線驅(qū)動(dòng)器(發(fā)送器),內(nèi)部有三個(gè)與非門和一個(gè)反相器,可將輸入的TTL電平轉(zhuǎn)換為RS-232C標(biāo)準(zhǔn)電平;MC1489是總線接收器,內(nèi)部有4個(gè)反相器,可將RS-232C電平轉(zhuǎn)換為TTL電平。而目前使用較多的電平轉(zhuǎn)換電路是MAX232、MAX202、HIN232等芯片,它們同時(shí)集成了RS-232電平與TTL電平之間的互換。如圖3-6所示。其第一部分是電荷泵電路,由1、2、3、4、5、6腳和4只電容構(gòu)成,功能是產(chǎn)生+12V和-12V兩個(gè)電源,提供給RS-232串口電平的需要;第二部分是數(shù)據(jù)轉(zhuǎn)換通道,由7、8、9、10、11、12、13、14腳構(gòu)成兩個(gè)數(shù)據(jù)通道,其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道,8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道,TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭,DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出;第三部分是供電,15腳DNG、16腳VCC(+5V)。圖3-6
RS-232C電平轉(zhuǎn)換芯片由MAX232組成的通信接口電路如圖3-7所示。圖3-7
MAX232通信接口電路3.2.3
51單片機(jī)內(nèi)部串行口
51單片機(jī)內(nèi)部有一個(gè)可編程全雙工異步串行通信接口,它通過數(shù)據(jù)接收引腳RXD(P3.0)和數(shù)據(jù)發(fā)送引腳TXD(P3.1)與外設(shè)進(jìn)行串行通信,可以同時(shí)發(fā)送和接收數(shù)據(jù)。這個(gè)串行口既可以實(shí)現(xiàn)異步通信,又可以用于網(wǎng)絡(luò)通信,還可以作為同步移位寄存器使用。其幀格式有8位、10位和11位,并能設(shè)置各種波特率。
1.串行口內(nèi)部結(jié)構(gòu)
51單片機(jī)內(nèi)部有兩個(gè)獨(dú)立的接收、發(fā)送緩沖器SBUF。SBUF屬于特殊功能寄存器。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,二者共用一個(gè)字節(jié)地址(99H)。51單片機(jī)串行口的結(jié)構(gòu)如圖3-8所示。圖3-8串行口結(jié)構(gòu)框圖
1)串行口數(shù)據(jù)緩沖器SBUF
SBUF是一個(gè)特殊功能寄存器,有2個(gè)在物理上獨(dú)立的接收緩沖器與發(fā)送緩沖器。發(fā)送緩沖器只能寫入不能讀出,寫入SBUF的數(shù)據(jù)存儲(chǔ)在發(fā)送緩沖器中,用于串行發(fā)送;接收緩沖器只能讀出不能寫入。2個(gè)緩沖器共用1個(gè)地址99H,通過對SBUF的讀、寫指令來區(qū)別是對接收緩沖器還是發(fā)送緩沖器進(jìn)行操作。接收或發(fā)送數(shù)據(jù)是通過串行口對外的2條獨(dú)立收發(fā)信號(hào)線RXD(P3.0)、TXD(P3.1)來實(shí)現(xiàn)的。
發(fā)送時(shí),只需將發(fā)送數(shù)據(jù)輸入SBUF,CPU將自動(dòng)啟動(dòng)和完成串行數(shù)據(jù)的發(fā)送:
SBUF=0xFF;//啟動(dòng)一次數(shù)據(jù)發(fā)送,可向SBUF再發(fā)送下一個(gè)數(shù)接收時(shí),CPU將自動(dòng)把接收到的數(shù)據(jù)存入SBUF,用戶只需從SBUF中讀出接收數(shù)據(jù):
P1=SBUF;//完成一次數(shù)據(jù)接收,SBUF可再接收下一個(gè)數(shù)
2)串行口控制寄存器SCON
SCON用來控制串行口的工作方式和狀態(tài),其字節(jié)地址為98H,可以位尋址,位地址為9FH~98H。單片機(jī)復(fù)位時(shí),SCON的所有位全為0。SCON的格式如表3-2所示。表3-2
SCON的各位定義
SM0、SM1——串行方式選擇位,其定義如表3-3所示。表3-3串行口方式選擇位的定義
SM2——多機(jī)通信控制位,用于方式2和方式3中。在方式2、3處于接收方式時(shí),若SM2=1,且接收到的第9位數(shù)據(jù)RB8為0,則不激活RI;若SM2=1,且RB8=1,則置RI=1。在方式2、3處于接收或發(fā)送方式時(shí),若SM2=0,則不論接收到的第9位RB8為0還是為1,TI、RI都以正常方式被激活。在方式1處于接收時(shí),若SM2=1,則只有當(dāng)收到有效的停止位后,RI才置1。在方式0中,SM2應(yīng)為0。
REN——允許串行接收位。它由軟件置位或清零。REN=1時(shí),允許接收;REN=0時(shí),禁止接收。
TB8——發(fā)送數(shù)據(jù)的第9位。在方式2和方式3下,TB8由軟件置位或復(fù)位,可用做奇偶校驗(yàn)位。在多機(jī)通信中,TB8可作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)識(shí)位:地址幀時(shí)TB8為1;數(shù)據(jù)幀時(shí)TB8為0。
RB8——接收數(shù)據(jù)的第9位。功能同TB8,在方式2和方式3中,RB8是第9位接收數(shù)據(jù)。
TI——發(fā)送中斷標(biāo)志位。在方式0下,發(fā)送完8位數(shù)據(jù)后,TI由硬件置位;在其他方式中,TI在發(fā)送停止位之初由硬件置位。TI是發(fā)送完一幀數(shù)據(jù)的標(biāo)志,可以用指令查詢是否發(fā)送結(jié)束。TI=1時(shí),也可向CPU申請中斷,響應(yīng)中斷后,必須由軟件清除TI。
RI——接收中斷標(biāo)志位。在方式0下,接收完8位數(shù)據(jù)后,RI由硬件置位;在其他方式中,RI在接收停止位的中間由硬件置位。同TI一樣,也可以通過指令查詢是否接收完一幀數(shù)據(jù)。RI=1時(shí),也可申請中斷,響應(yīng)中斷后,必須由軟件清除RI。接收/發(fā)送數(shù)據(jù)時(shí),無論是否采用中斷方式工作,每接收/發(fā)送一幀數(shù)據(jù)都必須用指令對RI/TI清0,以備下一次收/發(fā)。
3)電源及波特率選擇寄存器PCON
PCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,不可以位尋址,字節(jié)地址為87H。在HMOS的8051單片機(jī)中,PCON除了最高位以外,其他位都是虛設(shè)的。其定義如表3-4所示。表3-4
PCON寄存器各位定義
2.串行口工作方式
1)串行口方式0
在方式0下,串行口作為同步移位寄存器使用。移位數(shù)據(jù)的發(fā)送和接收以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,無論輸入/輸出,均低位在前高位在后,每個(gè)機(jī)器周期發(fā)送或接收一位數(shù)據(jù),所以方式0的波特率是固定的,為晶振頻率的1/12。波特率計(jì)算公式為:波特率=fosc/12。
式中的fosc為晶振頻率。若fosc=12MHz,則波特率=fosc/12=12/12=1Mb/s。
在方式0下串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴(kuò)展I/O口。串行口擴(kuò)展并行輸出口時(shí),要有“串入并出”的移位寄存器配合(如74LS164或CD4094);串行口擴(kuò)展并行輸入口時(shí),要有“并入串出”的移位寄存器配合(如74LS165)。
(1)方式0用于擴(kuò)展輸出口。方式0的輸出時(shí)序如圖3-9所示。方式0用于擴(kuò)展I/O口輸出的電路如圖3-10所示。當(dāng)一個(gè)數(shù)據(jù)寫入串行口發(fā)送緩沖器SBUF時(shí),串行口TXD引腳輸出的移位脈沖將8位數(shù)據(jù)以fosc/12的波特率從RXD引腳輸出,數(shù)據(jù)(低位在前)逐位移入74LS164。發(fā)送完置中斷標(biāo)志TI為1,請求中斷。在再次發(fā)送數(shù)據(jù)之前,必須由軟件清TI為0。74LS164為串入并出移位寄存器(SIPO)。圖3-9方式0輸出時(shí)序圖3-10方式0擴(kuò)展輸出口電路
【例1】用單片機(jī)的串行口外接74LS164,控制八只LED滾動(dòng)顯示,用Protus繪制的電路如圖3-11所示。圖3-11例1電路
(2)方式0用于擴(kuò)展輸入口。方式0的輸入時(shí)序如圖3-12所示。方式0用于擴(kuò)展I/O口輸入,其電路如圖3-13所示。在滿足REN=1和RI=0的條件下,串行口即開始從RXD端以fosc/12的波特率輸入數(shù)據(jù)(低位在前),當(dāng)接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI為1,請求中斷。在再次接收數(shù)據(jù)之前,必須由軟件清RI為0。其中,74LS165為并入串出移位寄存器(PISO)。圖3-12方式0的輸入時(shí)序圖3-13方式0擴(kuò)展輸入口電路
【例2】用74LS165連接的8位撥碼開關(guān)從單片機(jī)串行口輸入控制八只LED的顯示,用Protus繪制的電路如圖3-14所示。圖3-14例2電路
2)串行口方式1
串行口定義為方式1時(shí),為波特率可調(diào)的10位數(shù)據(jù)的異步通信口UART。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如圖3-15所示。一幀信息包括1位起始位,8位數(shù)據(jù)位和1位停止位。圖3-15串行方式1的數(shù)據(jù)格式
(1)發(fā)送。發(fā)送時(shí),數(shù)據(jù)從TXD端輸出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,置中斷標(biāo)志TI為1。方式1所傳送的波特率取決于定時(shí)器1的溢出率和PCON中的SMOD位。方式1的發(fā)送時(shí)序如圖3-16所示。圖3-16方式1的發(fā)送時(shí)序
(2)接收。接收時(shí),由REN置1,允許接收,串行口采樣RXD,當(dāng)采樣由1到0跳變時(shí),確認(rèn)是起始位“0”,開始接收一幀數(shù)據(jù)。當(dāng)RI=0,且停止位為1或SM2=0時(shí),停止位進(jìn)入RB8位,同時(shí)置中斷標(biāo)志RI;否則信息將丟失。所以,采用方式1接收時(shí),應(yīng)先用軟件清除RI或SM2標(biāo)志。方式1的接收時(shí)序如圖3-17所示。圖3-17方式1的接收時(shí)序
(3)波特率。方式1波特率可變,由定時(shí)/計(jì)數(shù)器T1的計(jì)數(shù)溢出率來決定:
設(shè)計(jì)數(shù)初始值為x,那么每過256-x個(gè)機(jī)器周期,定時(shí)器溢出一次。為了避免因溢出而產(chǎn)生不必要的中斷,此時(shí)應(yīng)禁止T1中斷。溢出周期為 ,溢出率為溢出周期的倒數(shù),所以
在實(shí)際使用時(shí),通常是先確定波特率,再計(jì)算定時(shí)器T1的計(jì)數(shù)初值(常在這種場合稱其為時(shí)間常數(shù)):
然后進(jìn)行定時(shí)器的初始化。
定時(shí)器T1產(chǎn)生的常用波特率如表3-5所示。表3-5定時(shí)器T1產(chǎn)生的常用波特率
3)串行口方式2
在方式2下,串行口為11位UART,傳送波特率與SMOD有關(guān)。發(fā)送或接收的一幀數(shù)據(jù)包括1位起始位0,9位數(shù)據(jù)位(含1位附加的第9位,發(fā)送時(shí)為SCON中的TB8,接收時(shí)為RB8),1位停止位,數(shù)據(jù)格式如圖3-18所示。圖3-18方式2的數(shù)據(jù)格式
(1)數(shù)據(jù)輸出。CPU向SBUF寫入數(shù)據(jù)時(shí),就啟動(dòng)了串行口的發(fā)送過程。SCON中的TB8寫入輸出移位寄存器的第9位,8位裝入SBUF。方式2的發(fā)送時(shí)序如圖3-19所示。圖3-19方式2的發(fā)送時(shí)序
(2)數(shù)據(jù)輸入。軟件將接收允許位REN置為1后,接收器就以所選頻率的16倍速率開始采樣RXD引腳的電平狀態(tài)。當(dāng)檢測到RXD引腳發(fā)生負(fù)跳變時(shí),說明起始位有效,將其移入輸入移位寄存器,開始接收這一幀數(shù)據(jù)。方式2的接收時(shí)序如圖3-20所示。圖3-20方式2的接收時(shí)序
(3)波特率。方式2波特率固定,為fosc/32或fosc/64。如用公式表示則為
3)串行口方式3
方式3為波特率可變的11位UART通信方式。除了波特率不同以外,方式3和方式2工作過程完全相同。方式3的波特率與方式1完全相同。
4)串行口四種工作方式的比較
四種工作方式的區(qū)別主要表現(xiàn)在幀格式及波特率兩個(gè)方面,如表3-6所示。表3-6串行口四種工作方式的比較
3.串行口的初始化
51單片機(jī)的串行口需初始化后,才能完成數(shù)據(jù)的輸入、輸出。其初始化過程如下:
(1)按選定串行口的工作方式設(shè)定SCON的SM0、SM1兩位二進(jìn)制編碼。
(2)對于工作方式2或3,應(yīng)根據(jù)需要在TB8中寫入待發(fā)送的第9位數(shù)據(jù)。
(3)若選定的工作方式不是方式0,還需設(shè)定接收/發(fā)送的波特率。
(4)設(shè)定SMOD的狀態(tài),以控制波特率是否加倍。
(5)若選定工作方式1或3,則應(yīng)對定時(shí)器T1進(jìn)行初始化以設(shè)定其溢出率。
【例3】
51單片機(jī)的晶振頻率為11.059MHz,波特率為1200b/s,要求串口發(fā)送數(shù)據(jù)為8位,編寫它的初始化程序。
解假設(shè)SMOD=1,T1工作在方式2。初始化程序如下:3.2.4
51單片機(jī)之間的通信
1.雙機(jī)通信
距離較近的兩個(gè)51單片機(jī)系統(tǒng)可以將它們的串行口直接相連,實(shí)現(xiàn)雙機(jī)通信,如圖3-21所示。為了增加通信距離,減少通道和電源干擾,可以在通信線路上利用RS-232C等標(biāo)準(zhǔn)接口進(jìn)行雙機(jī)通信。實(shí)用的接口電路如實(shí)驗(yàn)板連接方法。圖3-21單片機(jī)雙機(jī)通信系統(tǒng)
2.多機(jī)通信
51單片機(jī)串行口的方式2和方式3有一個(gè)專門的應(yīng)用領(lǐng)域,即多機(jī)通信。所謂多機(jī)通信是指一臺(tái)主機(jī)和多臺(tái)從機(jī)之間的通信,構(gòu)成主從式多機(jī)分布通信系統(tǒng)。主機(jī)發(fā)送的信息可以傳輸?shù)礁鱾€(gè)從機(jī),各從機(jī)只能向主機(jī)發(fā)送信息,從機(jī)之間不能進(jìn)行相互通信。圖3-22為一種多機(jī)通信連接示意圖。圖3-22單片機(jī)多機(jī)通信系統(tǒng)多機(jī)通信的實(shí)現(xiàn),主要是依靠主、從機(jī)之間正確設(shè)置與判斷SM2和發(fā)送或接收的第9位數(shù)據(jù)(TB8或RB8)來完成的。多機(jī)通信過程如下:
(1)使所有從機(jī)的SM2置1,處于只接收地址幀的狀態(tài)。
(2)主機(jī)發(fā)送一幀地址信息,與所需從機(jī)聯(lián)絡(luò)。主機(jī)應(yīng)置RB8為1,表示發(fā)送的是地址。
(3)各從機(jī)接收到地址信息后,因RB8為1,置中斷標(biāo)志RI,向CPU申請中斷。中斷后,將所接收地址與本從機(jī)的地址相比較,對于地址相符的從機(jī),使SM2清0以接收主機(jī)隨后發(fā)來的所有信息;對于地址不相符的從機(jī),仍保持SM2為1的狀態(tài),對從機(jī)隨后發(fā)送的數(shù)據(jù)不予接收,直至發(fā)送新的地址幀。
(4)主機(jī)發(fā)送控制命令和數(shù)據(jù)信息給被尋址的從機(jī)。此時(shí),主機(jī)置RB8為0,表示發(fā)送的是數(shù)據(jù)或控制命令。對于沒選中的從機(jī),因?yàn)镾M2=1,RB8=0,所以不會(huì)產(chǎn)生中斷,不接收主機(jī)發(fā)送的信息。
3.PC機(jī)和單片機(jī)之間的通信
單片機(jī)具有控制能力強(qiáng)的優(yōu)點(diǎn),但不適于做大量的數(shù)據(jù)處理、查詢等。實(shí)際應(yīng)用中常將單片機(jī)作為下位機(jī)使用,主要實(shí)現(xiàn)數(shù)據(jù)采集、檢測與控制等功能。PC機(jī)通常作為上位機(jī)接收下位機(jī)采集的各種數(shù)據(jù),并進(jìn)行數(shù)據(jù)運(yùn)算、處理與管理等功能,同時(shí)向下位機(jī)發(fā)出各種指令。因此,實(shí)現(xiàn)PC機(jī)與用單片機(jī)間數(shù)據(jù)通信是十分重要的。通常PC機(jī)工作于查詢方式,而51單片機(jī)既可以工作于查詢方式,也可以工作于中斷方式。
PC機(jī)與單片機(jī)之間可以由RS-232C、RS-422A或RS-423等標(biāo)準(zhǔn)接口相連。
在PC機(jī)系統(tǒng)內(nèi)都裝有異步通信適配器,利用它可以實(shí)現(xiàn)異步串行通信。該適配器的核心元件是可編程的Intel8250芯片,它使PC機(jī)有能力與其他具有標(biāo)準(zhǔn)的RS-232C接口的計(jì)算機(jī)或設(shè)備進(jìn)行通信。而51單片機(jī)本身具有一個(gè)全雙工的串行口,因此只要配以電平轉(zhuǎn)換的驅(qū)動(dòng)電路、隔離電路,就可組成一個(gè)簡單可行的通信接口。同樣,PC機(jī)和單片機(jī)之間的通信也分為雙機(jī)通信和多機(jī)通信。 3.3項(xiàng)目分析及實(shí)施
3.3.1任務(wù)1-51單片機(jī)雙機(jī)串行通信
1.任務(wù)要求和分析
1)任務(wù)要求
甲機(jī)發(fā)送,乙機(jī)接收,甲機(jī)的S20按鍵通過串口控制乙機(jī)的LED燈D4和D5閃爍:
(1)甲機(jī)發(fā)送“A”,甲機(jī)和乙機(jī)的D4都閃爍;
(2)甲機(jī)發(fā)送“B”,甲機(jī)和乙機(jī)的D5都閃爍;
(3)甲機(jī)發(fā)送“C”,甲機(jī)和乙機(jī)的D4、D5都閃爍;
(4)甲機(jī)停止發(fā)送,甲機(jī)和乙機(jī)的D4、D5都停止閃爍。
2)任務(wù)分析
首先根據(jù)任務(wù)的要求將兩機(jī)串行口工作的方式和其中的參數(shù)設(shè)置好。
兩機(jī)的串行口采用相同的工作方式1,采用22.1184MHz晶體。甲機(jī)在本任務(wù)中只要發(fā)送數(shù)據(jù),所以甲機(jī)的SCON=0x40,而乙機(jī)要求接收數(shù)據(jù),所以乙機(jī)的SCON=0x50,定時(shí)器T1作波特率發(fā)生器使用,工作在方式2,其初值TH1=TL1=0xFA(250),PCON=0x00(SMOD=0)。
2.器件及設(shè)備選擇
要實(shí)現(xiàn)51單片機(jī)之間的雙機(jī)通信,可以采用兩個(gè)51單片機(jī)系統(tǒng),這里運(yùn)用我們的兩塊實(shí)驗(yàn)板,其上的單片機(jī)采用的是STC89C52。為了適應(yīng)兩機(jī)間不同的距離,利用RS-232C標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信,所以兩只單片機(jī)的串行通信線都經(jīng)過MAX232的電平轉(zhuǎn)換互相連接。因此本任務(wù)中使用的主要器件就是STC89C52和MAX232。另外為了檢驗(yàn)通信成功,我們要用按鍵控制發(fā)光二極管點(diǎn)亮。雙機(jī)通信的原理框圖如圖3-23所示。圖3-23雙機(jī)通信的框圖
3.任務(wù)實(shí)施
1)硬件原理圖設(shè)計(jì)
根據(jù)任務(wù)要求,將兩塊實(shí)驗(yàn)板的串口相連接就可以了。實(shí)驗(yàn)板的串行接口電路如圖3-24所示,U5是電平轉(zhuǎn)換芯片MAX232,其中的RXD和TXD兩線分別與單片機(jī)STC89C52的RXD和TXD連接,J2是DB9的串行接口。用串行通信線將兩機(jī)的DB9接口連接起來,就可以進(jìn)行雙機(jī)通信了,但注意甲機(jī)的TXD要和乙機(jī)的RXD相連,而甲機(jī)的RXD要和乙機(jī)的TX相連。另外,參見書后附錄中的實(shí)驗(yàn)板電路圖,S20按鍵是由P3.7控制,D4和D5分別由P1.0和P1.1控制。圖3-24實(shí)驗(yàn)板的串行接口電路
2)軟件程序設(shè)計(jì)
雙機(jī)工作的軟件由甲機(jī)發(fā)送軟件和乙機(jī)接收軟件組成。
甲機(jī)發(fā)送源程序:程序分析:
(1)putc_to_SerialPort()是串口發(fā)送數(shù)據(jù)的子函數(shù),這里采用查詢方式發(fā)送數(shù)據(jù)。語句“SBUF=c;”是將變量C的值送向SBUF寄存器發(fā)送出去。當(dāng)一個(gè)字節(jié)發(fā)送完成后硬件將自動(dòng)置TI為1,所以語句“while(TI==0);”是查詢TI的狀態(tài),若TI=0,說明數(shù)據(jù)未發(fā)送完,程序繼續(xù)查詢。若TI=1,說明數(shù)據(jù)已經(jīng)發(fā)送完畢,循環(huán)條件不成立,繼續(xù)執(zhí)行下面的語句。由于串行口中斷標(biāo)志位必須軟件清除,所以當(dāng)查詢到TI=1之后,緊接著要清除中斷標(biāo)志位,以便后面繼續(xù)發(fā)送數(shù)據(jù)。
(2)主程序首先完成甲機(jī)串行口工作方式和定時(shí)器T1工作方式的初始化,TI清0,開啟定時(shí)器T1,由于要求的四種類型操作是要能反復(fù)執(zhí)行的,所以放入while無限循環(huán)中。S20(P3.7)按鍵一旦為0,表明按鍵按下,檢測Operation_NO的值是幾按鍵就是第幾次按下。Operation_NO初始化為0,按鍵第一次按下時(shí)Operation_NO為1,執(zhí)行第一種操作:甲機(jī)的D4和D5燈都熄滅;Operation_NO為2,執(zhí)行第二種操作:調(diào)用putc_to_SerialPort子函數(shù),串口發(fā)送‘A’字符,甲機(jī)的D4燈閃爍,D5燈熄滅;Operation_NO為3,執(zhí)行第三種操作:調(diào)用putc_to_SerialPort子函數(shù),串口發(fā)送‘B’字符,甲機(jī)的D5燈閃爍,D4燈熄滅;Operation_NO為4,執(zhí)行第四種操作:調(diào)用putc_to_SerialPort子函數(shù),串口發(fā)送‘B’字符,甲機(jī)的D4和D5燈都閃爍。甲機(jī)燈設(shè)置的與乙機(jī)要求一致是為了檢驗(yàn)甲機(jī)的發(fā)送和乙機(jī)的接收數(shù)據(jù)是否正確。乙機(jī)接收源程序:程序分析:
乙機(jī)在本任務(wù)中是接收數(shù)據(jù)。首先對乙機(jī)的串行口工作方式和定時(shí)器T1工作方式的初始化,RI清0,開啟T1,先將乙機(jī)的D4和D5燈熄滅。查詢RI為1則表明接收完一字節(jié)數(shù)據(jù),將RI清0,檢查SBUF接收的數(shù)據(jù)是什么,SBUF為‘A’,則乙機(jī)的D4燈閃爍,D5燈熄滅;SBUF為‘B’,則乙機(jī)的D5燈閃爍,D4燈熄滅;SBUF為‘C’,則乙機(jī)的D4和D5燈都閃爍;串行口沒有接收到數(shù)據(jù)則將D4和D5燈熄滅。可見操作甲機(jī)的按鍵S20,乙機(jī)的D4和D5燈如果與甲機(jī)工作情況一致,表明乙機(jī)通過串行口正確地接收到了甲機(jī)發(fā)送的數(shù)據(jù),兩機(jī)通信成功。3.3.2任務(wù)2——單片機(jī)與PC機(jī)的串行通信
1.任務(wù)要求和分析
1)任務(wù)要求
完成PC機(jī)與單片機(jī)之間的數(shù)據(jù)通信,要求單片機(jī)發(fā)送一個(gè)字符給PC機(jī),PC機(jī)將收到的字符回送給單片機(jī),表示它已經(jīng)收到了這個(gè)字符。
通信協(xié)議:波特率為9600b/s,無奇偶校驗(yàn)位,8位數(shù)據(jù)位,1位停止位。
2)任務(wù)分析
在硬件設(shè)計(jì)方面:由于PC機(jī)串行口使用的是RS-232電平,而單片機(jī)的電平是TTL電平,兩者不兼容,所以在硬件設(shè)計(jì)上要使用電平轉(zhuǎn)換芯片,將單片機(jī)送出TTL電平轉(zhuǎn)換成RS-232電平之后送給PC機(jī),同理,PC機(jī)送出RS-232電平轉(zhuǎn)換成TTL電平之后再送給單片機(jī)。
在軟件程序方面:不但要寫單片機(jī)發(fā)送和接收數(shù)據(jù)的程序,還要寫PC機(jī)發(fā)送和接收數(shù)據(jù)的程序。先根據(jù)任務(wù)的要求將單片機(jī)串行口的工作方式和參數(shù)設(shè)置好。單片機(jī)的串行口采用工作方式1,采用22.1184MHz晶體;單片機(jī)在本任務(wù)中要發(fā)送數(shù)據(jù)也要接收數(shù)據(jù),所以REN=1;定時(shí)器T1作波特率發(fā)生器使用,工作在方式2,由于采用9600b/s波特率,其初值TH1=TL1=0xFA(250)。對于PC機(jī)方面的程序,可以使用“串口調(diào)試助手”來完成數(shù)據(jù)的發(fā)送和接收,免去自己開發(fā)PC機(jī)端程序的麻煩。
2.器件及設(shè)備選擇
PC機(jī)系統(tǒng)內(nèi)部裝有異步通信適配器,該適配器的核心元件是可編程的Intel8250芯片,能夠與具有標(biāo)準(zhǔn)RS-232C、RS-422、RS-485等接口的計(jì)算機(jī)或設(shè)備進(jìn)行通信。51單片機(jī)本身具有全雙工的串行口,當(dāng)配以電平轉(zhuǎn)換電路后就可以與PC機(jī)組成一個(gè)簡單可行的通信接口。通常PC機(jī)工作于查詢方式,而51單片機(jī)既可以工作于查詢方式,也可以工作于中斷方式。
將實(shí)驗(yàn)板的串口與PC機(jī)使用RS-232串行線連接好,安裝“串口調(diào)試助手”軟件并運(yùn)行。
3.任務(wù)實(shí)施
1)硬件原理圖設(shè)計(jì)
本任務(wù)采用一塊單片機(jī)實(shí)驗(yàn)板和一臺(tái)PC機(jī)。實(shí)驗(yàn)板上的串行口通信電路如圖3-24所示,用RS-232串口線將實(shí)驗(yàn)板的DB9串行接口與PC機(jī)的DB9串行接口連接好即可。
2)軟件程序設(shè)計(jì)
在進(jìn)行實(shí)驗(yàn)板與PC機(jī)通信時(shí),PC機(jī)上的程序就用SComAssistantV2.1串口調(diào)試助手的成熟軟件,而實(shí)驗(yàn)板上要給STC89C52編寫接收PC機(jī)發(fā)送過來的數(shù)據(jù)和發(fā)送數(shù)據(jù)到PC機(jī)的程序。
STC89C52串口通信源程序如下:程序分析:
(1)對T1和串口的初始化由函數(shù)init()完成,程序采用中斷方式接收PC機(jī)發(fā)送來的數(shù)據(jù)。當(dāng)單片機(jī)接收完一幀數(shù)據(jù)后,硬件置位接收中斷標(biāo)志位RI。在接收中斷服務(wù)函數(shù)中,將接收到的數(shù)據(jù)從SBUF中取走,并放入事先定義好的數(shù)據(jù)中第11個(gè)元素位置。
(2)主函數(shù)中,“if(RI=〖KG-1mm〗=1)”是查詢接收中斷標(biāo)志位,當(dāng)RI=1時(shí),清除接收中斷標(biāo)志位,并調(diào)用發(fā)送子函數(shù)。
(3)在send()發(fā)送函數(shù)中,由于采用的是查詢方式發(fā)送數(shù)據(jù),所以首先需要關(guān)掉串行口中斷。然后將放在數(shù)組str[]中的字符串逐字送給SBUF,由單片機(jī)的TXD引腳發(fā)送給PC機(jī)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025計(jì)算機(jī)系統(tǒng)日常維護(hù)合同
- 2025什么是集體合同
- 公正贈(zèng)與合同范例
- 活動(dòng)板供貨合同范例
- 公司提供勞務(wù)合同范例
- 正規(guī)家庭養(yǎng)殖合同范例
- 完整版100以內(nèi)加減法混合運(yùn)算4000道85
- 銅陵學(xué)院《數(shù)據(jù)結(jié)構(gòu)綜合實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 部編版語文九年級(jí)上冊第六單元寫作《學(xué)習(xí)改寫》教學(xué)設(shè)計(jì)
- 鐵嶺衛(wèi)生職業(yè)學(xué)院《審計(jì)溝通》2023-2024學(xué)年第一學(xué)期期末試卷
- 數(shù)字化轉(zhuǎn)型成熟度模型與評(píng)估(DTMM)國家標(biāo)準(zhǔn)解讀 2024
- 河南省名校八校聯(lián)考2024-2025學(xué)年高二上學(xué)期期中模擬考試語文試題(含答案解析)
- 2024中國工商銀行借貸合同范本
- 聘請專家的協(xié)議書(2篇)
- 2024年國家危險(xiǎn)化學(xué)品生產(chǎn)單位安全管理人員考試題庫(含答案)
- 《新的實(shí)驗(yàn)》教學(xué)課件1
- 《4.3用一元一次方程解決問題》教學(xué)設(shè)計(jì)
- 收二手貴重物品協(xié)議書范文
- 人教版七年級(jí)生物上冊第二單元第一章第二節(jié)種子植物課件
- 大學(xué)生心理健康教育(中南大學(xué)版)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 塔吊試題(有答案)201506
評(píng)論
0/150
提交評(píng)論