版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章89C51串行口全雙工異步通訊串行口。
全雙工:兩個(gè)單片機(jī)之間串行數(shù)據(jù)可同時(shí)雙向傳輸。
異步通信:收、發(fā)雙方使用各自時(shí)鐘控制發(fā)送和接收過(guò)程。為使收發(fā)雙方協(xié)調(diào),要求收、發(fā)雙方時(shí)鐘盡可能一致,但不要求接、收雙方時(shí)鐘嚴(yán)格一致,可節(jié)約接連收、發(fā)雙方一條時(shí)鐘信號(hào)線。要傳送串行數(shù)據(jù)在發(fā)送方是以數(shù)據(jù)幀形式一幀一幀地發(fā)送,經(jīng)過(guò)串行傳輸線由接收方一幀一幀地接收。189C51的串行口第1頁(yè)起始位——開(kāi)始一個(gè)字符傳送標(biāo)志位。數(shù)據(jù)位——起始位之后傳送數(shù)據(jù)信號(hào)位。奇偶效驗(yàn)位——用于對(duì)字符傳送作正確性檢驗(yàn)。停頓位——用以標(biāo)志一個(gè)字符結(jié)束。位時(shí)間——發(fā)送1位數(shù)據(jù)所需時(shí)間。幀(frame)——從起始位開(kāi)始到停頓位結(jié)束全部?jī)?nèi)容稱為一幀。
下列圖給出了一個(gè)字符幀異步串行通信格式:289C51的串行口第2頁(yè)89C51串行口有4種工作方式,波特率由片內(nèi)定時(shí)器/計(jì)數(shù)器控制。每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中止請(qǐng)求。
除用于串行通訊,還可用來(lái)擴(kuò)展并行I/O口。389C51的串行口第3頁(yè)7.1串行口結(jié)構(gòu)串行口內(nèi)部結(jié)構(gòu)以下列圖,兩個(gè)物理上獨(dú)立接收和發(fā)送緩沖器SBUF(特殊功效存放器),可同時(shí)收、發(fā)數(shù)據(jù)(全雙工)。發(fā)送緩沖器只能寫(xiě)入不能讀出,接收緩沖器只能讀出不能寫(xiě)入。兩個(gè)緩沖器共用一個(gè)特殊功效存放器字節(jié)地址:SBUF(99H)
控制存放器共兩個(gè):特殊功效存放器SCON和PCON。489C51的串行口第4頁(yè)(1)SM0、SM1——串行口4種工作方式選擇位
表7-1串行口4種工作方式SM0SM1方式 功能說(shuō)明
000
同時(shí)移位存放器方式(用于擴(kuò)展I/O口)011
8位異步收發(fā),波特率可變(由定時(shí)器控制)102
9位異步收發(fā),波特率為fosc/64或fosc/32113
9位異步收發(fā),波特率可變(由定時(shí)器控制)7.1.1串行口控制存放器SCON
字節(jié)地址98H,可位尋址,格式如圖7-2所表示。
589C51的串行口第5頁(yè)(2)SM2——多機(jī)通信控制位
用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時(shí):假如SM2=1,只有當(dāng)接收到第9位數(shù)據(jù)(RB8)為“1”時(shí),才將接收到前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中止請(qǐng)求;當(dāng)接收到第9位數(shù)據(jù)(RB8)為“0”時(shí),則將接收到前8位數(shù)據(jù)丟棄。假如SM2=0,則不論第9位數(shù)據(jù)是“1”還是“0”,都將前8位數(shù)據(jù)送入SBUF中,并置“1”RI,產(chǎn)生中止請(qǐng)求。方式1時(shí),假如SM2=1,則只有收到有效停頓位時(shí)才會(huì)激活RI。方式0時(shí),SM2必須為0。689C51的串行口第6頁(yè)
(3)REN——允許串行接收位由軟件置“1”或清“0”。
REN=1允許串行口接收數(shù)據(jù)。
REN=0禁止串行口接收數(shù)據(jù)。
(4)TB8——發(fā)送第9位數(shù)據(jù)
方式2和3時(shí),TB8是要發(fā)送第9位數(shù)據(jù),可作為奇偶校驗(yàn)位使用,也可作為地址幀或數(shù)據(jù)幀標(biāo)志。
=1為地址幀,=0為數(shù)據(jù)幀(5)RB8——接收到第9位數(shù)據(jù)
方式2和3時(shí),RB8存放接收到第9位數(shù)據(jù)。在方式1,假如SM2=0,RB8是接收到停頓位。在方式0,不使用RB8。789C51的串行口第7頁(yè)
(6)TI——發(fā)送中止標(biāo)志位①方式0時(shí),串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí)由硬件置“1”,②其它工作方式,串行口發(fā)送停頓位開(kāi)始時(shí)置“1”。TI=1,表示一幀數(shù)據(jù)發(fā)送結(jié)束,可供軟件查詢,也可申請(qǐng)中止。CPU響應(yīng)中止后,向SBUF寫(xiě)入要發(fā)送下一幀數(shù)據(jù)。TI必須由軟件清0。(7)RI——接收中止標(biāo)志位
①方式0時(shí),接收完第8位數(shù)據(jù)時(shí),RI由硬件置1。②其它工作方式,串行接收到停頓位時(shí),該位置“1”。RI=1,表示一幀數(shù)據(jù)接收完成,并申請(qǐng)中止。該位狀態(tài)也可軟件查詢。RI必須由軟件清“0”。889C51的串行口第8頁(yè)SMOD:波特率選擇位。比如:方式1波特率計(jì)算公式為:
方式1波特率=(2SMOD/32)×定時(shí)器T1溢出率也稱SMOD位為波特率倍增位。7.1.2特殊功效存放器PCON
字節(jié)地址為87H,沒(méi)有位尋址功效。
989C51的串行口第9頁(yè)7.2串行口4種工作方式7.2.1方式0
同時(shí)移位存放器輸入/輸出方式,不能用于兩個(gè)89C51之間通信,慣用于外接移位存放器,以擴(kuò)展并行I/O口。8位數(shù)據(jù)為一幀,不設(shè)起始位和停頓位,先發(fā)送或接收最低位。波特率固定為fosc/12。幀格式以下:1089C51的串行口第10頁(yè)1.方式0發(fā)送
當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF指令時(shí),產(chǎn)生一個(gè)正脈沖,串行口即把SBUF中8位數(shù)據(jù)以fosc/12固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同時(shí)移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中止標(biāo)志位TI。時(shí)序如圖7-5所表示。圖7-51189C51的串行口第11頁(yè)2.方式0接收
REN=1,允許接收,REN=0,禁止接收。REN=1,允許接收。向串口SCON寫(xiě)入控制字(置為方式0,并置“1”REN位,同時(shí)RI=0)時(shí),產(chǎn)生一個(gè)正脈沖,串行口即開(kāi)始接收數(shù)據(jù)。
RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號(hào)輸出端,接收器也以fosc/12固定波特率采樣RXD引腳數(shù)據(jù)信息,當(dāng)收到8位數(shù)據(jù)時(shí)置“1”RI。表示一幀數(shù)據(jù)接收完,時(shí)序以下:
圖7-61289C51的串行口第12頁(yè)方式0下,SCON中TB8、RB8位沒(méi)有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI,CPU響應(yīng)中止。TI或RI須由用戶軟件清“0”,可用以下指令:
CLRTI ;TI位清“0” CLRRI ;RI位清“0”方式0時(shí),SM2位必須為0。1389C51的串行口第13頁(yè)7.2.2方式1
SM0、SM1=01方式1一幀數(shù)據(jù)為10位,1個(gè)起始位(0),8個(gè)數(shù)據(jù)位,1個(gè)停頓位(1),先發(fā)送或接收最低位。幀格式如圖7-7:方式1波特率=(2SMOD/32)×定時(shí)器T1溢出率SMOD為PCON存放器最高位值(0或1)。圖7-7方式1幀格式1489C51的串行口第14頁(yè)1.方式1發(fā)送
方式1輸出,數(shù)據(jù)由TXD(P3.1)輸出一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫(xiě)發(fā)送緩沖器SBUF指令,就開(kāi)啟發(fā)送。圖中TX時(shí)鐘是發(fā)送波特率。發(fā)送開(kāi)始時(shí),內(nèi)部發(fā)送控制信號(hào)/SEND變?yōu)橛行А⑵鹗嘉幌騎XD輸出,今后,每經(jīng)過(guò)一個(gè)TX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由TXD輸出一個(gè)數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完成后,置“1”TI,/SEND失效。方式1發(fā)送數(shù)據(jù)時(shí)序,如圖7-8所表示。圖7-81589C51的串行口第15頁(yè)2.方式1接收
串行口以方式0(SM0、SM1=01)接收時(shí)(REN=1),數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測(cè)到起始位負(fù)跳變時(shí),開(kāi)始接收數(shù)據(jù)。定時(shí)控制信號(hào)有兩種:接收移位時(shí)鐘(RX時(shí)鐘,頻率和傳送波特率相同)和位檢測(cè)器采樣脈沖(頻率是RX時(shí)鐘16倍,1位數(shù)據(jù)期間,有16個(gè)采樣脈沖),當(dāng)采樣到RXD端從1到0跳變時(shí)就啟動(dòng)檢測(cè)器,接收值是3次連續(xù)采樣(第7、8、9個(gè)脈沖時(shí)采樣)進(jìn)行表決以確認(rèn)是否是真正起始位(負(fù)跳變)開(kāi)始。圖7-91689C51的串行口第16頁(yè)當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿足兩個(gè)條件,這次接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI=1發(fā)出中止請(qǐng)求已被響應(yīng),SBUF中數(shù)據(jù)已被取走,說(shuō)明“接收SBUF”已空。⑵SM2=0或SM2=1,但收到RB8=1(方式1時(shí),停頓位已進(jìn)入RB8),則收到數(shù)據(jù)裝入SBUF和RB8(RB8裝入停頓位),且置“1”中止標(biāo)志RI。若這兩個(gè)條件不一樣時(shí)滿足,收到數(shù)據(jù)將丟失。1789C51的串行口第17頁(yè)7.2.3方式2
9位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控第9位數(shù)據(jù)和1位停頓位。幀格式如圖7-10。方式2波特率=(2SMOD/64)×fosc
圖7-10方式2、3格式幀1889C51的串行口第18頁(yè)1.方式2發(fā)送發(fā)送前,先依據(jù)通訊協(xié)議由軟件設(shè)置TB8(比如,雙機(jī)通訊時(shí)奇偶校驗(yàn)位或多機(jī)通訊時(shí)地址/數(shù)據(jù)標(biāo)志位)。然后,將要發(fā)送數(shù)據(jù)寫(xiě)入SBUF,開(kāi)啟發(fā)送程序。串行口能自動(dòng)把TB8取出,裝入第9位位置,再逐一發(fā)送。發(fā)送完成,使“TI”位置1。方式2發(fā)送數(shù)據(jù)波形如圖7-11所表示。圖7-11方式2和方式3發(fā)送時(shí)序1989C51的串行口第19頁(yè)【例7-1】方式2發(fā)送在雙機(jī)通訊中應(yīng)用。下面發(fā)送中止服務(wù)程序,是在雙機(jī)通訊中,以TB8作為奇偶校驗(yàn)位,處理方法為數(shù)據(jù)寫(xiě)入SBUF之前,先將數(shù)據(jù)奇偶校驗(yàn)位寫(xiě)入TB8,以確保采取偶校驗(yàn)發(fā)送。
PIPTI:PUSHPSW;現(xiàn)場(chǎng)保護(hù)PUSHAcc
SETBRS1;選擇第2組工作存放器區(qū)CLRRS0CLRTI;發(fā)送中止標(biāo)志清“0”MOVA,@R0;取數(shù)據(jù),產(chǎn)生奇偶標(biāo)志
MOV
C,P ;校驗(yàn)位送TB8,采取偶校驗(yàn)
MOVTB8,C
;為何不直接寫(xiě)MOVTB8,P?
MOV
SBUF,A ;開(kāi)啟發(fā)送 INC
R0 ;數(shù)據(jù)指針加1 POP
Acc ;恢復(fù)現(xiàn)場(chǎng) POP
PSW RETI ;中止返回2089C51的串行口第20頁(yè)2.方式2接收
SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測(cè)到RXD從1到0負(fù)跳變,并判斷起始位有效后,開(kāi)始收一幀信息。在接收器完第9位數(shù)據(jù)后,需滿足兩個(gè)條件,才能將接收到數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或SM2=1,但RB8=1,即接收到第9位數(shù)據(jù)位為1。當(dāng)上述兩個(gè)條件滿足時(shí),接收到數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足兩個(gè)條件,接收信息將被丟棄。
方式2接收數(shù)據(jù)時(shí)序如圖7-12所表示。圖7-12方式2和方式3接收時(shí)序2189C51的串行口第21頁(yè)【例7-2】方式2接收在雙機(jī)通訊中應(yīng)用。本例與上例相對(duì)應(yīng)。若第9位數(shù)據(jù)為校驗(yàn)位,在接收程序中作偶校驗(yàn)處理,設(shè)1組存放器區(qū)R0為數(shù)據(jù)緩沖器指針。
PIRI: PUSHPSW PUSHAcc SETBRS0 ;選擇1組存放器區(qū) CLRRS1
CLRRI;清中止標(biāo)志
MOVA,SBUF ;收到數(shù)據(jù)送A
MOVC,P;接收數(shù)據(jù)產(chǎn)生奇偶校驗(yàn)位在C JNCL1 ;C=0,跳L1 JNBRB8,ERP ;C=1,RB8=0,跳ERP
AJMPL2;C=1,RB8=1,跳L2L1: JB
RB8,ERP ;C=0,RB8=1,跳ERPL2: MOV@R0,A
;C和RB8一致,才表示接收數(shù)據(jù)正確 INCR0 POPAcc POPPSW
ERP: ……… ;犯錯(cuò)處理程序段 ……… RETI
2289C51的串行口第22頁(yè)7.2.4方式3SM0、SM1=11,串口為方式3。波特率可變9位異步通訊方式,除波特率外,方式3和方式2相同。方式3時(shí)序見(jiàn)方式2。
方式3波特率=(2SMOD/32)×定時(shí)器T1溢出率2389C51的串行口第23頁(yè)7.3多機(jī)通信要確保主機(jī)與所選擇從機(jī)實(shí)現(xiàn)可靠地通信,必須確保串口具有識(shí)別功效。SCON中SM2位就是滿足這一條件而設(shè)置多機(jī)通信控制位。原理:在串行口以方式2(或方式3)接收時(shí):
若SM2=1,表示置多機(jī)通信功效位,這時(shí)有兩種可能:(1)接收到第9位數(shù)據(jù)為1時(shí),數(shù)據(jù)才裝入SBUF,并置中止標(biāo)志RI=1向CPU發(fā)出中止請(qǐng)求;(2)接收到第9位數(shù)據(jù)為0時(shí),則不產(chǎn)生中止標(biāo)志,信息將拋棄。若SM2=0,則接收第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中止標(biāo)志,接收到數(shù)據(jù)裝入SBUF中。
上述特征,便可實(shí)現(xiàn)89C51多機(jī)通信。2489C51的串行口第24頁(yè)
設(shè)多機(jī)系統(tǒng)中有一主機(jī)和3個(gè)89C51從機(jī),如圖7-13。主機(jī)RXD與從機(jī)TXD相連,主機(jī)TXD與從機(jī)RXD端相連。從機(jī)地址分別為00H、01H、02H。
(1)從機(jī)串行口編程為方式2或方式3接收,且置“1”SM2和REN位,使從機(jī)只處于多機(jī)通訊且接收地址幀狀態(tài)。(2)主機(jī)先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)從機(jī))發(fā)給各從機(jī),主機(jī)發(fā)出地址信息第9位為1,各從機(jī)接收到第9位信息RB8為1,且因?yàn)镾M2=1,則置“1”RI,各從機(jī)都響應(yīng)中止,執(zhí)行中止程序。在中止服務(wù)子程序中,判主機(jī)送來(lái)地址是否和本機(jī)地址相符合,相符則該從機(jī)清“0”SM2位,準(zhǔn)備接收主機(jī)數(shù)據(jù)或命令;若不符,則保持SM2=1狀態(tài)。2589C51的串行口第25頁(yè)(3)接著主機(jī)發(fā)送數(shù)據(jù)幀,此時(shí)各從機(jī)串行口接收到RB8=0,只有地址相符合從機(jī)系統(tǒng)(即已清“0”SM2位從機(jī))才能激活RI,從而進(jìn)入中止,在中止程序中接收主機(jī)數(shù)據(jù)(或命令);其它從機(jī)因SM2=1,又RB8=0不激活中止標(biāo)志RI,不能進(jìn)入中止,接收數(shù)據(jù)丟失。圖7-13所表示多機(jī)系統(tǒng)是主從式,由主機(jī)控制多機(jī)之間通信,從機(jī)和從機(jī)通訊只能經(jīng)主機(jī)才能實(shí)現(xiàn)。2689C51的串行口第26頁(yè)7.4波特率制訂方法方式0、方式2波特率是固定;方式1、方式3波特率由定時(shí)器T1溢出率來(lái)確定。7.4.1波特率定義波特率定義:串行口每秒鐘發(fā)送(或接收)位數(shù)。設(shè)發(fā)送每一位所需時(shí)間為T,則波特率為1/T。對(duì)于定時(shí)器不一樣工作方式,波特率范圍不一。2789C51的串行口第27頁(yè)7.4.2定時(shí)器T1產(chǎn)生波特率計(jì)算(1)方式0波特率=時(shí)鐘頻率fosc×1/12,不受SMOD位值影響。若fosc=12MHz,波特率為fosc/12即1Mb/s。(2)方式2波特率=(2SMOD/64)×fosc
若fosc=12MHz:SMOD=0波特率=187.5kb/s;
SMOD=1波特率=375kb/s
(3)方式1或方式3時(shí),波特率為:
波特率=(2SMOD/32)×T1溢出率實(shí)際設(shè)定波特率時(shí),T1常設(shè)置為方式2定時(shí)(自動(dòng)裝初值)這種方式不但操作方便,也可防止因軟件重裝初值而帶來(lái)定時(shí)誤差。
公式(7-3)2889C51的串行口第28頁(yè)2989C51的串行口第29頁(yè)實(shí)際使用時(shí),為防止煩雜初值計(jì)算,慣用波特率和初值X間關(guān)系列成表7-2(P124),以供查用。表7-2有兩點(diǎn)需要注意:(1)時(shí)鐘振蕩頻率為12MHz或6MHz時(shí),表中初值X和對(duì)應(yīng)波特率之間有一定誤差。比如,F(xiàn)DH對(duì)應(yīng)理論值是10416波特(時(shí)鐘6MHz)。與9600波特相差816波特,消除誤差能夠調(diào)整時(shí)鐘振蕩頻率fosc實(shí)現(xiàn)。比如采取時(shí)鐘振蕩頻率為11.0592MHz。(2)假如串行通訊選取很低波特率,比如,波特率選為55,可將T1設(shè)置為方式1定時(shí)。但在T1溢出時(shí),需用在中止服務(wù)程序中重新裝入初值。中止響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定誤差,可用改變初值方法加以調(diào)整。3089C51的串行口第30頁(yè)【例7-3】若8031單片機(jī)時(shí)鐘振蕩頻率為11.0592MHz,選取T1為方式2定時(shí)作為波特率發(fā)生器,波特率為2400b/s,求初值。
設(shè)T1為方式2定時(shí),選SMOD=0法一:按公式(7-3)計(jì)算法二:上述結(jié)果可直接從表7-2中查到。這里時(shí)鐘振蕩頻率選為11.0592MHz,就可使初值為整數(shù),從而產(chǎn)生準(zhǔn)確波特率。3189C51的串行口第31頁(yè)7.5串行口編程和應(yīng)用
介紹89C51之間雙機(jī)串行通信硬件接口和軟件設(shè)計(jì)。
7.5.1雙機(jī)串行通信硬件接口89C51串行口為TTL電平。這種以TTL電平串行傳輸數(shù)據(jù)方式,抗干擾性差,傳輸距離短。為了提升串行通信可靠性,增大串行通信距離,普通都采取標(biāo)準(zhǔn)串行接口,如RS-232、RS-422A、RS-485等來(lái)實(shí)現(xiàn)串行通信。依據(jù)89C51雙機(jī)通信距離和抗干擾性要求,可選擇TTL電平傳輸,或選擇RS-232C、RS-422A、RS485串行接口進(jìn)行串行數(shù)據(jù)傳輸。3289C51的串行口第32頁(yè)1.TTL電平通信接口假如兩個(gè)89C51單片機(jī)相距在幾米之內(nèi),它們串行口可直接相連,從而直接用TTL電平傳輸方法來(lái)實(shí)現(xiàn)雙機(jī)通信,接口電路如圖7-14所表示。圖7-14用TTL電平傳輸方法實(shí)現(xiàn)雙機(jī)通信接口電路3389C51的串行口第33頁(yè)2.RS-232C雙機(jī)通信接口假如雙機(jī)通信距離在30m之內(nèi),可利用RS-232C標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)雙機(jī)通信,接口電路如圖7-15所表示。圖7-15中MAX232A是美國(guó)MAXIM企業(yè)生產(chǎn)RS-232C雙工發(fā)送器/接收器電路芯片。圖7-15RS-232C雙機(jī)通信接口電路3489C51的串行口第34頁(yè)3.RS-422A雙機(jī)通信接口為了增加通信距離,能夠在通信線路上采取光電隔離方法,利用RS-422A標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信,最大傳輸距離可達(dá)1000m左右,其接口電路如圖7-16所表示。圖7-16中SN75174、SN75175是TTL電平到RS-232電平與RS-232電平到TTL電平電平轉(zhuǎn)換芯片。圖7-16RS-422A雙機(jī)通信接口電路3589C51的串行口第35頁(yè)4.RS-485雙機(jī)通信接口RS-422A雙機(jī)通信需四芯傳輸線,這對(duì)長(zhǎng)距離通信很不經(jīng)濟(jì),故在工業(yè)現(xiàn)場(chǎng),通常采取雙絞線傳輸RS-485串行通信接口,它很輕易實(shí)現(xiàn)多機(jī)通信。圖7-17給出了其RS-485雙機(jī)通信接口電路,最大傳輸距離可達(dá)1000m左右。圖7-17RS-485雙機(jī)通信接口電路3689C51的串行口第36頁(yè)7.5.2雙機(jī)串行通信軟件編程4種工作方式中方式0是移位存放器工作方式,主要用于擴(kuò)展并行I/O用,并不用于串行通信。【見(jiàn)9.5】串行口方式1~3是用于串行通信,下面介紹串行口方式1~3雙機(jī)串行通信軟件編程。
軟件編程實(shí)際上與上面介紹各種串行標(biāo)準(zhǔn)硬件接口電路無(wú)關(guān)。3789C51的串行口第37頁(yè)1.串行口方式1應(yīng)用編程【例7-4】本例采取方式1進(jìn)行雙機(jī)串行通信,收、發(fā)雙方均采用6MHz晶振,波特率為2400b/s,每一幀信息為10位,第0位為起始位,第1~8位為數(shù)據(jù)位,最終1位為停頓位。發(fā)送方把以78H、77H單元內(nèi)容為首地址,以76H、75H單元內(nèi)容減1為末地址數(shù)據(jù)塊經(jīng)過(guò)串行口發(fā)送給接收方。
發(fā)送方要發(fā)送數(shù)據(jù)塊地址為H~201FH。發(fā)送時(shí)先發(fā)送地址幀,再發(fā)送數(shù)據(jù)幀。
接收方在接收時(shí)使用一個(gè)標(biāo)志位來(lái)區(qū)分接收是地址還是數(shù)據(jù),然后將其分別存放到指定單元中。發(fā)送方可采取查詢方式或中止方式發(fā)送數(shù)據(jù),接收方可采取中斷或查詢方式接收。下面僅介紹采取中止方式發(fā)送、接收程序。3889C51的串行口第38頁(yè)(1)甲機(jī)發(fā)送程序【P128】
ORG0000H
LJMPMAIN;跳至主程序
ORG0023H
LJMPCOM_INT;跳至中止服務(wù)程序
ORG1000H
MAIN:
MOV
SP,#53H;設(shè)置堆棧指針
MOV
78H,#20H;要發(fā)送數(shù)據(jù)首地址
MOV
77H,#00H
MOV
76H,#20H;要發(fā)送數(shù)據(jù)末地址
MOV
75H,#40H
ACALL
TRANS;調(diào)用發(fā)送程序(發(fā)送地址)
SJMP
$;等候中止3989C51的串行口第39頁(yè)
;定時(shí)/計(jì)數(shù)器T1方式2TRANS:
MOVTMOD,#20H;設(shè)置計(jì)數(shù)器初值
MOVTH1,#0FAH
MOVTL1,#0FAH;波特率加倍
MOVPCON,#00H
SETBTR1;打開(kāi)計(jì)數(shù)器;設(shè)置串行口工作方式
MOVSCON,#40H;關(guān)中止,用查詢方式發(fā)送地址幀
MOVIE,#00H
CLRF0;清標(biāo)志位;發(fā)送78H單元地址幀
MOVSBUF,78H;發(fā)送過(guò)程中,TI=0,等候WAIT1:JNBTI,WAIT1
CLRTI;發(fā)送完,清TI
MOVSBUF,77HWAIT2:JNBTI,WAIT2
CLRTI
MOVSBUF,76HWAIT3:JNBTI,WAIT3
CLRTI
MOVSBUF,75HWAIT4:JNBTI,WAIT4
CLRTI;地址幀發(fā)送完,中止方式發(fā)送數(shù)據(jù)MOVIE,#90H;設(shè)置中止允許MOVDPH,78H;數(shù)據(jù)指針MOVDPL,77HMOVXA,@DPTR
MOVSBUF,A;發(fā)送首個(gè)數(shù)據(jù)WAIT:JNBF0,WAIT
RET4089C51的串行口第40頁(yè);中止服務(wù)子程序,用來(lái)發(fā)送數(shù)據(jù)COM_INT:
CLR
TI;清發(fā)送中止標(biāo)志
INC
DPTR;改變數(shù)據(jù)指針
MOV
A,DPH;判斷數(shù)據(jù)指針到末尾地址了沒(méi)?
CJNE
A,76H,END1;未發(fā)送結(jié)束,至END1繼續(xù)
MOV
A,DPL
CJNE
A,75H,END1
SETB
F0;置標(biāo)志位為1
CLR
ES;清串行通信中止
CLR
EA;清全部中止
RETI
;中止返回END1:
MOVX
A,@DPTR;未到末尾單元,繼續(xù)發(fā)
MOV
SBUF,A
RETI;中止返回
END4189C51的串行口第41頁(yè)
(2)乙機(jī)接收程序【P129】
ORG
0000H
LJMPMAIN;跳至主程序
ORG
0023H
LJMP
COM_INT;跳至中止服務(wù)程序
ORG
1000HMAIN:
MOV
SP,#53H;設(shè)置堆棧指針
ACALL
RECEI;調(diào)用接收子程序
SJMP
$;等候中止4289C51的串行口第42頁(yè)
RECEI:
MOVR0,#78H;設(shè)置地址接收區(qū)
MOVTMOD,#20H;設(shè)置定時(shí)器∕計(jì)數(shù)器工作方式
MOVTH1,#0FAH;設(shè)置波特率
MOVTL1,#0FAH
MOVPCON,#00H;波特率加倍
SETBTR1;開(kāi)計(jì)數(shù)器
MOVSCON,#50H;設(shè)置串行口工作方式,REN=1
MOVIE,#90H;開(kāi)串行口中止
CLR
F0;清標(biāo)志F0,地址數(shù)據(jù)標(biāo)志
CLR
7FH;清7FH位,接收結(jié)束標(biāo)志W(wǎng)AIT:
JNB
7F,WAIT;7F位為0,則等候
RET4389C51的串行口第43頁(yè);中止服務(wù)程序COM_INT:PUSH
DPL;壓棧
PUSH
DPH
PUSH
ACC
;清中止標(biāo)志
CLR
RI
;F0為1,則至R_DATA
JB
F0,R_DATA;保留地址單元
MOVA,SBUF
MOV@R0,ADECR0
;內(nèi)容不為#74H,跳至RETNCJNE
R0,#74H,RETN;內(nèi)容為#74H,則F0=1
SETB
F0
RETN:
POPACC;出棧
POPDPH
POPDPL
RETI
;中止返回R_DATA:MOVDPH,78HMOV
DPL,77H;首地址MOV
A,SBUFMOV
@DPTR,A
INC
77H
;改變指針MOV
A,77HJNZ
END2INC
78H
;高字節(jié)處理END2:MOVA,76H
;判斷數(shù)據(jù)是否傳送完
CJNE
A,78H,RETNMOV
A,75HCJNE
A,77H,RETNCLR
ESCLR
EA
SETB
7FH;接收結(jié)束SJMP
RETNEND4489C51的串行口第44頁(yè)2.串行口方式2應(yīng)用編程方式2和方式1有兩點(diǎn)不一樣之處。方式2接收/發(fā)送11位信息,第0位為起始位,第1~8位為數(shù)據(jù)位,第9位是程控位,該位可由用戶置TB8決定,第10位是停頓位1,這是方式1和方式2一個(gè)不一樣點(diǎn)。另一個(gè)不一樣點(diǎn)是方式2波特率改變范圍比喻式1小,方式2波特率=振蕩器頻率/n。當(dāng)SMOD=0時(shí),n=64。當(dāng)SMOD=1時(shí),n=32。鑒于方式2使用和方式3基本一樣(只是波特率不一樣,方式3波特率要由用戶決定),所以方式2詳細(xì)編程應(yīng)用,可參照下面介紹方式3應(yīng)用編程。4589C51的串行口第45頁(yè)3.串行口方式3應(yīng)用編程【例7-5】本例為89C51單片機(jī)用串行通信方式3進(jìn)行發(fā)送和接收應(yīng)用實(shí)例。發(fā)送方采取查詢方式發(fā)送地址幀,采取中止或查詢方式發(fā)送數(shù)據(jù),接收方采取中止或查詢方式接收數(shù)據(jù)。發(fā)送和接收雙方均采取6MHz晶振,波特率為4800b/s。發(fā)送方首先將存放在78H和77H單元中地址發(fā)送給接收方,然后發(fā)送數(shù)據(jù)00H~FFH,共256個(gè)數(shù)據(jù)。4689C51的串行口第46頁(yè)(1)甲機(jī)發(fā)送程序【P131】ORG0000HLJMPMAIN;跳至主程序
ORG0023HLJMPCOM_INT;跳至串行口中止ORG1000HMAIN:MOVSP,#53H;設(shè)置堆棧指針MOV78H,#20H;設(shè)置要存放數(shù)據(jù)單元首地址MOV77H,#00HACALLTRANS;調(diào)用TRANS子程序
SJMP$
4789C51的串行口第47頁(yè)TRANS:MOVTMOD,#20H;設(shè)置定時(shí)器∕計(jì)數(shù)器工作方式MOVTH1,#0F3H;設(shè)置波特率為4800bpsMOVTL1,#0F3H;SETBTR1;開(kāi)定時(shí)器MOVSCON,#E0H;設(shè)置串行口工作方式為3
SETBTB8;設(shè)置第9位數(shù)據(jù)位MOVIE,#00H;關(guān)中止MOVSBUF,78H;查詢方式發(fā)送首地址高8位WAIT:JNBTI,WAITCLRTIMOVSBUF,77H;查詢方式發(fā)送首地址低8位WAIT2:JNBTI,WAIT2CLRTIMOVIE,#90H;開(kāi)中止
CLRTB8;TB8=1,發(fā)送數(shù)據(jù)MOVA,#00HMOVSBUF,A;開(kāi)始發(fā)送數(shù)據(jù)WAIT1:CJNEA,#0FFH,WAIT1;判斷數(shù)據(jù)是否發(fā)送完成CLRES;發(fā)送完成關(guān)中止
RET
;子程序返回4889C51的串行口第48頁(yè)COM_INT:CLRTI
;清中止標(biāo)志位INCA
;發(fā)送內(nèi)容加1MOVSBUF
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 訴訟代理與庭審辯護(hù)工作總結(jié)
- 幼兒捉迷藏課程設(shè)計(jì)
- 英雄之旅課程設(shè)計(jì)理念
- 酒店行業(yè)銷售工作總結(jié)
- IT行業(yè)員工薪酬福利制度優(yōu)化
- 2025年高考?xì)v史一輪復(fù)習(xí)之世界多極化
- 如何將愿景轉(zhuǎn)化為年度工作計(jì)劃
- 2023-2024學(xué)年福建省福州市福清市高一(下)期中語(yǔ)文試卷
- 漢字偏旁部首名稱大全表
- 文化行業(yè)市場(chǎng)拓展總結(jié)
- 2025年林權(quán)抵押合同范本
- 智能檢測(cè)與監(jiān)測(cè)技術(shù)-智能建造技術(shù)專02課件講解
- 2025蛇年一年級(jí)寒假作業(yè)創(chuàng)意與寓意齊【高清可打印】
- 多系統(tǒng)萎縮鑒別及治療
- 設(shè)備的使用和維護(hù)管理制度模版(3篇)
- 麻風(fēng)病防治知識(shí)課件
- 痛風(fēng)護(hù)理疑難病例討論
- 質(zhì)量保證大綱(共14頁(yè))
- 木材材積表0.1-10米.xls
- 輕質(zhì)隔墻板安裝合同協(xié)議書(shū)范本標(biāo)準(zhǔn)版
- 車輛管理各崗位績(jī)效考核量表
評(píng)論
0/150
提交評(píng)論