版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章串行通信第9章串行通信9.1串行通訊基本知識數(shù)據(jù)通訊傳輸方式同步通訊和異步通訊波特率:表示每秒鐘傳送二進(jìn)制代碼的位數(shù),單位b/s并行通訊串行通訊單向(單工)配置全雙向(全雙工)配置半雙向(半雙工)配置9.1串行通訊基本知識并行通訊串行通訊單向(單工)配置全雙1、并行通信和串行通信通信的基本方式:并行通信:數(shù)據(jù)的各位同時送出。傳送距離:小于30米。串行通信:數(shù)據(jù)的各位逐位送出,只需一對傳送線即可完成傳送。傳送距離:幾米~幾千公里。1、并行通信和串行通信2、串行通信(1)串行通信的數(shù)據(jù)傳送方向。 單工、半雙工、全雙工三種方式(2)串行通信的工作方式同步方式:數(shù)據(jù)按塊傳送,包括同步字符、數(shù)據(jù)塊。異步方式:數(shù)據(jù)按字符傳送,每一個字符均按固定的字符格式傳送,又被稱為幀,如圖。包含字符的起始位、數(shù)據(jù)位、校驗位、停止位四個部分。2、串行通信異步通訊的一幀數(shù)據(jù)格式異步通訊的一幀數(shù)據(jù)格式同步傳送的數(shù)據(jù)格式同步傳送的數(shù)據(jù)格式單片機系統(tǒng)中的串行接口及特點串行通訊可以實現(xiàn)單片機與單片機、單片機與微機之間的數(shù)據(jù)交換。串行通訊電路簡單,實現(xiàn)遠(yuǎn)距離低成本的數(shù)據(jù)傳輸。缺點是傳輸速度慢。在一些系統(tǒng)中,采用串行通訊的形式將多微處理器連接起來,構(gòu)成一個完整的多CPU控制系統(tǒng)。從機從機從機從機主機9.2MCS-51串行口及應(yīng)用單片機系統(tǒng)中的串行接口及特點串行通訊可以實現(xiàn)單片機與單片機、串行(異步)通信應(yīng)用示意圖MCS-51TXD(甲)RXD
RXDMCS-51TXD(乙)TXDRXDRXDTXDRS-232或485RS-232或485TXDRXDRS-232PC機COM1,COM2單片機甲、乙之間近距離的直接通訊單片機甲乙兩地之間遠(yuǎn)距離通訊單片機與PC機之間的數(shù)據(jù)通訊串行(異步)通信應(yīng)用示意圖MCS-51TXDRXDM8051串行口結(jié)構(gòu)8051串行口結(jié)構(gòu)9.2.1與串口有關(guān)的寄存器
數(shù)據(jù)緩沖寄存器SBUF地址:99HSBUF是用來存放發(fā)送和接收數(shù)據(jù)的寄存器,對應(yīng)兩個獨立的緩沖器。CPU寫SBUF就是開始發(fā)送數(shù)據(jù)(MOVSBUF,A);CPU讀SBUF就是讀取接收到的數(shù)據(jù)到A
(MOVA,SBUF)。該結(jié)構(gòu)在硬件設(shè)計上保證了51單片機串行口是一個可同時發(fā)送與接收的”全雙工”串口。9.2.1與串口有關(guān)的寄存器
數(shù)據(jù)緩沖寄存器SBUF接收SBUF移位寄存器發(fā)送SBUF移位寄存器內(nèi)部總線CPUMCS-51RXDP3.0TXDP3.1SBUF硬件電路:發(fā)送:執(zhí)行指令MOVSBUF,A接收:當(dāng)檢測到起始位電路自動啟動接收。接收SBUF移位寄存器發(fā)送SBUF移位寄存器內(nèi)部串行口控制寄存器SCON地址:98HSM0SM1:串行口工作模式選擇位。SM0SM1SM2RENTB8RB8TIRISM0SM1模式功能波特率000同步移位寄存器模式Fosc/120118位異步通信UART可變1029位異步通信UARTFosc/64或/321139位異步通信UART可變串行口控制寄存器SCON地址:98HSM0SM1:串行RI
:完成一幀數(shù)據(jù)接收標(biāo)志,應(yīng)軟件清零,接收完成RI=1并申請中斷(如果中斷開放,則引發(fā)中斷);TI
:完成一幀數(shù)據(jù)發(fā)送標(biāo)志,應(yīng)軟件清零,發(fā)送完成TI=1同時申請中斷(如果中斷開放,則引發(fā)中斷);RB8:在9位數(shù)據(jù)傳送的模式2、3中,接收到的第9位數(shù)據(jù);TB8:在9位數(shù)據(jù)傳送的模式2、3中,將要發(fā)送的第9位數(shù)據(jù);REN:允許接收位,REN=1時允許接收.由軟件置位或清零。SM0SM1SM2RENTB8RB8TIRIRI:完成一幀數(shù)據(jù)接收標(biāo)志,應(yīng)軟件清零,接收完成RI=1并SM2:多機通信使能位.1,模式0、1時: SM2不用,應(yīng)設(shè)為0。
2,模式2、3時:
SM2=0,無論RB8如何,RI都能被激活(RI=1)。 若SM2=1,收到的第9位(RB8)=0時,則RI不會被激活; 若SM2=1且RB8=1時,RI才能被激活=1并引發(fā)中斷。 在接收方式時:當(dāng)SM2=1時,能否接收到數(shù)據(jù)取決于對方發(fā)送的第9位數(shù)據(jù)RB8,可由發(fā)送方來控制接收方的數(shù)據(jù)接收。 此種方式(SM2=1)用于多機通信。SM0SM1SM2RENTB8RB8TIRISM2:多機通信使能位.SM0SM1SM2RENTB8RB如何使用RI,TI標(biāo)志完成接收、發(fā)送?
通信雙方不是同步工作的,數(shù)據(jù)交換由各自SBUF進(jìn)行。CPU不參與通信過程,只能通過標(biāo)志了解SBUF的發(fā)送、接收的狀態(tài),以便決定后續(xù)操作。RI(SCON.0):接收完成標(biāo)志。①當(dāng)SUBF從RXD接收完一個完整的數(shù)據(jù)幀時,RI=1。如果串口中斷是開放的,則RI=1時會自動引發(fā)中斷。用戶可以通過中斷服務(wù)程序?qū)BUF中的數(shù)據(jù)取出送累加器A。
MOVA,SBUF——中斷方式接收數(shù)據(jù);②也可以使用查詢的方式對RI進(jìn)行檢測,如果RI=1則執(zhí)行:
MOVA,SBUF
否則等待——查詢方式接收數(shù)據(jù)。如何使用RI,TI標(biāo)志完成接收、發(fā)送?通信雙TI(SCON.1):發(fā)送完成標(biāo)志。
當(dāng)CPU執(zhí)行:MOVSBUF,A后,SBUF開始通過TXD向外發(fā)送數(shù)據(jù)。當(dāng)完成一幀數(shù)據(jù)的發(fā)送后,TI=1。①如果系統(tǒng)中斷是開放的,則TI=1會自動引發(fā)中斷。用戶可以通過中斷服務(wù)程序向SBUF輸送下一個數(shù)據(jù):
MOVSBUF,A———中斷方式發(fā)送數(shù)據(jù);②也可以使用查詢的方式對TI進(jìn)行檢測,如果TI=1則執(zhí)行:
MOVSBUF,A
。否則等待——查詢方式發(fā)送。TI(SCON.1):發(fā)送完成標(biāo)志。使用查詢RI、TI標(biāo)志方式進(jìn)行發(fā)送與接收N個數(shù)據(jù)CLRSCON.TI數(shù)據(jù)送累加器A修改數(shù)據(jù)區(qū)指針movsbuf,aTI=1?N個數(shù)據(jù)發(fā)送完?YESNOYESNO發(fā)送數(shù)據(jù)的程序框圖SETBSCON.RENmova,sbufRI=1?N個數(shù)據(jù)接收完?YESNOYESNOCLRSCON.RIA送數(shù)據(jù)區(qū)修改數(shù)據(jù)指針接收數(shù)據(jù)程序框圖使用查詢RI、TI標(biāo)志方式進(jìn)行發(fā)送與接收N個數(shù)據(jù)CLRSCPCON地址:87HSMOD
波特率選擇位SMOD=1時,方式1,方式2,方式3的波特率加倍PCON地址:87HSMOD波特率選擇位9.2.2串行通信工作模式模式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位,其幀格式如下模式1以10位為一幀傳輸,設(shè)由1個起始位,8個數(shù)據(jù)位,1個停止位模式2和模式3以11位為1幀傳輸,設(shè)有1個起始位,8個數(shù)據(jù)位,1個附加第9位和1個停止位….D0D1D2D3D4D5D6D7…..…..起始D0D1D2D3D4D5D6D7停止…..….起始D0D1D2D3D4D5D6D7D8停止…..9.2.2串行通信工作模式模式0以8位數(shù)據(jù)為一幀,不設(shè)起串行口的模式0特點:同步移位寄存器方式。波特率:固定為fosc/12.RXD(P3.0):數(shù)據(jù)口線(發(fā)送和接收);先移數(shù)據(jù)的低位。TXD(P3.1):移位脈沖輸出端。
(注意:移位脈沖的頻率就是模式0的波特率)主要功能:使用串行口擴展并行口,理論上可以擴展n*8位的并行口。MCS-51RXDTXDData外部移位寄存器cp移位脈沖串行數(shù)據(jù)并行的數(shù)據(jù)(8位)串行口的模式0特點:同步移位寄存器方式。波特率:固定為fo模式0電路框圖51內(nèi)部總線SBUF零檢測器移位時鐘STARTSHIFT
發(fā)送控制器TXCLOCKTISENDDSQCPSTARTRIRECEIVERX接收控制器SHIFTCLOCK11111110輸入移位寄存器SBUF51內(nèi)部總線讀SBUF寫SBUFS6串行口中斷P3.0RXDP3.1TXD裝載SBUFREN/RIP3.0RXDMOVSBUF,A1S6P2模式0電路框圖51內(nèi)部總線SBUF零檢測器移位START模式0的發(fā)送與接收單片機執(zhí)行movsbuf,a指令啟動“發(fā)送控制器”開始發(fā)送。完畢,TI被置位。在滿足REN=1且RI=0的條件下(實際上是一條寫SCON指令),就會引發(fā)一次接收過程。完畢,RI置位,向CPU發(fā)中斷申請。模式0的發(fā)送與接收單片機執(zhí)行movsbuf,a指令啟動“發(fā)模式0的時序信號(發(fā)送)S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6寫SBUFSENDD1D0D2D3D4D5D6D7RXD端數(shù)據(jù)SHIFTTXD端同步脈沖TI中斷標(biāo)志movsbuf,a指令從發(fā)送到結(jié)束的10個機器周期模式0的時序信號(發(fā)送)S1~S6S1~S6S1~S6S1~模式0的時序信號(接收)S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6寫SCON(RI=0)RECEIVESHIFTRI對RXD采樣TXD同步脈沖RI中斷標(biāo)志模式0的時序信號(接收)S1~S6S1~S6S1~S6S1~串行口模式1特點:10位傳輸格式(1個起始位+8個數(shù)據(jù)位+1個停止位);用于通訊的異步方式;可變波特率(定時器T1的溢出率來確定,所以在此種模式下,首先要對T1進(jìn)行初始化以確定串行口的波特率)。發(fā)送操作:在TI=0,執(zhí)行movsbuf,a指令后從TXD端開始發(fā)送數(shù)據(jù)。當(dāng)發(fā)送完8位數(shù)據(jù)后自動的添加一個高電平的停止位,并將TI置位。串行口模式1特點:10位傳輸格式(1個起始位+8個數(shù)據(jù)位+接收操作:在REN=1且RI=0的條件下進(jìn)行。串行口的接收控制器對RXD線進(jìn)行采樣,其采樣頻率是接收時鐘的16倍。當(dāng)連續(xù)8次采集到RXD線上為低電平時,檢測電路便認(rèn)定RXD線上有了“起始位”,在此后,便開始在每次第7、8、9三個脈沖時進(jìn)行RXD采樣,采取“三中取二”的原則來確定接收的數(shù)據(jù)(如圖所示)。數(shù)據(jù)裝載條件: 當(dāng)接收到停止位時,必須滿足:RI=0且SM2=0,才能把接收的數(shù)據(jù)送到SBUF中(停止位送SCON的RB8中,并使RI=1),否則數(shù)據(jù)丟失。
要想得到接收的數(shù)據(jù),在接收前必須事先清零RI。接收操作:在REN=1且RI=0的條件下進(jìn)行。串行口模式1時數(shù)據(jù)幀格式及接收采樣示意圖D0D1D2D3D4D5D6D7起始位8位數(shù)據(jù)停止位對RXD線的數(shù)據(jù)以16倍速度采樣當(dāng)連續(xù)8次采集到低電平時,便確認(rèn)起始位到來在每個第7,8,9個脈沖對RXD采樣并采用“以三取二”來確定采集的數(shù)據(jù)7.8.9串行口模式1時數(shù)據(jù)幀格式及接收采樣示意圖D0D1D2D3D4串行口模式1時序圖串行口模式1時序圖串行口模式2、3特點:模式2、3都是11位傳輸格式(1個起始位+9個數(shù)據(jù)位+1個停止位),它們的不同之處是波特率。波特率:模式2:固定為fosc/64或fosc/32。(具體由PCON中的SMOD位來確定)。模式3:可變,由定時器T1的溢出波特率來確定。D0D1D2D3D4D5D6D7D8起始位8+1位數(shù)據(jù)停止位第9位串行口模式2、3特點:模式2、3都是11位傳輸格式(1個起模式2、3的發(fā)送過程類似于模式1,唯一的區(qū)別在于數(shù)據(jù)幀中數(shù)據(jù)是9位。這樣,在發(fā)送一幀數(shù)據(jù)時,CPU除了要把8位數(shù)據(jù)送SBUF外(movsbuf,a),還要事先將第9位數(shù)據(jù)送到SCON.TB8中。如:第9位(TB8)=1時,SETBSCON.TB8
若第9位(TB8)=0時:CLRSCON.TB8
例如:
SETBSCON.TB8或:CLRSCON.TB8
MOVSBUF,A
MOVSBUF,A
SM0SM1SM2RENTB8RB8TIRI模式2、3的發(fā)送過程類似于模式1,唯一的區(qū)別在于數(shù)據(jù)幀中數(shù)據(jù)模式2、3的接收過程也類似于模式1,不同的是:模式1時,SCON中的RB8是接收到的停止位(“1”);而模式2、3時,RB8是接收到的第9位。在模式1,接收操作只有在RI=0,且REN=1時數(shù)據(jù)可以接收。而模式2、3的接收裝載條件是:
a)RI=0且SM2=0(與RB8的狀態(tài)無關(guān));或:b)RI=0且RB8=1(SM2=1時)。
只有滿足a)或滿足b)的條件時,接收到的數(shù)據(jù)才能送到SBUF,并使RI=1激活,否則接收無效且RI不能置位。模式2、3的接收過程也類似于模式1,不同的是:模式1時,SCRI=0是保證SBUF空(每次取走數(shù)據(jù)時通過軟件復(fù)位RI,如果沒有取走數(shù)據(jù)則RI=1),保證接收到的數(shù)據(jù)不丟失。利用后一個條件SM2和RB8來控制接收,可用于多機通信。 令SM2=1可以利用接收到的RB8控制接收是否有效。即RB8=1時接收有效;RB8=0時接收無效。SM2也稱“多機通訊使能位”。 在沒有多機通信的場合,RB8可用于奇偶效驗,以防止串行通信出錯。RI=0是保證SBUF空(每次取走數(shù)據(jù)時通過軟件復(fù)位RI,如串行口模式2、3時數(shù)據(jù)幀格式發(fā)送時:將SCON中的TB8作為第9位數(shù)據(jù)發(fā)送;接收時:將接收來的第9位送到SCON中的RB8中。D0D1D2D3D4D5D6D7D8起始位9位數(shù)據(jù)停止位SM0SM1SM2RENTB8RB8TIRI串行口模式2、3時數(shù)據(jù)幀格式發(fā)送時:將SCON中的TB8作為串行口模式2和模式3時序圖串行口模式2和模式3時序圖模式2、3的應(yīng)用之一
帶奇偶校驗位的數(shù)據(jù)傳送奇偶校驗:收到的第9位RB8是發(fā)送方送來的奇偶校驗位。
在這種情況下必須令SM2=0,否則接收的校驗位RB8=0時,將影響數(shù)據(jù)的接收(因為RB8有時為“1”,而有時為“0”)。當(dāng)接收數(shù)據(jù)后,對PSW.0(P標(biāo)志)和RB8位進(jìn)行判斷。檢查結(jié)果是否與約定的相符合。
模式2、3的應(yīng)用之一
帶奇偶校驗位的數(shù)據(jù)傳送奇偶校驗:收到的例如:發(fā)送、接收雙方約定為奇校驗(數(shù)據(jù)中1的個數(shù)為奇):則發(fā)送方的第9位要根據(jù)前8位數(shù)據(jù)來確定。
若發(fā)送的8位數(shù)據(jù)是:00011010,則TB8為0。
發(fā)送程序如下: : MOV C,P CPL C MOV TB8,C MOV SBUF,A : 接收時將PSW.0(P標(biāo)志)位與RB8進(jìn)行“異或”,結(jié)果為1,說明校驗結(jié)果正確。例如:發(fā)送、接收雙方約定為奇校驗(數(shù)據(jù)中1的個數(shù)為奇): 接利用模式2,3進(jìn)行帶奇校驗的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序(原始TI=0)使用“查詢法”編制的發(fā)送、接收程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯處理CLRSCON.RIYESNO接收端程序(原始RI=0)NY數(shù)據(jù)送內(nèi)存利用模式2,3進(jìn)行帶奇校驗的串行通訊程序流程圖數(shù)據(jù)送累加器A模式2、3的應(yīng)用之二
多機通信如果系統(tǒng)采用多CPU結(jié)構(gòu),并且有一個做主機,其它為從機時,它們之間可以通過多機通信的方式進(jìn)行數(shù)據(jù)交換。如:多路數(shù)據(jù)采集系統(tǒng)。我們選一臺單片機作為主機,專門負(fù)責(zé)接收從機傳回的數(shù)據(jù),并進(jìn)行數(shù)據(jù)的后期處理(保存、打印和顯示等);而從機則完成對傳感器的信號檢測、A/D轉(zhuǎn)換,最后將數(shù)據(jù)采用串行通訊的形式上傳給主機。模式2、3的應(yīng)用之二
多機通信如果系統(tǒng)采用多CPU結(jié)構(gòu),并且傳統(tǒng)方式的多路數(shù)據(jù)采集系統(tǒng)單片機系統(tǒng)或微型計算機系統(tǒng)傳感器1傳感器2傳感器3傳感器4傳感器N接口電路引線(模擬信號)
機房或儀表室檢測現(xiàn)場傳統(tǒng)方式的多路數(shù)據(jù)采集系統(tǒng)單片機系統(tǒng)傳感器1傳感器2傳感采用“智能傳感器”組成的多路數(shù)據(jù)采集系統(tǒng)主機從機N從機4從機3從機2從機1串行數(shù)據(jù)線(2條)RXDTXDTXDRXD從機做智能傳感器采用“智能傳感器”組成的多路數(shù)據(jù)采集系統(tǒng)主機從機N從機4多機通訊中SM2的設(shè)定在模式2、3中,1,SM2=0時:RB8=1或RB8=0都可以激活RI。2,SM2=1時:RB8=1才能激活RI。RB8=0時,RI不能激活。多機通訊中SM2的設(shè)定在模式2、3中,主從式多機通信原理主機是通信的發(fā)起者,主機發(fā)送的數(shù)據(jù)可以傳送到各個從機,從機發(fā)送的數(shù)據(jù)只能為主機接收,從機之間不能直接通訊。主機和從機的串口設(shè)置為模式2或3,其中主機的SM2=0,從機的SM2=1。第九位數(shù)據(jù)用來作為地址數(shù)據(jù)標(biāo)識位,RB8=1時為地址幀,RB8=0時為數(shù)據(jù)幀。從機的SM2=1時,當(dāng)收到的RB8=1(地址幀)時,RI可以激活;如果RB8=0(數(shù)據(jù)幀),則RI不能激活。主從式多機通信原理主機是通信的發(fā)起者,主機發(fā)送的數(shù)據(jù)可以傳送主機首先通過發(fā)送地址碼來尋找從機(地址碼的特征是第9位數(shù)據(jù)為“1”),所以所有的從機都能接收到主機發(fā)出的地址碼(因為從機的RI=0,SM2=1,RB8=1),并使RI=1引發(fā)中斷。從機在中斷服務(wù)程序中,將接收到地址碼與自己的地址進(jìn)行比較,被選中的從機將自己的SM2=0;而未被選中的從機仍保持SM2=1,并退出中斷服務(wù)程序。當(dāng)主機找到從機后,開始向從機發(fā)數(shù)據(jù)、命令(其特征為第9位=0)。由于被選中的從機SM2=0,所以盡管接收到的RB8=0,同樣可以激活從機的RI,使其以查詢的方式接收主機發(fā)出的數(shù)據(jù)或命令。當(dāng)主機與從機的通訊完成后,從機再將其SM2=1,并退出中斷服務(wù)程序。主機重新發(fā)出另一個從機的地址,所有從機可以馬上響應(yīng)并接收地址信息。通信過程主機首先通過發(fā)送地址碼來尋找從機(地址碼的特征是第9位數(shù)據(jù)為模式2、3使用時要注意的問題在模式2、3中,可以實現(xiàn)較為特殊的通信方式,如帶校驗位的9位傳送、多機通訊。注意:當(dāng)SM2=0時,只能采用查詢方式???功能SM2第9位工作方式帶校驗位的9位數(shù)傳送SM2=0校驗位以查詢(RI)的方式接收數(shù)據(jù)多機通訊主機SM2=0地址碼:TB8=1數(shù)據(jù)、命令時=0以查詢的方式工作從機SM2=1未選中時SM2不變以中斷的方式接收地址選中后SM2=0以查詢的方式與主機通訊模式2、3使用時要注意的問題在模式2、3中,可以實現(xiàn)較為特殊9.2.3波特率的設(shè)計模式0的波特率=fosc/12模式2的波特率=模式1和模式3的波特率=9.2.3波特率的設(shè)計模式0的波特率=fosc/12fosc÷12發(fā)送SBUF(99H)TXD輸入移位寄存器RXD模式0波特率的產(chǎn)生fosc÷12發(fā)送SBUF(99H)TXD輸入移位寄存器RX串行口模式2課件波特率及定時器T1的設(shè)定在異步通信中,發(fā)送方與接收方是兩個互相獨立的系統(tǒng),它們的系統(tǒng)時鐘可以各不相同,此時確保通信正確的條件是:1、要有相同的字符幀格式;2、要有相同的波特率。MCS-51單片機的串行口四種模式其波特率各不相同。其中模式1、3的波特率就是由定時器T1的溢出率來決定的(PCON中的SMOD=1波特率加倍)。波特率及定時器T1的設(shè)定在異步通信中,發(fā)送方與接收方是兩個互如何設(shè)定波特率?在編制串行口通訊(模式1、3)程序時,在程序的初始化中,通過T1進(jìn)行波特率的設(shè)定,既對T1進(jìn)行初始化。T1初始化的主要任務(wù)是:1、設(shè)置T1的工作方式為定時(C/T=0);
工作模式為模式2:自動重裝。2、計算定時常數(shù)并分別送給TH1、TL1。波特率計算公式:T1溢出率:=(計數(shù)速率)/[256-(TH1)]=(fosc/12)/[256-(TH1)]如何設(shè)定波特率?在編制串行口通訊(模式1、3)程序時,在程序根據(jù)波特率求定時器T1初值計算公式設(shè):fosc為系統(tǒng)時鐘頻率,TH1為定時器T1的初值,B為波特率。可以推出初值:
TH1=256-[fosc/(384B)];(SMOD=0時)或:TH1=256-[fosc/(192B)];(SMOD=1時)【舉例】設(shè)系統(tǒng)時鐘為11.059MHz,要求波特率為1200Hz,求TH1?!窘狻吭O(shè):SMOD=0,用上述公式 TH1=256-[11.059MHz/(384X1200)]=232=0E8H
注意:1、根據(jù)波特率計算定時器初值會存在一定的誤差。 2、選用11.0592MHz晶振是為了產(chǎn)生精確的波特率。根據(jù)波特率求定時器T1初值計算公式設(shè):fosc為系統(tǒng)時鐘頻率9.2.4串行口的應(yīng)用在編制串行通信程序時,通信雙方必須保證:
1、相同的“波特率”;2、相同的“字符幀格式”格式。若采用1和3模式,則波特率可變且由定時器T1來作波特率發(fā)生器,所以根據(jù)波特率計算T1的初值,是串口程序初始化任務(wù)之一。在通信過程中,對標(biāo)志(RI、TI)的判斷是控制通信全過程的關(guān)鍵環(huán)節(jié)。9.2.4串行口的應(yīng)用在編制串行通信程序時,通信雙方必須串行口模式0的應(yīng)用——擴展并行接口
P3.0P3.1
P1.0D1D274LS164CP
CLR(STB)5VTXDRXD
P3.0
P3.1P1.0P1.1Q74LS165CPP/S5VTXDRXD外接串入-并出或并入-串出器件可實現(xiàn)I/O的擴展串行口模式0的應(yīng)用——擴展并行接口D15VTXDRX74LS164(串人/并出)74LS164(串人/并出)74LS165(并入/串出)74LS165(并入/串出)例9-2: 8031串行口外接CD4049或164串入-并出移位寄存器擴展8位并行口,8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán). 電路參見P195圖9-17
P3.0P3.1
P1.0D1D274LS164CP
CLR(STB)5VTXDRXD
3.0
P3.1P1.0P1.1Q74LS165CPP/S5VTXDRXD例9-2:D15VTXDRXDQ5VTXDR例9-2程序 ORG 0023H AJMP SBR ;轉(zhuǎn)中斷服務(wù) ORG 2000H MOV SCON #00H MOV A,#80H ;最左一位LED先亮 CLR P1.0 ;關(guān)閉并行輸出 MOV SBUF,ALOOP: SJMP $SBR: SETB P1.0 ;啟動并行輸出 ACALL DELAY CLR TI RR A CLR P1.0 MOV SBUF,A RETI例9-2程序例9-3:
用8051串行口外加移位寄存器CD4014(或165,166)擴展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號,當(dāng)K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號.
電路參見P196圖9-18
例9-3:
用8051串行口外加移位寄存器CD4014(或用8051串行口外接74LS165移位寄存器擴展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。電路示意如圖所示。當(dāng)開關(guān)K合上時,表示要求輸入數(shù)據(jù)。輸入8位開關(guān)量,處理不同的程序。用8051串行口外接74LS165移位寄存器擴展8位程序如下:START:JBP1.0,$;開關(guān)K未合上,等待SETBP1.1;165并行輸入數(shù)據(jù)CLRP1.1;開始串行移位MOVSCON,#10H;串行口模式0并啟動接收J(rèn)NBRI,$;查詢RICLRRI;查詢結(jié)束,清RIMOVA,SBUF;輸入數(shù)據(jù);根據(jù)A處理不同任務(wù)SJMPSTART;準(zhǔn)備下一次接收?!绦蛉缦?…
P3.0P3.1
P1.0D1D274LS164CP
CLR(STB)5VTXDRXD
P3.0
P3.1P1.0P1.1Q74LS165CPP/S5VTXDRXDD15VTXDRXDQ5VTXDRXD例9-3程序START: MOV SCON,#10H;模式0,允許接收 JB P1.1,$ ;開關(guān)K未閉合,等待 SETB P1.0 ;并行置入數(shù)據(jù) CLR P1.0 ;開始串行移位 JNB RI,$ CLR RI MOV A,SBUF ACALL LOGSIM ;進(jìn)行邏輯模擬 SJMP START
例9-3程序串行口模式1的發(fā)送和接收例9-4:8031串行口按雙工方式收發(fā)ASCII碼,最高位用來作奇偶校驗位,采用奇檢驗?zāi)J?要求傳送的波特率為1200b/s.編寫有關(guān)通訊程序. 已知:fosc=6MHz串行口模式1的發(fā)送和接收例9-4: MOV TMOD,#20H MOV TL1,#0F3H MOV TH1,#0F3H SETB TR1 MOV SCON,#50H MOV R0,#20H MOV R1,#40H ACLALL SOUT SETB ES SETB EALOOP: SJMP $;Interruptserver ORG 0023H AJMP SBR1 ORG 0100HSBR1: JNB RI,SEND ACALL SIN SJMP NEXT SEND: ACALL SOUTNEXT: RETI例9-4: MOV TMOD,#20HSOUT: CLR TI MOV A,@R0 MOV C,P CPL C MOV ACC.7 INC R0 MOV SBUF,A RETSIN: CLR RI MOV A,SBUF MOV C,P CPL C ;沒有檢查奇偶校驗是否正確 ANL A,#7FH MOV @R1,A INC R1 RETSOUT: CLR TI例9-5:
采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊
ASCII碼、32字節(jié)
1200b/s
fosc=11.059MHZ
例9-6:
采用查詢方式由串行口接收帶奇偶校驗位的數(shù)據(jù)塊,要求同上。例9-5:
采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊
例9-5:
MOV TMOD,#20H MOV TL1,#0E8H MOV TH1,#0E8H ;波特率的設(shè)定 SETB TR1 MOV SCON,#01000000B MOV R0,#20H ;數(shù)據(jù)塊起始地址 MOV R7,#32 LOOP:MOV A,@R0 ACALL SP_OUT JNB P,ERROR ;發(fā)送程序該判斷可不要? INC R0 DJNZ R7,LOOPSP_OUT: MOV C,P CPL C ;奇校驗 MOV ACC.7,C MOV SBUF,A ;發(fā)送數(shù)據(jù) JNB TI,$ CLR TI RET 例9-5: MOV TMOD,#20H MOVTMOD,#20H MOVTL1,#0E8H MOVTH1,#0E8H SETBTR1 MOVSCON,#01010000B MOVR0,#20H MOVR7,#32LOOP:ACALL SP_IN JCERROR MOV@R0,A INCR0DJNZ R7,LOOP接收子程:SP_IN:JNBRI,$ CLRRI MOVA,SBUF MOVC,P CPLC ANLA,#7FH RETERROR: (略)例9-6: MOVTMOD,#20H接收子程:例9-6:串行口模式2、模式3的發(fā)送和接收例9-8:用第9個數(shù)據(jù)位作奇偶校驗位,編寫串行口模式2的發(fā)送程序例9-9:用第9個數(shù)據(jù)位作奇偶校驗位,編寫串行口模式2的接收程序串行口模式2、模式3的發(fā)送和接收例9-8:TRT: MOV SCON,#80H MOV PCON,#80H MOV R0,#50H ;首地址 MOV R7,#10H ;長度LOOP:MOV A,@R0 MOV C,PSW.0 MOV TB8,C ;偶校驗 MOV SBUF,AWAIT: JBC TI,CONT SJMP WAITCONT:INC R0 DJNZ R7,LOOP RET
例9-8:TRT: MOV SCON,#80H例9-9:RRR: MOV SCON,#90H
MOV PCON,#80HLOOP: JBC RI,RECEIV SJMP LOOPRECIEV: MOV A,SBUF JB PSW.0,ONE JB RB8,ERR SJMP RIGHTONE: JNB RB8,ERR ;?RIGHT:ERR:例9-9:RRR: MOV SCON,#90H思考:多機通信中第9位不能用于校驗,應(yīng)采用何種校驗方式?如累加和校驗①累加和:對所有要發(fā)送的數(shù)據(jù)在發(fā)送的同時進(jìn)行累加。取其累加和的低8位(大于255的舍去),即單字節(jié)。②發(fā)送方在發(fā)送完所有數(shù)據(jù)后,將單字節(jié)的累加和也發(fā)出。③接收方在接收數(shù)據(jù)時,對接收到的每一個數(shù)據(jù)也進(jìn)行累加操作。數(shù)據(jù)接收完成后,將自行計算的累加和與最后收到的發(fā)送方送來的發(fā)送累加和進(jìn)行比較。如果兩個累加和一致,則認(rèn)為數(shù)據(jù)傳送正確。思考:多機通信中第9位不能用于校驗,應(yīng)采用何種校驗方式?如累應(yīng)用舉例:使用模式3進(jìn)行多機通訊主機從機N從機4從機3從機2從機1串行數(shù)據(jù)線(2條)主機可以與所有從機通訊,而從機之間不能通訊。應(yīng)用舉例:使用模式3進(jìn)行多機通訊主機從機N從機4從機3多機通訊中主機與從機之間的控制、狀態(tài)信息主機的控制命令:
00H主機發(fā)送,從機接收;(控制從機的操作)01H主機接收,從機發(fā)送。從機狀態(tài)字:從機向主機發(fā)送的用于表征從機工作狀態(tài)的信息(如下圖)。ERR·····TRDYRRDY0:合法命令0:發(fā)送未就緒
0:接收未就緒1:非法命令
1:發(fā)送就緒
1:接收就緒從機返回的狀態(tài)字多機通訊中主機與從機之間的控制、狀態(tài)信息主機的控制命令:主機程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序數(shù)據(jù):R0~R5停機MCOMMU從機應(yīng)答?地址相符?發(fā)送命令字(TB8=0)從機應(yīng)答?命令正確?命令分類從機接收就緒?從機發(fā)送就緒?RET命令從機復(fù)位發(fā)FFHNNYYNNYYNNYY接收發(fā)送調(diào)用MCOMMU接收數(shù)據(jù)塊發(fā)送數(shù)據(jù)塊發(fā)送從機地址主機程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口為一:主機程序(初始化部分)
ORG2000HSTART:MOVTMOD,#20H ;定時器T1為模式2(8位自動重裝) MOVTH1,#0F4H MOVTL1,#0F4H ;波特率為1200(設(shè)外接6MHz晶體) SETBTR1 ;啟動T1
MOVSCON,#0D8H ;串口為模式3,REN=1,SM2=0,TB8=1 MOVPCON,#00H ;設(shè)PCON中的SMOD=0 MOVR0,#40H ;發(fā)送數(shù)據(jù)塊首地址送R0指針 MOVR1,#20H ;接收數(shù)據(jù)塊首地址送R1指針
MOVR2,#SLAVE ;被尋從機地址送R2
MOVR3,#00H ;主發(fā)、從收命令?;蛑魇铡陌l(fā)命令/#01H MOVR4,#14H ;發(fā)送數(shù)據(jù)塊長度送R4(20)計數(shù)器 MOVR5,#14H ;接收數(shù)據(jù)塊長度送R5(20)計數(shù)器 ACALLMCOM ;調(diào)用主機通訊子程序 SJMP$一:主機程序(初始化部分) ORG2000H二:主機通訊子程序(MCOM)
ORG2100HMCOM: MOVA,R2 ;取從機地址 MOVSBUF,A JNBRI,$ ;注意:為什么判斷RI而不是TI? CLRRI
MOVA,SBUF ;取從機的返回地址 XRLA,R2 ;核對兩個地址
JZMTXD2 ;相符時,轉(zhuǎn)MTXD2MTXD1:MOVSBUF,#0FFH ;返回地址錯誤時,發(fā)送從機復(fù)位信號
SETBTB8 ;設(shè)定地址標(biāo)志
SJMPMCOM
;重發(fā)從機地址,所有從機重新判斷地址MTXD2:CLRTB8
;將TB8=0,準(zhǔn)備發(fā)送命令 MOVSBUF,R3 ;送出命令 JNBRI,$ ;等待從機應(yīng)答 CLRRI ;從機應(yīng)答后清標(biāo)志 MOVA,SBUF ;接收從機應(yīng)答命令
JNBACC.7,MTXD3 ;命令無錯時,則命令分類 SJMPMTXD1 ;命令錯返回重新聯(lián)絡(luò)二:主機通訊子程序(MCOM) ORG2100HMTXD3:CJNER3,#00H,MRXD ;從機發(fā)送主機接收時,轉(zhuǎn)MRXD
JNBACC.0,MTXD1 ;從機接收時,若從機未準(zhǔn)備好轉(zhuǎn)回MTXD4:MOVSBUF,@R0 ;若從機準(zhǔn)備好,則開始發(fā)送 JNBTI,$ CLRTI INCR0 DJNZR4,MTXD4 RETMRXD:
JNBACC.1,MTXD1 ;從機發(fā)送未準(zhǔn)備好返回MRXD1:JNBRI,$ ;等待接收 CLRRI MOVA,SBUF INCR1 ;接收數(shù)據(jù)區(qū)指針加一 DJNZR5,MRXD1 ;未接收完則繼續(xù)(R5接收數(shù)據(jù)計數(shù)器) RET END ERR從機返回的狀態(tài)字TRDYRRDY0:合法命令
0:發(fā)送未就緒
0:接收未就緒1:非法命令
1:發(fā)送就緒
1:接收就緒MTXD3:CJNER3,#00H,MRXD ;從機發(fā)送主從機主程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口為模式3REN=1,SM2=1TB8=1設(shè)定程序參數(shù):R0~R3開串行口中斷動態(tài)停機等待主機發(fā)送地址碼保護(hù)現(xiàn)場接收地址符合本機?向主機回送本機地址接收下一字符是命令嗎?命令分類本機發(fā)送準(zhǔn)備就緒?本機接收準(zhǔn)備就緒?發(fā)TRDY=1狀態(tài)字發(fā)RRDY=1狀態(tài)字發(fā)送數(shù)據(jù)接收數(shù)據(jù)發(fā)送完?接收完?恢復(fù)現(xiàn)場返回NNYY發(fā)送命令接收命令非法命令送TRDY=0送RRDY=0NNNY中斷服務(wù)程序NY接收FFH時從機主程序框圖T1為定時,模式2B=1200,啟動T1設(shè)串口
ORG0000H
LJMPSTART ORG0023H
LJMP0100H ORG0040HSTART:MOVTMOD,#20H ;設(shè)定定時器T1為模式2
MOVTH1,#0F4H ;設(shè)定波特率為1200
MOVTL1,#0F4H
SETBTR1 ;啟動定時器T1
MOVSCON,#0F8H
;設(shè)串口模式3,REN=1,SM2=1,TB8=1
MOVPCON,#00H MOVR0,#20H ;R0指向發(fā)送數(shù)據(jù)塊首地址 MOVR1,#40H ;R1指向接收數(shù)據(jù)塊首址 MOVR2,#14H ;R2賦發(fā)送數(shù)據(jù)塊長度 MOVR3,#14H ;R3賦接收數(shù)據(jù)塊長度
SETBEA SETBES ;開中斷 CLRRI ;清標(biāo)志RI準(zhǔn)備接收數(shù)據(jù) SJMP$ ;等待中斷三,從機主程序(初始化) ORG0000H三,從機主程序(初始化)四:從機中斷服務(wù)程序 ORG0100HSINTS: CLRRI ;接收到地址后清RI
PUSHACC PUSHPSW ;保護(hù)現(xiàn)場
MOVA,SBUF ;接收主機送來得從機地址 XRLA,#SLAVE ;核實從機地址 JZSRXD1 ;若是本機地址轉(zhuǎn)SRXD1RETU: POPPSW ;返回主程序 POPACC ;恢復(fù)現(xiàn)場 RETI ;中斷返回SRXD1:CLRSM2 ;SM2清零,單獨接收主機數(shù)據(jù)/命令 MOVSBUF,#SLAVE ;向主機發(fā)回從機地址 JNBRI,$ ;等待主機的命令 CLRRI ;接收到主機命令后清RI JNBRB8,SRXD2 ;若是命令(RB8=0)則轉(zhuǎn)SRXD2繼續(xù)
SJMPRETU ;接收的不是命令時(RB8=1),返回四:從機中斷服務(wù)程序 ORG0100HSRXD2:MOVA,SBUF ;將接收到的命令送A CJNEA,#02H,NEXT ;命令合法(A-02H)NEXT: JCSRXD3 ;若命令合法(A<02H)則繼續(xù)
CLRTI ;命令不合法則清TI準(zhǔn)備發(fā)回ERR=1 MOVSBUF,#80H ;發(fā)送ERR=1的狀態(tài)字 SETBSM2 ;SM2重新置位 SJMPRETU ;返回主程序SRXD3:JZSCHRX ;若A=00H既主機發(fā)送從機接收轉(zhuǎn)SCHRX JBF0,STXD ;若從機準(zhǔn)備好(F0=1)時,轉(zhuǎn)STXD MOVSBUF,#00H ;未準(zhǔn)備好時,向主機發(fā)回TRXD=0信息 SETBSM2 SJMPRETU ;返回主程序SRXD2:MOVA,SBUF ;將接收到的命令送ASTXD: MOVSBUF,#02H ;向主機發(fā)送TRDY=1的狀態(tài)字 JNBTI,$ ;等待發(fā)送完畢 CLRTI ;發(fā)送完畢后清標(biāo)志TILOOP1:MOVSBUF,@R0 ;開始發(fā)送數(shù)據(jù)塊 JNBTI,$ CLRTI INCR0 DJNZR2,LOOP1
SETBSM2 ;數(shù)據(jù)塊發(fā)送完畢 SJMPRETU ;返回主程序SCHRX:JBPSW.1,SRXD ;本機接收就緒轉(zhuǎn)SRXD(PSW.1:標(biāo)志)
MOVSBUF,#00H ;接收未準(zhǔn)備好時,向主機發(fā)RRDY=0 SETBSM2 SJMPRETU ;返回主程序STXD: MOVSBUF,#02H ;向主機發(fā)送TRDYSRXD: MOVSBUF,#01H ;向主機發(fā)送RRDY=1狀態(tài)字LOOP2:JNBRI,$ ;等待接收數(shù)據(jù)塊,開始接收數(shù)據(jù)塊 CLRRI MOV@R1,SBUF INCR1 DJNZR3,LOOP2
SETBSM2 ;數(shù)據(jù)塊接收完畢 SJMPRETU ;返回主程序 END思考:主從通信程序采用的是全雙工還是半雙工方式?SRXD: MOVSBUF,#01H ;向主機發(fā)送RRD小結(jié):四種模式的接收、發(fā)送條件模式發(fā)送條件接收條件接收方式主要應(yīng)用0TI=0RI=0,REN=1查詢、中斷同步移位,系統(tǒng)擴并口1TI=0RI=0,REN=1查詢、中斷8位數(shù)據(jù)異步傳送2、3TI=0RI=0,REN=1,SM2=0查詢(無中斷)8位數(shù)據(jù)+奇偶位的異步收發(fā)UARTRI=0,REN=1,SM2=1若RB8=0時接收無效;若RB8=1時引發(fā)中斷。8位數(shù)據(jù)+控制位的異步收發(fā)UART小結(jié):四種模式的接收、發(fā)送條件模式發(fā)送條件接收條件接收方式9.3RS-232C標(biāo)準(zhǔn)接口總線和串行通訊硬件設(shè)計+3V~15V:邏輯0-3V~-15V:邏輯1傳輸距離:<20m9.3RS-232C標(biāo)準(zhǔn)接口總線和串行通訊硬件設(shè)計+3V~作業(yè)P
2344,5,7,8作業(yè)P234第9章串行通信第9章串行通信9.1串行通訊基本知識數(shù)據(jù)通訊傳輸方式同步通訊和異步通訊波特率:表示每秒鐘傳送二進(jìn)制代碼的位數(shù),單位b/s并行通訊串行通訊單向(單工)配置全雙向(全雙工)配置半雙向(半雙工)配置9.1串行通訊基本知識并行通訊串行通訊單向(單工)配置全雙1、并行通信和串行通信通信的基本方式:并行通信:數(shù)據(jù)的各位同時送出。傳送距離:小于30米。串行通信:數(shù)據(jù)的各位逐位送出,只需一對傳送線即可完成傳送。傳送距離:幾米~幾千公里。1、并行通信和串行通信2、串行通信(1)串行通信的數(shù)據(jù)傳送方向。 單工、半雙工、全雙工三種方式(2)串行通信的工作方式同步方式:數(shù)據(jù)按塊傳送,包括同步字符、數(shù)據(jù)塊。異步方式:數(shù)據(jù)按字符傳送,每一個字符均按固定的字符格式傳送,又被稱為幀,如圖。包含字符的起始位、數(shù)據(jù)位、校驗位、停止位四個部分。2、串行通信異步通訊的一幀數(shù)據(jù)格式異步通訊的一幀數(shù)據(jù)格式同步傳送的數(shù)據(jù)格式同步傳送的數(shù)據(jù)格式單片機系統(tǒng)中的串行接口及特點串行通訊可以實現(xiàn)單片機與單片機、單片機與微機之間的數(shù)據(jù)交換。串行通訊電路簡單,實現(xiàn)遠(yuǎn)距離低成本的數(shù)據(jù)傳輸。缺點是傳輸速度慢。在一些系統(tǒng)中,采用串行通訊的形式將多微處理器連接起來,構(gòu)成一個完整的多CPU控制系統(tǒng)。從機從機從機從機主機9.2MCS-51串行口及應(yīng)用單片機系統(tǒng)中的串行接口及特點串行通訊可以實現(xiàn)單片機與單片機、串行(異步)通信應(yīng)用示意圖MCS-51TXD(甲)RXD
RXDMCS-51TXD(乙)TXDRXDRXDTXDRS-232或485RS-232或485TXDRXDRS-232PC機COM1,COM2單片機甲、乙之間近距離的直接通訊單片機甲乙兩地之間遠(yuǎn)距離通訊單片機與PC機之間的數(shù)據(jù)通訊串行(異步)通信應(yīng)用示意圖MCS-51TXDRXDM8051串行口結(jié)構(gòu)8051串行口結(jié)構(gòu)9.2.1與串口有關(guān)的寄存器
數(shù)據(jù)緩沖寄存器SBUF地址:99HSBUF是用來存放發(fā)送和接收數(shù)據(jù)的寄存器,對應(yīng)兩個獨立的緩沖器。CPU寫SBUF就是開始發(fā)送數(shù)據(jù)(MOVSBUF,A);CPU讀SBUF就是讀取接收到的數(shù)據(jù)到A
(MOVA,SBUF)。該結(jié)構(gòu)在硬件設(shè)計上保證了51單片機串行口是一個可同時發(fā)送與接收的”全雙工”串口。9.2.1與串口有關(guān)的寄存器
數(shù)據(jù)緩沖寄存器SBUF接收SBUF移位寄存器發(fā)送SBUF移位寄存器內(nèi)部總線CPUMCS-51RXDP3.0TXDP3.1SBUF硬件電路:發(fā)送:執(zhí)行指令MOVSBUF,A接收:當(dāng)檢測到起始位電路自動啟動接收。接收SBUF移位寄存器發(fā)送SBUF移位寄存器內(nèi)部串行口控制寄存器SCON地址:98HSM0SM1:串行口工作模式選擇位。SM0SM1SM2RENTB8RB8TIRISM0SM1模式功能波特率000同步移位寄存器模式Fosc/120118位異步通信UART可變1029位異步通信UARTFosc/64或/321139位異步通信UART可變串行口控制寄存器SCON地址:98HSM0SM1:串行RI
:完成一幀數(shù)據(jù)接收標(biāo)志,應(yīng)軟件清零,接收完成RI=1并申請中斷(如果中斷開放,則引發(fā)中斷);TI
:完成一幀數(shù)據(jù)發(fā)送標(biāo)志,應(yīng)軟件清零,發(fā)送完成TI=1同時申請中斷(如果中斷開放,則引發(fā)中斷);RB8:在9位數(shù)據(jù)傳送的模式2、3中,接收到的第9位數(shù)據(jù);TB8:在9位數(shù)據(jù)傳送的模式2、3中,將要發(fā)送的第9位數(shù)據(jù);REN:允許接收位,REN=1時允許接收.由軟件置位或清零。SM0SM1SM2RENTB8RB8TIRIRI:完成一幀數(shù)據(jù)接收標(biāo)志,應(yīng)軟件清零,接收完成RI=1并SM2:多機通信使能位.1,模式0、1時: SM2不用,應(yīng)設(shè)為0。
2,模式2、3時:
SM2=0,無論RB8如何,RI都能被激活(RI=1)。 若SM2=1,收到的第9位(RB8)=0時,則RI不會被激活; 若SM2=1且RB8=1時,RI才能被激活=1并引發(fā)中斷。 在接收方式時:當(dāng)SM2=1時,能否接收到數(shù)據(jù)取決于對方發(fā)送的第9位數(shù)據(jù)RB8,可由發(fā)送方來控制接收方的數(shù)據(jù)接收。 此種方式(SM2=1)用于多機通信。SM0SM1SM2RENTB8RB8TIRISM2:多機通信使能位.SM0SM1SM2RENTB8RB如何使用RI,TI標(biāo)志完成接收、發(fā)送?
通信雙方不是同步工作的,數(shù)據(jù)交換由各自SBUF進(jìn)行。CPU不參與通信過程,只能通過標(biāo)志了解SBUF的發(fā)送、接收的狀態(tài),以便決定后續(xù)操作。RI(SCON.0):接收完成標(biāo)志。①當(dāng)SUBF從RXD接收完一個完整的數(shù)據(jù)幀時,RI=1。如果串口中斷是開放的,則RI=1時會自動引發(fā)中斷。用戶可以通過中斷服務(wù)程序?qū)BUF中的數(shù)據(jù)取出送累加器A。
MOVA,SBUF——中斷方式接收數(shù)據(jù);②也可以使用查詢的方式對RI進(jìn)行檢測,如果RI=1則執(zhí)行:
MOVA,SBUF
否則等待——查詢方式接收數(shù)據(jù)。如何使用RI,TI標(biāo)志完成接收、發(fā)送?通信雙TI(SCON.1):發(fā)送完成標(biāo)志。
當(dāng)CPU執(zhí)行:MOVSBUF,A后,SBUF開始通過TXD向外發(fā)送數(shù)據(jù)。當(dāng)完成一幀數(shù)據(jù)的發(fā)送后,TI=1。①如果系統(tǒng)中斷是開放的,則TI=1會自動引發(fā)中斷。用戶可以通過中斷服務(wù)程序向SBUF輸送下一個數(shù)據(jù):
MOVSBUF,A———中斷方式發(fā)送數(shù)據(jù);②也可以使用查詢的方式對TI進(jìn)行檢測,如果TI=1則執(zhí)行:
MOVSBUF,A
。否則等待——查詢方式發(fā)送。TI(SCON.1):發(fā)送完成標(biāo)志。使用查詢RI、TI標(biāo)志方式進(jìn)行發(fā)送與接收N個數(shù)據(jù)CLRSCON.TI數(shù)據(jù)送累加器A修改數(shù)據(jù)區(qū)指針movsbuf,aTI=1?N個數(shù)據(jù)發(fā)送完?YESNOYESNO發(fā)送數(shù)據(jù)的程序框圖SETBSCON.RENmova,sbufRI=1?N個數(shù)據(jù)接收完?YESNOYESNOCLRSCON.RIA送數(shù)據(jù)區(qū)修改數(shù)據(jù)指針接收數(shù)據(jù)程序框圖使用查詢RI、TI標(biāo)志方式進(jìn)行發(fā)送與接收N個數(shù)據(jù)CLRSCPCON地址:87HSMOD
波特率選擇位SMOD=1時,方式1,方式2,方式3的波特率加倍PCON地址:87HSMOD波特率選擇位9.2.2串行通信工作模式模式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位,其幀格式如下模式1以10位為一幀傳輸,設(shè)由1個起始位,8個數(shù)據(jù)位,1個停止位模式2和模式3以11位為1幀傳輸,設(shè)有1個起始位,8個數(shù)據(jù)位,1個附加第9位和1個停止位….D0D1D2D3D4D5D6D7…..…..起始D0D1D2D3D4D5D6D7停止…..….起始D0D1D2D3D4D5D6D7D8停止…..9.2.2串行通信工作模式模式0以8位數(shù)據(jù)為一幀,不設(shè)起串行口的模式0特點:同步移位寄存器方式。波特率:固定為fosc/12.RXD(P3.0):數(shù)據(jù)口線(發(fā)送和接收);先移數(shù)據(jù)的低位。TXD(P3.1):移位脈沖輸出端。
(注意:移位脈沖的頻率就是模式0的波特率)主要功能:使用串行口擴展并行口,理論上可以擴展n*8位的并行口。MCS-51RXDTXDData外部移位寄存器cp移位脈沖串行數(shù)據(jù)并行的數(shù)據(jù)(8位)串行口的模式0特點:同步移位寄存器方式。波特率:固定為fo模式0電路框圖51內(nèi)部總線SBUF零檢測器移位時鐘STARTSHIFT
發(fā)送控制器TXCLOCKTISENDDSQCPSTARTRIRECEIVERX接收控制器SHIFTCLOCK11111110輸入移位寄存器SBUF51內(nèi)部總線讀SBUF寫SBUFS6串行口中斷P3.0RXDP3.1TXD裝載SBUFREN/RIP3.0RXDMOVSBUF,A1S6P2模式0電路框圖51內(nèi)部總線SBUF零檢測器移位START模式0的發(fā)送與接收單片機執(zhí)行movsbuf,a指令啟動“發(fā)送控制器”開始發(fā)送。完畢,TI被置位。在滿足REN=1且RI=0的條件下(實際上是一條寫SCON指令),就會引發(fā)一次接收過程。完畢,RI置位,向CPU發(fā)中斷申請。模式0的發(fā)送與接收單片機執(zhí)行movsbuf,a指令啟動“發(fā)模式0的時序信號(發(fā)送)S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6寫SBUFSENDD1D0D2D3D4D5D6D7RXD端數(shù)據(jù)SHIFTTXD端同步脈沖TI中斷標(biāo)志movsbuf,a指令從發(fā)送到結(jié)束的10個機器周期模式0的時序信號(發(fā)送)S1~S6S1~S6S1~S6S1~模式0的時序信號(接收)S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6S1~S6寫SCON(RI=0)RECEIVESHIFTRI對RXD采樣TXD同步脈沖RI中斷標(biāo)志模式0的時序信號(接收)S1~S6S1~S6S1~S6S1~串行口模式1特點:10位傳輸格式(1個起始位+8個數(shù)據(jù)位+1個停止位);用于通訊的異步方式;可變波特率(定時器T1的溢出率來確定,所以在此種模式下,首先要對T1進(jìn)行初始化以確定串行口的波特率)。發(fā)送操作:在TI=0,執(zhí)行movsbuf,a指令后從TXD端開始發(fā)送數(shù)據(jù)。當(dāng)發(fā)送完8位數(shù)據(jù)后自動的添加一個高電平的停止位,并將TI置位。串行口模式1特點:10位傳輸格式(1個起始位+8個數(shù)據(jù)位+接收操作:在REN=1且RI=0的條件下進(jìn)行。串行口的接收控制器對RXD線進(jìn)行采樣,其采樣頻率是接收時鐘的16倍。當(dāng)連續(xù)8次采集到RXD線上為低電平時,檢測電路便認(rèn)定RXD線上有了“起始位”,在此后,便開始在每次第7、8、9三個脈沖時進(jìn)行RXD采樣,采取“三中取二”的原則來確定接收的數(shù)據(jù)(如圖所示)。數(shù)據(jù)裝載條件: 當(dāng)接收到停止位時,必須滿足:RI=0且SM2=0,才能把接收的數(shù)據(jù)送到SBUF中(停止位送SCON的RB8中,并使RI=1),否則數(shù)據(jù)丟失。
要想得到接收的數(shù)據(jù),在接收前必須事先清零RI。接收操作:在REN=1且RI=0的條件下進(jìn)行。串行口模式1時數(shù)據(jù)幀格式及接收采樣示意圖D0D1D2D3D4D5D6D7起始位8位數(shù)據(jù)停止位對RXD線的數(shù)據(jù)以16倍速度采樣當(dāng)連續(xù)8次采集到低電平時,便確認(rèn)起始位到來在每個第7,8,9個脈沖對RXD采樣并采用“以三取二”來確定采集的數(shù)據(jù)7.8.9串行口模式1時數(shù)據(jù)幀格式及接收采樣示意圖D0D1D2D3D4串行口模式1時序圖串行口模式1時序圖串行口模式2、3特點:模式2、3都是11位傳輸格式(1個起始位+9個數(shù)據(jù)位+1個停止位),它們的不同之處是波特率。波特率:模式2:固定為fosc/64或fosc/32。(具體由PCON中的SMOD位來確定)。模式3:可變,由定時器T1的溢出波特率來確定。D0D1D2D3D4D5D6D7D8起始位8+1位數(shù)據(jù)停止位第9位串行口模式2、3特點:模式2、3都是11位傳輸格式(1個起模式2、3的發(fā)送過程類似于模式1,唯一的區(qū)別在于數(shù)據(jù)幀中數(shù)據(jù)是9位。這樣,在發(fā)送一幀數(shù)據(jù)時,CPU除了要把8位數(shù)據(jù)送SBUF外(movsbuf,a),還要事先將第9位數(shù)據(jù)送到SCON.TB8中。如:第9位(TB8)=1時,SETBSCON.TB8
若第9位(TB8)=0時:CLRSCON.TB8
例如:
SETBSCON.TB8或:CLRSCON.TB8
MOVSBUF,A
MOVSBUF,A
SM0SM1SM2RENTB8RB8TIRI模式2、3的發(fā)送過程類似于模式1,唯一的區(qū)別在于數(shù)據(jù)幀中數(shù)據(jù)模式2、3的接收過程也類似于模式1,不同的是:模式1時,SCON中的RB8是接收到的停止位(“1”);而模式2、3時,RB8是接收到的第9位。在模式1,接收操作只有在RI=0,且REN=1時數(shù)據(jù)可以接收。而模式2、3的接收裝載條件是:
a)RI=0且SM2=0(與RB8的狀態(tài)無關(guān));或:b)RI=0且RB8=1(SM2=1時)。
只有滿足a)或滿足b)的條件時,接收到的數(shù)據(jù)才能送到SBUF,并使RI=1激活,否則接收無效且RI不能置位。模式2、3的接收過程也類似于模式1,不同的是:模式1時,SCRI=0是保證SBUF空(每次取走數(shù)據(jù)時通過軟件復(fù)位RI,如果沒有取走數(shù)據(jù)則RI=1),保證接收到的數(shù)據(jù)不丟失。利用后一個條件SM2和RB8來控制接收,可用于多機通信。 令SM2=1可以利用接收到的RB8控制接收是否有效。即RB8=1時接收有效;RB8=0時接收無效。SM2也稱“多機通訊使能位”。 在沒有多機通信的場合,RB8可用于奇偶效驗,以防止串行通信出錯。RI=0是保證SBUF空(每次取走數(shù)據(jù)時通過軟件復(fù)位RI,如串行口模式2、3時數(shù)據(jù)幀格式發(fā)送時:將SCON中的TB8作為第9位數(shù)據(jù)發(fā)送;接收時:將接收來的第9位送到SCON中的RB8中。D0D1D2D3D4D5D6D7D8起始位9位數(shù)據(jù)停止位SM0SM1SM2RENTB8RB8TIRI串行口模式2、3時數(shù)據(jù)幀格式發(fā)送時:將SCON中的TB8作為串行口模式2和模式3時序圖串行口模式2和模式3時序圖模式2、3的應(yīng)用之一
帶奇偶校驗位的數(shù)據(jù)傳送奇偶校驗:收到的第9位RB8是發(fā)送方送來的奇偶校驗位。
在這種情況下必須令SM2=0,否則接收的校驗位RB8=0時,將影響數(shù)據(jù)的接收(因為RB8有時為“1”,而有時為“0”)。當(dāng)接收數(shù)據(jù)后,對PSW.0(P標(biāo)志)和RB8位進(jìn)行判斷。檢查結(jié)果是否與約定的相符合。
模式2、3的應(yīng)用之一
帶奇偶校驗位的數(shù)據(jù)傳送奇偶校驗:收到的例如:發(fā)送、接收雙方約定為奇校驗(數(shù)據(jù)中1的個數(shù)為奇):則發(fā)送方的第9位要根據(jù)前8位數(shù)據(jù)來確定。
若發(fā)送的8位數(shù)據(jù)是:00011010,則TB8為0。
發(fā)送程序如下: : MOV C,P CPL C MOV TB8,C MOV SBUF,A : 接收時將PSW.0(P標(biāo)志)位與RB8進(jìn)行“異或”,結(jié)果為1,說明校驗結(jié)果正確。例如:發(fā)送、接收雙方約定為奇校驗(數(shù)據(jù)中1的個數(shù)為奇): 接利用模式2,3進(jìn)行帶奇校驗的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序(原始TI=0)使用“查詢法”編制的發(fā)送、接收程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯處理CLRSCON.RIYESNO接收端程序(原始RI=0)NY數(shù)據(jù)送內(nèi)存利用模式2,3進(jìn)行帶奇校驗的串行通訊程序流程圖數(shù)據(jù)送累加器A模式2、3的應(yīng)用之二
多機通信如果系統(tǒng)采用多CPU結(jié)構(gòu),并且有一個做主機,其它為從機時,它們之間可以通過多機通信的方式進(jìn)行數(shù)據(jù)交換。如:多路數(shù)據(jù)采集系統(tǒng)。我們選一臺單片機作為主機,專門負(fù)責(zé)接收從機
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教舞蹈教案模板7篇
- 四年級數(shù)學(xué)(四則混合運算帶括號)計算題專項練習(xí)與答案匯編
- 銷售業(yè)務(wù)員工作總結(jié)11篇
- 哲學(xué)論文開題答辯模板
- 2024年度機床設(shè)備交易協(xié)議
- 代加工機械合同范例
- 南京租房合同范例
- 賁門松弛手術(shù)演練方案
- 委托他人理財合同范例
- pe管購銷合同范例
- 祛淤通脈三圣藥川芎、血竭、地龍
- 消防安全教育培訓(xùn)記錄表
- 34化糞池安全風(fēng)險告知卡
- 初中地理課程的教學(xué)計劃與實施
- 猜歌名教學(xué)講解課件
- 性傳播疾病-課件
- 2022年海淀初中入學(xué)白皮書
- 兒童牙外傷-年輕恒牙外傷(兒童口腔醫(yī)學(xué)課件)
- 外研社新標(biāo)準(zhǔn)小學(xué)英語(一起點)單詞表(帶音標(biāo))(全)
- 2023年中國鐵路上海局招考聘用本科及以上學(xué)歷畢業(yè)生(62人)筆試題庫含答案解析
- 部編版語文六年級下冊總復(fù)習(xí)病句選擇題精選精練(有答案)
評論
0/150
提交評論