第7章AT89C51單片機(jī)的串行口_第1頁(yè)
第7章AT89C51單片機(jī)的串行口_第2頁(yè)
第7章AT89C51單片機(jī)的串行口_第3頁(yè)
第7章AT89C51單片機(jī)的串行口_第4頁(yè)
第7章AT89C51單片機(jī)的串行口_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第7 7章章 AT89C51AT89C51單片機(jī)的串行口單片機(jī)的串行口全雙工全雙工的的異步異步通訊串行口通訊串行口4 4種工作方式種工作方式 , ,波特率由片內(nèi)定時(shí)器波特率由片內(nèi)定時(shí)器/ /計(jì)數(shù)器控制。計(jì)數(shù)器控制。 每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中斷請(qǐng)求。每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中斷請(qǐng)求。除用于串行通訊,除用于串行通訊,還可用來(lái)擴(kuò)展并行還可用來(lái)擴(kuò)展并行I/OI/O口。口。7.1 7.1 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)串行口內(nèi)部結(jié)構(gòu)如串行口內(nèi)部結(jié)構(gòu)如圖圖7-17-1,兩個(gè)物理上獨(dú)立地接收和兩個(gè)物理上獨(dú)立地接收和 發(fā)送緩沖器發(fā)送緩沖器,可同時(shí)收、發(fā)數(shù)據(jù),可同時(shí)收、發(fā)數(shù)據(jù)( (全雙工全雙工) )。

2、兩個(gè)緩沖器兩個(gè)緩沖器共用共用一個(gè)特殊功能寄存器字節(jié)地址:一個(gè)特殊功能寄存器字節(jié)地址:SBUF(99HSBUF(99H) 控制寄存器共兩個(gè):控制寄存器共兩個(gè):特殊功能寄存器特殊功能寄存器SCONSCON和和PCONPCON。7.1.1 7.1.1 串行口控制寄存器串行口控制寄存器SCONSCON 字節(jié)地址字節(jié)地址9898H H,可位尋址,格式如可位尋址,格式如圖圖7-27-2所示。所示。 圖圖7-17-1(1 1)SM0SM0、SM1SM1串行口串行口4種工作方式的選擇位種工作方式的選擇位 表表7-1 7-1 串行口的串行口的4 4種工作方式種工作方式SM0 SM1 SM0 SM1 方式方式 功

3、功 能能 說(shuō)說(shuō) 明明 0 0 0 0 0 0 同步移位寄存器方式(用于擴(kuò)展同步移位寄存器方式(用于擴(kuò)展I/OI/O口)口) 0 1 0 1 1 1 8 8位異步收發(fā),波特率可變(由定時(shí)器控制)位異步收發(fā),波特率可變(由定時(shí)器控制) 1 0 1 0 2 2 9 9位異步收發(fā),波特率為位異步收發(fā),波特率為fosc/64fosc/64或或fosc/32fosc/32 1 1 1 1 3 3 9 9位異步收發(fā),波特率可變(由定時(shí)器控制)位異步收發(fā),波特率可變(由定時(shí)器控制)(2 2)SM2 SM2 多機(jī)通信控制位多機(jī)通信控制位 用于方式用于方式2 2或方式或方式3 3中。中。 圖圖7-27-2當(dāng)串行口

4、以當(dāng)串行口以方式方式2 2或方式或方式3 3接收接收時(shí),時(shí),如果如果SM2=1SM2=1,只有當(dāng)接收到的第只有當(dāng)接收到的第9 9位數(shù)據(jù)(位數(shù)據(jù)(RB8RB8)為為“1”“1”時(shí),才將時(shí),才將接收到的前接收到的前8 8位數(shù)據(jù)送入位數(shù)據(jù)送入SBUFSBUF,并置并置“1” “1” RIRI,產(chǎn)生中斷請(qǐng)求;產(chǎn)生中斷請(qǐng)求;當(dāng)接收到的第當(dāng)接收到的第9 9位數(shù)據(jù)(位數(shù)據(jù)(RB8RB8)為為“0”“0”時(shí),則將接收到的前時(shí),則將接收到的前8 8位位數(shù)據(jù)丟棄。數(shù)據(jù)丟棄。如果如果SM2=0SM2=0,則不論第,則不論第9 9位數(shù)據(jù)是位數(shù)據(jù)是“1”“1”還是還是“0”“0”,都將前,都將前8 8位數(shù)位數(shù)據(jù)送入據(jù)送

5、入SBUFSBUF中,并置中,并置“1” “1” RIRI,產(chǎn)生中斷請(qǐng)求。產(chǎn)生中斷請(qǐng)求。方式方式1 1時(shí),如果時(shí),如果SM2=1SM2=1,則只有收到停止位時(shí)才會(huì)激活則只有收到停止位時(shí)才會(huì)激活RIRI。方式方式0 0時(shí),時(shí),SM2SM2必須為必須為0 0。 (3 3)RENREN允許串行接收位允許串行接收位 由軟件置由軟件置“1”“1”或清或清“0”“0”。 REN=1 REN=1 允許串行口接收數(shù)據(jù)。允許串行口接收數(shù)據(jù)。 REN=0 REN=0 禁止串行口接收數(shù)據(jù)。禁止串行口接收數(shù)據(jù)。 (4 4)TB8TB8發(fā)送的第發(fā)送的第9 9位數(shù)據(jù)位數(shù)據(jù)方式方式2 2和和3 3時(shí),時(shí),TB8TB8是要發(fā)

6、送的是要發(fā)送的第第9 9位數(shù)據(jù)位數(shù)據(jù),可作為,可作為奇偶校驗(yàn)位奇偶校驗(yàn)位使使用,也可作為用,也可作為地址幀地址幀或或數(shù)據(jù)幀數(shù)據(jù)幀的標(biāo)志。的標(biāo)志。1 1:地址幀:地址幀 0 0:數(shù)據(jù)幀:數(shù)據(jù)幀 (5 5)RB8RB8接收到的第接收到的第9 9位數(shù)據(jù)位數(shù)據(jù)方式方式2 2和和3 3時(shí),時(shí),RB8RB8存放接收到的第存放接收到的第9 9位數(shù)據(jù)。在位數(shù)據(jù)。在方式方式1 1,如果,如果SM2=0SM2=0,RB8RB8是接收到的停止位。在是接收到的停止位。在方式方式0 0,不使用,不使用RB8RB8。 (6 6)TITI發(fā)送中斷標(biāo)志位發(fā)送中斷標(biāo)志位方式方式0 0時(shí)時(shí),串行發(fā)送第,串行發(fā)送第8 8位數(shù)據(jù)結(jié)束

7、時(shí)由硬件置位數(shù)據(jù)結(jié)束時(shí)由硬件置“1”“1”,其它工作方式其它工作方式,串行口發(fā)送停止位的開(kāi)始時(shí)置,串行口發(fā)送停止位的開(kāi)始時(shí)置TI=1TI=1,表示一幀表示一幀數(shù)據(jù)發(fā)送結(jié)束,可供軟件查詢(xún),也可申請(qǐng)中斷。數(shù)據(jù)發(fā)送結(jié)束,可供軟件查詢(xún),也可申請(qǐng)中斷。CPUCPU響應(yīng)中斷后響應(yīng)中斷后, , 向向SBUFSBUF寫(xiě)入要發(fā)送的下一幀數(shù)據(jù)。寫(xiě)入要發(fā)送的下一幀數(shù)據(jù)。TITI必須由軟必須由軟件清件清0 0。(7 7)RIRI接收中斷標(biāo)志位接收中斷標(biāo)志位 方式方式0 0時(shí)時(shí),接收完第,接收完第8 8位數(shù)據(jù)時(shí),位數(shù)據(jù)時(shí),RIRI由硬件置由硬件置1 1。其它工作方式其它工作方式,串行接收到停止位時(shí),該位置,串行接收到停

8、止位時(shí),該位置“1”“1”。RI=1RI=1,表表示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷 。該位狀態(tài)也可軟件查。該位狀態(tài)也可軟件查詢(xún)。詢(xún)。RIRI必須由軟件清必須由軟件清“0”“0”。7.1.2 7.1.2 特殊功能寄存器特殊功能寄存器PCONPCON 字節(jié)地址為字節(jié)地址為8787H H,沒(méi)有位尋址功能。沒(méi)有位尋址功能。 (1 1)SMODSMOD波特率選擇位波特率選擇位 例如:方式例如:方式1 1的波特率的計(jì)算公式為:的波特率的計(jì)算公式為: 方式方式1 1波特率波特率= =(2 2SMODSMOD/32/32)定時(shí)器定時(shí)器T1T1的溢出率的溢出率也稱(chēng)也稱(chēng)SMODSMOD

9、位為位為波特率倍增位波特率倍增位。(2 2)GF1GF1、GF0GF0通用標(biāo)志位通用標(biāo)志位這兩個(gè)標(biāo)志位可這兩個(gè)標(biāo)志位可供用戶(hù)使用供用戶(hù)使用,可用軟件置,可用軟件置1 1或清或清0 0。兩個(gè)標(biāo)志位。兩個(gè)標(biāo)志位用戶(hù)應(yīng)充分利用。用戶(hù)應(yīng)充分利用。(3 3)PDPD掉電方式位掉電方式位若若PD=1PD=1,單片機(jī)進(jìn)入,單片機(jī)進(jìn)入掉電工作方式。掉電工作方式。圖圖7-37-3(4 4)IDLIDL待機(jī)方式位待機(jī)方式位IDL=1IDL=1,單片機(jī)進(jìn)入待機(jī)工作方式。,單片機(jī)進(jìn)入待機(jī)工作方式。7.2 7.2 串行口的串行口的4 4種工作方式種工作方式7.2.1 7.2.1 方式方式0 0 同步移位寄存器方式同步移

10、位寄存器方式,常用于外接移位寄存器,以擴(kuò)展并行,常用于外接移位寄存器,以擴(kuò)展并行I/OI/O口???。 8 8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。波特率固定為波特率固定為fosc/12fosc/12。 幀格式如下:幀格式如下:1 1方式方式0 0發(fā)送發(fā)送 當(dāng)當(dāng)CPUCPU執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUFSBUF的指令時(shí),產(chǎn)生一個(gè)的指令時(shí),產(chǎn)生一個(gè)正脈沖,串行口即把正脈沖,串行口即把SBUFSBUF中的中的8 8位數(shù)據(jù)以位數(shù)據(jù)以fosc/12fosc/12的固定波特的固定波特率從率從RXDRXD

11、引腳串行輸出引腳串行輸出,低位在先,低位在先, ,TXDTXD引腳輸出同步移位脈沖引腳輸出同步移位脈沖,發(fā)送完發(fā)送完8 8位數(shù)據(jù)置位數(shù)據(jù)置“1”“1”中斷標(biāo)志位中斷標(biāo)志位TITI。時(shí)序如時(shí)序如圖圖7-57-5所示。所示。2 2方式方式0 0接收接收 REN=1REN=1,接收數(shù)據(jù),接收數(shù)據(jù),REN=0REN=0,禁止接收禁止接收。 REN=1REN=1,允許接收允許接收。向串口的。向串口的SCONSCON寫(xiě)入控制字(置為方式寫(xiě)入控制字(置為方式0 0,并置,并置“1”“1”RENREN位,同時(shí)位,同時(shí)RI=0RI=0)時(shí),產(chǎn)生一個(gè)正脈沖,串行口即開(kāi)時(shí),產(chǎn)生一個(gè)正脈沖,串行口即開(kāi)始接收數(shù)據(jù)。始接

12、收數(shù)據(jù)。RXDRXD為數(shù)據(jù)輸入端,為數(shù)據(jù)輸入端,TXDTXD為移位脈沖信號(hào)輸出端為移位脈沖信號(hào)輸出端,接收器也以接收器也以fosc/12fosc/12的固定波特率的固定波特率采樣采樣RXDRXD引腳的數(shù)據(jù)信息,當(dāng)收引腳的數(shù)據(jù)信息,當(dāng)收到到8 8位數(shù)據(jù)時(shí)置位數(shù)據(jù)時(shí)置“1” “1” RIRI。表示一幀數(shù)據(jù)接收完,時(shí)序如下:表示一幀數(shù)據(jù)接收完,時(shí)序如下:圖圖7-57-5方式方式0 0下,下,SCONSCON中的中的TB8TB8、RB8RB8位沒(méi)有用到位沒(méi)有用到,發(fā)送或接收完發(fā)送或接收完8 8位數(shù)據(jù)位數(shù)據(jù)由硬件置由硬件置“1”“1”TITI或或RIRI,CPUCPU響應(yīng)中斷。響應(yīng)中斷。TITI或或RI

13、RI須由用戶(hù)軟件清須由用戶(hù)軟件清“0”“0”,可用如下指令:,可用如下指令:CLR TICLR TI;TITI位清位清“0”“0”CLR RI CLR RI ;RIRI位清位清“0”“0”方式方式0 0時(shí),時(shí),SM2SM2位必須為位必須為0 0。圖圖7-67-67.2.2 7.2.2 方式方式1 1 SM0SM0、SM1SM1=01=01方式方式1 1一幀數(shù)據(jù)一幀數(shù)據(jù)為為1010位,位,1 1個(gè)起始位(個(gè)起始位(0 0),),8 8個(gè)數(shù)據(jù)位,個(gè)數(shù)據(jù)位,1 1個(gè)停止個(gè)停止位(位(1 1),先發(fā)送或接收最低位。幀格式如),先發(fā)送或接收最低位。幀格式如圖圖7-77-7:方式方式1 1波特率波特率=

14、=(2 2SMODSMOD/32/32)定時(shí)器定時(shí)器T1T1的溢出率的溢出率 SMOD SMOD為為PCONPCON寄存器的最高位的值(寄存器的最高位的值(0 0或或1 1)。)。圖圖7-77-7 1 1方式方式1 1發(fā)送發(fā)送 方式方式1 1輸出,數(shù)據(jù)由輸出,數(shù)據(jù)由TXDTXD輸出輸出,一幀信息為一幀信息為1010位位,1 1位起始位位起始位0 0,8 8位數(shù)據(jù)位(先低位)和位數(shù)據(jù)位(先低位)和1 1位停位停止位止位1 1。當(dāng)執(zhí)行一條數(shù)據(jù)當(dāng)執(zhí)行一條數(shù)據(jù)寫(xiě)發(fā)送緩沖器寫(xiě)發(fā)送緩沖器SBUFSBUF的指令,就的指令,就啟動(dòng)發(fā)送啟動(dòng)發(fā)送。圖中。圖中TXTX時(shí)鐘時(shí)鐘是發(fā)送的波特率。是發(fā)送的波特率。發(fā)送開(kāi)始

15、時(shí)發(fā)送開(kāi)始時(shí),內(nèi)部發(fā)送控制信號(hào)變?yōu)橛行А⑵鹗嘉幌?,?nèi)部發(fā)送控制信號(hào)變?yōu)橛行?。將起始位向TXDTXD輸輸出,此后,每經(jīng)過(guò)一個(gè)出,此后,每經(jīng)過(guò)一個(gè)TXTX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由并由TXDTXD輸出一個(gè)數(shù)據(jù)位。輸出一個(gè)數(shù)據(jù)位。8 8位數(shù)據(jù)位全部發(fā)送完畢后,置位數(shù)據(jù)位全部發(fā)送完畢后,置“1” “1” TITI。方式。方式1 1發(fā)送數(shù)據(jù)的時(shí)序,如發(fā)送數(shù)據(jù)的時(shí)序,如圖圖7-87-8所示。所示。 2 2方式方式1 1接收接收 數(shù)據(jù)從數(shù)據(jù)從RXDRXD(P3.0P3.0)腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變時(shí),開(kāi)始腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變時(shí),開(kāi)始接收數(shù)據(jù)。接收數(shù)據(jù)。

16、定時(shí)控制信號(hào)有兩種定時(shí)控制信號(hào)有兩種):):接收移位時(shí)鐘接收移位時(shí)鐘(RXRX時(shí)鐘,頻率和波特時(shí)鐘,頻率和波特率相同)和率相同)和位檢測(cè)器采樣脈沖位檢測(cè)器采樣脈沖(頻率是(頻率是RXRX時(shí)鐘的時(shí)鐘的1616倍,倍,1 1位數(shù)位數(shù)據(jù)期間,有據(jù)期間,有1616個(gè)采樣脈沖),當(dāng)采樣到個(gè)采樣脈沖),當(dāng)采樣到RXDRXD端從端從1 1到到0 0的跳變時(shí)的跳變時(shí)就啟動(dòng)檢測(cè)器,就啟動(dòng)檢測(cè)器,接收的值是接收的值是3 3次連續(xù)采樣(第次連續(xù)采樣(第7 7、8 8、9 9個(gè)脈沖個(gè)脈沖圖圖7-87-8時(shí)采樣)時(shí)采樣)進(jìn)行進(jìn)行表決表決以以確認(rèn)是否是真正的起始位確認(rèn)是否是真正的起始位(負(fù)跳變)的開(kāi)始。(負(fù)跳變)的開(kāi)始。

17、當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿(mǎn)足兩個(gè)條件,接收才真正有效。當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿(mǎn)足兩個(gè)條件,接收才真正有效。 RI=0RI=0,即上一幀數(shù)據(jù)接收完成時(shí),即上一幀數(shù)據(jù)接收完成時(shí),RI=1RI=1發(fā)出的中斷請(qǐng)求已被發(fā)出的中斷請(qǐng)求已被響應(yīng),響應(yīng),SBUFSBUF中的數(shù)據(jù)已被取走,說(shuō)明中的數(shù)據(jù)已被取走,說(shuō)明“接收接收SBUF”SBUF”已空。已空。 SM2=0SM2=0或或收到的停止位收到的停止位=1=1(方式(方式1 1時(shí),停止位已進(jìn)入時(shí),停止位已進(jìn)入RB8RB8),),圖圖7-97-9則收到的數(shù)據(jù)裝入則收到的數(shù)據(jù)裝入SBUFSBUF和和RB8RB8(RB8RB8裝入停止位),且置裝入停止位),且置

18、“1”“1”中中斷標(biāo)志斷標(biāo)志RIRI。若這兩個(gè)條件不同時(shí)滿(mǎn)足,收到的數(shù)據(jù)將丟失。若這兩個(gè)條件不同時(shí)滿(mǎn)足,收到的數(shù)據(jù)將丟失。7.2.3 7.2.3 方式方式2 29 9位位異步通信接口。異步通信接口。每幀數(shù)據(jù)均為每幀數(shù)據(jù)均為1111位位,1 1位起始位位起始位0 0,8 8位數(shù)據(jù)位數(shù)據(jù)位(先低位),位(先低位),1 1位可程控的第位可程控的第9 9位數(shù)據(jù)和位數(shù)據(jù)和1 1位停止位。幀格位停止位。幀格式如式如圖圖7-107-10。 方式方式2 2波特率波特率= = (2 2SMODSMOD/64/64)foscfosc 圖圖7-107-101 1方式方式2 2發(fā)送發(fā)送發(fā)送前,先根據(jù)通訊協(xié)議由發(fā)送前,

19、先根據(jù)通訊協(xié)議由軟件設(shè)置軟件設(shè)置TB8TB8(例如,雙機(jī)通訊時(shí)的例如,雙機(jī)通訊時(shí)的奇偶校驗(yàn)位或多機(jī)通訊時(shí)的地址奇偶校驗(yàn)位或多機(jī)通訊時(shí)的地址/ /數(shù)據(jù)的標(biāo)志位)。數(shù)據(jù)的標(biāo)志位)。方式方式2 2發(fā)送數(shù)據(jù)波形如發(fā)送數(shù)據(jù)波形如圖圖7-117-11所示。所示。 圖圖7-117-11例例7-17-1 方式方式2 2發(fā)送在雙機(jī)通信中的應(yīng)用。發(fā)送在雙機(jī)通信中的應(yīng)用。下面的下面的發(fā)送發(fā)送中斷服務(wù)程序,是在雙機(jī)通信中,以中斷服務(wù)程序,是在雙機(jī)通信中,以TB8TB8作為奇偶作為奇偶校驗(yàn)位,處理方法為數(shù)據(jù)寫(xiě)入校驗(yàn)位,處理方法為數(shù)據(jù)寫(xiě)入SBUFSBUF之前,先將數(shù)據(jù)的奇偶校之前,先將數(shù)據(jù)的奇偶校驗(yàn)位寫(xiě)入驗(yàn)位寫(xiě)入TB8T

20、B8,以以保證采用偶校驗(yàn)發(fā)送保證采用偶校驗(yàn)發(fā)送。 PIPTIPIPTI: PUSH PSW PUSH PSW ;現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)保護(hù) PUSH AccPUSH Acc SETB RS1 SETB RS1 ;選擇第選擇第2 2組工作寄存器區(qū)組工作寄存器區(qū) CLR RS0CLR RS0 CLR TI CLR TI ;發(fā)送中斷標(biāo)志清發(fā)送中斷標(biāo)志清“0”“0” MOV AMOV A,R0R0;取數(shù)據(jù)取數(shù)據(jù) MOV C,P MOV C,P ;校驗(yàn)位送校驗(yàn)位送TB8,TB8,采用偶校驗(yàn)采用偶校驗(yàn) MOV TB8MOV TB8,C C MOV SBUFMOV SBUF,A A ;啟動(dòng)發(fā)送啟動(dòng)發(fā)送 INC R0

21、INC R0 ;數(shù)據(jù)指針加數(shù)據(jù)指針加1 1 POP Acc POP Acc ;恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng) POP PSW POP PSW RETI RETI ;中斷返回中斷返回2 2方式方式2 2接收接收 SM0SM0、SM1SM1=10=10,且且REN=1REN=1。數(shù)據(jù)由。數(shù)據(jù)由RXDRXD端輸入,接收端輸入,接收1111位信息。當(dāng)位信息。當(dāng)位檢測(cè)到位檢測(cè)到RXDRXD從從1 1到到0 0的負(fù)跳變,并判斷起始位有效后,開(kāi)始收的負(fù)跳變,并判斷起始位有效后,開(kāi)始收一幀信息。在接收器完第一幀信息。在接收器完第9 9位數(shù)據(jù)后,位數(shù)據(jù)后,需滿(mǎn)足兩個(gè)條件需滿(mǎn)足兩個(gè)條件,才能,才能將接收到的數(shù)據(jù)送入將接收到的數(shù)

22、據(jù)送入SBUFSBUF。(1 1)RI=0RI=0,意味著接收緩沖器為空。意味著接收緩沖器為空。(2 2)SM2=0SM2=0或或接收到的第接收到的第9 9位數(shù)據(jù)位位數(shù)據(jù)位RB8=1RB8=1時(shí)時(shí)。當(dāng)上述兩個(gè)條件滿(mǎn)足時(shí),接收到的數(shù)據(jù)送入當(dāng)上述兩個(gè)條件滿(mǎn)足時(shí),接收到的數(shù)據(jù)送入SBUFSBUF(接收緩沖接收緩沖器),器),第第9 9位數(shù)據(jù)送入位數(shù)據(jù)送入RB8RB8,并置并置“1”“1”RIRI。若不滿(mǎn)足兩個(gè)條若不滿(mǎn)足兩個(gè)條件,接收的信息將被丟棄。件,接收的信息將被丟棄。方式方式2 2接收數(shù)據(jù)的時(shí)序如接收數(shù)據(jù)的時(shí)序如圖圖7-127-12所示。所示。 例例7-27-2 方式方式2 2接收在雙機(jī)通信中的

23、應(yīng)用。接收在雙機(jī)通信中的應(yīng)用。圖圖7-127-12本例與上例相對(duì)應(yīng)。若第本例與上例相對(duì)應(yīng)。若第9 9位數(shù)據(jù)為校驗(yàn)位,在接收程序中作位數(shù)據(jù)為校驗(yàn)位,在接收程序中作偶偶校驗(yàn)校驗(yàn)處理,設(shè)處理,設(shè)1 1組寄存器區(qū)的組寄存器區(qū)的R0R0為數(shù)據(jù)緩沖器指針。為數(shù)據(jù)緩沖器指針。 PIRI: PIRI: PUSH PSWPUSH PSW PUSH AccPUSH AccSETB RS0 SETB RS0 ;選擇選擇1 1組寄存器區(qū)組寄存器區(qū)CLR RS1CLR RS1CLR RI CLR RI MOV A,SBUF MOV A,SBUF ;收到數(shù)據(jù)送收到數(shù)據(jù)送A AMOV C,PMOV C,PJNC L1JNC

24、 L1;C C0 0。跳。跳L1L1JNB RB8,ERP JNB RB8,ERP ;ERPERP為出錯(cuò)處理程序?yàn)槌鲥e(cuò)處理程序 AJMP L2AJMP L2 L1: L1: JB RB8,ERPJB RB8,ERP;RB8RB81 1,跳,跳ERPERP L2: L2: MOV R0,AMOV R0,A INC R0INC R0 POP AccPOP Acc POP PSWPOP PSW ERP:ERP: ;出錯(cuò)處理程序段出錯(cuò)處理程序段 RETIRETI7.2.4 7.2.4 方式方式3 3SM0SM0、SM1SM1=11=11,串口為方式,串口為方式3 3。波特率可變的波特率可變的9 9位異

25、步通訊方式,位異步通訊方式,除波特率外,方式除波特率外,方式3 3和方式和方式2 2相相同。同。方式方式3 3的時(shí)序見(jiàn)方式的時(shí)序見(jiàn)方式2 2。 方式方式3 3波特率波特率= =(2 2SMODSMOD/32/32)定時(shí)器定時(shí)器T1T1的溢出率的溢出率7.3 7.3 多機(jī)通信的工作原理多機(jī)通信的工作原理 要要保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠地通信保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠地通信,必須保證串口具,必須保證串口具有識(shí)別功能。有識(shí)別功能。SCONSCON中的中的SM2SM2位位就是滿(mǎn)足這一條件而設(shè)置的就是滿(mǎn)足這一條件而設(shè)置的多機(jī)通信控制位。多機(jī)通信控制位。原理:原理:在串行口以方式在串行口以方式2

26、2(或方式(或方式3 3)接收時(shí),)接收時(shí),若若SM2=1SM2=1,表示置表示置多機(jī)通信功能位,這時(shí)有兩種可能:多機(jī)通信功能位,這時(shí)有兩種可能: (1 1)接收到的第接收到的第9 9位數(shù)據(jù)為位數(shù)據(jù)為1 1時(shí)時(shí),數(shù)據(jù)才裝入,數(shù)據(jù)才裝入SBUFSBUF,并并置中置中斷標(biāo)志斷標(biāo)志RI=1RI=1向向CPUCPU發(fā)出中斷請(qǐng)求;發(fā)出中斷請(qǐng)求; (2 2)接收到的)接收到的第第9 9位數(shù)據(jù)為位數(shù)據(jù)為0 0時(shí)時(shí),則,則不產(chǎn)生中斷標(biāo)志不產(chǎn)生中斷標(biāo)志,信息信息將拋棄將拋棄。若若SM2=0SM2=0,則則接收的第接收的第9 9位數(shù)據(jù)不論是位數(shù)據(jù)不論是0 0還是還是1 1,都產(chǎn)生,都產(chǎn)生RI=1RI=1中斷中斷標(biāo)

27、志,接收到的數(shù)據(jù)裝入標(biāo)志,接收到的數(shù)據(jù)裝入SBUFSBUF中。中。上述特性,便可實(shí)現(xiàn)上述特性,便可實(shí)現(xiàn)AT89C51AT89C51的多機(jī)通信。的多機(jī)通信。設(shè)多機(jī)系統(tǒng)中有一主機(jī)和設(shè)多機(jī)系統(tǒng)中有一主機(jī)和3 3個(gè)個(gè)80318031從機(jī),從機(jī),如如圖圖7-137-13。主機(jī)主機(jī)的的RXDRXD與與從機(jī)從機(jī)的的TXDTXD相連,相連,主機(jī)主機(jī)TXDTXD與與從機(jī)從機(jī)的的RXDRXD端相連。從機(jī)地址端相連。從機(jī)地址分別為分別為0000H H、01H01H、02H02H。 圖圖7-137-13多機(jī)通信工作過(guò)程:多機(jī)通信工作過(guò)程:(1 1)從機(jī)串行口)從機(jī)串行口編程為方式編程為方式2 2或方式或方式3 3接收

28、接收,且,且置置“1”“1”SM2SM2和和RENREN位位,使從機(jī)只處于多機(jī)通訊且接收地址幀的狀態(tài)。,使從機(jī)只處于多機(jī)通訊且接收地址幀的狀態(tài)。(2 2)主機(jī))主機(jī)先將從機(jī)地址先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)給各從發(fā)給各從機(jī)機(jī), , 主機(jī)發(fā)出的主機(jī)發(fā)出的地址信息地址信息的第的第9 9位為位為1 1,各從機(jī)接收到的第各從機(jī)接收到的第9 9位信息位信息RB8RB8為為1 1,且,且由于由于SM2=1SM2=1,則置則置“1” “1” RIRI,各從機(jī)響應(yīng)中斷,執(zhí)行中斷程序。在中斷服務(wù)子程序中,各從機(jī)響應(yīng)中斷,執(zhí)行中斷程序。在中斷服務(wù)子程序中,判主機(jī)送來(lái)的地址是否和本機(jī)

29、地址相符合判主機(jī)送來(lái)的地址是否和本機(jī)地址相符合,相符則該從機(jī)相符則該從機(jī)清清“0”“0”SM2SM2位位,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若不符,則保持不符,則保持SM2=1SM2=1狀態(tài)狀態(tài)。(3 3)接著主機(jī)發(fā)送數(shù)據(jù)幀接著主機(jī)發(fā)送數(shù)據(jù)幀,此時(shí)各從機(jī)串行口接收到,此時(shí)各從機(jī)串行口接收到 的的RB8=0RB8=0,只有地址相符合的從機(jī)系統(tǒng)(即只有地址相符合的從機(jī)系統(tǒng)(即已清已清“0”“0”SM2SM2位位的的從機(jī))從機(jī))才能激活才能激活RIRI,從而進(jìn)入中斷,在中斷程序中接收主機(jī)從而進(jìn)入中斷,在中斷程序中接收主機(jī)的數(shù)據(jù)(或命令);的數(shù)據(jù)(或命令); 其它的從機(jī)因其它的從

30、機(jī)因SM2SM21 1,又,又RB8=0RB8=0不激活中斷標(biāo)志不激活中斷標(biāo)志RIRI,不能進(jìn)入不能進(jìn)入中斷,接收的數(shù)據(jù)丟失。中斷,接收的數(shù)據(jù)丟失。圖圖7-137-13所示的多機(jī)系統(tǒng)是主從式,由主機(jī)控制多機(jī)之間的通信,所示的多機(jī)系統(tǒng)是主從式,由主機(jī)控制多機(jī)之間的通信,從機(jī)和從機(jī)的通訊只能經(jīng)主機(jī)才能實(shí)現(xiàn)從機(jī)和從機(jī)的通訊只能經(jīng)主機(jī)才能實(shí)現(xiàn)。7.4 7.4 波特率的制定方法波特率的制定方法方式方式0 0、方式、方式2 2的波特率是的波特率是固定固定的;的;方式方式1 1、方式、方式3 3波特率由波特率由定時(shí)定時(shí)器器T1T1的溢出率的溢出率來(lái)確定。來(lái)確定。7.4.1 7.4.1 波特率的定義波特率的定

31、義波特率的波特率的定義定義。對(duì)于定時(shí)器的不同工作方式,得到的波特率的范圍是不一樣的對(duì)于定時(shí)器的不同工作方式,得到的波特率的范圍是不一樣的 7.4.2 7.4.2 定時(shí)器定時(shí)器T1T1產(chǎn)生波特率的計(jì)算產(chǎn)生波特率的計(jì)算(1 1)方式方式0 0波特率波特率= =時(shí)鐘頻率時(shí)鐘頻率foscfosc1/121/12,不受,不受SMODSMOD位的值的影位的值的影響。若響。若fosc=12MHzfosc=12MHz,波特率為波特率為fosc/12fosc/12即即1 1Mb/sMb/s。(2 2)方式方式2 2波特率波特率= =(2 2SMODSMOD/64/64)foscfosc 若若fosc=12MHz

32、fosc=12MHz: : SMOD=0 SMOD=0 波特率波特率=187.5=187.5kb/skb/s; SMOD=1SMOD=1 波特率波特率=375=375kb/skb/s (3 3)方式方式1 1或或方式方式3 3時(shí),波特率為:時(shí),波特率為:波特率波特率= =(2 2SMODSMOD/64/64)T1T1的溢出率的溢出率實(shí)際設(shè)定波特率時(shí),實(shí)際設(shè)定波特率時(shí),T1T1常設(shè)置為常設(shè)置為方式方式2 2定時(shí)定時(shí)(自動(dòng)裝初值)(自動(dòng)裝初值)這種這種方式不僅操作方便,也可避免因軟件重裝初值而帶來(lái)的方式不僅操作方便,也可避免因軟件重裝初值而帶來(lái)的定時(shí)定時(shí)誤差誤差。實(shí)際使用時(shí),為避免煩雜的初值計(jì)算,

33、實(shí)際使用時(shí),為避免煩雜的初值計(jì)算,常用的波特率和初值常用的波特率和初值X X間間的關(guān)系列成的關(guān)系列成表表7-27-2(P124P124),以供查用。以供查用。表表7-27-2有兩點(diǎn)需要注意:有兩點(diǎn)需要注意:時(shí)鐘振蕩頻率為時(shí)鐘振蕩頻率為1212MHzMHz或或6 6MHzMHz時(shí),表中初值時(shí),表中初值X X和相應(yīng)的波和相應(yīng)的波特率之間有一定誤差特率之間有一定誤差。例如,例如,F(xiàn)DHFDH的對(duì)應(yīng)的理論值是的對(duì)應(yīng)的理論值是1041610416波特(時(shí)鐘波特(時(shí)鐘6 6MHzMHz)。)。與與96009600波特相差波特相差816816波特,消除誤差可以調(diào)整時(shí)鐘振蕩頻波特,消除誤差可以調(diào)整時(shí)鐘振蕩頻率

34、率foscfosc實(shí)現(xiàn)。例如采用的時(shí)鐘振蕩頻率為實(shí)現(xiàn)。例如采用的時(shí)鐘振蕩頻率為11.059211.0592MHzMHz。(2) (2) 如果串行通訊選用很低的波特率如果串行通訊選用很低的波特率,例如,波特率選為,例如,波特率選為5555,可將可將T1T1設(shè)置為方式設(shè)置為方式1 1定時(shí)。但在定時(shí)。但在T1T1溢出時(shí),需用在中斷服務(wù)溢出時(shí),需用在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波程序中重新裝入初值。中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。例例7-37-3 若若80318031單片機(jī)的時(shí)

35、鐘振蕩頻率為單片機(jī)的時(shí)鐘振蕩頻率為11.059211.0592MHzMHz,選用選用T1T1為為方式方式2 2定時(shí)定時(shí)作為波特率發(fā)生器,波特率為作為波特率發(fā)生器,波特率為24002400b/sb/s,求初值。求初值。 上述結(jié)果可直接從上述結(jié)果可直接從表表7-27-2中查到。中查到。這里時(shí)鐘振蕩頻率選為這里時(shí)鐘振蕩頻率選為11.0592 11.0592 MHzMHz,就可使初值為整數(shù),從而就可使初值為整數(shù),從而產(chǎn)生精確的波特率。產(chǎn)生精確的波特率。7.5 7.5 串行口的編程和應(yīng)用串行口的編程和應(yīng)用 介紹介紹AT89C51AT89C51之間的雙機(jī)串行通信的硬件接口和軟件設(shè)計(jì)。之間的雙機(jī)串行通信的硬

36、件接口和軟件設(shè)計(jì)。 7.5.1 7.5.1 雙機(jī)串行通信硬件接口雙機(jī)串行通信硬件接口A(yíng)T89C51AT89C51串行口串行口以以TTLTTL電平電平串行傳輸串行傳輸,抗干擾性差,傳輸距離短。抗干擾性差,傳輸距離短。為了為了提高串行通信的可靠性,增大串行通信的距離提高串行通信的可靠性,增大串行通信的距離,一般都采,一般都采用標(biāo)準(zhǔn)串行接口,如用標(biāo)準(zhǔn)串行接口,如RS-232RS-232、RS-422ARS-422A、RS-485RS-485等來(lái)實(shí)現(xiàn)串等來(lái)實(shí)現(xiàn)串行通信。行通信。根據(jù)根據(jù)AT89C51AT89C51的雙機(jī)通信距離和抗干擾性的要求,可選擇的雙機(jī)通信距離和抗干擾性的要求,可選擇TTLTTL電

37、電平傳輸,或選擇平傳輸,或選擇RS-232CRS-232C、RS-422ARS-422A、RS485RS485串行接口進(jìn)行串串行接口進(jìn)行串行數(shù)據(jù)傳輸。行數(shù)據(jù)傳輸。1 1TTLTTL電平通信接口電平通信接口如果兩個(gè)如果兩個(gè)89C5189C51單片機(jī)相距在單片機(jī)相距在幾米之內(nèi)幾米之內(nèi),它們的串行口可直接,它們的串行口可直接相連,從而直接用相連,從而直接用TTLTTL電平傳輸方法來(lái)實(shí)現(xiàn)雙機(jī)通信,接口電平傳輸方法來(lái)實(shí)現(xiàn)雙機(jī)通信,接口電路如電路如圖圖7-147-14所示。所示。圖圖7-147-142 2RS-232CRS-232C雙機(jī)通信接口雙機(jī)通信接口如果雙機(jī)通信距離在如果雙機(jī)通信距離在30m30m之

38、內(nèi),可利用之內(nèi),可利用RS-232CRS-232C標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信,接口電路如對(duì)點(diǎn)的雙機(jī)通信,接口電路如圖圖7-157-15所示。所示。圖圖7-157-15中的中的MAX232AMAX232A是美國(guó)是美國(guó)MAXIMMAXIM公司公司生產(chǎn)的生產(chǎn)的RS-232CRS-232C雙工發(fā)送雙工發(fā)送器器/ /接收器電路芯片接收器電路芯片。圖圖7-157-153 3RS-422ARS-422A雙機(jī)通信接口雙機(jī)通信接口為了增加通信距離,可以在通信線(xiàn)路上采用光電隔離方法,為了增加通信距離,可以在通信線(xiàn)路上采用光電隔離方法,利用利用RS-422ARS-422A標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信,最大傳輸距

39、離標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信,最大傳輸距離可達(dá)可達(dá)1000m1000m左右,接口電路如左右,接口電路如圖圖7-167-16。圖圖7-167-16中的中的SN75174SN75174、SN75175SN75175是是TTLTTL電平到電平到RS-232RS-232電平與電平與RS-RS-232232電平到電平到TTLTTL電平的電平轉(zhuǎn)換芯片。電平的電平轉(zhuǎn)換芯片。圖圖7-167-164 4RS-485RS-485雙機(jī)通信接口雙機(jī)通信接口RS-422ARS-422A雙機(jī)通信需四芯傳輸線(xiàn),對(duì)長(zhǎng)距離通信很不經(jīng)濟(jì),故雙機(jī)通信需四芯傳輸線(xiàn),對(duì)長(zhǎng)距離通信很不經(jīng)濟(jì),故通常采用通常采用雙絞線(xiàn)傳輸雙絞線(xiàn)傳輸?shù)牡腞S-485R

40、S-485串行通信接口,它很容易實(shí)串行通信接口,它很容易實(shí)現(xiàn)現(xiàn)多機(jī)通信多機(jī)通信。圖圖7-177-17給出了其給出了其RS-485RS-485雙機(jī)通信接口電路,雙機(jī)通信接口電路,最大傳輸距離可達(dá)最大傳輸距離可達(dá)1000m1000m左右。左右。圖圖7-177-177.5.2 7.5.2 雙機(jī)串行通信軟件編程雙機(jī)串行通信軟件編程串行口的的串行口的的方式方式0 0是移位寄存器工作方式,主要用于擴(kuò)展并行是移位寄存器工作方式,主要用于擴(kuò)展并行I/OI/O用,并不用于串行通信。用,并不用于串行通信。串行口的串行口的方式方式1 13 3是用于串行通信的,下面介紹雙機(jī)串行通是用于串行通信的,下面介紹雙機(jī)串行通信

41、軟件編程。軟件編程實(shí)際上與上面介紹的各種串行標(biāo)準(zhǔn)信軟件編程。軟件編程實(shí)際上與上面介紹的各種串行標(biāo)準(zhǔn)的硬件接口電路無(wú)關(guān)。的硬件接口電路無(wú)關(guān)。1 1串行口方式串行口方式1 1應(yīng)用編程應(yīng)用編程例例7-47-4 用用方式方式1 1雙機(jī)串行通信,收、發(fā)雙方均采用雙機(jī)串行通信,收、發(fā)雙方均采用6MHz6MHz晶振,晶振,波特率為波特率為2400b/s2400b/s,每一幀信息為,每一幀信息為1010位,第位,第0 0位為起始位,位為起始位,第第1 18 8位為數(shù)據(jù)位,最后位為數(shù)據(jù)位,最后1 1位為停止位。發(fā)送方把以位為停止位。發(fā)送方把以78H78H、77H77H單元的內(nèi)容為首地址,以單元的內(nèi)容為首地址,以

42、76H76H、75H75H單元內(nèi)容減單元內(nèi)容減1 1為末地址的數(shù)據(jù)塊通過(guò)串行口發(fā)送給接收方。為末地址的數(shù)據(jù)塊通過(guò)串行口發(fā)送給接收方。發(fā)送方發(fā)送方要發(fā)送的數(shù)據(jù)塊的地址為要發(fā)送的數(shù)據(jù)塊的地址為2000H2000H201FH201FH。發(fā)送時(shí)先發(fā)送。發(fā)送時(shí)先發(fā)送地址幀,再發(fā)送數(shù)據(jù)幀;地址幀,再發(fā)送數(shù)據(jù)幀;接收方接收方在接收時(shí)使用一個(gè)標(biāo)志位來(lái)區(qū)分接收的是地址還是數(shù)據(jù),在接收時(shí)使用一個(gè)標(biāo)志位來(lái)區(qū)分接收的是地址還是數(shù)據(jù),然后將其分別存放到指定的單元中。然后將其分別存放到指定的單元中。發(fā)送方可采用查詢(xún)方式或中斷方式發(fā)送數(shù)據(jù),接收方可采用中發(fā)送方可采用查詢(xún)方式或中斷方式發(fā)送數(shù)據(jù),接收方可采用中斷或查詢(xún)方式接收

43、。下面僅介紹采用斷或查詢(xún)方式接收。下面僅介紹采用中斷方式中斷方式發(fā)送、接收的發(fā)送、接收的程序。程序。(1 1)甲機(jī)發(fā)送程序)甲機(jī)發(fā)送程序 中斷方式的發(fā)送程序如下:中斷方式的發(fā)送程序如下:ORG ORG 0000H0000H LJMP LJMP MAINMAIN ORG ORG 0023H0023H LJMP LJMP COM_INTCOM_INT ORG ORG 1000H1000HMAIN:MAIN:MOV MOV P,#53HP,#53H; ;設(shè)置堆棧指針設(shè)置堆棧指針MOV MOV 78H,#20H78H,#20H; ;設(shè)置要發(fā)送的數(shù)據(jù)塊的設(shè)置要發(fā)送的數(shù)據(jù)塊的; ;首、末地址首、末地址 M

44、OV MOV 77H,#00H77H,#00H MOV MOV 76H,#20H76H,#20H MOV MOV 75H,#40H75H,#40H ACALL TRANSACALL TRANS; ;調(diào)用發(fā)送子程序調(diào)用發(fā)送子程序HERE:HERE:SJMP SJMP HEREHERETRANS:TRANS:MOV MOV TMOD,#20H TMOD,#20H ; ;設(shè)置定時(shí)器工作方式設(shè)置定時(shí)器工作方式 MOV MOV TH1,#0F3HTH1,#0F3H; ;設(shè)置計(jì)數(shù)器初值設(shè)置計(jì)數(shù)器初值 MOV MOV TL1,#0F3HTL1,#0F3H MOV MOV PCON,#80HPCON,#80H

45、; ;波特率加倍波特率加倍 SETB SETB TR1TR1; ;接通計(jì)數(shù)器計(jì)數(shù)接通計(jì)數(shù)器計(jì)數(shù) MOV MOV SCON,#40HSCON,#40H; ;設(shè)置串行口工作方式設(shè)置串行口工作方式 MOV MOV IE,#00HIE,#00H; ;先關(guān)閉中斷先關(guān)閉中斷, , 利用查詢(xún)方利用查詢(xún)方 ; ;式發(fā)送地址幀式發(fā)送地址幀 CLR CLR F0F0 MOV MOV SBUF,78HSBUF,78H; ;發(fā)送首地址高發(fā)送首地址高8 8位位WAIT1:WAIT1:JNB JNB TI,WAIT1TI,WAIT1 CLR CLR TITI MOV MOV SBUF,77HSBUF,77H; ;發(fā)送首地

46、址低發(fā)送首地址低8 8位位WAIT2:WAIT2:JNB JNB TI,WAIT2TI,WAIT2 CLR CLR TITIMOV MOV SBUF,76HSBUF,76H; ;發(fā)送末地址高發(fā)送末地址高8 8位位WAIT3:WAIT3:JNB JNB TI,WAIT3TI,WAIT3 CLR CLR TITI MOV MOV SBUF,75HSBUF,75H; ;發(fā)送末地址低發(fā)送末地址低8 8位位WAIT4:WAIT4:JNB JNB TI,WAIT4TI,WAIT4 CLR CLR TITI MOV MOV IE,#90HIE,#90H; ;打開(kāi)中斷允許寄存器打開(kāi)中斷允許寄存器, , 采采;

47、 ;用中斷方式發(fā)送數(shù)據(jù)用中斷方式發(fā)送數(shù)據(jù) MOV MOV DPH,78HDPH,78H MOV MOV DPL,77HDPL,77H MOVX MOVX A,DPTRA,DPTR MOV MOV SBUF,ASBUF,A; ;發(fā)送首個(gè)數(shù)據(jù)發(fā)送首個(gè)數(shù)據(jù)WAIT:WAIT:JNB JNB F0,WAITF0,WAIT; ;發(fā)送等待發(fā)送等待 RETRETCOM_INT:COM_INT:CLR CLR TITI; ;關(guān)發(fā)送中斷標(biāo)志位關(guān)發(fā)送中斷標(biāo)志位TITI INC INC DPTRDPTR; ;數(shù)據(jù)指針加數(shù)據(jù)指針加1, 1, 準(zhǔn)備發(fā)送下個(gè)數(shù)據(jù)準(zhǔn)備發(fā)送下個(gè)數(shù)據(jù) MOV MOV A,DPHA,DPH ;

48、;判斷當(dāng)前被發(fā)送的數(shù)據(jù)的地址是判斷當(dāng)前被發(fā)送的數(shù)據(jù)的地址是; ;不是末地址不是末地址 CJNE CJNE A,76H,END1A,76H,END1; ;不是末地址則跳轉(zhuǎn)不是末地址則跳轉(zhuǎn) MOVMOVA,DPLA,DPL; ;同上同上 CJNE CJNE A,75H,END1A,75H,END1 SETB SETB F0F0; ;數(shù)據(jù)發(fā)送完畢數(shù)據(jù)發(fā)送完畢, , 置置1 1標(biāo)志位標(biāo)志位 CLR CLR ES ES ; ;關(guān)串行口中斷關(guān)串行口中斷 CLR CLR EAEA; ;關(guān)中斷關(guān)中斷 RETRET; ;中斷返回中斷返回END1: END1: MOVX MOVX A,DPTRA,DPTR; ;將

49、要發(fā)送的數(shù)據(jù)送累加器將要發(fā)送的數(shù)據(jù)送累加器, , ; ;準(zhǔn)備發(fā)送準(zhǔn)備發(fā)送 MOV MOV SBUF,ASBUF,A; ;發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù) RETIRETI; ;中斷返回中斷返回 ENDEND(2 2)乙機(jī)接收程序)乙機(jī)接收程序 中斷方式的接收程序如下:中斷方式的接收程序如下:ORG ORG 0000H0000HLJMPLJMPMAINMAINORG ORG 0023H0023HLJMP LJMP COM_INTCOM_INTORG ORG 1000H1000HMAIN: MOV MAIN: MOV SP,#53HSP,#53H; ;設(shè)置堆棧指針設(shè)置堆棧指針ACALL RECEIACALL RE

50、CEI; ;調(diào)用接收子程序調(diào)用接收子程序HERE:HERE: SJMP SJMP HEREHERERECEI: MOV RECEI: MOV R0,#78HR0,#78H; ;設(shè)置地址接收區(qū)設(shè)置地址接收區(qū)MOV MOV TMOD,#20HTMOD,#20H; ;設(shè)置定時(shí)器設(shè)置定時(shí)器/ /計(jì)數(shù)器工作方式計(jì)數(shù)器工作方式 MOV MOV TH1,#0F3HTH1,#0F3H; ;設(shè)置波特率設(shè)置波特率MOV MOV TL1,#0F3HTL1,#0F3HMOV MOV PCON,#80HPCON,#80H; ;波特率加倍波特率加倍SETB SETB TR1TR1; ;開(kāi)計(jì)數(shù)器開(kāi)計(jì)數(shù)器MOV MOV SC

51、ON,#50HSCON,#50H; ;設(shè)置串行口工作方式設(shè)置串行口工作方式MOV MOV IE,#90HIE,#90H; ;開(kāi)中斷開(kāi)中斷CLR CLR F0F0; ;標(biāo)志位清標(biāo)志位清“0”0”CLR CLR 7FH7FHWAIT:WAIT:JNB JNB 7F,WAIT7F,WAIT; ;查詢(xún)標(biāo)志位等待接收查詢(xún)標(biāo)志位等待接收RETRETCOM_INT:COM_INT:PUSH PUSH DPLDPL; ;壓棧壓棧, , 保護(hù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)PUSH PUSH DPHDPHPUSH PUSH AccAccCLR CLR RIRI; ;接收中斷標(biāo)志位清接收中斷標(biāo)志位清“0”0”JB JB F0,R_D

52、ATAF0,R_DATA; ;判斷接收的是數(shù)據(jù)還是地判斷接收的是數(shù)據(jù)還是地; ;址址, F0, F0 = = 0 0為地址為地址MOV MOV A,SBUFA,SBUF; ;接收數(shù)據(jù)接收數(shù)據(jù)MOV MOV R0,AR0,A; ;將地址幀送指定的寄存器將地址幀送指定的寄存器DEC DEC R0R0CJNE CJNE R0,#74H,RETNR0,#74H,RETNSETB SETB F0F0; ;置標(biāo)志位置標(biāo)志位, , 地址接收完畢地址接收完畢RETN: RETN: POP POP AccAcc; ;出棧出棧, , 恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)POP POP DPHDPHPOP POP DPLDPLRETI

53、RETI; ;中斷返回中斷返回R_DATA:R_DATA:MOV MOV DPH,78HDPH,78H; ;數(shù)據(jù)接收程序區(qū)數(shù)據(jù)接收程序區(qū)MOV MOV DPL, 77HDPL, 77HMOV MOV A,SBUFA,SBUF; ;接收數(shù)據(jù)接收數(shù)據(jù)MOVX MOVX DPTR,ADPTR,A; ;送指定的數(shù)據(jù)存儲(chǔ)單元中送指定的數(shù)據(jù)存儲(chǔ)單元中INC INC 77H77H; ;地址加地址加1 1MOV MOV A,77HA,77H; ;判斷當(dāng)前接收的數(shù)據(jù)的地址是否判斷當(dāng)前接收的數(shù)據(jù)的地址是否; ; 應(yīng)向高應(yīng)向高8 8位進(jìn)位位進(jìn)位JNZ JNZ END2END2; ; INC INC 78H78HEN

54、D2: MOV END2: MOV A,76HA,76HCJNE CJNE A,78H,RETNA,78H,RETN; ;判是否為最后一幀數(shù)據(jù)判是否為最后一幀數(shù)據(jù), ,否則繼續(xù)否則繼續(xù)MOV MOV A,75HA,75HCJNE CJNE A,77H,RETNA,77H,RETN; ;是最后一幀數(shù)據(jù)則各種標(biāo)志位是最后一幀數(shù)據(jù)則各種標(biāo)志位; ; 清清“0”0”CLR CLR ESESCLR CLR EAEASETB SETB 7FH7FHSJMP SJMP RETNRETN; ;跳入返回子程序區(qū)跳入返回子程序區(qū)ENDEND2 2串行口方式串行口方式2 2應(yīng)用編程應(yīng)用編程方式方式2 2和方式和方式

55、1 1有有兩點(diǎn)不同之處兩點(diǎn)不同之處。一個(gè)不同點(diǎn):一個(gè)不同點(diǎn):方式方式2 2接收接收/ /發(fā)送發(fā)送1111位信息,第位信息,第0 0位為起始位,位為起始位,第第1 18 8位為數(shù)據(jù)位,第位為數(shù)據(jù)位,第9 9位是程控位,該位可由用戶(hù)置位是程控位,該位可由用戶(hù)置TB8TB8決定,第決定,第1010位是停止位位是停止位1 1,這是方式,這是方式1 1和方式和方式2 2的。的。另一個(gè)不同點(diǎn):另一個(gè)不同點(diǎn):是方式是方式2 2的波特率變化范圍比方式的波特率變化范圍比方式1 1小,方式小,方式2 2的波特率的波特率= =振蕩器頻率振蕩器頻率/ /n n。當(dāng)當(dāng)SMOD=0SMOD=0時(shí),時(shí),n n=64=64。

56、當(dāng)當(dāng)SMOD=1SMOD=1時(shí),時(shí),n n=32=32。方式方式2 2的使用和方式的使用和方式3 3基本一樣(只是波特率不同),所以方基本一樣(只是波特率不同),所以方式式2 2的具體編程應(yīng)用,可參照方式的具體編程應(yīng)用,可參照方式3 3的應(yīng)用編程。的應(yīng)用編程。 3 3串行口方式串行口方式3 3應(yīng)用編程應(yīng)用編程例例7-57-5 本例為本例為AT89C51AT89C51用方式用方式3 3發(fā)送和接收的應(yīng)用實(shí)例。發(fā)送和接收的應(yīng)用實(shí)例。發(fā)送方發(fā)送方采用查詢(xún)方式發(fā)送地址幀,采用中斷或查詢(xún)方式發(fā)送數(shù)據(jù),采用查詢(xún)方式發(fā)送地址幀,采用中斷或查詢(xún)方式發(fā)送數(shù)據(jù),接收方接收方采用中斷或查詢(xún)方式接收數(shù)據(jù)。發(fā)和接方均采用

57、采用中斷或查詢(xún)方式接收數(shù)據(jù)。發(fā)和接方均采用6MHz6MHz的晶振,的晶振,波特率為波特率為4800b/s4800b/s。發(fā)送方首先將存放在發(fā)送方首先將存放在78H78H和和77H77H單元中的地址發(fā)送給接收方,然單元中的地址發(fā)送給接收方,然后發(fā)送數(shù)據(jù)后發(fā)送數(shù)據(jù)00H00HFFHFFH,共,共256256個(gè)數(shù)據(jù)。個(gè)數(shù)據(jù)。(1 1)甲機(jī)發(fā)送程序)甲機(jī)發(fā)送程序ORG ORG 0000H0000H LJMP LJMP MAINMAINORG ORG 0023H0023H LJMP LJMP COM_INTCOM_INTORG ORG 1000H1000HMAIN:MAIN: MOV MOV SP,#5

58、3HSP,#53H; ;設(shè)置堆棧指針設(shè)置堆棧指針MOV MOV 78H,#20H78H,#20H; ;設(shè)置要存放數(shù)據(jù)的單元的首地址設(shè)置要存放數(shù)據(jù)的單元的首地址MOV MOV 77H,#00H77H,#00HACALL TRANACALL TRAN; ;調(diào)用發(fā)送子程序調(diào)用發(fā)送子程序HERE:HERE: SJMP SJMP HEREHERETRANS:TRANS:MOV MOV TMOD,#20HTMOD,#20H; ;設(shè)置定時(shí)器設(shè)置定時(shí)器/ /計(jì)數(shù)器工作方式計(jì)數(shù)器工作方式 MOV MOV TH1,#0FDHTH1,#0FDH; ;設(shè)置波特率為設(shè)置波特率為48004800 MOV MOV TL1,#0FDHTL1,#0FDHSETB SETB TR1TR1; ;開(kāi)定時(shí)器開(kāi)定時(shí)器MOV MOV SCON,#0E0HSCON,#0E0H; ;設(shè)置串行口工作方式為方式設(shè)置串行口工作方式為方式3 3SETB SETB TB8TB8; ;設(shè)置第設(shè)置第9 9位數(shù)據(jù)位位數(shù)據(jù)位MOV MOV IE,#00HIE,#00H; ;關(guān)中斷關(guān)中斷MOV MOV SBUF,78HSBUF,78H; ;查詢(xún)方式發(fā)送首地址高查詢(xún)方式發(fā)送首地址高8 8位位WAIT:WAIT: JNB JNB TI,WAITTI,WAITCLR CLR

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論