




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022/7/181第五章8051單片機(jī)的串行口原理及應(yīng)用 2022/7/182 通信:在實(shí)際應(yīng)用中,不但計(jì)算機(jī)與外部設(shè)備之間常常要進(jìn)行信息交換,而且計(jì)算機(jī)之間也需要交換信息,所有這些信息的交換均稱為“通信”。 隨著8051應(yīng)用范圍的不斷拓寬,單臺(tái)儀器儀表或控制器往往會(huì)帶有不止一個(gè)的單片機(jī),而多個(gè)智能儀器儀表或控制器在單片機(jī)應(yīng)用系統(tǒng)中又常常會(huì)構(gòu)成一個(gè)分布式采集、控制系統(tǒng),上層由PC進(jìn)行集中管理等。 單片機(jī)的通信功能也隨之得到發(fā)展。 通信的基本方式分為并行通信和串行通信兩種。 數(shù)據(jù)通信概述 2022/7/183 并行傳送方式與串行傳送方式 并行傳送方式 在數(shù)據(jù)傳輸時(shí),如果一個(gè)數(shù)據(jù)編碼字符的所有各
2、位都同時(shí)發(fā)送、并排傳輸,又同時(shí)被接收,則稱為并行傳送方式。并行傳送方式要求物理信道為并行內(nèi)總線或者并行外總線。 特點(diǎn):傳送速度快、效率高。但由于需要的傳送數(shù)據(jù)線多,因而傳輸成本高。并行數(shù)據(jù)傳輸?shù)木嚯x通常小于30米。而在計(jì)算機(jī)內(nèi)部的數(shù)據(jù)傳送都是并行傳送的。 2022/7/184 串行傳送方式 在數(shù)據(jù)傳輸時(shí),如果一個(gè)數(shù)據(jù)編碼字符的所有各位不是同時(shí)發(fā)送,而是按一定順序,一位接著一位在信道中被發(fā)送和接收,則稱為串行傳送方式。 串行傳送方式的物理信道為串行總線。 串行數(shù)據(jù)傳送方式的特點(diǎn)是成本低,但速度慢。 計(jì)算機(jī)與外界的數(shù)據(jù)傳送大多是串行的,其傳送距離可以從幾米直到幾千公里。 2022/7/185 圖5
3、1通信的兩種基本方式(a)并行通信; (b)串行通信2022/7/186打印機(jī)計(jì)算機(jī)網(wǎng)絡(luò)鼠標(biāo)掃描儀硬盤I2C SPIRS232USB常見的串行通信接口:2022/7/187按照信號(hào)傳輸?shù)姆较蚝屯瑫r(shí)性,分為單工方式、半雙工方式和全雙工方式三種。 單工方式信號(hào)(不包括聯(lián)絡(luò)信號(hào)) 在信道中只能沿一個(gè)方向傳送,而不能沿相反方向傳送的工作方式稱為單工方式。 半雙工方式通信的雙方均具有發(fā)送和接收信息的能力,信道也具有雙向傳輸性能,但是,通信的任何一方都不能同時(shí)既發(fā)送信息又接收信息,即在指定的時(shí)刻,只能沿某一個(gè)方向傳送信息。這樣的傳送方式稱為半雙工方式。 全雙工方式若信號(hào)在通信雙方之間沿兩個(gè)方向同時(shí)傳送,任
4、何一方在同一時(shí)刻既能發(fā)送又能接收信息,稱為全雙工方式。雙工方式大多采用雙線制。 單工方式、半雙工方式、全雙工方式2022/7/188 圖52串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式2022/7/189單工、雙工、半雙工方式單工:廣播雙工:電話半雙工:對(duì)講機(jī)2022/7/1810 在數(shù)據(jù)通信中,要保證發(fā)送的信號(hào)在接收端能被正確地接收,必須采用同步技術(shù)。常用的同步技術(shù)有兩種方式,一種稱為異步傳輸也稱起止同步方式,另一種稱為同步傳輸也稱同步字符同步方式。 異步傳輸異步傳輸以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個(gè)字符都用起始位、停止位包裝起來,在字符間允許有長(zhǎng)短不一的間隙。在單片機(jī)中
5、使用的串行通信都是異步方式。 異步傳輸和同步傳輸2022/7/1811 圖53串行異步傳送的字符格式(a)字符格式; (b)有空閑位的字符格式 2022/7/1812圖54 傳送ASCII碼字符5的波形圖 2022/7/1813 在串行異步傳送中,CPU與外設(shè)之間事先必須約定: 字符格式。 雙方要事先約定字符的編碼形式、奇偶校驗(yàn)形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加1個(gè)奇偶校驗(yàn)位、1個(gè)起始位和1個(gè)停止位共10位。當(dāng)然停止位也可大于1位。 波特率(Baudrate)。 波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)
6、之間存在如下關(guān)系: 波特率=位/字符字符/秒=位/秒 要求發(fā)送端與接收端的波特率必須一致。2022/7/1814 同步傳輸 同步傳輸用來對(duì)數(shù)據(jù)塊進(jìn)行傳輸,一個(gè)數(shù)據(jù)塊中包含著許多連續(xù)的字符,在字符之間沒有空閑。同步傳輸可以方便地實(shí)現(xiàn)某一通信協(xié)議要求的幀格式。計(jì)算機(jī)網(wǎng)絡(luò)通信基本上是這種。2022/7/1815 圖55 同步傳送 2022/7/1816 串行通信的傳送速率用于說明數(shù)據(jù)傳送的快慢,波特率表示串行通信時(shí)每秒鐘傳送”位” 的數(shù)目,比如1s傳送1bit,就是1波特。即1波特1bit/s (位/秒)串行通信常用的標(biāo)準(zhǔn)波特率在RS-232C標(biāo)準(zhǔn)中已有規(guī)定,如波特率為600、1200、2400、4
7、800、9600、19200等等。假若數(shù)據(jù)傳送速率為120字符/s,而每一個(gè)字符幀已規(guī)定為10個(gè)數(shù)據(jù)位,則傳輸速率為120101200bit/s,即波特率為1200,每一位數(shù)據(jù)傳送的時(shí)間為波特率的倒數(shù): T112000.833ms 波特率(BAUD RATE)2022/7/1817 計(jì)算機(jī)通信是一種數(shù)字信號(hào)的通信。 它要求傳送線的頻帶很寬,而在長(zhǎng)距離通訊時(shí),通常是利用電話線來傳送的,該線不可能有這樣寬的頻帶。如果用數(shù)字信號(hào)經(jīng)過傳送線直接通訊,信號(hào)就會(huì)畸變。信號(hào)的調(diào)制和解調(diào)2022/7/1818 因此要在發(fā)送端用調(diào)制器(Modulator)把數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào),在接收端用解調(diào)器(Demodu
8、lator)檢測(cè)此模擬信號(hào),再把它轉(zhuǎn)換成數(shù)字信號(hào)。 FSK(FrequencyShiftKeying)是一種常用的調(diào)制方法,它把數(shù)字信號(hào)的“1”與“0”調(diào)制成不同頻率的模擬信號(hào)。圖56調(diào)制與解調(diào)示意圖 2022/7/1819圖57 FSK調(diào)制法原理圖 2022/7/1820數(shù)據(jù)終端與調(diào)制器的接口圖510 RS-232C的引腳圖 2022/7/1821圖511 計(jì)算機(jī)與遠(yuǎn)方終端和當(dāng)?shù)亟K端連接示意圖 2022/7/1822調(diào)制解調(diào)器15V:邏輯1 15V:邏輯0RS232C標(biāo)準(zhǔn)美國(guó)電子工業(yè)協(xié)會(huì)EIA公布的串行總線標(biāo)準(zhǔn)DB-25DB-9最少3根線公用電話網(wǎng)ModemModem計(jì)算機(jī)計(jì)算機(jī)RS232C
9、RS232CRxD (3)TxD (2)地 (5)2022/7/1823一、 8051串行口結(jié)構(gòu) 串行數(shù)據(jù)通信主要有兩個(gè)技術(shù)問題,一個(gè)是數(shù)據(jù)傳送,另一個(gè)是數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)傳送主要解決傳送中的標(biāo)準(zhǔn)、數(shù)據(jù)幀格式及工作方式等。數(shù)據(jù)轉(zhuǎn)換要解決把數(shù)據(jù)進(jìn)行串、并行的轉(zhuǎn)換,這種轉(zhuǎn)換通常由通用異步接收發(fā)送器(UART) 電路來完成。數(shù)據(jù)發(fā)送端,要把并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù);數(shù)據(jù)接收端,要把串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)。80C51中已集成有UART,有的型號(hào)在內(nèi)部還集成了兩個(gè)UART。而在其它一些型號(hào)中又增加了新的串行口,如 8XC552中就增加了具有I2C總線功能的串行口。串行口及控制2022/7/1824串行通信接口
10、(1)UART (Universal Asynchronous Receiver/Transmitter 通用異步接收器/發(fā)送器(2)USRT (Universal Synchronous Receiver/Transmitter) 通用同步接收器/發(fā)送器8串并8并串發(fā)送接收1時(shí)鐘時(shí)鐘2022/7/18258051中的串行口是一個(gè)全雙工的異步串行通信接口,它可作UART(通用異步接收和發(fā)送器)用,也可作同步移位寄存器用。所謂全雙工的異步串行通信接口,是說該接口可以同時(shí)進(jìn)行接收和發(fā)送數(shù)據(jù),口內(nèi)的接收緩沖器和發(fā)送緩沖器在物理上是隔離的,即是完全獨(dú)立的??梢酝ㄟ^訪問特殊功能寄存器SBUF,來訪問接收
11、緩沖器和發(fā)送緩沖器。接收緩沖器具有雙緩沖的功能,即它在接收第一個(gè)數(shù)據(jù)字節(jié)后,能接收笫二個(gè)數(shù)據(jù)字節(jié)。但是在接收完第二個(gè)字節(jié)后,若笫一個(gè)數(shù)據(jù)字節(jié)還未取走,那么該數(shù)據(jù)字節(jié)將丟失。2022/7/1826圖512 MCS-51串行口的原理結(jié)構(gòu)圖 2022/7/1827 波特率發(fā)生器:主要由T1及內(nèi)部的一些控制開關(guān)和分頻器所組成。它提供串行口的時(shí)鐘信號(hào)為 TXCLOCK(發(fā)送時(shí)鐘)和 RXCLOCK(接收時(shí)鐘)。相應(yīng)的控制波特率發(fā)生器的特殊功能寄存器有 TMOD、TCON、TL1、TH1等。 2022/7/1828 串行口的內(nèi)部 串行數(shù)據(jù)緩沖寄存器SBUF有接收緩沖器SBUF和發(fā)送緩沖器SBUF,以便80
12、C51能以全雙工方式進(jìn)行通信。它們?cè)谖锢砩鲜歉綦x的,但是占用同一個(gè)地址(99H) 。 串行口控制寄存器SCON 串行數(shù)據(jù)輸入輸出引腳接收方式下,串行數(shù)據(jù)從RXD(P3.0)引腳輸入,串行口內(nèi)部在接收緩沖器之前還有移位寄存器,從而構(gòu)成了串行接收的雙緩沖結(jié)構(gòu),可以避免在數(shù)據(jù)接收過程中出現(xiàn)幀重疊錯(cuò)誤,即在下一幀數(shù)據(jù)來時(shí),前一幀數(shù)據(jù)還沒有讀走。發(fā)送方式下,串行數(shù)據(jù)通過TXD(P3.1)引腳輸出。 2022/7/1829 串行口控制邏輯接受來自波特率發(fā)生器的時(shí)鐘信號(hào)TXCLOCK(發(fā)送時(shí)鐘)和RXCLOCK(接收時(shí)鐘);控制內(nèi)部的輸入移位寄存器將外部的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù);控制內(nèi)部的輸出移位寄存器將內(nèi)
13、部的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出;控制串行中斷(RI和TI)。 2022/7/1830二、 80C51串行口控制 串行口狀態(tài)控制寄存器 SCON串行口狀態(tài)控制寄存器SCON用來控制串行通信的方式選擇、接收,指示串行口的中斷狀態(tài)。寄存器SCON既可字節(jié)尋址也可位尋址,字節(jié)地址為98H,位地址為98H9FH。其格式如下:位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1831 SM0(SCON.7),SM1(SCON.6)串行口工作方式選擇位。 SM0 SM1 工作方式 特 點(diǎn) 波 特 率 0 0 方式0 8位移
14、位寄存器 fosc/12 0 1 方式1 10位UART 可變 1 0 方式2 11位UART fosc/64或fosc/32 1 1 方式3 11位UART 可變表51 串行口工作方式選擇位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1832SM2(SCON.5)允許方式2、3中的多處理機(jī)通信位。方式0時(shí),SM20。方式1時(shí),若SM2l,只有接收到有效的停止位,接收中斷RI才置1。方式2和方式3時(shí),若SM21,則只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為1時(shí),才將接收到的前8位數(shù)據(jù)送入緩沖器SBUF中,并把R
15、I置1、同時(shí)向CPU申請(qǐng)中斷;如果接收到的第9位數(shù)據(jù)(RB8)為0,RI置0,將接收到的前8位數(shù)據(jù)丟棄。而當(dāng)SM20時(shí),則不論接收到的笫九位數(shù)據(jù)是0 或1 ,都將前8位數(shù)據(jù)裝入SBUF中,并申請(qǐng)中斷。 位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1833REN(SCON.4)允許串行接收位。REN1時(shí),允許串行接收;REN0時(shí),禁止串行接收。用軟件置位清除。TB8(SCON.3)方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。在通信協(xié)議中,常規(guī)定TB8作為奇偶校驗(yàn)位。在80C51多機(jī)通信中,TB8=0用來表示數(shù)據(jù)幀
16、;TB8=1表示是地址幀。用軟件置位清除。RB8(SCON.2)方式2和方式3中接收到的第9位數(shù)據(jù)。方式1中接收到的是停止位。方式0中不使用這一位。 位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1834TI(SCON1)發(fā)送中斷標(biāo)志位。方式 0中,在發(fā)送第 8位末尾置位;在其它方式時(shí),在發(fā)送停止位開始時(shí)設(shè)置。由硬件置位,用軟件清除。RI(SCON0)接收中斷標(biāo)志位。方式 0中,在接收第8位末尾置位;在其它方式時(shí),在接收停止位中間設(shè)置。由硬件置位,用軟件清除。系統(tǒng)復(fù)位后,SCON中所有位都被清除。位地址
17、9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1835其中最高位SMOD與串行口控制有關(guān),其它位與掉電方式有關(guān)。其格式如下: D7 D6 D5 D4 D3 D2 D1 D0SMOD GF1 GF0 PD IDLSMOD(PCON.7)串行通信波特率系數(shù)控制位。當(dāng)SMOD1時(shí),使波特率加倍。復(fù)位后,SMOD0。 電源控制寄存器 PCON2022/7/1836包含在物理上是隔離的兩個(gè)8位寄存器:發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器,它們共用一個(gè)地址99H。其格式如下: D7 D6 D5 D4 D3 D2 D1 D0 SD7
18、 SD6 SD5 SD4 SD3 SD2 SD1 SD0讀SBUF(MOVA,SBUF),訪問接收數(shù)據(jù)寄存器;寫SBUF(MOV SBUF,A),訪問發(fā)送數(shù)據(jù)寄存器。 串行數(shù)據(jù)寄存器SBUF系統(tǒng)復(fù)位后, SBUF中內(nèi)容不確定。2022/7/1837串行口的工作方式在串行口控制寄存器SCON中,SM0和SM1位決定串行口的工作方式。80C51串行口共有四種工作方式。 2022/7/18381 、串行口方式0 同步移位寄存器方式 當(dāng)SM00、SM10時(shí),串行口選擇方式0。這種工作方式實(shí)質(zhì)上是一種同步移位寄存器方式。數(shù)據(jù)傳輸波特率固定為(112)fosc。由RXD(P30)引腳輸入或輸出數(shù)據(jù)。由TX
19、D(P31)引腳輸出同步移位時(shí)鐘。接收發(fā)送的是8位數(shù)據(jù),傳輸時(shí)低位在前。幀格式如下: D0D1D2D3D4D5D6D72022/7/1839圖513 串行口工作方式0工作原理圖2022/7/1840發(fā)送當(dāng)執(zhí)行任何一條寫SBUF的指令(MOV SBUF,A)時(shí),就啟動(dòng)串行數(shù)據(jù)的發(fā)送。在執(zhí)行寫入SBUF的指令時(shí),選通內(nèi)部D觸發(fā)器置1 ,構(gòu)成發(fā)送移位寄存器的第9位,并使發(fā)送控制器開始發(fā)送。當(dāng)發(fā)送脈沖有效之后,移位寄存器的內(nèi)容由RXD(P3.0)引腳串行移位輸出;移位脈沖由TXD(P3l)引腳輸出。在發(fā)送有效的期間,每個(gè)機(jī)器周期,發(fā)送移位寄存器右移一位,在其左邊補(bǔ)0。當(dāng)數(shù)據(jù)最高位移到移位寄存器的輸出位
20、時(shí),原寫入第9位的 l正好移到最高位的左邊一位,由此向左的所有位均為 0,零檢測(cè)器通知發(fā)送控制器要進(jìn)行最后一次移位,并撤銷發(fā)送有效,同時(shí)使發(fā)送中斷標(biāo)志TI置位。至此,完成了一幀數(shù)據(jù)發(fā)送的全過程。若CPU響應(yīng)中斷,則執(zhí)行從0023H開始的串行口發(fā)送中斷服務(wù)程序。 2022/7/1841接收當(dāng)REN1(允許接收)且RI位清除時(shí),就會(huì)啟動(dòng)一次接收過程。在下一機(jī)器周期的S6P2時(shí)刻,接收控制器將1111 1110寫入接收移位寄存器,并在下一時(shí)鐘周期S1P1使接收控制器的接收有效,打開“與非門” ,同時(shí)由TXD引腳輸出移位脈沖。在移位脈沖控制下,接收移位寄存器的內(nèi)容每一個(gè)機(jī)器周期左移一位,同時(shí)由RXD引
21、腳接收一位輸入信號(hào)。每當(dāng)接收移位寄存器左移一位,原寫入的1111 1110也左移一位。當(dāng)最右邊的0移到最左邊時(shí),標(biāo)志著接收控制器要進(jìn)行最后一次移位。在最后一次移位即將結(jié)束時(shí),接收移位寄存器的內(nèi)容送入接收數(shù)據(jù)緩沖寄存器SBUF,然后在啟動(dòng)接收的第10個(gè)機(jī)器周期的S1P1時(shí),清除接收信號(hào),置位SCON中的RI,發(fā)出中斷申請(qǐng)。完成一幀數(shù)據(jù)的接收過程。若CPU響應(yīng)中斷,則執(zhí)行從0023H 開始的串行口接收中斷服務(wù)程序2022/7/1842在方式0工作時(shí),必須使SCON寄存器中的SM2位為“0”,這并不影響TB8位和RB8位。方式0發(fā)送或接收完8位數(shù)據(jù)后由硬件置位TI或RI中斷請(qǐng)求標(biāo)志,CPU在響應(yīng)中斷
22、后要用軟件清除TI或RI標(biāo)志。若串行口要作為并行口輸入輸出,這時(shí)必須設(shè)置“串入并出”或“并入串出”的移位寄存器來配合使用(如CD4094或CD4014等)。注意:2022/7/1843圖514 一種串行轉(zhuǎn)換為并行的方法 2022/7/18442 串行口方式110位UART 當(dāng) SM00、SM11時(shí),串行口選擇方式1。數(shù)據(jù)傳輸波特率由T1的溢出決定,可用程序設(shè)定。由 TXD(P3.1)引腳發(fā)送數(shù)據(jù)。由 RXD(P3.0)引腳接收數(shù)據(jù)。發(fā)送或接收一幀信息為10位:1位起始位(0)、8位數(shù)據(jù)位(低位在前)和l位停止位(1)。幀格式如下:起始D0 D1D2D3D4D5D6D7停止2022/7/1845
23、發(fā)送:當(dāng)執(zhí)行任何一條寫 SBUF的指令時(shí),就啟動(dòng)串行數(shù)據(jù)的發(fā)送。在執(zhí)行寫入SBUF的指令時(shí),也將1寫入發(fā)送移位寄存器的第9位(由SBUF和1個(gè)獨(dú)立的D觸發(fā)器構(gòu)成),并通知發(fā)送控制器有發(fā)送請(qǐng)求。實(shí)際上發(fā)送過程開始于16分頻計(jì)數(shù)器下次滿度翻轉(zhuǎn)(由全1變?nèi)?)后的那個(gè)機(jī)器周期的開始。每位的發(fā)送過程與16分頻計(jì)數(shù)器同步,而不是與“寫SBUF”同步。2022/7/1846圖515 串行口方式1發(fā)送工作原理圖2022/7/1847開始發(fā)送后的一個(gè)位周期,發(fā)送信號(hào)有效,開始將起始位送TXD引腳。一位時(shí)間后,數(shù)據(jù)信號(hào)有效。發(fā)送移位寄存器將數(shù)據(jù)由低位到高位順序輸出至TXD引腳。一位時(shí)間后,第一個(gè)移位脈沖出現(xiàn)將最
24、低數(shù)據(jù)位從右邊移出,同時(shí)0從左邊擠入。當(dāng)最高數(shù)據(jù)位移至發(fā)送移位寄存器的出端時(shí),先前裝入的第9位的l,正好在最高數(shù)據(jù)位的左邊,而它的右邊全部為0。這種狀態(tài)被零檢測(cè)器檢測(cè)到,在第10個(gè)位周期(16分頻計(jì)數(shù)器回0時(shí)),發(fā)送控制器進(jìn)行最后一次移位,清除發(fā)送信號(hào),同時(shí)使SCON寄存器中TI置位,完成了一幀數(shù)據(jù)發(fā)送的全過程。若CPU響應(yīng)中斷,則執(zhí)行從0023H開始的串行口發(fā)送中斷服務(wù)程序。2022/7/1848接收當(dāng)REN1且清除RI后,若在RXD引腳上檢測(cè)到一個(gè)1到0的跳變,立即啟動(dòng)一次接收。同時(shí),復(fù)位16分頻計(jì)數(shù)器,使輸入位的邊沿與時(shí)鐘對(duì)齊,并將1FFH(即9個(gè)l)寫入接收移位寄存器。接收控制器以波特
25、率的16倍的速率繼續(xù)對(duì)RXD(P30)引腳進(jìn)行檢測(cè),計(jì)數(shù)器的16個(gè)狀態(tài)把每一位的時(shí)間分為16份,對(duì)每一位時(shí)間的第7、8、9個(gè)計(jì)數(shù)狀態(tài),位檢測(cè)器對(duì)RXD端的值采樣,這三個(gè)狀態(tài)理論上對(duì)應(yīng)于每一位的中央值。若發(fā)送端與接收端的波特率有差異,就會(huì)發(fā)生偏移,只要這種差異在允許范圍內(nèi),就不至于發(fā)生錯(cuò)位或漏碼。在上述三個(gè)狀態(tài)下,取得三個(gè)采樣值,其中至少有兩個(gè)值是一致的,即采用3取2的多數(shù)表決法,可抑制噪聲。 2022/7/1849圖516 串行口方式1接收工作原理圖2022/7/1850如果在第1個(gè)時(shí)鐘周期中接收到的不是0,說明它不是一幀數(shù)據(jù)的起始位,則復(fù)位接收電路,繼續(xù)檢測(cè)RXD引腳上l到0的跳變。如果接收
26、到的是起始位,就將其移入接收移位寄存器,然后接收該幀的其它位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當(dāng)起始位移到最左邊時(shí),接收控制器將控制進(jìn)行最后一次移位,把接收到的9位數(shù)據(jù)送入接收數(shù)據(jù)緩沖器SBUF和RB8,而且置位RI。在進(jìn)行最后一次移位時(shí),能將數(shù)據(jù)送入接收數(shù)據(jù)緩沖器SBUF和RB8,而且置位RI的條件是:RI0 即上一幀數(shù)據(jù)接收完成時(shí)發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中數(shù)據(jù)已被取走。SM20或接收到的停止位1。若以上兩個(gè)條件中有一個(gè)不滿足,將不可恢復(fù)地丟失接收到的這一幀信息。 2022/7/18513 串行口方式2和3 11位UART 當(dāng)SM01、SM10時(shí),串行口選擇方式2;當(dāng)
27、SM11、SM01時(shí),串行口選擇方式3。由TXD(P3l)引腳發(fā)送數(shù)據(jù)。由RXD(P30)引腳接收數(shù)據(jù)。發(fā)送或接收一幀信息為11位:1位起始位(0)、8位數(shù)據(jù)位(低位在前) 、1位可編程位和1位停止位(l)。發(fā)送時(shí)可編程位TB8可設(shè)置為1或0,接收時(shí)可編程位進(jìn)入SCON寄存器的RB8位。方式2的波特率是固定的,為振蕩器頻率的1/32或1/64。方式3的波特率則由T1的溢出決定,可用程序設(shè)定。 2022/7/1852幀格式如下: 起 始D0D1D2D3D4D5D6D7D8 停 止發(fā)送當(dāng)執(zhí)行任何一條寫SBUF的指令時(shí),就啟動(dòng)串行數(shù)據(jù)的發(fā)送。在執(zhí)行寫入SBUF的指令時(shí),也將 1寫入發(fā)送移位寄存器的第
28、 9位,并通知發(fā)送控制器有發(fā)送請(qǐng)求。實(shí)際上發(fā)送過程開始于16分頻計(jì)數(shù)器下次滿度翻轉(zhuǎn)(由全1變?nèi)?)后的那個(gè)機(jī)器周期的開始。所以每位的發(fā)送過程與16分頻計(jì)數(shù)器同步,而不是與“寫SBUF”同步。 2022/7/1853圖517 串行口工作方式2工作原理圖2022/7/1854開始發(fā)送后的一個(gè)位周期,發(fā)送信號(hào)有效,開始將起始位送TXD引腳。一位時(shí)間后,數(shù)據(jù)信號(hào)有效。發(fā)送移位寄存器將數(shù)據(jù)由低位到高位順序輸出至 TXD引腳。一位時(shí)間后,第一個(gè)移位脈沖出現(xiàn)將最低數(shù)據(jù)位從右邊移出,同時(shí)0從左邊擠入。當(dāng)最高數(shù)據(jù)位移至發(fā)送移位寄存器的輸出端時(shí),先前裝入的第 9位的 1,正好在最高數(shù)據(jù)位的左邊,而它的右邊全部為0
29、。在第10個(gè)位周期間 (16分頻計(jì)數(shù)器回0時(shí)),發(fā)送控制器進(jìn)行最后一次移位,清除發(fā)送信號(hào),同時(shí)使TI置位。 2022/7/1855接收當(dāng)RENl且清除RI后,若在RXD引腳上檢測(cè)到一個(gè)l到0的跳變,立即啟動(dòng)一次接收。同時(shí),復(fù)位16分頻計(jì)數(shù)器,使輸入位的邊沿與時(shí)鐘對(duì)齊,并將1FFH(即9個(gè)1)寫入接收移位寄存器。接收控制器以波特率的16倍的速率繼續(xù)對(duì) RXD引腳進(jìn)行檢測(cè),對(duì)每一位時(shí)間的第7、8、9個(gè)計(jì)數(shù)狀態(tài)的采樣值用多數(shù)表決法,當(dāng)兩次或兩次以上的采樣值相同時(shí),采樣值予以接受。如果在第1個(gè)時(shí)鐘周期中接收到的不是0,就復(fù)位接收電路,繼續(xù)檢測(cè)RXD引腳上 1到 0的跳變。如果接收到的是起始位,就將其移
30、入接收移位寄存器,然后接該幀的其它位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當(dāng)起始位移到最左邊時(shí),接收控制器將控制進(jìn)行最后一次移位,把接收到的9位數(shù)據(jù)送入接收數(shù)據(jù)緩沖器SBUF和RB8,而且置位RI。 2022/7/1856在進(jìn)行最后一次移位時(shí),能將數(shù)據(jù)送入接收數(shù)據(jù)緩沖器SBUF和RB8,而且置位RI的條件是: RI0; SM20或接收到的停止位1。 若以上兩個(gè)條件中有一個(gè)不滿足,將不可恢復(fù)地丟失接收到的這一幀信息。 2022/7/1857多處理機(jī)通信方式 某些應(yīng)用系統(tǒng)中,往往需要對(duì)多個(gè)對(duì)象進(jìn)行控制,采用一個(gè)單片機(jī)來控制系統(tǒng)中一個(gè)對(duì)象,然后采用多處理機(jī)通信方式實(shí)現(xiàn)應(yīng)用系統(tǒng)的整個(gè)功能。
31、在串行口控制寄存器SCON中,設(shè)有多處理機(jī)通信位SM2(SCON5)。當(dāng)串行口以方式2或方式3接收時(shí),若SM21,只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為1時(shí),才將數(shù)據(jù)送入接收緩沖器SBUF,并使RI置1,申請(qǐng)中斷,否則數(shù)據(jù)將丟失;若SM20,則無論第9位數(shù)據(jù)(RB8)是1還是0,都能將數(shù)據(jù)裝入SBUF,并且發(fā)中斷。利用這一特性,便可實(shí)現(xiàn)主機(jī)與多個(gè)從機(jī)之間的串行通信。2022/7/1858圖518 80C51多機(jī)分布式系統(tǒng)示意圖2022/7/1859 系統(tǒng)初始化時(shí),將所有從機(jī)中的SM2位均設(shè)置為1,并處于允許串行口中斷接收狀態(tài)。 主機(jī)欲與某從機(jī)通信,先向所有從機(jī)發(fā)出所選從機(jī)的地址,從機(jī)地址符合后,
32、接著才發(fā)送命令或數(shù)據(jù)。 在主機(jī)發(fā)地址時(shí),置第9位數(shù)據(jù)(TB8)為1,表示主機(jī)發(fā)送的是地址幀; 當(dāng)主機(jī)呼叫某從機(jī)聯(lián)絡(luò)正確后,主機(jī)發(fā)送命令或數(shù)據(jù)幀時(shí),將第9位數(shù)據(jù)(TB8)清0。 2022/7/1860 各從機(jī)由于SM2置1,將響應(yīng)主機(jī)發(fā)來的第9位數(shù)據(jù)(RB8)為1的地址信息。從機(jī)響應(yīng)中斷后,有兩種不同的操作: 若從機(jī)的地址與主機(jī)點(diǎn)名的地址不相同,則該從機(jī)將繼續(xù)維持SM2為l,從而拒絕接收主機(jī)后面發(fā)來的命令或數(shù)據(jù)信息,等待主機(jī)的下一次點(diǎn)名。 若從機(jī)的地址與主機(jī)點(diǎn)名的地址相同,該從機(jī)將本機(jī)的SM2清0,繼續(xù)接收主機(jī)發(fā)來的命令或數(shù)據(jù),響應(yīng)中斷。2022/7/18611、串行口的波特率發(fā)生器及波特率計(jì)算
33、 方式0時(shí)的波特率由振蕩器的頻率(fosc)所確定:波特率為fosc/12。 方式2時(shí)的波特率由振蕩器的頻率(fosc)和SMOD位(PCON7)所確定: 當(dāng)SMOD位1時(shí),波特率fosc/32;當(dāng)SMOD0時(shí),波特率fosc/64。 方式1和3時(shí)的波特率由定時(shí)器T1的溢出率和SMOD(PCON7)所確定。 串行口的應(yīng)用2022/7/1862(1)用定時(shí)器T1產(chǎn)生波特率 定時(shí)器T1的溢出率與它的工作方式有關(guān):定時(shí)器T1工作于方式0:此時(shí)定時(shí)器T1相當(dāng)于一個(gè)13位的計(jì)數(shù)器。 式中:TC13位計(jì)數(shù)器初值; X中斷服務(wù)程序的機(jī)器周期數(shù),在中斷服務(wù)程序中重新對(duì)定時(shí)器置數(shù)。2022/7/1863式中:T
34、C16位計(jì)數(shù)器初值; X中斷服務(wù)程序的機(jī)器周期數(shù),在中斷服務(wù)程序中重新對(duì)定時(shí)器置數(shù)。定時(shí)器Tl工作于方式2:此時(shí)定時(shí)器T1工作于一個(gè)8位可重裝的方式,用TL1計(jì)數(shù),用TH1裝初值。 定時(shí)器T1工作于方式1:此時(shí)定時(shí)器T1相當(dāng)于一個(gè)16位的計(jì)數(shù)器。定時(shí)器T1的溢出率=fosc/(12(2nTC) )2022/7/1864常用波特率fosc(MHz)SMODTH1初值1920011.059210FDH960011.059200FDH480011.059200FAH240011.059200F4H120011.059200E8H表52 串行口常用波特率及初值2022/7/1865串行通信應(yīng)用 方式0
35、 【應(yīng)用一】流水燈 采用80C51的串行口外接CD4094擴(kuò)展8位并行口,如圖所示,CD4094的各個(gè)輸出端均接一發(fā)光二極管,要求發(fā)光二極管從左到右流水顯示。 2022/7/1866 ORG 0000H LJMP MAIN ORG 2000HMAIN:MOV SCON,#00H ;置串行口工作方式0 MOV A,#01H :最高位燈先亮 CLR P1.1 ;關(guān)閉并行輸出(避象傳輸過程中, ;各LED的“暗紅”現(xiàn)象)OUT0:MOV SBUF,A ;開始串行輸出OUT1:JNB TI,OUT1 ;輸出完否? CLR TI ;完了,清TI標(biāo)志,以備下次發(fā)送 SETB P1.1 ;打開并行口輸出 A
36、CALL DELAY ;延時(shí)一段時(shí)間 RL A ;循環(huán)右移 CLR P1.1 ;關(guān)閉并行輸出 SJMP OUT0 ;循環(huán)DELAY: ;延時(shí)子程序,不再重復(fù) END2022/7/1867【應(yīng)用二】點(diǎn)對(duì)點(diǎn)通信 單片機(jī)1中有5個(gè)存放在30H34H單元中數(shù)據(jù)發(fā)送給單片機(jī)2,單片機(jī)2收到該5個(gè)數(shù)據(jù)要存放在50H54H單元中,要求采用4.8k波特率進(jìn)行傳送,兩臺(tái)單片機(jī)振蕩頻率均為6MHz。 兩臺(tái)單片機(jī)發(fā)送和接收數(shù)據(jù)之前需要一“握手”信號(hào)“55H”,互相詢問對(duì)方是否準(zhǔn)備好。任一單片機(jī)接收到對(duì)方的“握手”信號(hào)“55H”,均置本機(jī)的F0(PSW.5)標(biāo)志位為“1”,表明本機(jī)已經(jīng)知道對(duì)方準(zhǔn)備就緒,可以進(jìn)行發(fā)送和
37、接收操作。方式1的編程和應(yīng)用 2022/7/1868 兩臺(tái)單片機(jī)的定時(shí)器T1采用工作方式2,可以避免計(jì)數(shù)溢出后用軟件重裝定時(shí)初值。先計(jì)算定時(shí)器T1的初值,取SMOD=0 : 定時(shí)器T1的溢出率=波特率32/2SMOD =480032/20 =153600然后求出其對(duì)應(yīng)的計(jì)數(shù)初值為: X=2nfosc/(T1的溢出率12) =286106/(15360012)253=0FDH 為了簡(jiǎn)便起見,采用10位的串口方式1進(jìn)行異步通信。2022/7/1869單片機(jī)1的程序: ORG 0000H LJMP START ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCO
38、N,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,該語句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 SETB TR1 ;T1開始工作2022/7/1870LAB0 :MOV SBUF,#55H;發(fā)送出“握手”信號(hào) JNB TI,$ CLR TI JNB RI,$ CLR RI MOV A,SBUF CJNE A,#55H,LAB0 SETB F0LAB1: MOV R0,#30HLAB2: MOV SBUF, R0 INC R0 JNB TI,$ CLR TI CJNE R0,#34H,LAB2 END2022/7/1871單片
39、機(jī)2的程序: ORG 0000H LJMP START ORG 0023H LJMP INPUT ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,該語句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;開中斷 SETB ES ;允許串行口中斷 SETB TR1 ;T1開始工作 LJMP $2022/7/1872INPUT:JNB RI,LAB3 JB F0, LAB1 MOV A,SBUF; CJNE
40、A,#55H,LAB0 SETB F0; MOV SBUF,#55H;發(fā)送出“握手”信號(hào)LAB0:CLR RI RETILAB1:MOV R0,SBUF INC R0 CJNE R0,#55H,LAB2 CLR ESLAB2:CLR RI; RETILAB3:CLR TI; RETI END2022/7/1873例:試編寫雙機(jī)通信程序。甲、乙雙機(jī)均為串行口方式1,并以定時(shí)器T1的方式2為波特率發(fā)生器,波特率為2400。波特率的計(jì)算:這里使用6MHz晶振,以T1的方式2制定波特率。此時(shí)T1相當(dāng)于一個(gè)8位的計(jì)數(shù)器。計(jì)算定時(shí)器T1的計(jì)數(shù)初值: 2smod fosc 1 波特率= 32 12 28TH
41、1TH1=28(2SMODfosc)(波特率3212) =256(206106)(24003212) =2566.5=249.5=FAH 2022/7/1874 甲機(jī)發(fā)送:將以片內(nèi)RAM的78H及77H的內(nèi)容為首地址、以76H及75H的內(nèi)容減1為末地址的數(shù)據(jù)塊內(nèi)容,通過串行口傳至乙機(jī)。例:(78H) 20H;首地址高位(77H)00H(76H)20H;末地址高位 (75H)20H 即要求程序?qū)⑵釸AM的2000H20lFH中的內(nèi)容輸出到串行口。對(duì)數(shù)據(jù)塊首、末地址的傳送以查詢方式進(jìn)行,而數(shù)據(jù)的傳送以中斷方式進(jìn)行。 2022/7/1875ORG0000HSJMPTRANSORG 0023H ;串
42、行口中斷入口 AJMP SINTORG0030HTRANS:MOV TMOD,20H;置T1為定時(shí)器方式2 MOVTL1,0FAH ;置T1定時(shí)常數(shù) MOV TH1,0FAH SETB EA ;允許中斷 CLR ES ;關(guān)串行口中斷MOVPCON,#00H;波特率不倍增 CLR TI ;清發(fā)送中斷MOV SCON,40H ;置串行口方式1MOV SBUF,78H ;輸出首地址2022/7/1876WAIT1:JNB TI,WAITI ;查詢等待發(fā)送結(jié)束 CLR TIMOVSBUF,77HWAIT2:JNB TI,WAIT2 ;查詢等待發(fā)送結(jié)束 CLR TI MOV SBUF,76H ;輸出末地
43、址WAIT3:JNB TI,WAIT3 CLR TIMOV SBUF,75HWAIT4:JNB TI,WAIT4 CLR TISETB ES ;允許串行口中斷 2022/7/1877MOV DPH,78H;輸出數(shù)據(jù)塊中第1個(gè)數(shù)據(jù) MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A SJMP$;中斷等待ORG0200H;串行口中斷服務(wù)程序SINT:PUSH DPL ;保護(hù)現(xiàn)場(chǎng) PUSH DPH PUSH A INC77H;地址加1MOVA,77HJNZJP1INC78H2022/7/1878JP1:MOV A,78H CJNE A,76H,END1 ;判數(shù)據(jù)傳送是
44、否結(jié)束,未;結(jié)束則轉(zhuǎn)END1MOV A,77HCJNE A,75H,END1 CLR ES ;結(jié)束,關(guān)串行口中斷ESCOM:POP A;恢復(fù)現(xiàn)場(chǎng) POP DPH POP DPL RETIEND1:MOV DPH,78H;數(shù)據(jù)輸出未結(jié)束,則繼續(xù)發(fā)送 MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A RETI 2022/7/1879 乙機(jī)接收乙機(jī)通過RXD引腳接收甲機(jī)發(fā)來的數(shù)據(jù),接收波特率與甲機(jī)一樣。接收的第1、2字節(jié)是數(shù)據(jù)塊的首地址,第3、4字節(jié)是數(shù)據(jù)塊的末地址減1,第5字節(jié)開始是數(shù)據(jù),接收到的數(shù)據(jù)依次存入數(shù)據(jù)塊首地址開始的存儲(chǔ)器中。 ORG0000HSJMPR
45、ECEIVE;乙機(jī)接收ORG0023HAJMPRSINT;串行口中斷入口2022/7/1880ORG0030HRECEIVE:MOV TMOD,#20H;設(shè)T1為定時(shí)器方式2MOVTL1,0FAH ;置T1定時(shí)常數(shù) MOV TH1,0FAH SETB EA ;允許中斷 CLR ES ;關(guān)串行口中斷CLR TI ;清發(fā)送中斷 MOV SCON,50H ;置串行口方式1、接收CLR 20H ;置地址標(biāo)志(20H0,為;地址;20H1,為數(shù)據(jù)) MOV 70H,78H SJMP$;中斷等待 ORG0200H 2022/7/1881RSINT:PUSH DPL ;保護(hù)現(xiàn)場(chǎng) PUSH DPH PUSH
46、ACC MOV A,R0 PUSH ACC JB 20H,DATA ;判別接收的是地址還是數(shù)據(jù),是數(shù);據(jù),轉(zhuǎn)移 MOV R0,70H ;是地址,分別送入78H75H中去 MOV A,SBUF MOV R0,ADEC 70HCLR RI MOV A, 74H CJNE A,70H,RETURN ;是地址,轉(zhuǎn)結(jié)束 SETB 20H;地址已接收完,置接收數(shù)據(jù)標(biāo)志 2022/7/1882RETURN:POP ACC ;恢復(fù)現(xiàn)場(chǎng) MOV R0,A POP ACC POP DPH POP DPLRETIDATA:MOV DPH,78H;接收數(shù)據(jù) MOV DPL,77H MOV A,SBUF MOVX DP
47、TR,A ;將數(shù)據(jù)送入片外RAM CLR RI2022/7/1883INC 77H ;地址加 1 MOV A,77H JNZ DATA1 INC 78H DATA1MOV A,76H CJNZ A,78H,RETURN MOVA,75H CJNE A,77H,RETURN CLR ES ;結(jié)束,關(guān)串行口中斷 AJMP RETURN 2022/7/1884方式3【應(yīng)用三】主、從機(jī)通信設(shè)有一多機(jī)通信系統(tǒng),該系統(tǒng)由一個(gè)主機(jī)和3個(gè)從機(jī)組成。主機(jī)和從機(jī)之間可雙向通信,從機(jī)和從機(jī)之間通信必須經(jīng)過主機(jī),此時(shí)主機(jī)僅僅相當(dāng)于一數(shù)據(jù)收發(fā)器。2022/7/1885主機(jī)只發(fā)送自己內(nèi)存單元40H43H四個(gè)數(shù)據(jù)給從機(jī)2,
48、從機(jī)2將接收到的數(shù)據(jù)存到內(nèi)存單元50H53H中,則參考程序如下: 主機(jī)的程序: ORG 0000H LJMP START ORG 0023H;串口中斷入口地址 LJMP SEND ORG 1000HSTART:MOV TMOD,#20H;T1工作模式2 MOV SCON,#0F8H;置串行口工作方式 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 SETB EA;開中斷 SETB ES;允許串行口中斷 SETB TR1;T1開始工作2022/7/1886INT: MOV SBUF,#02H;發(fā)送從機(jī)號(hào) MOV R0,#40H; LJMP $SEND: CLR TB8;準(zhǔn)備
49、發(fā)送數(shù)據(jù) MOV SBUF,R0 INC R0 CJNE R0,#44H,LAB; CLR ES;串口中斷完成LAB: CLR TI;為下次發(fā)送數(shù)據(jù)作準(zhǔn)備 RETI END2022/7/1887從機(jī)2的程序: ORG 0000H LJMP START ORG 0023H LJMP INPUT NAME EQU #2 ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#0F8H ;置串行口工作方式 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;開中斷 SETB ES ;允許串行口中斷
50、SETB TR1 ;T1開始工作 LJMP $2022/7/1888INPUT:JNB RB8,LAB1;判接收的是地址還是數(shù)據(jù) MOV A,SBUF; CJNE A,NAME,LAB0;不是本機(jī)號(hào),則返回 CLR SM2;準(zhǔn)備接收主機(jī)數(shù)據(jù)LAB0:CLR RI;為下次接收作準(zhǔn)備 RETILAB1:MOV R0,SBUF INC R0 CJNE R0,#54H,LAB2 SETB SM2; CLR ES;LAB2:CLR RI; RETI END2022/7/1889【應(yīng)用四】PC機(jī)與單片機(jī)通信 單片機(jī)異步通信的一個(gè)重要應(yīng)用實(shí)例是與PC機(jī)進(jìn)行通信。上位機(jī)PC機(jī)的串口通信軟件多采用高級(jí)語言來編寫
51、(如VC+6.0等),可以在許多資料或網(wǎng)絡(luò)上方便地查閱。由于PC機(jī)的串行口為RS232接口,所以通信時(shí)可以選用RS232接口芯片。下面主要介紹單片機(jī)每隔一段時(shí)間向PC機(jī)輪流送數(shù)55H和AAH,并接收PC機(jī)送來的數(shù)據(jù),且轉(zhuǎn)送到P1口。2022/7/1890 ORG 0000H LJMP START ORG 1000HSTART:MOV TMOD,#20H;T1工作模式2 MOV PCON,#80H;SMOD=1 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 MOV SCON,#50H;置串行口工作方式 MOV R0,#0AAH;準(zhǔn)備送出的數(shù) SETB TR1;T1開始工作
52、2022/7/1891WAIT:MOV A,R0 CPL A MOV R0,A MOV SBUF,A LCALL DELAY JBC TI,WAIT1 ;如果TI等于1,則清TI并轉(zhuǎn)WAIT1 AJMP WAITWAIT1:JBC RI,READ ;如果RI等于1,則清RI并轉(zhuǎn)READ AJMP WAIT1READ:MOV A,SBUF ;將取得的數(shù)送P1口 MOV P1,A LJMP WAITDELAY:MOV R7,#0FFH ;延時(shí)子程序 DJNZ R7,$ RET END2022/7/1892例: 通過串行口發(fā)送帶奇偶校驗(yàn)位的數(shù)據(jù)塊ASCII碼由7位組成,其最高位可作為奇偶校驗(yàn)位用。數(shù)
53、據(jù)塊通過串行口發(fā)送和接收,采用8位異步通信,波特率為1200,已知fosc11.0592MHz。從內(nèi)部RAM單元20H3FH中取出ASCII碼加上奇偶校驗(yàn)位之后發(fā)出。設(shè)串行口為方式1,定時(shí)器/計(jì)數(shù)器T1為方式2作為串行口的波特率發(fā)生器。SMOD0TH1232E8H 2022/7/1893ORG0100HMOVTMOD,#20H;設(shè)T1為方式2MOVTL1,#0E8H;T1定時(shí)常數(shù) MOVTH1,#0E8H CLR ESSETBTR1;啟動(dòng)T1MOVSCON,#01000000B;設(shè)串行口為方式1MOVR0,#20H;設(shè)發(fā)送數(shù)據(jù)區(qū)首址MOVR7,#32;發(fā)送32個(gè)ASCII碼數(shù)據(jù)LOOP:MOV
54、 A,R0;取ASCII碼數(shù)據(jù)ACALL SP-OUT;調(diào)用串行口發(fā)送子程序INCR0;未發(fā)送完,則繼續(xù)DJNZR7,LOOP2022/7/1894串行口發(fā)送子程序SP-OUT:MOV C,P;設(shè)奇校驗(yàn)位CPLCMOVACC.7,CMOVSBUF,A;帶校驗(yàn)位發(fā)送JNBTI,$;發(fā)送等待CLRTIRET2022/7/1895例 通過串行口接收帶奇偶校驗(yàn)位的數(shù)據(jù)塊。把接收到的32個(gè)字節(jié)數(shù)據(jù)存放到20H3FH中,波特率仍為1200,若奇校驗(yàn)出錯(cuò),將進(jìn)位標(biāo)志C置1 。ORG0100HMOVTMOD,#20H;設(shè)T1為定時(shí)器方式2 MOVTL1,#0E8H;設(shè)T1時(shí)間常數(shù)MOVTH1,#0E8HSET
55、BTR1;啟動(dòng)T1 MOV SCON,#01010000B;設(shè)串行口為方式1 CLR ESMOVR0,#20H;接收緩沖區(qū)首址MOVR7,#32;接收字節(jié)計(jì)數(shù)器2022/7/1896LOOP:ACALLSP-IN;調(diào)用帶奇校驗(yàn)的串行口接; 收子程序 JCERROR;校驗(yàn)錯(cuò),轉(zhuǎn)出錯(cuò)處理MOVR0,A;存入INCR0DJNZR7,LOOP;未接收完,則繼續(xù) ERROR:;校驗(yàn)錯(cuò),處理SP-IN:JNBRI,$CLRRIMOVA,SBUF;接收一個(gè)字節(jié)MOVC,P;檢查奇校驗(yàn)位,若出錯(cuò),C=1CPLCANLA,#7FH;去掉校驗(yàn)位后的ASCII碼數(shù)據(jù)RET2022/7/1897例:串行口方式2時(shí),
56、附加的第9位數(shù)據(jù)為SCON中的TB8,它由軟件置位或清0, 作為數(shù)據(jù)的奇偶校驗(yàn)位,試對(duì)其發(fā)送和接收進(jìn)行編程。PIPL:PUSH PSW ;保護(hù)現(xiàn)場(chǎng) PUSH A CLR TI ;清0發(fā)送中斷標(biāo)志 MOV A,R0 ;取數(shù)據(jù) MOV C,P ;奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送 INC R0 ;數(shù)據(jù)指針加1 POP A ;恢復(fù)現(xiàn)場(chǎng) POP PSW RETI ;中斷返回2022/7/1898PIPL: PUSH PSW ;保護(hù)現(xiàn)場(chǎng) PUSH A CLR RI ;清0接收中斷標(biāo)志 MOV A,SUBF ;接收數(shù)據(jù) MOV C,P ;
57、取奇偶校驗(yàn)位 JNC L1 ;偶校驗(yàn)時(shí)轉(zhuǎn)L1 JNB RB8,ERR ;奇校驗(yàn)時(shí)RB8為0轉(zhuǎn)出錯(cuò)處理 SJMP L2L1: JB RB8,ERR ;偶校驗(yàn)時(shí)RB8為1轉(zhuǎn)出錯(cuò)處理L2: MOV R0,A ;奇偶校驗(yàn)對(duì)時(shí)存入數(shù)據(jù) INC R0 ;修改指針 POP A ;恢復(fù)現(xiàn)場(chǎng) POP PSW RETI ;中斷返回ERR: ;出錯(cuò)處理 RETI ;中斷返回2022/7/1899 例:設(shè)有甲、乙兩臺(tái)單片機(jī),以工作方式2、全雙工串行通信、每幀為11位、可程控的第9位數(shù)據(jù)位用于奇偶校驗(yàn)的補(bǔ)偶位。編出能實(shí)現(xiàn)如下功能的程序: 甲機(jī):每發(fā)送1幀信息,乙機(jī)對(duì)接收的數(shù)據(jù)進(jìn)行奇偶校驗(yàn),若補(bǔ)偶正確,則乙機(jī)向甲機(jī)發(fā)出“
58、數(shù)據(jù)發(fā)送正確”的信息(例中以00H作為回答信號(hào)),甲機(jī)接收到該回答信號(hào)后再發(fā)送下1字節(jié);若奇偶校驗(yàn)錯(cuò),則乙機(jī)發(fā)出“數(shù)據(jù)發(fā)送不正確”的信息(例中以AAH作為回答信號(hào))給甲機(jī),要求甲機(jī)再次發(fā)送原數(shù)據(jù),直至發(fā)送正確。甲機(jī)發(fā)送128個(gè)字節(jié)后就停止發(fā)送。 乙機(jī):接收甲機(jī)發(fā)送來的數(shù)據(jù)并進(jìn)行奇偶校驗(yàn),與此同時(shí)發(fā)出相應(yīng)的回答信息(即00H或AAH),直到接收完128個(gè)字節(jié)為止。2022/7/18100雙工串行口應(yīng)答式通信流程圖 (a)甲機(jī)發(fā)送流程圖; (b)乙機(jī)發(fā)送流程圖 解:能實(shí)現(xiàn)上述通信要求的甲、乙機(jī)的流程圖。2022/7/18101 圖516雙工串行口應(yīng)答式通信流程圖(a)甲機(jī)發(fā)送流程圖; (b)乙機(jī)發(fā)
59、送流程圖 2022/7/18102甲機(jī)主程序: ORG 0000H LJMP MAINT ;轉(zhuǎn)至主程序入口處 ORG 0023H ;串行中斷入口 LJMP INTSE1 ;轉(zhuǎn)至中斷服務(wù)程序 ORG 2100HMAINT: MOV PCON,80H ;波特率加倍 MOV SCON,90H ;置工作方式2并允許接收 MOV DPTR,ADDR1 ;置數(shù)據(jù)塊指針 MOV R0,80H ;設(shè)置發(fā)送字節(jié)數(shù)初值 SETB EA ;CPU開中斷 SETB ES ;允許串行口中斷 MOVX A,DPTR ;取第1個(gè)發(fā)送數(shù)據(jù) MOV C,P ;奇偶標(biāo)志位送C MOV TB8,C ;奇偶標(biāo)志位送TB8 MOV S
60、UBF,A ;發(fā)送數(shù)據(jù) SJMP $ ;等待中斷2022/7/18103INTSE1: JB RI,LOOP1 ;檢測(cè)是否接收口中斷,是則轉(zhuǎn) CLR TI ;是發(fā)送中斷,則先清除該標(biāo)志 SJMP ENDT1 ;轉(zhuǎn)至ENDT1處LOOP1:CLR RI ;是接收中斷,則先清除該標(biāo)志 MOV A,SBUF ;取乙機(jī)的應(yīng)答信息 CJNE A,00H,LOOP2 ;發(fā)送不正確轉(zhuǎn) INC DPTR ;修改地址指針 MOVX A,DPTR ;取下1個(gè)發(fā)送數(shù)據(jù) MOV C,P MOV TB8,C ;將奇偶校驗(yàn)位送TB8 MOV SUBF,A ;啟動(dòng)串行口,發(fā)送新的數(shù)據(jù) DJNZ R0,ENDT1 ; 128
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黃銅產(chǎn)品采購(gòu)合同范本
- 寺廟白蟻防治合同范本
- 2025至2030年中國(guó)二層車板車數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 深圳鋪面裝修合同范本
- 年綠化維護(hù)合同范本
- 二零二五年度合同糾紛上訴狀模板制作與使用說明
- 二零二五年度農(nóng)業(yè)機(jī)械設(shè)備租賃與農(nóng)業(yè)保險(xiǎn)服務(wù)合同
- 2025年度游戲引擎開發(fā)授權(quán)許可合同
- 二零二五年度果樹病蟲害防治與生態(tài)保護(hù)承包合同
- 二零二五年度海洋經(jīng)濟(jì)園區(qū)招商合作委托
- 《綠色建筑設(shè)計(jì)原理》課件
- 中醫(yī)館裝修合同范本
- 學(xué)習(xí)與科技的融合主題班會(huì)
- 《直播銷售》課件-項(xiàng)目一 認(rèn)識(shí)直播與直播銷售
- 2025年南京科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025-2030年中國(guó)航空配餐行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資前景規(guī)劃研究報(bào)告
- 新課標(biāo)背景下的跨學(xué)科學(xué)習(xí)內(nèi)涵、設(shè)置邏輯與實(shí)踐原則
- 母嬰分離產(chǎn)婦的護(hù)理
- 2025年全國(guó)高考體育單招政治時(shí)事填空練習(xí)50題(含答案)
- 2025教科版一年級(jí)科學(xué)下冊(cè)教學(xué)計(jì)劃
- 人教版高一上學(xué)期數(shù)學(xué)(必修一)期末考試卷(附答案)
評(píng)論
0/150
提交評(píng)論