單片機(jī)原理與應(yīng)用-基于匯編、C51及混合編程第8章串行口通信_(tái)第1頁(yè)
單片機(jī)原理與應(yīng)用-基于匯編、C51及混合編程第8章串行口通信_(tái)第2頁(yè)
單片機(jī)原理與應(yīng)用-基于匯編、C51及混合編程第8章串行口通信_(tái)第3頁(yè)
單片機(jī)原理與應(yīng)用-基于匯編、C51及混合編程第8章串行口通信_(tái)第4頁(yè)
單片機(jī)原理與應(yīng)用-基于匯編、C51及混合編程第8章串行口通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩91頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 第第8章章 串行口通信串行口通信2主要內(nèi)容主要內(nèi)容 8.1 串行通信的概念串行通信的概念 8.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器 8.3 串行口串行口1的工作方式的工作方式 8.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置 8.5 串行口串行口2的相關(guān)寄存器的相關(guān)寄存器 8.6串行口串行口2的工作方式的工作方式 8.7 串行口的應(yīng)用串行口的應(yīng)用 8.8 RS-232串行標(biāo)準(zhǔn)串行標(biāo)準(zhǔn) 8.9 RS485串行接口串行接口 8.10 SPI串行接口概述串行接口概述 8.11 SPI串行數(shù)據(jù)通信串行數(shù)據(jù)通信 8.12 SPI接口的應(yīng)用接口的應(yīng)用38.1 串行通信的概念串行通信的概念

2、 串行通信是按一位一位的順序傳送數(shù)據(jù),串行通信方式又串行通信是按一位一位的順序傳送數(shù)據(jù),串行通信方式又分為分為同步通信同步通信和和異步通信異步通信兩種。兩種。同步通信同步通信:發(fā)送方和接收方用同一個(gè)時(shí)鐘控制信號(hào)發(fā)送方和接收方用同一個(gè)時(shí)鐘控制信號(hào)同步字符同步字符N個(gè)字節(jié)的連續(xù)數(shù)據(jù)校驗(yàn)字符校驗(yàn)字符48.1 串行通信的概念串行通信的概念異步通信是一種將數(shù)據(jù)以一個(gè)字符為單位進(jìn)行傳送的通信方式異步通信是一種將數(shù)據(jù)以一個(gè)字符為單位進(jìn)行傳送的通信方式傳送一個(gè)字符又稱(chēng)為一幀信息傳送一個(gè)字符又稱(chēng)為一幀信息發(fā)送與接收之間無(wú)時(shí)鐘信號(hào)控制,發(fā)送與接收之間無(wú)時(shí)鐘信號(hào)控制,發(fā)送和接收的速率要求相同發(fā)送和接收的速率要求相同

3、起始位起始位:位于一幀數(shù)據(jù)的:位于一幀數(shù)據(jù)的開(kāi)頭,邏輯開(kāi)頭,邏輯“0”電平信號(hào),電平信號(hào),用來(lái)通知接收設(shè)備開(kāi)始接用來(lái)通知接收設(shè)備開(kāi)始接收一幀信息收一幀信息數(shù)據(jù)位數(shù)據(jù)位:緊跟起始位:緊跟起始位之后的是數(shù)據(jù)位,對(duì)之后的是數(shù)據(jù)位,對(duì)51內(nèi)核單片機(jī)來(lái)說(shuō),內(nèi)核單片機(jī)來(lái)說(shuō),低位在前,高位在后低位在前,高位在后第第9位:常用于對(duì)串行位:常用于對(duì)串行通信數(shù)據(jù)進(jìn)行奇偶校驗(yàn)通信數(shù)據(jù)進(jìn)行奇偶校驗(yàn)停止位停止位:邏輯:邏輯“1”電平信號(hào),電平信號(hào),應(yīng)大于應(yīng)大于或等于一個(gè)位數(shù)據(jù)的時(shí)間或等于一個(gè)位數(shù)據(jù)的時(shí)間。在發(fā)送完。在發(fā)送完一幀信息后,用于發(fā)送的數(shù)據(jù)線一直一幀信息后,用于發(fā)送的數(shù)據(jù)線一直處于高電平狀態(tài),等待再次發(fā)送處于高

4、電平狀態(tài),等待再次發(fā)送58.1 串行通信的概念串行通信的概念串行通信可分為單工、半雙工和全雙工串行通信可分為單工、半雙工和全雙工3種方式種方式單工方式只有一根數(shù)據(jù)線,數(shù)據(jù)只能按照一個(gè)固定的方向傳送單工方式只有一根數(shù)據(jù)線,數(shù)據(jù)只能按照一個(gè)固定的方向傳送 半雙工方式的數(shù)據(jù)可以由甲向乙傳送,也可以由乙向甲傳半雙工方式的數(shù)據(jù)可以由甲向乙傳送,也可以由乙向甲傳送,但是不能在兩個(gè)方向上同時(shí)傳送送,但是不能在兩個(gè)方向上同時(shí)傳送全雙工方式可以在同一時(shí)刻實(shí)現(xiàn)雙向傳送。全雙工方式可以在同一時(shí)刻實(shí)現(xiàn)雙向傳送。在串行通信中,用波特率衡量通信速度的快慢。波特率是指每在串行通信中,用波特率衡量通信速度的快慢。波特率是指每

5、秒鐘傳送的二進(jìn)制數(shù)的位數(shù)秒鐘傳送的二進(jìn)制數(shù)的位數(shù)單位:?jiǎn)挝唬何晃?秒秒(bps) 字節(jié)字節(jié)/秒秒(Bps)波特率(波特率(bps)=1個(gè)字符的二進(jìn)制位數(shù)個(gè)字符的二進(jìn)制位數(shù) Bps68.1 串行通信的概念串行通信的概念STC12C5A60S2單片機(jī)具有2個(gè)UART工作方式的串行口接收緩沖器接收緩沖器SBUF地址:地址:99H發(fā)送緩沖器發(fā)送緩沖器SBUF地址:地址:99H串行口串行口1接收緩沖器接收緩沖器S2BUF地址:地址:9BH發(fā)送緩沖器發(fā)送緩沖器S2BUF地址:地址:9BH串行口串行口278.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器STC12C5A60S2單片機(jī)的串行口單片機(jī)的串行口1 與

6、與8個(gè)特殊功能寄存器相關(guān)個(gè)特殊功能寄存器相關(guān)串行控制寄存器串行控制寄存器SCON電源控制寄存器電源控制寄存器PCON輔助寄存器輔助寄存器AUXR獨(dú)立波特率發(fā)生器寄存器獨(dú)立波特率發(fā)生器寄存器BRT喚醒控制寄存器喚醒控制寄存器WAKE_CLKO中斷寄存器中斷寄存器IE、IP、IPH。88.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器1.串行控制寄存器串行控制寄存器SCON,地址為,地址為98H,可進(jìn)行位尋址,可進(jìn)行位尋址D7D6D5D4D3D2D1D0SM0/FESM1SM2RENTB8RB8TIRISM0/FE:寄存器:寄存器PCON中的中的SMOD0位為位為1時(shí),時(shí),該位用于幀錯(cuò)誤檢測(cè)該位用于幀

7、錯(cuò)誤檢測(cè)(FE)。當(dāng)檢測(cè)到停止位當(dāng)檢測(cè)到停止位無(wú)效時(shí),硬件會(huì)將該位無(wú)效時(shí),硬件會(huì)將該位置置1,必須由軟件清零,必須由軟件清零SMOD0位為位為0時(shí),時(shí),SM0、SM1兩位一起確定串行口兩位一起確定串行口1的工作方式的工作方式SM0SM1工作方式功能說(shuō)明波特率00方式0同步串行移位寄存器方式當(dāng)AUXR寄存器中的位UART_M0 x6=0時(shí),波特率等于fosc/12;UART_M0 x6=1時(shí),波特率等于fosc/201方式18位異步通信(2SMOD/32)(定時(shí)/計(jì)數(shù)器T1的溢出率或獨(dú)立波特率發(fā)生器的溢出率)10方式29位異步通信(2SMOD/32) fosc11方式39位異步通信與方式1相同S

8、M2:在方式在方式0中,該位必須為中,該位必須為0;在方式在方式2和方式和方式3中,該位為中,該位為1時(shí),時(shí),只有接收到的第只有接收到的第9位數(shù)據(jù)位數(shù)據(jù)RB8位為位為1時(shí),接收才能有效。時(shí),接收才能有效。在方式在方式1中,該中,該位為位為1時(shí),只有正確接收到停止位時(shí),時(shí),只有正確接收到停止位時(shí),接收才能有效接收才能有效REN:允許串行接收控:允許串行接收控制位。制位。當(dāng)該位為當(dāng)該位為1時(shí),允時(shí),允許接收信息;許接收信息;當(dāng)該位為當(dāng)該位為0時(shí),禁止接收信息。時(shí),禁止接收信息。TB8:發(fā)送數(shù)據(jù)的第:發(fā)送數(shù)據(jù)的第9位位RB8:接收數(shù)據(jù)的第:接收數(shù)據(jù)的第9位位TI:串行口:串行口1發(fā)送中發(fā)送中斷請(qǐng)求標(biāo)

9、志位斷請(qǐng)求標(biāo)志位RI:串行口:串行口1接收中接收中斷請(qǐng)求標(biāo)志位斷請(qǐng)求標(biāo)志位98.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器2.電源控制寄存器電源控制寄存器PCON,地址為,地址為87HD7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD:波特率倍頻選擇位。:波特率倍頻選擇位。該位置該位置1,串行口,串行口1工作在方式工作在方式1、2、3時(shí)波特率加倍;時(shí)波特率加倍;該位為該位為0,各工作方式的波特,各工作方式的波特率不加倍率不加倍SMOD0:幀錯(cuò)誤檢測(cè)有效控制位。:幀錯(cuò)誤檢測(cè)有效控制位。該位置該位置1,SCON寄存器中的寄存器中的SM0/FE位用于位用于

10、FE功能;功能;該位為該位為0,SCON寄存器中的寄存器中的SM0/FE位用于方式選擇。位用于方式選擇。108.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器3.輔助寄存器輔助寄存器AUXR,地址為,地址為8EHD7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRSUART_M0 x6:串行口:串行口1方式方式0的的通信速度控制位。通信速度控制位。UART_M0 x6=0,方式,方式0的波特的波特率為系統(tǒng)時(shí)鐘頻率的率為系統(tǒng)時(shí)鐘頻率的12分頻;分頻;UART_M0 x6=1,方式,方式0的波特的波特率為率為fosc/2。BRT

11、R:獨(dú)立波特率發(fā)生器運(yùn)行控制位。:獨(dú)立波特率發(fā)生器運(yùn)行控制位。BRTR=0時(shí),不允許獨(dú)立波特率發(fā)生器工時(shí),不允許獨(dú)立波特率發(fā)生器工作;作;BRTR=1時(shí)時(shí),允許獨(dú)立波特率發(fā)生器工作允許獨(dú)立波特率發(fā)生器工作BRTx12:獨(dú)立波特率發(fā)生器計(jì)數(shù)控制位。:獨(dú)立波特率發(fā)生器計(jì)數(shù)控制位。BRTx12=0時(shí),獨(dú)立波特率發(fā)生器的計(jì)數(shù)時(shí),獨(dú)立波特率發(fā)生器的計(jì)數(shù)時(shí)鐘源為系統(tǒng)時(shí)鐘頻率時(shí)鐘源為系統(tǒng)時(shí)鐘頻率fosc的的12分頻;分頻;BRTx12=1,獨(dú)立波特率發(fā)生器的計(jì)數(shù)時(shí),獨(dú)立波特率發(fā)生器的計(jì)數(shù)時(shí)鐘源為系統(tǒng)時(shí)鐘頻率。鐘源為系統(tǒng)時(shí)鐘頻率。S1BRS:串行口:串行口1的波特率發(fā)生器選擇位。的波特率發(fā)生器選擇位。S1BR

12、S=0時(shí),選擇定時(shí)時(shí),選擇定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1作為串作為串行口行口1的波特率發(fā)生器;的波特率發(fā)生器;S1BRS=1時(shí),選擇獨(dú)立波特率發(fā)生器作為時(shí),選擇獨(dú)立波特率發(fā)生器作為串行口串行口1的波特率發(fā)生器的波特率發(fā)生器118.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器4.獨(dú)立波特率發(fā)生器寄存器獨(dú)立波特率發(fā)生器寄存器BRT,地址為,地址為9CH 獨(dú)立波特率發(fā)生器是專(zhuān)門(mén)用于控制串行通信速度的定時(shí)獨(dú)立波特率發(fā)生器是專(zhuān)門(mén)用于控制串行通信速度的定時(shí)器,與定時(shí)器,與定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1工作于方式工作于方式2的情況相似。的情況相似。BRT用于保用于保存重裝時(shí)間常數(shù)的一個(gè)存重裝時(shí)間常數(shù)的一個(gè)8位寄存器位寄存器

13、注意:注意:串行口串行口2 2:只能使用獨(dú)立波特率發(fā)生器控制發(fā)送與接收,只能使用獨(dú)立波特率發(fā)生器控制發(fā)送與接收,串行口串行口1 1:既可以選擇既可以選擇T1T1作為波特率發(fā)生器,也可以選擇獨(dú)立波作為波特率發(fā)生器,也可以選擇獨(dú)立波特率發(fā)生器。特率發(fā)生器。串行口串行口1 1和串行口和串行口2 2不能同時(shí)使用獨(dú)立波特率發(fā)生器,不能同時(shí)使用獨(dú)立波特率發(fā)生器,128.2 串行口串行口1的相關(guān)寄存器的相關(guān)寄存器5. 喚醒控制寄存器喚醒控制寄存器WAKE_CLKO,地址為,地址為8FHD7D6D5D4D3D2D1D0PCAWAKEUPRXD_PIN_IET1_PIN_IET0_PIN_IELVD_WAKEB

14、RTCLKOT1CLKOT0CLKORXD_PIN_IE=0時(shí),禁止時(shí),禁止P3.0/RxD引腳的引腳的下降沿置位下降沿置位RI,也禁止,也禁止RxD引腳喚醒掉電引腳喚醒掉電模式;模式;RXD_PIN_IE=1時(shí),允許時(shí),允許P3.0/RxD引腳的引腳的下降沿將下降沿將RI置置1,并且,并且RxD引腳的下降沿能引腳的下降沿能夠喚醒掉電模式夠喚醒掉電模式138.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0串行口串行口1工作在方式工作在方式0,作同步移位寄存器使用,作同步移位寄存器使用D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRT

15、x12EXTRAMS1BRSUART_M0 x6:串行口:串行口1方式方式0的的通信速度控制位。通信速度控制位。UART_M0 x6=0,方式,方式0的波特的波特率為系統(tǒng)時(shí)鐘頻率的率為系統(tǒng)時(shí)鐘頻率的12分頻;分頻;UART_M0 x6=1,方式,方式0的波特的波特率為率為fosc/2。148.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0 串行口數(shù)據(jù)由串行口數(shù)據(jù)由RxD引腳輸入或輸出引腳輸入或輸出,同步移位脈沖通過(guò)同步移位脈沖通過(guò)TxD引腳輸出引腳輸出, 發(fā)送、接收均為發(fā)送、接收均為8位數(shù)據(jù)位數(shù)據(jù)發(fā)送過(guò)程:發(fā)送過(guò)程:在TI=0的條件下,執(zhí)行MOV SBUF,A指令,啟動(dòng)發(fā)送 注意:

16、注意:發(fā)送順序:發(fā)送順序:低位在前,高位在后低位在前,高位在后發(fā)送完一幀數(shù)據(jù)后,由發(fā)送完一幀數(shù)據(jù)后,由硬件將發(fā)送中斷標(biāo)志位硬件將發(fā)送中斷標(biāo)志位TITI置置1 1,向,向CPUCPU發(fā)發(fā)出中斷請(qǐng)求。出中斷請(qǐng)求。若要再次發(fā)送數(shù)據(jù),若要再次發(fā)送數(shù)據(jù),必須先通過(guò)程序?qū)⒈仨毾韧ㄟ^(guò)程序?qū)ITI位清位清0 0。158.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0 串行口數(shù)據(jù)由串行口數(shù)據(jù)由RxD引腳輸入或輸出引腳輸入或輸出,同步移位脈沖通過(guò)同步移位脈沖通過(guò)TxD引腳輸出引腳輸出, 發(fā)送、接收均為發(fā)送、接收均為8位數(shù)據(jù)位數(shù)據(jù)接收過(guò)程:接收過(guò)程:在RI=0的條件下,接收允許控制位REN置1時(shí),處于

17、接收狀態(tài)接收完一幀數(shù)據(jù)后,硬件將接收到的數(shù)據(jù)存入接收緩沖器SBUF,并將中斷標(biāo)志位RI置1,向CPU發(fā)出中斷請(qǐng)求 注意:注意:接收順序:順序:先收到的是低位,后收到的是高位先收到的是低位,后收到的是高位若要繼續(xù)接收數(shù)據(jù),若要繼續(xù)接收數(shù)據(jù),必須先通過(guò)程序?qū)⒈仨毾韧ㄟ^(guò)程序?qū)IRI位清位清0 0。168.3 串行口串行口1的工作方式的工作方式8.3.2方式方式18位數(shù)據(jù)位數(shù)據(jù),低位在前高位在后,低位在前高位在后發(fā)送過(guò)程:發(fā)送過(guò)程:在在TI為為0的條件下的條件下,執(zhí)行將數(shù)據(jù)寫(xiě)入,執(zhí)行將數(shù)據(jù)寫(xiě)入SBUF的指令的指令時(shí),啟動(dòng)發(fā)送過(guò)程。時(shí),啟動(dòng)發(fā)送過(guò)程。在內(nèi)部移位脈沖的控制下在內(nèi)部移位脈沖的控制下,TxD

18、引腳首先發(fā)送起始位、引腳首先發(fā)送起始位、8位數(shù)據(jù)、停止位,位數(shù)據(jù)、停止位,發(fā)發(fā)送完畢后送完畢后TI置置1,向,向CPU發(fā)出中斷請(qǐng)求發(fā)出中斷請(qǐng)求178.3 串行口串行口1的工作方式的工作方式8.3.2方式方式1接收過(guò)程:接收過(guò)程:在在RI為為0、接收允許控制位、接收允許控制位REN被置被置1的條件下,的條件下,CPU處于接收狀態(tài)。當(dāng)硬件檢測(cè)到處于接收狀態(tài)。當(dāng)硬件檢測(cè)到RxD引腳由高引腳由高電平變?yōu)榈碗娖綍r(shí),開(kāi)始接收一幀數(shù)據(jù),并同步波電平變?yōu)榈碗娖綍r(shí),開(kāi)始接收一幀數(shù)據(jù),并同步波特率發(fā)生器。特率發(fā)生器。188.3 串行口串行口1的工作方式的工作方式8.3.2方式方式1接收過(guò)程:接收過(guò)程:(1)RI=

19、0(2)SM2=0或接收到的停止位為或接收到的停止位為1時(shí)時(shí) 硬件自動(dòng)將接收到的數(shù)據(jù)裝入接收緩沖器硬件自動(dòng)將接收到的數(shù)據(jù)裝入接收緩沖器SBUF,同時(shí)將停止位寫(xiě)入同時(shí)將停止位寫(xiě)入RB8,置中斷標(biāo)志位,置中斷標(biāo)志位RI為為1,向,向CPU提出中斷請(qǐng)求。提出中斷請(qǐng)求。若不滿足兩個(gè)條件,接收到的數(shù)據(jù)無(wú)法裝入接收緩沖器SBUF,數(shù)據(jù)丟失。 注意:注意:無(wú)論滿足這兩個(gè)條件與否,接收控制器將繼續(xù)檢測(cè)無(wú)論滿足這兩個(gè)條件與否,接收控制器將繼續(xù)檢測(cè)RxDRxD引腳,接收下一幀數(shù)據(jù),所以在接收的過(guò)程中,應(yīng)及時(shí)清接收引腳,接收下一幀數(shù)據(jù),所以在接收的過(guò)程中,應(yīng)及時(shí)清接收中斷標(biāo)志位中斷標(biāo)志位RIRI,以免數(shù)據(jù)丟失,以免

20、數(shù)據(jù)丟失198.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3 方式方式2 與方式與方式3唯一的區(qū)別唯一的區(qū)別在于方式在于方式2的波特率是固定的,的波特率是固定的,而方式而方式3的波特率與波特率發(fā)生器有關(guān)的波特率與波特率發(fā)生器有關(guān) 方式方式1與方式與方式3的區(qū)別是:的區(qū)別是:方式方式1是是8位的串行異步通信、位的串行異步通信、 方式方式3是是9位串行異步通信位串行異步通信208.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3發(fā)送過(guò)程:發(fā)送過(guò)程: 將發(fā)送中斷標(biāo)志位將發(fā)送中斷標(biāo)志位TI清清0,并通過(guò)位傳送指令將,并通過(guò)位傳送指令將第第9位數(shù)據(jù)

21、寫(xiě)入位數(shù)據(jù)寫(xiě)入TB8中,然后執(zhí)行中,然后執(zhí)行MOV SBUF,A指令,指令,啟動(dòng)發(fā)送過(guò)程。一幀數(shù)據(jù)發(fā)送完畢,硬件將發(fā)送中斷啟動(dòng)發(fā)送過(guò)程。一幀數(shù)據(jù)發(fā)送完畢,硬件將發(fā)送中斷標(biāo)志位標(biāo)志位TI置置1218.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3接收過(guò)程:接收過(guò)程: 允許控制位允許控制位REN被置被置1后處于接收狀態(tài)。接收到后處于接收狀態(tài)。接收到的第的第9位(而不是停止位)裝入到位(而不是停止位)裝入到RB8位中位中 注意:注意:在方式在方式2 2和方式和方式3 3中,中,SM2SM2為為1 1時(shí),只有接收到的第時(shí),只有接收到的第9 9位數(shù)位數(shù)據(jù)據(jù)RB8RB8位為位為

22、1 1時(shí),接收才能有效時(shí),接收才能有效228.3 串行口串行口1的工作方式的工作方式8.3.4 多機(jī)通信多機(jī)通信在多機(jī)通信中在多機(jī)通信中方式方式2和和方式方式3更適合主從通信更適合主從通信主機(jī)的SM2位清0從機(jī)的SM2位置1通信過(guò)程舉例 (1) 主機(jī)向從機(jī)發(fā)送某一從機(jī)的地址,發(fā)送前將主機(jī)向從機(jī)發(fā)送某一從機(jī)的地址,發(fā)送前將TB8位置位置1,然后進(jìn)入接收狀態(tài)然后進(jìn)入接收狀態(tài) (2) 各從機(jī)接收到主機(jī)送出的地址信息后,各從機(jī)接收到主機(jī)送出的地址信息后, 與本機(jī)地址相符時(shí)與本機(jī)地址相符時(shí),表示被選中,將本機(jī)地址回發(fā)給主機(jī),表示被選中,將本機(jī)地址回發(fā)給主機(jī)(TB8位為位為0),執(zhí)行),執(zhí)行CLR SM2

23、指令。指令。 未被選中的從機(jī)未被選中的從機(jī),SM2位依然為位依然為1,接收不到,接收不到TB8位為位為0的數(shù)的數(shù)據(jù)信息。據(jù)信息。238.3 串行口串行口1的工作方式的工作方式8.3.4 多機(jī)通信多機(jī)通信在多機(jī)通信中在多機(jī)通信中方式方式2和和方式方式3更適合主從通信更適合主從通信主機(jī)的SM2位清0從機(jī)的SM2位置1通信過(guò)程舉例 (3)主機(jī)收到從機(jī)回發(fā)的地址后,檢驗(yàn)是否與主機(jī)先前發(fā)主機(jī)收到從機(jī)回發(fā)的地址后,檢驗(yàn)是否與主機(jī)先前發(fā)送的地址一致,若不同,說(shuō)明發(fā)送過(guò)程出現(xiàn)錯(cuò)誤,再回到第(送的地址一致,若不同,說(shuō)明發(fā)送過(guò)程出現(xiàn)錯(cuò)誤,再回到第(1)步,步,若相同,可以發(fā)出指令或數(shù)據(jù)信息若相同,可以發(fā)出指令或數(shù)

24、據(jù)信息(TB8位為位為0)。 (4)從機(jī)正確地接收到主機(jī)所發(fā)送到的指令或數(shù)據(jù)信息后,從機(jī)正確地接收到主機(jī)所發(fā)送到的指令或數(shù)據(jù)信息后,回發(fā)先前約定好的應(yīng)答信號(hào)給主機(jī),同時(shí)將回發(fā)先前約定好的應(yīng)答信號(hào)給主機(jī),同時(shí)將SM2位重新置位重新置1,以,以便從機(jī)能夠接收主機(jī)再次發(fā)送地址信息,本次主機(jī)與從機(jī)通信便從機(jī)能夠接收主機(jī)再次發(fā)送地址信息,本次主機(jī)與從機(jī)通信過(guò)程結(jié)束。過(guò)程結(jié)束。 理論上,一個(gè)主機(jī)可以與理論上,一個(gè)主機(jī)可以與256個(gè)個(gè)從機(jī)通信從機(jī)通信,但由于每個(gè)單片機(jī)引腳,但由于每個(gè)單片機(jī)引腳的輸入阻抗及總線上阻抗的存在,的輸入阻抗及總線上阻抗的存在,總線上所允許并聯(lián)從機(jī)的數(shù)量要受總線上所允許并聯(lián)從機(jī)的數(shù)量

25、要受到限制。如果主機(jī)與過(guò)多的從機(jī)連到限制。如果主機(jī)與過(guò)多的從機(jī)連接時(shí),波特率應(yīng)設(shè)置的低一些以減接時(shí),波特率應(yīng)設(shè)置的低一些以減少通信錯(cuò)誤少通信錯(cuò)誤248.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置(1)方式)方式0D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRS輔助寄存器AUXRUART_M0 x6=0時(shí),時(shí),波特率是波特率是fosc/12UART_M0 x6=1時(shí),時(shí),波特率是波特率是fosc/2258.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置(2)方式)方式2D7D6D5D4D3D2D1D0

26、SMODSMOD0LVDFPOFGF1GF0PDIDL電源控制寄存器PCON波特率波特率=(2SMOD/64) foscD7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD=0時(shí),時(shí),波特率波特率= fosc/64當(dāng)當(dāng)SMOD=1時(shí),時(shí),波特率波特率=fosc/32268.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置(3)方式)方式1和方式和方式3波特率波特率=2SMOD (定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的溢出率的溢出率 /32)D7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD=0時(shí),時(shí),波特率波特率=

27、 T1的溢出率的溢出率/32當(dāng)當(dāng)SMOD=1時(shí),時(shí),波特率波特率= T1的溢出率的溢出率/16D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRST1x12=0時(shí),時(shí),T1的溢出率的溢出率= (fosc/12)/( 256 - THl)T1x12=1時(shí),時(shí),T1的溢出率的溢出率= fosc/( 256 - TH1)278.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置(3)方式)方式1和方式和方式3波特率波特率=2SMOD (獨(dú)立波特率發(fā)生器的溢出率獨(dú)立波特率發(fā)生器的溢出率 /32)D7D6D5D4D3D2D1D

28、0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSBRTx12 = 0時(shí),時(shí),獨(dú)立波特率發(fā)生器獨(dú)立波特率發(fā)生器的溢出率的溢出率=(fosc/12)/( 256-BRT )BRTx12 = 1時(shí),時(shí),獨(dú)立波特率發(fā)生獨(dú)立波特率發(fā)生器的溢出率器的溢出率=fosc/( 256-BRT)288.4串行口串行口1通信中波特率的設(shè)置通信中波特率的設(shè)置(3)方式)方式1和方式和方式3T1x12=0,T1工作在方式工作在方式2時(shí),幾種波特率所對(duì)應(yīng)時(shí),幾種波特率所對(duì)應(yīng)T1的重裝初的重裝初值值波特率系統(tǒng)時(shí)鐘(MHz)SMODT1重裝初值1920011.05921FD

29、H960011.05921FAH960011.05920FDH480011.05921F4H480011.05920FAH240011.05921E8H240011.05920F4H120011.05921D0H120011.05920E8H298.5 串行口串行口2的相關(guān)寄存器的相關(guān)寄存器與串行口與串行口2相關(guān)的寄存器有:相關(guān)的寄存器有:1.串行口串行口2的控制寄存器的控制寄存器S2CON,地址為地址為9AH,不能位尋址,不能位尋址D7D6D5D4D3D2D1D0S2SM0S2SM1S2SM2S2RENS2TB8S2RB8S2TIS2RI2.輔助寄存器輔助寄存器AUXR波特率加倍控制位波特率

30、加倍控制位S2SMODD7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSS2SMOD位為位為0時(shí),時(shí),串行口串行口2的波特率不加倍的波特率不加倍S2SMOD位為位為1時(shí),時(shí),串行口串行口2的波特率加倍的波特率加倍308.5 串行口串行口2的相關(guān)寄存器的相關(guān)寄存器與串行口與串行口2相關(guān)的寄存器有:相關(guān)的寄存器有:3.輔助寄存器輔助寄存器AUXR14.獨(dú)立波特率發(fā)生器寄存器獨(dú)立波特率發(fā)生器寄存器BRT5.中斷寄存器中斷寄存器IE、IE2、IP2、IP2HD7D6D5D4D3D2D1D0-PCA_P4SPI_P4S2_P

31、4GF2ADRJ -DPSS2_P4位為位為0時(shí),時(shí),TxD2為為P1.3,RxD2為為P1.2S2_P4位為位為1時(shí),時(shí),TxD2為為P4.3,RxD2為為P4.26.發(fā)送緩沖器發(fā)送緩沖器S2BUF與接收緩沖器與接收緩沖器S2BUF 共用同一個(gè)地址共用同一個(gè)地址9BH318.6串行口串行口2的工作方式的工作方式8.6.1 方式方式0當(dāng)當(dāng)S2SM0、 S2SM1為為00時(shí),串行口時(shí),串行口2工作在方式工作在方式0波特率波特率=fosc/12 僅有這一種情況僅有這一種情況8位數(shù)據(jù)低位在前,高位在后位數(shù)據(jù)低位在前,高位在后通過(guò)通過(guò)RxD2 引腳接收或發(fā)送引腳接收或發(fā)送數(shù)據(jù)數(shù)據(jù)TxD2引腳輸出同步移

32、位時(shí)鐘引腳輸出同步移位時(shí)鐘328.6串行口串行口2的工作方式的工作方式8.6.2 方式方式1當(dāng)當(dāng)S2SM0、 S2SM1為為01時(shí),串行口時(shí),串行口2工作在方式工作在方式1TxD2引腳發(fā)送、引腳發(fā)送、RxD2引腳接收引腳接收一幀數(shù)據(jù)包含一個(gè)起始位、一幀數(shù)據(jù)包含一個(gè)起始位、8個(gè)數(shù)據(jù)位個(gè)數(shù)據(jù)位和一個(gè)停止位和一個(gè)停止位停止位存放在停止位存放在S2CON寄存器的寄存器的S2RB8位位338.6串行口串行口2的工作方式的工作方式8.6.2 方式方式1波特率波特率=(2S2SMOD / 32) 獨(dú)立波特率發(fā)生器的溢出率獨(dú)立波特率發(fā)生器的溢出率D7D6D5D4D3D2D1D0T0 x12T1x12UART_

33、M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSBRTx12 = 0時(shí),時(shí),獨(dú)立波特率發(fā)生器獨(dú)立波特率發(fā)生器的溢出率的溢出率=(fosc/12)/( 256-BRT )BRTx12 = 1時(shí),時(shí),獨(dú)立波特率發(fā)生獨(dú)立波特率發(fā)生器的溢出率器的溢出率=fosc/( 256-BRT)348.6串行口串行口2的工作方式的工作方式8.6.3 方式方式2當(dāng)當(dāng)S2SM0、 S2SM1為為10時(shí),串行口時(shí),串行口2工作在方式工作在方式2TxD2引腳發(fā)送、引腳發(fā)送、RxD2引腳接收引腳接收一幀數(shù)據(jù)包含一個(gè)起始位、一幀數(shù)據(jù)包含一個(gè)起始位、9個(gè)數(shù)據(jù)位個(gè)數(shù)據(jù)位和一個(gè)停止位和一個(gè)停止位發(fā)送時(shí)發(fā)送時(shí),第,

34、第9位數(shù)據(jù)位來(lái)自位數(shù)據(jù)位來(lái)自S2CON寄存器中的寄存器中的S2TB8位,位,接收時(shí)接收時(shí),第,第9位數(shù)據(jù)裝入位數(shù)據(jù)裝入S2CON寄存器中的寄存器中的S2RB8位位D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSS2SMOD位為位為0時(shí),時(shí),波特率波特率= fosc /64S2SMOD位為位為1時(shí),時(shí),波特率波特率=fosc /32358.6串行口串行口2的工作方式的工作方式8.6.4 方式方式3當(dāng)當(dāng)S2SM0、 S2SM1為為11時(shí),串行口時(shí),串行口2工作在方式工作在方式3TxD2引腳發(fā)送、引腳發(fā)送、RxD2引腳

35、接收引腳接收一幀數(shù)據(jù)包含一個(gè)起始位、一幀數(shù)據(jù)包含一個(gè)起始位、9個(gè)數(shù)據(jù)位個(gè)數(shù)據(jù)位和一個(gè)停止位和一個(gè)停止位發(fā)送時(shí)發(fā)送時(shí),第,第9位數(shù)據(jù)位來(lái)自位數(shù)據(jù)位來(lái)自S2CON寄存器中的寄存器中的S2TB8位,位,接收時(shí)接收時(shí),第,第9位數(shù)據(jù)裝入位數(shù)據(jù)裝入S2CON寄存器中的寄存器中的S2RB8位位波特率的設(shè)定與方式波特率的設(shè)定與方式1相同相同368.7 串行口的應(yīng)用串行口的應(yīng)用1. 串行口串行口1的初始化的初始化(1)設(shè)置設(shè)置SCON寄存器中各個(gè)相關(guān)位,由寄存器中各個(gè)相關(guān)位,由SM0、SM1兩位確兩位確定工作方式,將定工作方式,將TI、RI清清0,如果需要接收,將,如果需要接收,將REN位置位置1;(2)設(shè)置

36、合適的波特率,即設(shè)置定時(shí)設(shè)置合適的波特率,即設(shè)置定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的工作方式、的工作方式、給給TL1、TH1賦初值,啟動(dòng)賦初值,啟動(dòng)T1工作;使用獨(dú)立波特率發(fā)生器工作;使用獨(dú)立波特率發(fā)生器時(shí),給時(shí),給BRT賦初值,并初始化賦初值,并初始化AUXR寄存器的寄存器的BRTR及及BRTx12兩位;兩位;(3)根據(jù)需要確定是否需要開(kāi)放中斷及中斷優(yōu)先級(jí);根據(jù)需要確定是否需要開(kāi)放中斷及中斷優(yōu)先級(jí);(4)編寫(xiě)相應(yīng)的中斷或查詢方式的服務(wù)程序。編寫(xiě)相應(yīng)的中斷或查詢方式的服務(wù)程序。378.7 串行口的應(yīng)用串行口的應(yīng)用2. 串行口串行口2的初始化的初始化(1)即設(shè)置即設(shè)置S2CON寄存器中的各個(gè)相關(guān)位的值,由寄

37、存器中的各個(gè)相關(guān)位的值,由S2SM0、S2SM1兩位確定工作方式,兩位確定工作方式,S2RI、S2TI兩位清兩位清0。如果允許接。如果允許接收,將收,將S2REN位置位置1;(2)設(shè)置獨(dú)立波特率發(fā)生器。初始化設(shè)置獨(dú)立波特率發(fā)生器。初始化AUXR寄存器中的寄存器中的BRTx12、S2SMOD等位,將初值裝入等位,將初值裝入BRT寄存器;寄存器;(3)將將AUXR中的中的BRTR位置位置1,啟動(dòng)獨(dú)立波特率發(fā)生器工作;,啟動(dòng)獨(dú)立波特率發(fā)生器工作;(4)根據(jù)需要設(shè)置中斷優(yōu)先級(jí),開(kāi)放中斷根據(jù)需要設(shè)置中斷優(yōu)先級(jí),開(kāi)放中斷 ES2、 EA;(5)編寫(xiě)相應(yīng)的中斷或查詢方式的服務(wù)程序。編寫(xiě)相應(yīng)的中斷或查詢方式的

38、服務(wù)程序。38 【例【例81】STC12C5A60S2單片機(jī)的串行口單片機(jī)的串行口1與一片與一片8位串位串入并出的芯片入并出的芯片74HC164連接,驅(qū)動(dòng)一組發(fā)光二極管,使發(fā)光二連接,驅(qū)動(dòng)一組發(fā)光二極管,使發(fā)光二極管從右至左延時(shí)輪流顯示。極管從右至左延時(shí)輪流顯示。MR分析:分析:74HC164是一是一個(gè)串行輸入并行輸出個(gè)串行輸入并行輸出的移位寄存器,的移位寄存器,Q0Q7是并行輸出是并行輸出端,端,Dsa、Dsb為串行輸為串行輸入端。入端。CP為時(shí)鐘輸入端。為時(shí)鐘輸入端。 復(fù)位端復(fù)位端 ,低電平,低電平有效,當(dāng)復(fù)位端輸入有效,當(dāng)復(fù)位端輸入低電平時(shí)清除移位寄低電平時(shí)清除移位寄存器的值,強(qiáng)制所有存

39、器的值,強(qiáng)制所有的輸出為低電平的輸出為低電平 設(shè)設(shè)STC12C5A60S2單片機(jī)的系單片機(jī)的系統(tǒng)時(shí)鐘頻率為統(tǒng)時(shí)鐘頻率為12MHz, 串行口串行口1工作在方式工作在方式0。對(duì)。對(duì)SCON寄存器賦初值為寄存器賦初值為00H39(1)匯編程序:)匯編程序: ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#0BFH ;初始化堆棧指針;初始化堆棧指針 MOV SCON,#00H ;串行口;串行口1工作在方式工作在方式0 MOV A,#0FEH ;LED顯示碼存顯示碼存A寄存器寄存器START:MOV SBUF,A ;啟動(dòng)發(fā)送過(guò)程;啟動(dòng)發(fā)送過(guò)程LOOP:JNB TI,

40、LOOP ;判斷發(fā)送是否完畢;判斷發(fā)送是否完畢 CLR TI ;發(fā)送完畢,將;發(fā)送完畢,將TI位清位清0 ACALL DELAY ;延時(shí);延時(shí) RL A ;發(fā)光二極管顯示碼左移一位;發(fā)光二極管顯示碼左移一位 SJMP START 40DELAY: MOV R7,#0BDH ;500ms的延時(shí)程序的延時(shí)程序DL1: MOV R6,#0E6HDL0: MOV R5,#21H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET END41(2)C語(yǔ)言程序:語(yǔ)言程序:#include #include/聲明本征函數(shù)庫(kù)聲明本征函數(shù)庫(kù)void DELAY();();/延時(shí)函數(shù)延時(shí)函

41、數(shù)void main( )unsigned char j;SCON=0 x00;/串行口串行口1工作在方式工作在方式0j=0 xFE; /LED顯示碼顯示碼for (; ;) SBUF=j;/啟動(dòng)發(fā)送過(guò)程啟動(dòng)發(fā)送過(guò)程 while (!TI);/等待發(fā)送完畢等待發(fā)送完畢 TI=0; DELAY( );/延時(shí)延時(shí)500ms j=_crol_(j,1);/循環(huán)左移一位循環(huán)左移一位 42void DELAY( ) /延時(shí)延時(shí)500ms函數(shù)函數(shù) unsigned char a,b,c; for(c=189;c0;c-) for(b=230;b0;b-) for(a=33;a0;a-);43【例例82】利

42、用利用STC12C5A60S2單片機(jī)的串行口單片機(jī)的串行口1外接一片外接一片8位位的并入串出芯片的并入串出芯片74HC165,用于擴(kuò)展并行輸入,如圖所示。,用于擴(kuò)展并行輸入,如圖所示。 分析:分析:74HC165是一是一種并入串出的芯片,其種并入串出的芯片,其中中D0D7為并行數(shù)據(jù)輸為并行數(shù)據(jù)輸入端,入端,DS為串行數(shù)據(jù)輸為串行數(shù)據(jù)輸入端,入端,Q7為串行輸出端。為串行輸出端。 當(dāng)并行輸入允許引腳當(dāng)并行輸入允許引腳 輸入為低時(shí)輸入為低時(shí),從,從D0至至D7引腳并行輸引腳并行輸入的數(shù)據(jù)被輸入到內(nèi)部移位寄存器內(nèi),入的數(shù)據(jù)被輸入到內(nèi)部移位寄存器內(nèi), 而當(dāng)而當(dāng) 為高時(shí)為高時(shí),并行輸入禁止,移位寄存器的

43、數(shù)據(jù)在,并行輸入禁止,移位寄存器的數(shù)據(jù)在CP引引腳輸入的時(shí)鐘脈沖上升沿的控制下,向右移動(dòng)一位腳輸入的時(shí)鐘脈沖上升沿的控制下,向右移動(dòng)一位DSQ0 Q1 Q7,Q7的狀態(tài)出現(xiàn)在第的狀態(tài)出現(xiàn)在第9引腳上。引腳上。設(shè)串行口設(shè)串行口1工作在方式工作在方式0,SCON寄存器的內(nèi)容為寄存器的內(nèi)容為00H。44(1)匯編程序段如下:)匯編程序段如下: MOV SCON, #00000000B CLR P1.7 ; 并行輸入允許并行輸入允許 NOP ;等待引腳狀態(tài)穩(wěn)定;等待引腳狀態(tài)穩(wěn)定 NOP NOP NOP NOP NOP SETB P1.7 ;禁止并行輸入;禁止并行輸入 NOP ;等待引腳狀態(tài)穩(wěn)定;等待引

44、腳狀態(tài)穩(wěn)定 NOP NOP NOP NOP NOP CLR RI ; 清除中斷標(biāo)志清除中斷標(biāo)志RI SETB REN ;允許接收;允許接收LOOP:JNB RI, LOOP ;等待;等待 CLR RI MOV A,SBUF 45 (2)C語(yǔ)言程序語(yǔ)言程序#include #includesbit P1_7=P17;void main( )unsigned char temp;SCON=0 x00;P1_7=0; /并行輸入允許并行輸入允許 _nop_( ); /等待引腳狀態(tài)穩(wěn)定等待引腳狀態(tài)穩(wěn)定 _nop_( ); _nop_( ); _nop_( ); _nop_( ); _nop_( );P

45、1_7=1; /并行輸入禁止并行輸入禁止_nop_( ); _nop_( );_nop_( );_nop_( );_nop_( );_nop_( );RI=0; /清除接收中斷標(biāo)志清除接收中斷標(biāo)志RIREN=1;/允許接收允許接收while (!RI);/等待接收數(shù)據(jù)等待接收數(shù)據(jù)RI=0; /清除接收中斷標(biāo)志清除接收中斷標(biāo)志RItemp=SBUF; /讀入數(shù)據(jù)讀入數(shù)據(jù)while(1););46【例例83】在圖在圖810所示的甲、所示的甲、乙兩機(jī)間的串行通信中,單片機(jī)系乙兩機(jī)間的串行通信中,單片機(jī)系統(tǒng)的時(shí)鐘頻率為統(tǒng)的時(shí)鐘頻率為11.0592MHz,要,要求波特率為求波特率為1200bps,編程實(shí)

46、現(xiàn)將,編程實(shí)現(xiàn)將甲機(jī)片內(nèi)的甲機(jī)片內(nèi)的30H3FH單元的數(shù)據(jù)單元的數(shù)據(jù)傳送到乙機(jī)片內(nèi)傳送到乙機(jī)片內(nèi)40H4FH單元中。單元中。(1)匯編子程序:)匯編子程序:分析:甲、乙兩機(jī)都選擇串行口分析:甲、乙兩機(jī)都選擇串行口1工作在工作在方式方式3,9位異步通信位異步通信方方式,式,TB8用作奇偶校驗(yàn)位用作奇偶校驗(yàn)位,甲機(jī)串口控制寄存器,甲機(jī)串口控制寄存器SCON的初值為的初值為0C0H,乙機(jī)的控制字,乙機(jī)的控制字0D0H。D7D6D5D4D3D2D1D0SM0/FESM1SM2RENTB8RB8TIRI47【例例83】在圖在圖810所示的甲、所示的甲、乙兩機(jī)間的串行通信中,單片機(jī)系乙兩機(jī)間的串行通信中,

47、單片機(jī)系統(tǒng)的時(shí)鐘頻率為統(tǒng)的時(shí)鐘頻率為11.0592MHz,要,要求波特率為求波特率為1200bps,編程實(shí)現(xiàn)將,編程實(shí)現(xiàn)將甲機(jī)片內(nèi)的甲機(jī)片內(nèi)的30H3FH單元的數(shù)據(jù)單元的數(shù)據(jù)傳送到乙機(jī)片內(nèi)傳送到乙機(jī)片內(nèi)40H4FH單元中。單元中。(1)匯編子程序:)匯編子程序:分析:甲、乙兩機(jī)都選擇串行口分析:甲、乙兩機(jī)都選擇串行口1工作在工作在方式方式3,9位異步通信位異步通信方方式,式,TB8用作奇偶校驗(yàn)位用作奇偶校驗(yàn)位,甲機(jī)串口控制寄存器,甲機(jī)串口控制寄存器SCON的初值為的初值為0C0H,乙機(jī)的控制字,乙機(jī)的控制字0D0H。定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1工作在方式工作在方式2作為波特率發(fā)生器,作為波特率發(fā)

48、生器,TMOD為為20H;波特率波特率2SMOD(定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的溢出率的溢出率) /32,T1的溢出率的溢出率=(波特率(波特率 32)/ 2SMOD ,T1的重裝初值的重裝初值=256-(fosc /12)/T1的溢出率的溢出率=256-(fosc/12) 2SMOD/(波特率(波特率32)=256-(11059200/12) /(120032)=232=E8H甲機(jī)的發(fā)送子程序:甲機(jī)的發(fā)送子程序:48TRA_UART:MOV TMOD,#20H ;T1工作在方式工作在方式2 ANL AUXR,#0BFH ;T1計(jì)數(shù)工作在系統(tǒng)時(shí)鐘的計(jì)數(shù)工作在系統(tǒng)時(shí)鐘的12分頻分頻 MOV TL1

49、,#0E8H ;給;給T1的低的低8位賦初值位賦初值 MOV TH1,#0E8H ;給;給T1的高的高8位賦初值位賦初值 ANL PCON,#7FH ;波特率不加倍;波特率不加倍 MOV SCON,#0C0H ;串行口;串行口1工作在方式工作在方式3 MOV R0,#30H ;R0作為片內(nèi)作為片內(nèi)RAM指針指針 MOV R7,#10H ;R7作為發(fā)送計(jì)數(shù)器作為發(fā)送計(jì)數(shù)器 SETB TR1 ;波特率發(fā)生器開(kāi)始工作;波特率發(fā)生器開(kāi)始工作LOOP:MOV A,R0 ;讀取片內(nèi);讀取片內(nèi)30H3FH單元的內(nèi)容單元的內(nèi)容 MOV C,P MOV TB8,C ;將奇偶校驗(yàn)位寫(xiě)入;將奇偶校驗(yàn)位寫(xiě)入TB8 M

50、OV SBUF,A ;啟動(dòng)發(fā)送過(guò)程;啟動(dòng)發(fā)送過(guò)程WAIT: JNB TI,WAIT ;等待發(fā)送完畢;等待發(fā)送完畢CLR TI ;發(fā)送完畢,將;發(fā)送完畢,將TI清清0INC R0 ;指向下一個(gè)單元地址;指向下一個(gè)單元地址DJNZ R7,LOOP ;如果數(shù)據(jù)未發(fā)送完,將繼續(xù)發(fā)送如果數(shù)據(jù)未發(fā)送完,將繼續(xù)發(fā)送RET49乙機(jī)接收子程序:乙機(jī)接收子程序:RES_UART:MOV TMOD,#20H ;T1的初始化的初始化 MOV TL1,#0E8H MOV TH1,#0E8H ANL AUXR ,#0BFH ;系統(tǒng)時(shí)鐘的;系統(tǒng)時(shí)鐘的12分頻分頻 ANL PCON,#7FH;波特率不加倍;波特率不加倍 MO

51、V SCON,#0D0H ;方式;方式3,且允許接收,且允許接收 MOV R0,#40H ;R0作為片內(nèi)作為片內(nèi)RAM指針指針 MOV R7,#10H ;R7作為計(jì)數(shù)器作為計(jì)數(shù)器 SETB TR1 ;波特率發(fā)生器開(kāi)始工作;波特率發(fā)生器開(kāi)始工作LOOP: NOPWAIT: JNB RI,WAIT CLR RI MOV A,SBUF; 50;P與與RB8位異或位異或,出錯(cuò)時(shí)跳轉(zhuǎn)出錯(cuò)時(shí)跳轉(zhuǎn), MOV C,P ANL C, / RB8 MOV F0 , C MOV C, RB8 ANL C,/ P ORL C, F0 JC ERROR MOV R0,A;數(shù)據(jù)正確,存放進(jìn);數(shù)據(jù)正確,存放進(jìn)40H開(kāi)始的單

52、元開(kāi)始的單元 INC R0 ;R0指向下一個(gè)單元指向下一個(gè)單元 DJNZ R7,LOOP ;數(shù)據(jù)未接收完,則繼續(xù);數(shù)據(jù)未接收完,則繼續(xù) RETERROR: ;錯(cuò)誤處理,此處略;錯(cuò)誤處理,此處略 RET 51(2)C語(yǔ)言程序:語(yǔ)言程序: 分析:為了保持通信的通暢與準(zhǔn)確,通信中做如下約定:分析:為了保持通信的通暢與準(zhǔn)確,通信中做如下約定: 通信開(kāi)始時(shí),甲機(jī)(主機(jī))首先發(fā)送乙機(jī)(從機(jī))的地址通信開(kāi)始時(shí),甲機(jī)(主機(jī))首先發(fā)送乙機(jī)(從機(jī))的地址0AAH,并且,并且TB8位為位為1, 乙機(jī)接收后與自己的地址比較,回發(fā)地址乙機(jī)接收后與自己的地址比較,回發(fā)地址0AAH,并將自,并將自己的己的SM2位清位清0。

53、 甲機(jī)收到甲機(jī)收到0AAH后,說(shuō)明地址發(fā)送正確開(kāi)始發(fā)送后,說(shuō)明地址發(fā)送正確開(kāi)始發(fā)送16個(gè)字節(jié)個(gè)字節(jié)的數(shù)據(jù)。數(shù)據(jù)緩沖區(qū)為數(shù)組的數(shù)據(jù)。數(shù)據(jù)緩沖區(qū)為數(shù)組buf,數(shù)據(jù)發(fā)送完成后發(fā)送校驗(yàn)和,數(shù)據(jù)發(fā)送完成后發(fā)送校驗(yàn)和的低字節(jié)。的低字節(jié)。 乙機(jī)接收到數(shù)據(jù)后,存入乙機(jī)的緩沖區(qū)乙機(jī)接收到數(shù)據(jù)后,存入乙機(jī)的緩沖區(qū)buf中,并用接收中,并用接收的數(shù)據(jù)產(chǎn)生校驗(yàn)和與接收的校驗(yàn)和相比較,如相同,乙機(jī)發(fā)送的數(shù)據(jù)產(chǎn)生校驗(yàn)和與接收的校驗(yàn)和相比較,如相同,乙機(jī)發(fā)送00H,回答接收正確;如不同,則發(fā)送,回答接收正確;如不同,則發(fā)送0FFH,請(qǐng)求甲機(jī)重發(fā)。,請(qǐng)求甲機(jī)重發(fā)。 根據(jù)以上約定,利用串行口根據(jù)以上約定,利用串行口2的工作方式

54、的工作方式3,實(shí)現(xiàn)甲機(jī)作主,實(shí)現(xiàn)甲機(jī)作主機(jī),乙機(jī)作從機(jī)的通信方式。由于甲、乙兩機(jī)都要發(fā)送和接收機(jī),乙機(jī)作從機(jī)的通信方式。由于甲、乙兩機(jī)都要發(fā)送和接收信息,所以甲、乙兩機(jī)的串口控制寄存器的信息,所以甲、乙兩機(jī)的串口控制寄存器的S2REN位都應(yīng)該位都應(yīng)該為為1,方式控制字都是,方式控制字都是0D0H。52甲機(jī)的發(fā)送程序:甲機(jī)的發(fā)送程序:#include STC12C5A.hunsigned char idata buf16; /定義定義16字節(jié)的緩沖區(qū)字節(jié)的緩沖區(qū)unsigned char pf; /校驗(yàn)和的低字節(jié)校驗(yàn)和的低字節(jié)void main( )unsigned char i,j;S2CON

55、=0 xD8; /串行口串行口2的初始化的初始化 ,S2TB8位為位為1BRT=0 xE8;/獨(dú)立波特率發(fā)生器寄存器裝入初值獨(dú)立波特率發(fā)生器寄存器裝入初值A(chǔ)UXR= AUXR |0 x10; /獨(dú)立波特率發(fā)生器開(kāi)始工作獨(dú)立波特率發(fā)生器開(kāi)始工作53for(;)(;)do S2BUF=0 xAA; /發(fā)送乙機(jī)地址發(fā)送乙機(jī)地址do j=S2CON; while (j&0 x02)!=0 x02); /等待發(fā)送完畢等待發(fā)送完畢 S2CON= (S2CON &0 xFD); /S2TI位清位清0do j=S2CON; while (j&0 x01)!= 0 x01) ; /等待接

56、收應(yīng)答信號(hào)等待接收應(yīng)答信號(hào)S2CON= (S2CON &0 xFE); /S2RI位清位清0while (S2BUF0 xAA)!=0); /如果地址有誤;繼續(xù)聯(lián)絡(luò)如果地址有誤;繼續(xù)聯(lián)絡(luò)54do pf=0; /校驗(yàn)和變量賦初值校驗(yàn)和變量賦初值0 S2CON= (S2CON &0 xF7); /S2TB8位寫(xiě)入位寫(xiě)入0for (i=0;i16;i+) /發(fā)送發(fā)送16個(gè)字節(jié)的數(shù)據(jù)個(gè)字節(jié)的數(shù)據(jù) S2BUF=bufi; /發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù) pf+=bufi; /求校驗(yàn)和的低求校驗(yàn)和的低8位字節(jié)位字節(jié)do j=S2CON; while (j&0 x02)!=0 x02); /等待

57、發(fā)送完畢等待發(fā)送完畢 S2CON= (S2CON &0 xFD);55S2BUF=pf; /發(fā)送校驗(yàn)和的低發(fā)送校驗(yàn)和的低8位字節(jié)位字節(jié)do j=S2CON; while (j&0 x02)!=0 x02); /等待發(fā)送完畢等待發(fā)送完畢 S2CON=( S2CON &0 xFD); /S2TI位清位清0do j=S2CON;while (j&0 x01)!= 0 x01) ; /等待接收應(yīng)答信號(hào)等待接收應(yīng)答信號(hào)S2CON=( S2CON &0 xFE);/S2RI位清位清0while(S2BUF! =0 x00) break;/收到正確應(yīng)答,退出循環(huán)收到正

58、確應(yīng)答,退出循環(huán) /否則再重發(fā)否則再重發(fā)while(1););乙機(jī)接收程序:乙機(jī)接收程序:#include STC12C5A.hunsigned char idata buf16; /定義定義16字節(jié)的緩沖區(qū)字節(jié)的緩沖區(qū)unsigned char pf; /校驗(yàn)和的低校驗(yàn)和的低8位字節(jié)位字節(jié)void main()()unsigned char i,j;BRT=0 xE8;/獨(dú)立波特率發(fā)生器寄存器裝入初值獨(dú)立波特率發(fā)生器寄存器裝入初值A(chǔ)UXR= AUXR |0 x10; /波特率發(fā)生器開(kāi)始工作波特率發(fā)生器開(kāi)始工作do S2CON=0 xF0; /串行口串行口2的初始化的初始化do j=S2CON

59、;while (j&0 x01)!=0 x01); /等待接收等待接收S2CON=( S2CON &0 xFE); /S2RI標(biāo)志位清標(biāo)志位清0 while (S2BUF0 xAA)!=0); /判斷接收到的是否是乙機(jī)地址判斷接收到的是否是乙機(jī)地址S2BUF=0 xAA; /回送地址回送地址do j=S2CON; while (j&0 x02)!=0 x02); /等待發(fā)送完畢等待發(fā)送完畢 S2CON=0 xD0;/將將S2SM2位清位清0while (1) pf=0; /校驗(yàn)和變量賦初值為校驗(yàn)和變量賦初值為0 for (i=0;i16;i+) /接收接收16個(gè)字節(jié)的數(shù)

60、據(jù)個(gè)字節(jié)的數(shù)據(jù) do j=S2CON;while (j&0 x01)!= 0 x01) ; /等待接收等待接收 S2CON=(S2CON &0 xFE);/將將S2RI位清位清0 buf i=S2BUF; /保存接收數(shù)據(jù)保存接收數(shù)據(jù) pf+=bufi; /求校驗(yàn)和的低求校驗(yàn)和的低8位字節(jié)位字節(jié) do j=S2CON; while (j&0 x01)!= 0 x01) ; /等待接收校驗(yàn)和的低等待接收校驗(yàn)和的低8位位S2CON=S2CON&0 xFE;if (S2BUFpf)= =0) /比較校驗(yàn)和比較校驗(yàn)和 S2BUF=0 x00; do j=S2CON; while (j&0 x02)!=0 x02); /等待發(fā)送完畢等待發(fā)送完畢 S2CON= (S2CON &0 xFD);break; else S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論