第07 MCS-51單片機(jī)的串行接口_第1頁
第07 MCS-51單片機(jī)的串行接口_第2頁
第07 MCS-51單片機(jī)的串行接口_第3頁
第07 MCS-51單片機(jī)的串行接口_第4頁
第07 MCS-51單片機(jī)的串行接口_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章MCS-51單片機(jī)的串行接口本章內(nèi)容串行通訊的基本概念;

MCS-51單片機(jī)串行接口的工作模式;串行接口應(yīng)用及編程。1西華大學(xué)電氣信息學(xué)院鄭海春7.1

串口通信基本知識(shí)7.2

數(shù)據(jù)緩沖寄存器SBUF7.3

串口控制寄存器SCON7.4

串行口的模式07.5

串行口的模式17.6

串行口的模式2、37.7

波特率及定時(shí)器T1的設(shè)定7.8

串行口應(yīng)用舉例本章目錄2西華大學(xué)電氣信息學(xué)院鄭海春7.1串口通信基本知識(shí)(一)數(shù)據(jù)通信的兩種方式:并行通信:數(shù)據(jù)的各位同時(shí)傳送。接收設(shè)備發(fā)送設(shè)備詢問應(yīng)答特點(diǎn):控制簡單,傳輸速度快。傳輸線多,長距離傳輸成本高。3西華大學(xué)電氣信息學(xué)院鄭海春2.

串行通信:數(shù)據(jù)一位一位順序傳送。接收設(shè)備發(fā)送設(shè)備順序傳送D0

D7特點(diǎn):

傳輸線少,長距離傳送時(shí)成本低,但控制復(fù)雜。波特率(Baudrate):每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),單位為b/s,即位/秒,如9600bps。

4西華大學(xué)電氣信息學(xué)院鄭海春(二)串行通信的兩種工作方式:異步通信(AsynchronousCommunication)傳送方式:在物理結(jié)構(gòu)上,異步通信的雙方只有數(shù)據(jù)線而沒有時(shí)鐘傳輸線。A、B雙方都以自己的時(shí)鐘源控制著發(fā)送的速率或?qū)邮者M(jìn)行采樣;由于通訊雙方系統(tǒng)時(shí)鐘往往不同,所以在異步通信中,要想保證通信的成功必須保證兩點(diǎn):

①通信雙方必須保持相同的傳送、接收速率(波特率); ②雙方必須遵守相同的數(shù)據(jù)格式(字符幀)。5西華大學(xué)電氣信息學(xué)院鄭海春將要傳送的數(shù)據(jù)由一個(gè)0點(diǎn)平的“起始位”引導(dǎo),中間為8位(或9位)的數(shù)據(jù)位,后面有一個(gè)高電平的“停止位”——數(shù)據(jù)幀格式。異步通信的字符幀格式由于添加了“起始位”和“停止位”,占用了傳輸時(shí)間,降低了傳輸效率,因此僅適用于遠(yuǎn)距離的數(shù)據(jù)通信。D0D1D2D3D4D5D6D7起始位停止位01MCS-51單片機(jī)的一個(gè)字符幀的格式6西華大學(xué)電氣信息學(xué)院鄭海春同步通信(SynchronousCommunication)傳送方式:在物理結(jié)構(gòu)上,通信雙方除了通信的數(shù)據(jù)線外還增加了一個(gè)通信用的“時(shí)鐘傳輸線clock”。由主控方提供時(shí)鐘信號(hào)clock。由于有了時(shí)鐘信號(hào)來“同步”發(fā)送或接收操作,所以被傳送的數(shù)據(jù)不再使用“起始位”和“停止位”,因而提高了傳送速度。因此同步通信常被用于系統(tǒng)內(nèi)部各芯片之間的接口設(shè)計(jì)。由于同步通信多了一條“時(shí)鐘線”,因此不太適合遠(yuǎn)距離的通信。7西華大學(xué)電氣信息學(xué)院鄭海春同步發(fā)送、接收示意圖主控方被控方dataclock主控方被控方dataclock主控方發(fā)送數(shù)據(jù)主控方接收數(shù)據(jù)

8西華大學(xué)電氣信息學(xué)院鄭海春(三)串行通信的工作制式:串行通信中的數(shù)據(jù)傳送可劃分為三種工作制式:單工模式(simplex);半雙工模式(halfduplex);全雙工模式(fullduplex)。9西華大學(xué)電氣信息學(xué)院鄭海春單工模式(simplex):通訊的A方只能送,而B方只能接收——廣播式。例如:除了用于遠(yuǎn)程通信外,系統(tǒng)內(nèi)部單片機(jī)以串行方式接收外圍芯片(ADC)的數(shù)據(jù);或者控制外圍芯片(DAC、LCD等)工作。發(fā)送方A接收方BTXDRXD10西華大學(xué)電氣信息學(xué)院鄭海春半雙工模式(halfduplex):

在某一時(shí)刻A方只能發(fā)送,B方只能接收;而在另一時(shí)刻B方只能發(fā)送,A方只能接收——對(duì)講機(jī)模式。例如:除了用于遠(yuǎn)程通信外,系統(tǒng)內(nèi)部單片機(jī)與串行接口的RAM、E2PROM之間的數(shù)據(jù)交換。發(fā)送方A接收方BTXDRXDTXDRXD11西華大學(xué)電氣信息學(xué)院鄭海春全雙工模式(fullduplex):A、B雙方可以同時(shí)發(fā)送和接收數(shù)據(jù)——手機(jī)模式。例如:兩臺(tái)單片機(jī)系統(tǒng)之間的數(shù)據(jù)串行交換。發(fā)送方A接收方BTXDRXDTXDRXD12西華大學(xué)電氣信息學(xué)院鄭海春(四)串行通信的傳輸速率用于表征串行通信速率的參數(shù)稱為“波特率”;波特率的單位為:位/秒(bit/s);波特率取值范圍一般為:0~9600bit/s。影響波特率的主要因素取決于傳輸線的分布電容、通信電平標(biāo)準(zhǔn)和傳送距離;13西華大學(xué)電氣信息學(xué)院鄭海春(五)串行通信的電平標(biāo)準(zhǔn)為了增加串行通信的距離,可以采用RS-232、RS-485的通信標(biāo)準(zhǔn)。其中:TTL電平(0~5V):3米以內(nèi)。RS-232標(biāo)準(zhǔn)(+12V~-12V):15米。RS-485標(biāo)準(zhǔn)(差分輸入輸出):300米以上。14西華大學(xué)電氣信息學(xué)院鄭海春(六)MCS-51單片機(jī)的串行接口具有一個(gè)“全雙工”的通訊能力串行接口。 其中;P3.0端口作RXD——異步接收端;

P3.1端口作TXD——異步發(fā)送端。包含“同步通信”和“異步通信”兩種工作方式的四種工作模式;在“異步方式”中由T1做波特率發(fā)生器;與串行口相關(guān)的SFR有:SBUF(接收SBUF和發(fā)送SBUF)SCON串口控制寄存器(設(shè)定四種模式)。15西華大學(xué)電氣信息學(xué)院鄭海春MCS-51單片機(jī)的異步串行通訊應(yīng)用示意圖MCS-51TXD(甲)RXD

RXDMCS-51TXD(乙)TXDRXDRXDTXDRS-232或485RS-232或485TXDRXDRS-232PC機(jī)COM1,COM2單片機(jī)甲、乙之間近距離的直接通訊單片機(jī)甲乙兩地之間遠(yuǎn)距離通訊單片機(jī)與PC機(jī)之間的數(shù)據(jù)通訊16西華大學(xué)電氣信息學(xué)院鄭海春7.2數(shù)據(jù)緩沖寄存器SBUF在MCS-51的串行口電路中,SBUF是用來存放發(fā)送和接收數(shù)據(jù)的兩個(gè)獨(dú)立的緩沖寄存器,在SFR的地址都是99H。CPU執(zhí)行寫SBUF指令便開始引發(fā)串口的發(fā)送。MOVSBUF,A

當(dāng)串口接收緩沖器接收到一幀數(shù)據(jù)時(shí),可以執(zhí)行下面指令進(jìn)行讀?。?/p>

MOVA,SBUF由于發(fā)送SBUF與接收SBUF是兩個(gè)獨(dú)立的緩沖器,所以51串行口是一個(gè)可以同時(shí)發(fā)送與接收的“全雙工”接口。17西華大學(xué)電氣信息學(xué)院鄭海春接收SBUF移位寄存器發(fā)送SBUF移位寄存器內(nèi)部總線CPUMCS-51RXDP3.0TXDP3.1SBUF實(shí)際上是一個(gè)能夠獨(dú)立完成數(shù)據(jù)接收和數(shù)據(jù)發(fā)送操作的復(fù)雜的硬件電路;①

CPU只要將數(shù)據(jù)送到發(fā)送SBUF(MOVSBUF,A)后,SBUF便一位一位的發(fā)送數(shù)據(jù),發(fā)送完成后標(biāo)志TI=1;②當(dāng)外部串行數(shù)據(jù)經(jīng)RXD送入SBUF時(shí),電路便自動(dòng)啟動(dòng)接收,直至完成一幀數(shù)據(jù)后標(biāo)志RI=1。18西華大學(xué)電氣信息學(xué)院鄭海春7.3串口控制寄存器SCON用于設(shè)定串行接口工作模式、表征串口的工作狀態(tài)的特殊功能寄存器;在SFR中的地址為98H;這是一個(gè)可以按位尋址的SFR,在使用中可直接使用位操作指令,給編程帶來方便;19西華大學(xué)電氣信息學(xué)院鄭海春SCON寄存器示意圖SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D020西華大學(xué)電氣信息學(xué)院鄭海春SCON寄存器各位定義D7、D6位:SM0SM1

模式選擇位。SM0SM1模式功能波特率

000同步移位寄存器模式Fosc/12

0118位異步通信UART可變

1029位異步通信UARTFosc/64或/32

1139位異步通信UART可變SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D021西華大學(xué)電氣信息學(xué)院鄭海春D1、D0:TI、RI

發(fā)送、接收完成標(biāo)志TI

:完成一幀數(shù)據(jù)發(fā)送標(biāo)志,應(yīng)軟件清零,發(fā)送完成TI=1同時(shí)申請(qǐng)中斷(如果中斷開放,則引發(fā)中斷);RI

:完成一幀數(shù)據(jù)接收標(biāo)志,應(yīng)軟件清零,接收完成RI=1并申請(qǐng)中斷(如果中斷開放,則引發(fā)中斷);SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D022西華大學(xué)電氣信息學(xué)院鄭海春D3、D2:TB8、RB8發(fā)送、接收的第9位數(shù)據(jù)TB8:在9位數(shù)據(jù)傳送的模式2、3時(shí),將要發(fā)送的第9位數(shù)據(jù),在執(zhí)行MOVSBUF,A

指令之前要事先將TB8設(shè)定好;RB8:在9位數(shù)據(jù)傳送的模式2、3時(shí),接收到的第9位數(shù)據(jù);SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D023西華大學(xué)電氣信息學(xué)院鄭海春D4:REN允許接收控制位。REN:允許接收位,REN=1時(shí)允許接收,由軟件置位或清零。SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D024西華大學(xué)電氣信息學(xué)院鄭海春D5:SM2

多機(jī)通信使能位(用于接收方串口控制) 模式0、1時(shí):SM2不用。模式2、3時(shí):有兩種設(shè)定方法。①若SM2=0,無論RB8如何,RI都能被激活,但RI不能引發(fā)中斷!CPU可通過查詢RI的方式接收數(shù)據(jù)。

②若SM2=1,若接收到的第9位(RB8)=0時(shí),RI不會(huì)被激活;若RB8=1時(shí),RI不僅能被激活,并可引發(fā)中斷。這種特性得出一個(gè)特殊的結(jié)果:如果接收方將其SM2=1,則能否接收到對(duì)方發(fā)送的數(shù)據(jù)不取決于自己,而是由發(fā)送方的TB8來決定的。SM2=1的設(shè)定用于多機(jī)通信的場合。25西華大學(xué)電氣信息學(xué)院鄭海春使用RI、TI標(biāo)志完成數(shù)據(jù)的發(fā)送與接收SBUF是獨(dú)立于CPU。不論是數(shù)據(jù)的發(fā)送還是接收都由SBUF獨(dú)立完成。SBUF的傳送速度遠(yuǎn)遠(yuǎn)低于CPU執(zhí)行指令的速度,每次發(fā)送后CPU必須等待SBUF。協(xié)調(diào)CPU與SBUF的速度只能靠標(biāo)志信號(hào)。即: 發(fā)送操作后,查詢TI=1?來決定是否可以發(fā)送下一個(gè)數(shù)據(jù);

接收操作時(shí),查詢RI=1?判斷是否接收到數(shù)據(jù)。26西華大學(xué)電氣信息學(xué)院鄭海春RI(SCON.0):接收完成標(biāo)志。當(dāng)SUBF從RXD引腳接收完一個(gè)完整的數(shù)據(jù)幀時(shí)RI=1,CPU可以使用兩種方式來處理接收的數(shù)據(jù):CPU采用查詢RI來控制數(shù)據(jù)的讀取。

JNBRI,$

;如果RI≠1則等待

MOVA,SBUF;RI=1時(shí),取SBUF中數(shù)據(jù)送A。如果中斷是開放的,則RI=1時(shí)會(huì)自動(dòng)引發(fā)中斷。用戶可以通過中斷服務(wù)程序?qū)BUF中的數(shù)據(jù)取出送累加器A。

MOVA,SBUF;中斷方式接收數(shù)據(jù)

27西華大學(xué)電氣信息學(xué)院鄭海春TI(SCON.1):發(fā)送完成標(biāo)志。當(dāng)CPU執(zhí)行:MOVSBUF,A

指令后,便引發(fā)一次串行通訊的過程。SBUF開始通過TXD向外按位發(fā)送數(shù)據(jù)。當(dāng)完成一幀數(shù)據(jù)的發(fā)送后,TI=1。使用查詢的方式對(duì)TI進(jìn)行檢測(cè):

JNB TI,$

;如果TI≠1則等待

MOVSBUF,A

;TI=1時(shí)發(fā)送下一個(gè)數(shù)據(jù)如果系統(tǒng)中斷是開放的,則TI=1會(huì)自動(dòng)引發(fā)中斷。用戶可以通過中斷服務(wù)程序向SBUF輸送下一個(gè)數(shù)據(jù):

MOVSBUF,A

;在中斷程序中發(fā)送下一個(gè)數(shù)據(jù)28西華大學(xué)電氣信息學(xué)院鄭海春使用查詢RI、TI標(biāo)志的方式進(jìn)行發(fā)送與接收N個(gè)數(shù)據(jù)CLRSCON.TI數(shù)據(jù)送累加器Amovsbuf,aTI=1?N個(gè)數(shù)據(jù)發(fā)送完?YESNOYESNO發(fā)送數(shù)據(jù)的程序框圖SETBSCON.RENmova,sbufRI=1?N個(gè)數(shù)據(jù)接收完?YESNOYESNOCLRSCON.RI

A送數(shù)據(jù)區(qū)接收數(shù)據(jù)程序框圖29西華大學(xué)電氣信息學(xué)院鄭海春7.4串行口的模式0特點(diǎn):同步移位寄存器模式。B=fosc/12。在這種模式下RXD(P3.0)做數(shù)據(jù)口;TXD(P3.1)做移位脈沖輸出端。在移位過程中,先移數(shù)據(jù)的低位D0。

(注意:移位脈沖的頻率就是模式0的波特率)主要功能:使用串行口擴(kuò)展并行口,可以擴(kuò)展

N×8

位的并行口。MCS-51RXDTXDData外部移位寄存器cp移位脈沖串行數(shù)據(jù)并行的數(shù)據(jù)(8位)30西華大學(xué)電氣信息學(xué)院鄭海春利用串行模式0構(gòu)成的2位LED數(shù)碼管驅(qū)動(dòng)電路MCS-51P3.0P3.1P1.0

Q7Q0A,B74LS164/CLRCLK

Q7Q0A,B74LS164/CLRCLKRXDTXD共陽極LED數(shù)碼管

.gfedcba共陽極LED數(shù)碼管

.gfedcba+5V注:74LS164為8位串入并出移位寄存器31西華大學(xué)電氣信息學(xué)院鄭海春串行口模式0的時(shí)序信號(hào)(發(fā)送)寫SBUFD1D0D2D3D4D5D6D7RXD端數(shù)據(jù)TXD端同步脈沖TI中斷標(biāo)志movsbuf,a32西華大學(xué)電氣信息學(xué)院鄭海春模式0的時(shí)序信號(hào)(接收)寫SCON(RI=0)RI對(duì)RXD采樣TXD同步脈沖RI中斷標(biāo)志33西華大學(xué)電氣信息學(xué)院鄭海春7.5串行口的模式1特點(diǎn):10位異步傳輸(1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)停止位); 波特率B可變(由定時(shí)器T1的溢出率來確定)。發(fā)送操作:在TI=0,執(zhí)行movsbuf,a指令后從TXD端開始發(fā)送數(shù)據(jù)。當(dāng)發(fā)送完8位數(shù)據(jù)后自動(dòng)的添加一個(gè)高電平的停止位,并將TI置位。從TXD(P3.1)端發(fā)出的一個(gè)字符幀的格式D0D1D2D3D4D5D6D7起始位停止位01TITXD34西華大學(xué)電氣信息學(xué)院鄭海春接收操作:在REN=1且RI=0的條件下進(jìn)行。串行口的接收控制器對(duì)RXD線進(jìn)行采樣,其采樣頻率是接收時(shí)鐘的16倍。當(dāng)連續(xù)8次采集到RXD線上為低電平時(shí),檢測(cè)電路便認(rèn)定RXD線上有了“起始位”,在此后,便開始在每次第7、8、9三個(gè)脈沖時(shí)進(jìn)行RXD采樣,采取“三中取二”的原則來確定接收的數(shù)據(jù)(如圖所示)。當(dāng)接收到停止位時(shí),必須滿足:RI=0且SM2=0,才能把接收的數(shù)據(jù)送到SBUF中(停止位送SCON的RB8中,并使RI=1),否則數(shù)據(jù)丟失。

上面的條件意味著:要想得到接收的數(shù)據(jù),在接收前必須事先清零RI。35西華大學(xué)電氣信息學(xué)院鄭海春串行口模式1時(shí)數(shù)據(jù)幀格式及接收采樣示意圖D0D1D2D3D4D5D6D7起始位8位數(shù)據(jù)停止位對(duì)RXD線的數(shù)據(jù)以16倍速度采樣當(dāng)連續(xù)8次采集到低電平時(shí),便確認(rèn)起始位到來在每個(gè)第7,8,9個(gè)脈沖對(duì)RXD采樣并采用“以三取二”來確定采集的數(shù)據(jù)7.8.9RIRXD36西華大學(xué)電氣信息學(xué)院鄭海春7.6串行口的模式2、3特點(diǎn):模式2、3都是11位傳輸格式

1個(gè)起始位+9個(gè)數(shù)據(jù)位

+1個(gè)停止位。

波特率:

模式2:固定為fosc/64或fosc/32。

(具體由PCON中的SMOD位來確定)

模式3:可變,由定時(shí)器T1的溢出波特率來確定。D0D1D2D3D4D5D6D7D8起始位8+1位數(shù)據(jù)停止位第9位0137西華大學(xué)電氣信息學(xué)院鄭海春模式2、3的發(fā)送過程類似于模式1,唯一的區(qū)別在于數(shù)據(jù)幀中數(shù)據(jù)是9位。這樣,在發(fā)送一幀數(shù)據(jù)時(shí),CPU除了要把8位數(shù)據(jù)送SBUF外(movsbuf,a),還要事先將第9位數(shù)據(jù)送到SCON.TB8中

SETBSCON.TB8

或:

CLRSCON.TB8

例如:

SETBSCON.TB8

或:CLRSCON.TB8

MOVSBUF,A

MOVSBUF,A

SM0SM1SM2RENTB8RB8TIRI38西華大學(xué)電氣信息學(xué)院鄭海春RI=0是保證下一個(gè)數(shù)據(jù)的正常接收的重要條件。每次當(dāng)SBUF收到數(shù)據(jù)時(shí),RI自動(dòng)置一。當(dāng)取走數(shù)據(jù)時(shí)必須通過軟件復(fù)位RI(指令CLRRI),否則外部發(fā)來的數(shù)據(jù)將丟失!模式2、3的接收過程類似于模式1,不同的是:模式1時(shí),SCON中的RB8是接收到的停止位“1”;而模式2、3時(shí),RB8是接收到的第9位。39西華大學(xué)電氣信息學(xué)院鄭海春關(guān)于SM2的設(shè)定對(duì)于接收操作:

模式1:SM2無用,令其=0即可。此時(shí)接收數(shù)據(jù)條件是:RI=0且REN=1。單片機(jī)可以利用查詢或中斷方式為串口服務(wù)。

模式2、3的接收條件是:(除了RI=0、REN=1外)

①當(dāng)

SM2=0時(shí):RI可以被激活(但不能引發(fā)中斷);

②當(dāng)SM2=1時(shí):只有接收到RB8=1時(shí),RI不僅能激 活,還能引發(fā)中斷??梢姡寒?dāng)SM2=1時(shí),單片機(jī)是否能接收到數(shù)據(jù)取決于外部數(shù)據(jù)的第9位RB8。這樣外部可以通過第九位數(shù)據(jù)是“0”還是“1”來控制、決定單片機(jī)的接收狀況。40西華大學(xué)電氣信息學(xué)院鄭海春在模式2、3中:如何利用和設(shè)置SM2和RB8來控制接收?①當(dāng)數(shù)據(jù)是帶奇偶效驗(yàn)位的9位數(shù)據(jù)時(shí)(效驗(yàn)位是RB8):必須令SM2=0,這樣才能保證所有數(shù)據(jù)的正確接收(無論RB8如何);②在“多機(jī)通訊”時(shí),所有的從機(jī)都將其SM2=1,這樣作為主機(jī)在向從機(jī)發(fā)送數(shù)據(jù)/命令時(shí),可以通過所發(fā)數(shù)據(jù)的第9位TB8(對(duì)于從機(jī)來說是RB8)來決定從機(jī)是否可以接收到此數(shù)據(jù)/命令(取決于RB8)。即RB8=1時(shí)接收有效;RB8=0時(shí)接收無效。所以,SM2也稱“多機(jī)通訊位”,用于多機(jī)通訊。奇偶效驗(yàn):一種防止串行通訊出錯(cuò)的方法。41西華大學(xué)電氣信息學(xué)院鄭海春串行口模式2、3時(shí)數(shù)據(jù)幀格式發(fā)送時(shí):將SCON中的TB8作為第9位數(shù)據(jù)發(fā)送;接收時(shí):將接收來的第9位送到SCON中的RB8中。D0D1D2D3D4D5D6D7D8起始位9位數(shù)據(jù)停止位SM0SM1SM2RENTB8RB8TIRI42西華大學(xué)電氣信息學(xué)院鄭海春模式2、3的應(yīng)用之一

帶奇偶校驗(yàn)位的數(shù)據(jù)傳送奇偶校驗(yàn):收到的第9位RB8是發(fā)送方送來的奇偶校驗(yàn)位。

在這種情況下必須令SM2=0,否則接收的校驗(yàn)位RB8=0時(shí),將影響數(shù)據(jù)的接收(因?yàn)镽B8有時(shí)為“1”,而有時(shí)為“0”)。當(dāng)接收數(shù)據(jù)后,對(duì)PSW.P位進(jìn)行判斷。將此結(jié)果與RB8進(jìn)行“異或”,結(jié)果是否與約定的相符合。

43西華大學(xué)電氣信息學(xué)院鄭海春【例】:收發(fā)雙方約定為奇校驗(yàn)(9位數(shù)據(jù)中1的個(gè)數(shù)為奇):則發(fā)送方的第9位要根據(jù)前8位數(shù)據(jù)來確定。

若發(fā)送的8位數(shù)據(jù)是:00011010,則TB8為0。這樣當(dāng)接收方將SBUF的數(shù)據(jù)送A時(shí)(MOVA,SBUF),A中數(shù)據(jù)是:00011010。這時(shí)PSW.P=1,且RB8=0。這樣進(jìn)行時(shí)P⊕RB8運(yùn)算,當(dāng)=1時(shí)表明通訊正確。 反之若SBUF送A=00011011(此時(shí)RB8=0),這樣PSW.P=0,RB8=0,P⊕

RB8=0表明不符合約定條件,接收出錯(cuò)。

【注意】使用模式2、3發(fā)送帶“奇偶校驗(yàn)”位的數(shù)據(jù)時(shí):

1,一定要使SM2=0(為什么?)。2,又因?yàn)镾M2=0,所以盡管RI能夠激活,但不會(huì)引發(fā)中 斷,所以只能采用“查詢”的方式接收數(shù)據(jù)。44西華大學(xué)電氣信息學(xué)院鄭海春利用模式2,3進(jìn)行帶奇校驗(yàn)的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序(原始TI=0)使用“查詢法”編制的發(fā)送、接收程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯(cuò)處理CLRSCON.RIYESNO接收端程序(原始RI=0)NY數(shù)據(jù)送內(nèi)存45西華大學(xué)電氣信息學(xué)院鄭海春模式2、3的應(yīng)用之二:

多機(jī)通訊如果系統(tǒng)采用多機(jī)結(jié)構(gòu),并且有一個(gè)做主機(jī),其它為從機(jī)時(shí),它們之間可以通過多機(jī)通訊的方式進(jìn)行數(shù)據(jù)交換。如:多路數(shù)據(jù)采集系統(tǒng)。我們選一臺(tái)單片機(jī)作為主機(jī),專門負(fù)責(zé)接收從機(jī)傳回的數(shù)據(jù),并進(jìn)行數(shù)據(jù)的后期處理(保存、打印和顯示等);而從機(jī)則完成對(duì)傳感器的信號(hào)檢測(cè)、A/D轉(zhuǎn)換,最后將數(shù)據(jù)采用串行通訊的形式上傳給主機(jī)。46西華大學(xué)電氣信息學(xué)院鄭海春采用“智能傳感器”組成的多路數(shù)據(jù)采集系統(tǒng)主機(jī)從機(jī)N從機(jī)4從機(jī)3從機(jī)2從機(jī)1串行數(shù)據(jù)線(2條)RXDTXDTXDRXD從機(jī)做智能傳感器47西華大學(xué)電氣信息學(xué)院鄭海春主從式多機(jī)通訊原理主機(jī)發(fā)送的數(shù)據(jù)可以傳送到各個(gè)從機(jī),從機(jī)發(fā)送的數(shù)據(jù)只能為主機(jī)接收,從機(jī)之間不能直接通訊。主機(jī)和從機(jī)的設(shè)置為模式2或3,其中主機(jī)的SM2=0,從機(jī)的SM2=1。從機(jī)的SM2=1時(shí),接收到的第九位數(shù)據(jù)RB8=1時(shí),RI可以激活,如果RB8=0,則RI不能激活。48西華大學(xué)電氣信息學(xué)院鄭海春主機(jī)首先通過發(fā)送地址碼來尋找從機(jī)(地址碼的特征是第9位數(shù)據(jù)為“1”),所以所有的從機(jī)都能接收到主機(jī)發(fā)出的地址碼(因?yàn)閺臋C(jī)的RI=0,SM2=1,RB8=1),并使RI=1引發(fā)中斷。從機(jī)在中斷服務(wù)程序中,將接收到地址碼與自己的地址進(jìn)行比較,被選中的從機(jī)將自己的SM2=0;而未被選中的從機(jī)仍保持SM2=1,并退出中斷服務(wù)程序。當(dāng)主機(jī)找到從機(jī)后,開始向從機(jī)發(fā)數(shù)據(jù)、命令(其特征為第9位=0)。由于從機(jī)SM2=0,所以盡管接收到的RB8=0,同樣可以激活從機(jī)的RI,使其以查詢的方式接收主機(jī)發(fā)出的數(shù)據(jù)或命令。當(dāng)主機(jī)與從機(jī)的通訊完成后,從機(jī)再將其SM2=1,并退出中斷服務(wù)程序。主機(jī)重新發(fā)出另一個(gè)從機(jī)的地址,所有從機(jī)可以馬上響應(yīng)并接收地址信息……。49西華大學(xué)電氣信息學(xué)院鄭海春多機(jī)通訊中SM2的設(shè)定在模式2、3中,

1,SM2=0時(shí):RB8=1或RB8=0都可以激活RI,但不能引發(fā)中斷。

2,SM2=1時(shí):RB8=1才能激活RI并引發(fā)中斷。而RB8=0時(shí),RI不能激活。50西華大學(xué)電氣信息學(xué)院鄭海春多機(jī)通訊小結(jié):1,主機(jī)的SM2=0,從機(jī)的SM2=1;2,主機(jī)向從機(jī)發(fā)送的地址碼(第9位為“1”);3,所有的從機(jī)(SM2=1、RB8=1、RI=0)都接收主機(jī)的地址進(jìn)入中斷服務(wù)程序。在服務(wù)程序中比較、確認(rèn)是否為被尋從機(jī)。4,被尋從機(jī)將SM2清零,以保證能以查詢的方式接收主機(jī)的數(shù)據(jù)、命令。同時(shí)向主機(jī)返回地址供主機(jī)核實(shí)。沒有被選種的從機(jī)保持SM2=1并退出服務(wù)程序。5,被尋中的從機(jī)以查詢RI的方式與主機(jī)之間進(jìn)行數(shù)據(jù)交換(注意:因?yàn)镾M2=0時(shí),RI雖然能被激活,但不能引發(fā)中斷),完成后,重新將SM2置1。51西華大學(xué)電氣信息學(xué)院鄭海春模式2、3使用時(shí)要注意的問題在模式2、3中,可以實(shí)現(xiàn)較為特殊的通訊方式,如帶校驗(yàn)位的9位傳送、多機(jī)通訊。注意:當(dāng)SM2=0時(shí),只能采用查詢方式。功能SM2第9位工作方式帶校驗(yàn)位的9位數(shù)傳送SM2=0校驗(yàn)位以查詢(RI)的方式接收數(shù)據(jù)多機(jī)通訊主機(jī)SM2=0地址碼:TB8=1數(shù)據(jù)、命令時(shí)=0以查詢的方式工作從機(jī)SM2=1未選中時(shí)SM2不變以中斷的方式接收地址選中后SM2=0以查詢的方式與主機(jī)通訊52西華大學(xué)電氣信息學(xué)院鄭海春7.7波特率及定時(shí)器T1的設(shè)定在串行口的異步通訊中,發(fā)送方與接收方是兩個(gè)互相獨(dú)立的系統(tǒng),它們的系統(tǒng)時(shí)鐘可以各不相同。在這種條件下使通訊正確的條件是:

1,要有相同的字符幀格式;

2,要有相同的波特率。MCS-51單片機(jī)的串行口四種模式其波特率各不相同。其中模式1、3的波特率就是由定時(shí)器T1的溢出率來決定的(PCON中的SMOD=1波特率加倍)。53西華大學(xué)電氣信息學(xué)院鄭海春4種通訊模式的波特率SM0SM1模式功能波特率

000同步移位寄存器模式Fosc/12

01110位異步通信UART可變,由T1初值確定

10211位異步通信UARTFosc/64或/32*

11311位異步通信UART可變,由T1初值確定*當(dāng)SMOD=1時(shí),B=fosc/32;當(dāng)SMOD=0時(shí),B=fosc/64。54西華大學(xué)電氣信息學(xué)院鄭海春如何設(shè)定波特率?在編制串行口通訊(模式1、3)程序時(shí),在程序的初始化中,通過T1進(jìn)行波特率的設(shè)定,既對(duì)T1進(jìn)行初始化。T1初始化的主要任務(wù)就是:

1,設(shè)置T1的工作方式為定時(shí)(C/*T=0);

工作模式為模式2:自動(dòng)重裝。

2,計(jì)算定時(shí)常數(shù)并分別送給TH1、TL1。波特率計(jì)算公式:B=T1溢出率:1秒鐘的溢出次數(shù)。55西華大學(xué)電氣信息學(xué)院鄭海春根據(jù)波特率求初值TC計(jì)算公式【舉例】設(shè)系統(tǒng)時(shí)鐘為11.059MHz,要求波特率為1200Hz,求TH1和TL1的裝入初值?!窘狻吭O(shè):SMOD=0

,TH1=TL1=0E8H56西華大學(xué)電氣信息學(xué)院鄭海春7.8串行口應(yīng)用舉例模式1舉例(一)發(fā)送程序TXD.ASMSM0SM1SM2RENTB8RB8TIRIT1初始化啟動(dòng)T1串行口初始化輸入數(shù)據(jù)到A發(fā)送一幀數(shù)據(jù)MOVSBUF,ATI=1?軟件清TIGATEC/TM1M0GATEC/TM1M0設(shè)定定時(shí)器T1的工作模式00100000B設(shè)定串行口模式寄存器SCON為01000000BYN程序?qū)崿F(xiàn)功能:將P1端口輸入的數(shù)據(jù)通過串行口發(fā)送出去。57西華大學(xué)電氣信息學(xué)院鄭海春實(shí)驗(yàn)電路MCS-51TXDP1.7P1.0MCS-51RXDP1.7P1.0∶8路開關(guān)量輸入∶8路開關(guān)量輸出串行口傳輸線58西華大學(xué)電氣信息學(xué)院鄭海春程序清單

org0000h

ljmp0100horg0100hstart:movtmod,#20h ;設(shè)定時(shí)器T1定時(shí)方式、模式2

movtl1,#0f4h ;送定時(shí)初值(fosc=11.0592)

movth1,#0f4h ;波特率B=2400

movpcon,#00h ;PCON中的SMOD=0

setbtr1 ;啟動(dòng)定時(shí)器T1

movscon,#40h ;設(shè)定串行口為模式1loop2:movp1,#0ffh

mova,p1 ;從P1口輸入數(shù)據(jù)

movsbuf,a ;數(shù)據(jù)送SBUF發(fā)送loop1:jnbti,loop1 ;判斷數(shù)據(jù)是否發(fā)送完畢?

clr

ti ;發(fā)送完一幀后清標(biāo)志

sjmploop2 ;返回繼續(xù)

end59西華大學(xué)電氣信息學(xué)院鄭海春(二)接收程序:RXD.ASMT1初始化啟動(dòng)T1串行口初始化輸出數(shù)據(jù)到P1數(shù)據(jù)送AMOVA,SBUFRI=1?軟件清RISM0SM1SM2RENTB8RB8TIRIGATEC/TM1M0GATEC/TM1M0定時(shí)器TMOD(89H)的工作模式00100000B串行口模式寄存器SCON(98H)為01010000BYN60西華大學(xué)電氣信息學(xué)院鄭海春RXD.ASM程序清單

org0000h

ljmpstart org0100hstart: movtmod,#20h ;選定T1為模式2(自動(dòng)重裝)

movtl1,#0f4h ;設(shè)定初值

movth1,#0f4h ;同上

movpcon,#00h ;PCON的SMOD=0

setbtr1 ;啟動(dòng)T1定時(shí)器

movscon,#50h ;設(shè)定串行口為方式1loop1:jnbri,loop1 ;判斷是否接收到數(shù)據(jù)?

clr

ri ;接收到數(shù)據(jù)后清接收標(biāo)志

mova,sbuf ;數(shù)據(jù)送累加器A

movp1,a ;從P1口輸出

sjmploop1 ;回繼續(xù)

end61西華大學(xué)電氣信息學(xué)院鄭海春思考題:用中斷的方式接收數(shù)據(jù)

org0000h

ljmpstart

org0023h

ljmprxd1

org0100hstart: movtmod,#20h;選定T1為模式2(自動(dòng)重裝)

movtl1,#0f4h ;設(shè)定初值

movth1,#0f4h ;同上

movpcon,#00h;PCON的SMOD=0

setbtr1 ;啟動(dòng)T1定時(shí)器

movscon,#50h;設(shè)定串行口為方式1,接收

movie,#90h ;開串行口中斷

sjmp$

org0200hrxd1: clr

ri ;接收到數(shù)據(jù)后清接收標(biāo)志

mova,sbuf ;數(shù)據(jù)送累加器A

movp1,a ;從P1口輸出

reti

end62西華大學(xué)電氣信息學(xué)院鄭海春RXD.ASM接收程序框圖(中斷方式)T1初始化并啟動(dòng)T1串行口初始化開串行口中斷等待RI中斷輸出數(shù)據(jù)到P1接收一幀數(shù)據(jù)MOVA,SBUF軟件清RIRETI主程序框圖中斷服務(wù)程序框圖EAXXESET1EX1ET0EX0設(shè)定中斷允許寄存器IE(A8H)為10010000B63西華大學(xué)電氣信息學(xué)院鄭海春模式2舉例設(shè)主頻為6MHz,波特率為fosc/32,發(fā)送字符塊首地址為TBLOCK,字符塊長度為LEN。要求累加和效驗(yàn)。【解】①累加和:對(duì)所有要發(fā)送的數(shù)據(jù)在發(fā)送的同時(shí)進(jìn)行累加。取其累加和的低8位(大于255的舍去),即單字節(jié)。②發(fā)送方在發(fā)送完所有數(shù)據(jù)后,將單字節(jié)的累加和也發(fā)出。LEN不包括累加和字節(jié)。③接收方在接收數(shù)據(jù)時(shí),對(duì)接收到的每一個(gè)數(shù)據(jù)也進(jìn)行累加操作。數(shù)據(jù)接收完成后,將接收時(shí)的累加和與最后收到的發(fā)送方送來的發(fā)送累加和進(jìn)行比較。如果兩個(gè)累加和一致,則數(shù)據(jù)傳送正確。64西華大學(xué)電氣信息學(xué)院鄭海春開始停機(jī)設(shè)定串行口為方式2令波特率為fosc/32數(shù)據(jù)塊首址送R0數(shù)據(jù)塊長度送R2累加和寄存器R3=LEN調(diào)用發(fā)送子程序主程序流程圖65西華大學(xué)電氣信息學(xué)院鄭海春發(fā)送數(shù)據(jù)塊長度TI=1CLRTI發(fā)送數(shù)據(jù)TI=1CLRTI求累加和數(shù)據(jù)指針加一R2-1→R2R2=0保護(hù)現(xiàn)場NNYYNYCCRET發(fā)送累加和TI=1NCLRTI恢復(fù)現(xiàn)場Y子程序流程圖66西華大學(xué)電氣信息學(xué)院鄭海春主程序清單

ORG 0000HLJMPSTARTORG 1000HTBLOCK EQU 20H ;偽指令定義符號(hào)值LEN EQU 1EHSTART: MOV SCON,#80H ;串行口方式2 MOV PCON,#80H ;SMOD=1 MOV R0,#TBLOCK ;數(shù)據(jù)塊首址送指針

MOV R2,#LEN ;數(shù)據(jù)塊長度送R2計(jì)數(shù)器

MOV R3,#LEN ;累加和原始值=LEN LCALL TXSUB ;調(diào)用發(fā)送子程序

SJMP $67西華大學(xué)電氣信息學(xué)院鄭海春發(fā)送子程序清單

ORG 1100HTXSUB: PUSH ACC ;保護(hù)現(xiàn)場

PUSH PSW CLR TITXLEN: MOV SBUF,R2 ;發(fā)送數(shù)據(jù)塊長度

JNB TI,$ CLR TITXD: MOV A,@R0 ;數(shù)據(jù)送A MOV SBUF,A ;發(fā)送數(shù)據(jù)

JNB TI,$ CLR TI ADD A,R3 ;計(jì)算累加和

MOV R3,A ;保存累加和

INC R0 ;修改數(shù)據(jù)指針

DJNZ R2,TXD ;數(shù)據(jù)發(fā)送完?TXSUM: MOV SBUF,R3 ;發(fā)送累加和

JNB TI,$ CLR TI

POP PSW ;恢復(fù)現(xiàn)場

POP ACC RET END68西華大學(xué)電氣信息學(xué)院鄭海春模式3接收舉例主頻6MHz,要求使用模式3,波特率2400,查詢法。 接收數(shù)據(jù)塊首址為RBLOCK,數(shù)據(jù)塊長度由發(fā)送方送來。同時(shí),發(fā)送方最后一個(gè)數(shù)據(jù)是發(fā)送的累加和?!窘狻竣倥浜锨懊胬}的發(fā)送程序來接收數(shù)據(jù),第一個(gè)傳來的是數(shù)據(jù)塊的長度,最后送來的是發(fā)送的累加和;②將接收到的第一個(gè)數(shù)據(jù)(數(shù)據(jù)塊長度)作為接收程序的循環(huán)計(jì)數(shù)器初值;③在接收每一個(gè)數(shù)據(jù)時(shí),同時(shí)作接收數(shù)據(jù)的累加和操作,最后與發(fā)送方的發(fā)送累加和進(jìn)行比較,如果不相等,則轉(zhuǎn)出錯(cuò)處理。69西華大學(xué)電氣信息學(xué)院鄭海春開始停機(jī)設(shè)定串行口為方式3定時(shí)器T1初始化,并啟動(dòng)數(shù)據(jù)塊首址送R0累加和寄存器R3=0調(diào)用接收子程序接收主程序流程圖70西華大學(xué)電氣信息學(xué)院鄭海春接收子程序流程圖RI=1CLRTI數(shù)據(jù)送R2求累加和ERRORRI=1CLRRI數(shù)據(jù)送RAM求累加和數(shù)據(jù)指針加一R2-1→R2R2=0清除RINNYYNYCCRET相等?NCLRRI比較累加和Y71西華大學(xué)電氣信息學(xué)院鄭海春主程序清單

ORG0000HLJMPSTARTORG 1000HRBLOCK EQU 30HSTART: MOV TMOD,#20H ;設(shè)定T1工作方式2

MOV TH1,#0F4H MOV TL1,#0F4H ;設(shè)定定時(shí)初值MOV PCON,#00H ;SMOD=0

SETB TR1 ;啟動(dòng)定時(shí)器T1

MOV SCON,#0D0H ;串口模式3 MOV R0,#RBLOCK ;數(shù)據(jù)指針賦初值

MOV R3,#00H ;累加和寄存器原始清零

ACALL RXSUB ;調(diào)用接收子程序

SJMP $72西華大學(xué)電氣信息學(xué)院鄭海春子程序清單ORG 1100HRXSUB: CLR RIRXLEN: JNB RI,$ ;等待接收數(shù)據(jù)塊長度

CLR RI MOV SBUF,A MOV R2,A ;數(shù)據(jù)塊長度送R2寄存器

ADD A,R3 ;開始求累加和

MOV R3,A ;存累加和RXD: JNB RI,$ ;等待接收數(shù)據(jù)

CLR RI MOV A,SBUF ;取串口數(shù)據(jù)

MOV @R0,A ;數(shù)據(jù)送內(nèi)存

ADD A,R3 ;求累加和

MOV R3,A ;求累加和并保存

INC R0 ;修改指針

DJNZ R2,RXD ;數(shù)據(jù)傳送未完轉(zhuǎn)RXD73西華大學(xué)電氣信息學(xué)院鄭海春RXSUB: JNB RI,$ ;等待接收發(fā)送方的累加和 CLR RI MOV A,SBUF ;發(fā)送方的累加和送A

XRL A,R3 ;比較兩個(gè)累加和

JNZ ERROR ;若不等則出錯(cuò),轉(zhuǎn)出錯(cuò)處理 RET 74西華大學(xué)電氣信息學(xué)院鄭海春模式2、3應(yīng)用舉例與模式1相比,模式2、3的主要特點(diǎn):

1,9位數(shù)據(jù)的傳送格式:

其中:發(fā)送時(shí)第9位在TB8中;接收時(shí)第9位在RB8中。

2,SM2:

多機(jī)通訊位:

在模式0、1中:設(shè)SM2=0,RI可以正常的激活并引發(fā)中斷。在模式2、3中:①SM2=0時(shí),RI可以被激活,但不能引發(fā)中斷;②SM2=1時(shí),當(dāng)RB8=1,RI可以激活且引發(fā)中斷;

若RB8=0則不能激活RI,不能引發(fā)中斷!根據(jù)上面特點(diǎn),模式2、3可以:1,利用第9位數(shù)據(jù)來傳送、接收數(shù)據(jù)的“奇偶效驗(yàn)位”(SM2=0)。

2,利用SM2、RB8實(shí)現(xiàn)多機(jī)通訊功能(SM2=1)。75西華大學(xué)電氣信息學(xué)院鄭海春利用模式2,3進(jìn)行帶奇校驗(yàn)的串行通訊程序流程圖數(shù)據(jù)送累加器APSW.P=1?SETSCON.TB8CLRSCON.TB8MOVSBUF,ATI=1?CLRSCON.TIYESNONOYES發(fā)送端程序RI=1?MOVA,SBUFPSW.P⊕RB8=1?出錯(cuò)處理CLRSCON.RIYESNO接收端程序使用“查詢法”編制的發(fā)送、接收程序NY數(shù)據(jù)送內(nèi)存76西華大學(xué)電氣信息學(xué)院鄭海春使用模式3進(jìn)行多機(jī)通訊主機(jī)從機(jī)N從機(jī)4從機(jī)3從機(jī)2從機(jī)1串行數(shù)據(jù)線(2條)主機(jī)可以與所有從機(jī)通訊,而從機(jī)之間不能通訊。77西華大學(xué)電氣信息學(xué)院鄭海春多機(jī)通訊原理與SM2的設(shè)定1,SM2:多機(jī)通訊位的設(shè)定。(在模式2、3時(shí)):SM2=0(單機(jī)通訊模式):RI

能被激活,但不能引發(fā)中斷。

SM2=1(多機(jī)通訊模式):①若接收的第9位RB8=0,則不能激活RI,更不能引發(fā)中斷;

②若RB8=1,RI能被激活且引發(fā)中斷。2,主機(jī)、從機(jī)設(shè)置為模式2或3。其中:主機(jī)的SM2=0(單機(jī)方式);從機(jī)的SM2=1(多機(jī)方式)。3,主機(jī)發(fā)送的地址碼的特征是第9位(TB8)=1;而主機(jī)發(fā)送的數(shù)據(jù)、命令碼的特征是TB8=0。78西華大學(xué)電氣信息學(xué)院鄭海春4,主機(jī)發(fā)送地址碼尋找從機(jī)時(shí),所有從機(jī)的RI都被激活RI=1且引發(fā)中斷,進(jìn)入中斷服務(wù)程序(因?yàn)镾M2=1且RB8=1)。5,在從機(jī)的中斷服務(wù)程序中,將接收到地址碼與自己的地址進(jìn)行比較:被選中的從機(jī)將自己的SM2=0(單機(jī)模式),并向主機(jī)回送地址碼。未被選中的從機(jī)保持SM2=1(多機(jī)模式),并退出中斷服務(wù)程序。6,主機(jī)得到從機(jī)返回的地址后,開始向該從機(jī)發(fā)數(shù)據(jù)、命令(其特征為第9位=0)。由于選中的從機(jī)SM2=0,所以該從機(jī)RI仍可以被激活,但要用查詢RI的方式與主機(jī)繼續(xù)通訊。而未選中的從機(jī)因SM2=1且RB8=0所以主機(jī)發(fā)出的命令和數(shù)據(jù)不會(huì)激活它們的RI。7,當(dāng)主機(jī)與從機(jī)的通訊完成后,該從機(jī)再將其SM2=1并退出中斷服務(wù)程序。主機(jī)重發(fā)下一個(gè)從機(jī)的地址(TB8=1),所有從機(jī)馬上激活RI并進(jìn)入中斷對(duì)地址碼判斷……。79西華大學(xué)電氣信息學(xué)院鄭海春多機(jī)通訊中主機(jī)與從機(jī)之間的控制、狀態(tài)信息主機(jī)的控制命令:

00H

主機(jī)發(fā)送,從機(jī)接收;(控制從機(jī)的操作)01H

主機(jī)接收,從機(jī)發(fā)送。從機(jī)狀態(tài)字:從機(jī)向主機(jī)發(fā)送的用于表征從機(jī)工作狀態(tài)的信息(如下圖)。ERR·····TRDYRRDY0:合法命令0:發(fā)送未就緒

0:接收未就緒1:非法命令

1:發(fā)送就緒

1:接收就緒從機(jī)返回的狀態(tài)字80西華大學(xué)電氣信息學(xué)院鄭海春主機(jī)程序框圖T1為定時(shí),模式2B=1200,啟動(dòng)T1設(shè)串口為模式3REN=1,SM2=0TB8=1設(shè)定程序數(shù)據(jù):R0~R5停機(jī)MCOMMU從機(jī)應(yīng)答?地址相符?發(fā)送命令字(TB8=0)從機(jī)應(yīng)答?命令正確?命令分類從機(jī)接收就緒?從機(jī)發(fā)送就緒?RET命令從機(jī)復(fù)位發(fā)FFHNNYYNNYYNNYY接收發(fā)送調(diào)用MCOMMU接收數(shù)據(jù)塊發(fā)送數(shù)據(jù)塊發(fā)送從機(jī)地址81西華大學(xué)電氣信息學(xué)院鄭海春一:主機(jī)程序(初始化部分)

ORG2000HSTART: MOVTMOD,#20H ;定時(shí)器T1為模式2(8位自動(dòng)重裝)

MOVTH1,#0F4H MOVTL1,#0F4H ;波特率為1200(設(shè)外接6MHz晶體)MOVPCON,#00H ;設(shè)PCON中的SMOD=0

SETBTR1 ;啟動(dòng)T1

MOVSCON,#0D8H ;串口為模式3,REN=1,SM2=0,TB8=1MOVR0,#40H ;發(fā)送數(shù)據(jù)塊首地址送R0指針

MOVR1,#20H ;接收數(shù)據(jù)塊首地址送R1指針

MOVR2,#SLAVE ;被尋從機(jī)地址送R2

MOVR3,#00H;#01H ;主發(fā)、從收命令?;蛑魇?、從發(fā)命令

MOVR4,#14H ;發(fā)送數(shù)據(jù)塊長度送R4(20)計(jì)數(shù)器

MOVR5,#14H ;接收數(shù)據(jù)塊長度送R5(20)計(jì)數(shù)器

ACALLMCOM ;調(diào)用主機(jī)通訊子程序

SJMP$82西華大學(xué)電氣信息學(xué)院鄭海春二:主機(jī)通訊子程序(MCOM)

ORG2100HMCOM: MOVA,R2 ;取從機(jī)地址

MOVSBUF,A JNBRI,$ ;注意:為什么判斷RI而不是TI? CLRRI

MOVA,SBUF ;取從機(jī)的返回地址

XRLA,R2 ;核對(duì)兩個(gè)地址

JZMTXD2 ;相符時(shí),轉(zhuǎn)MTXD2MTXD1:MOVSBUF,#0FFH ;返回地址錯(cuò)誤時(shí),發(fā)送從機(jī)復(fù)位信號(hào)

SETBTB8 ;設(shè)定地址標(biāo)志

SJMPMCOM

;重發(fā)從機(jī)地址,所有從機(jī)重新判斷地址MTXD2:CLRTB8

;將TB8=0,準(zhǔn)備發(fā)送命令

MOVSBUF,R3 ;送出命令

JNBRI,$ ;等待從機(jī)應(yīng)答

CLRRI ;從機(jī)應(yīng)答后清標(biāo)志

MOVA,SBUF ;接收從機(jī)應(yīng)答命令

JNBACC.7,MTXD3 ;命令無錯(cuò)時(shí),則命令分類

SJMPMTXD1 ;命令錯(cuò)返回重新聯(lián)絡(luò)83西華大學(xué)電氣信息學(xué)院鄭海春MTXD3:CJNER3,#00H,MRXD ;從機(jī)發(fā)送主機(jī)接收時(shí),轉(zhuǎn)MRXD

JNBACC.0,MTXD1 ;從機(jī)接收時(shí),若從機(jī)未準(zhǔn)備好轉(zhuǎn)回MTXD4:MOVSBUF,@R0 ;若從機(jī)準(zhǔn)備好,則開始發(fā)送

JNBTI,$ CLRTI INCR0 DJNZR4,MTXD4 RETMRXD:

JNBACC.1,MTXD1 ;從機(jī)發(fā)送未準(zhǔn)備好返回MRXD1:JNBRI,$ ;等待接收

CLRRI MOVA,SBUF INCR1 ;接收數(shù)據(jù)區(qū)指針加一

DJNZR5,MRXD1 ;未接收完則繼續(xù)(R5接收數(shù)據(jù)計(jì)數(shù)器)

RET END ERR從機(jī)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論