第十八章MCS51串行通信_(tái)第1頁
第十八章MCS51串行通信_(tái)第2頁
第十八章MCS51串行通信_(tái)第3頁
第十八章MCS51串行通信_(tái)第4頁
第十八章MCS51串行通信_(tái)第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第十八章

MCS-51的串行通信1MCS-51串行口結(jié)構(gòu)

發(fā)送電路由“SBUF(發(fā)送)”、“零檢測(cè)器”和“發(fā)送控制器”等電路組成,用于串行口的發(fā)送;

接收電路由“SBUF(接收)”、“接收移位寄存器”和“接收控制器”等組成,用于串行口的接收。

SBUF(發(fā)送)和SBUF(接收)8位緩沖寄存器共用一個(gè)端口地址99HSBUF(發(fā)送)存放將要發(fā)送的字符數(shù)據(jù)SBUF(接收)存放串行口接收到的字符數(shù)據(jù)MOVSBUF,A(發(fā)送)產(chǎn)生寫SBUF脈沖MOVA,SBUF(接收)產(chǎn)生讀SBUF脈沖

發(fā)送和接收都是在發(fā)送時(shí)鐘和接收時(shí)鐘控制下進(jìn)行的,發(fā)送時(shí)鐘和接收時(shí)鐘都必須同字符位數(shù)的波特率保持一致。主機(jī)頻率fosc經(jīng)過分頻后提供內(nèi)部定時(shí)器T1或T2的溢出率經(jīng)過16分頻后提供

定時(shí)器T1的溢出率受SMOD觸發(fā)器狀態(tài)的控制,SMOD位于電源控制寄存器PCON的最高位串行口的發(fā)送

MOVSBUF,A自動(dòng)在發(fā)送字符前后添加起始位、停止位和其它控制位

“三中取二”決定所檢測(cè)的值是“0”還是“1”

抑制干擾和提高信號(hào)的傳輸可靠性采樣信號(hào)總是在每個(gè)接收位的中間位置,避開信號(hào)兩端的邊沿失真,防止接收時(shí)鐘和發(fā)送時(shí)鐘不完全同步所引起的接收錯(cuò)誤。

接收電路連續(xù)接收到一幀字符后就自動(dòng)的去掉起始位并使RI=1,向CPU提出中斷請(qǐng)求(設(shè)串行口中斷是開放的)。CPU響應(yīng)中斷MOVA,SBUF2.串行口的工作方式控制串行口工作方式的設(shè)置和控制是通過SCON(98H)和PCON(87H)實(shí)現(xiàn)。SM0和SM1:串行口方式控制位,設(shè)定串行口的工作方式

SM2:多機(jī)通信控制位,方式2、3使用。方式0、1不用,應(yīng)設(shè)置為0狀態(tài)。REN:允許接收控制位。REN=0,則禁止串行口接收REN=1,則允許串行口接收TB8:發(fā)送數(shù)據(jù)第9位,方式2、3時(shí)存放發(fā)送數(shù)據(jù)第9位。TB8由軟件置位或復(fù)位。RB8:接收數(shù)據(jù)第9位,方式2、3時(shí)存放接收數(shù)據(jù)第9位。在方式1下,若SM2=0,RB8存放接收到的停止位。方式0下,不使用RB8TI:發(fā)送中斷標(biāo)志位,用于指示一幀數(shù)據(jù)發(fā)送完否?在方式0下,發(fā)送電路發(fā)送完第8位數(shù)據(jù)時(shí),TI由硬件置位;在其它方式下,TI在發(fā)送電路開始發(fā)送停止位時(shí)置位。TI在發(fā)送前必須由軟件復(fù)位,發(fā)送完一幀后由硬件置位的。TI位也可供CPU查詢。RI:為接收中斷標(biāo)志位,用于指示一幀信息是否接收完。在方式0下,RI在接收電路接收到第8位數(shù)據(jù)時(shí)由硬件置位;在其它方式下,RI是在接收電路接收到停止位的中間位置時(shí)置位的。RI也可供CPU查詢,以決定CPU是否需要從“SBUF(接收)”中提取接收到的字符或數(shù)據(jù)。RI也由軟件復(fù)位。發(fā)送(TI=0)MOVSBUF,AA數(shù)據(jù)送入SBUF(發(fā)送)RxD線發(fā)出8位數(shù)據(jù),TxD線發(fā)送同步脈沖。8位數(shù)據(jù)發(fā)送完后,TI由硬件置位,向CPU請(qǐng)求中斷(若中斷開放)。CPU響應(yīng)中斷后先用軟件使TI清零,然后再給“SBUF(發(fā)送)”送下一個(gè)欲發(fā)送字符。工作方式的工作過程及應(yīng)用舉例

①方式0SM2、TB8、RB8不起作用,應(yīng)設(shè)置“0”態(tài)接收(RI=0和REN=1)串行數(shù)據(jù)由RxD線輸入,TxD線輸出同步脈沖。接收電路接收到8位數(shù)據(jù)后,RI自動(dòng)置“1”并發(fā)出串行口中斷請(qǐng)求。CPU查詢到RI=1或響應(yīng)中斷后便可通過MOVA,SBUFSBUF(接收)數(shù)據(jù)送入A。波特率是固定的,;由RxD引腳做數(shù)據(jù)的輸入和輸出;由于信號(hào)的衰減,傳輸距離一般不超過2米。[例1]請(qǐng)編出發(fā)光二極管自左至右以一定速度顯示的程序。設(shè)發(fā)光二極管為共陰極接法。主程序ORG2000HMOVSCON,#00H;串行口初始化為方式0CLRP1.0;禁止CD4094并行輸出MOVA,#80H;起始顯示碼送AMOVSBUF,A;8031串行輸出LOOP:SJMPLOOP;等待串行口輸出完中斷服務(wù)程序ORG0023HLJMPSBV;轉(zhuǎn)SBVORG0100HSBV:SETBP1.0;點(diǎn)亮發(fā)光二極管LCALLDELAY;點(diǎn)亮一段時(shí)間CLRTI;清發(fā)送中斷標(biāo)志RRA;準(zhǔn)備點(diǎn)亮下一位CLRP1.0;滅顯示MOVSBUF,A;串行口輸出RETI;中斷返回DELAY:…;延時(shí)程序END[例2]根據(jù)圖電路,編出MCS-51串行輸入開關(guān)量把它存入20H單元的程序。要求控制開關(guān)KC斷開(KC=1)時(shí),8031處于等待狀態(tài),KC合上(KC=0)時(shí)8031開始輸入和進(jìn)行模擬。

ORG2000HSTART:JBP1.0,$;若KC斷開,則等待SETBP1.1;令CD4014并行輸入開關(guān)量CLRP1.1;CD4014開始串行輸出MOVSCON,#10H;令串行口方式為0,啟動(dòng)接收J(rèn)NBRI,$;等待接收CLRRI;若接收已完,則清RIMOVA,SBUF;開關(guān)量送累加器AMOV20H,A;存入內(nèi)存SJMPSTART;準(zhǔn)備下次開關(guān)量輸入END②方式1雙機(jī)異步通信方式。字符幀格式為10位(8位數(shù)據(jù)位、一位起始位和一位停止位),波特率由定時(shí)器T1的溢出率決定。SMOD:波特率倍增選擇,由PCON寄存器的最高位設(shè)置。SMOD的選擇與波特率誤差有關(guān)。

fosc:51單片機(jī)主時(shí)鐘。一般選6MHz~12MHz。K:定時(shí)器T1的計(jì)數(shù)器長(zhǎng)度,T1若選工作方式2,則K=8。N:定時(shí)器定時(shí)常數(shù)的初值。在方式1下,串行口設(shè)定為10位異步通信方式。8位數(shù)據(jù)位,1位起始位,1停止位。發(fā)送(TI=0)MOVSBUF,A發(fā)送電路自動(dòng)在8位發(fā)送字符前后分別添加1位起始位和停止位,并在移位脈沖的作用下在TxD線上依次發(fā)送一幀信息,發(fā)送完后自動(dòng)維持TxD線為高電平。TI由硬件在發(fā)送停止位時(shí)置位,由軟件將它復(fù)位。接收(RI=0和REN=1)接收電路對(duì)RxD線采樣,連續(xù)8次采樣到RxD線為低電平時(shí),確認(rèn)RxD線上有了起始位。此后,接收電路就改為對(duì)第7、8、9三個(gè)脈沖采樣到的值進(jìn)行位檢測(cè),并以三中取二原則來確定所采樣數(shù)據(jù)的值。在接收到有效停止位時(shí),接收電路必須同時(shí)滿足以下兩個(gè)條件:RI=0和SM2=0,才能把接收到的8位字符存入“SBUF(接收)”中,把停止位送入RB8中,并使RI=1和發(fā)出串行口中斷請(qǐng)求。[例3]請(qǐng)用中斷法編出串行口方式1下的發(fā)送程序。設(shè)單片機(jī)主頻為6MHz,定時(shí)器T1用作波特率發(fā)生器,波特率為2400bps,被發(fā)送字符塊在內(nèi)部RAM的地址為TBLOCK單元,字符塊長(zhǎng)度為L(zhǎng)EN。要求奇校驗(yàn)位在數(shù)據(jù)第8位發(fā)送,字符塊長(zhǎng)度LEN率先發(fā)送。波特率為2400bps,取SMOD=1,由表查得TH1和TL1的時(shí)間常數(shù)初值為F4H。主程序ORG2100HTBLOCKDATA20HLENDATA14HSTART:MOVTMOD,#20H;定時(shí)器T1為方式2MOVTL1,#0F4H;波特率為2400bpsMOVTH1,#0F4H;給TH1送重裝初值MOVPCON,#80H;令SMOD=1SETBTR1;啟動(dòng)T1MOVSCON,#40H;串行口為方式1MOVR0,#TBLOCK;字符塊始址送R0MOVA,#LENMOVR2,A;字符塊長(zhǎng)度字節(jié)送R2MOVSBUF,A;發(fā)送LEN字節(jié)SETBEA;開CPU中斷WAIT:SETBES;允許串行口中斷SJMPWAIT;等待中斷中斷服務(wù)程序ORG0023HLJMPTXSVE;轉(zhuǎn)發(fā)送服務(wù)程序ORG2150HTXSVE:CLRTI;清TIMOVA,@R0;發(fā)送字符送AMOVC,PSW.0;奇偶校驗(yàn)位送CCPLC;形成奇偶校驗(yàn)位送CMOVACC.7,C;使A中成為奇數(shù)個(gè)1MOVSBUF,A;啟動(dòng)發(fā)送DJNZR2,NEXT;若字符塊未發(fā)完,則NEXTCLRES;關(guān)串行口中斷SJMPSTOP;停止發(fā)送NEXT:INCR0;字符塊指針加1STOP:RETI;中斷返回END③方式2和方式3方式2和方式3為11位異步通信,比方式1多一個(gè)第9位既可雙機(jī)之間通信,也可多機(jī)通信。方式3的波特率同方式1。方式2的波特率=多機(jī)通信時(shí),SM2=0、REN=1、TB8/RB8做多機(jī)通信控制位。雙機(jī)之間通信時(shí),SM2=0、REN=1、TB8/RB8可做奇偶位發(fā)送(TI=0)發(fā)送前要求把第9位數(shù)據(jù)位預(yù)先裝入SCON的TB8,由用戶安排,可以是奇偶校驗(yàn)位或其他控制位。SETBTB8CLRTB8MOVSBUF,ATI由硬件在發(fā)送停止位時(shí)置位,由軟件將它復(fù)位。接收(RI=0和REN=1)方式1RB8存停止位方式2、3RB8存放第9數(shù)據(jù)位接收有效字符的條件:RI=0SM2=0或RB8=1

同時(shí)滿足兩條件,執(zhí)行MOVA,SBUF;使RI=1,否則接收無效,RI=0。RI=0,SBUF空SM2或RB8

共同控制接收

RB8奇偶校驗(yàn),SM2=0

SM2=1,RB8=1,多機(jī)通信[例4]請(qǐng)用查詢法編出串行口在方式2下的發(fā)送程序。設(shè)單片機(jī)主頻為6MHz,波特率為fosc/32,發(fā)送數(shù)據(jù)區(qū)始址為TBLOCK(內(nèi)部RAM),接收數(shù)據(jù)塊長(zhǎng)度為L(zhǎng)EN。要求采用累加和校驗(yàn),以空出第9位它用。累加和是指累加所有需要發(fā)送或接收的數(shù)據(jù)(字符)字節(jié)后得到的低字節(jié)和(大于255部分舍去)。累加和校驗(yàn)要求發(fā)送端在發(fā)送完數(shù)據(jù)后把累加和也發(fā)送出去,接收端除要計(jì)算接收數(shù)據(jù)的累加和外,還必須接收發(fā)送端發(fā)來是累加和,并把它同求得的累加和比較。若比較相同,則數(shù)據(jù)傳送正確;否則,數(shù)據(jù)傳送有錯(cuò)。主程序ORG1000HTBLOCKDATA20HLENDATA1EHSTART:MOVSCON,#80H;方式2MOVPCON,#80H;令SMOD=1MOVR0,#TBLOCK;字符塊始址送R0MOVR2,#LEN;字符塊長(zhǎng)度字節(jié)送R2MOVR3,#LEN;存入累加和寄存器R3ACALLTXSUB;調(diào)用發(fā)送子程序SJMP$;停機(jī)發(fā)送子程序ORG1100HTXSUB:PUSHACC;保護(hù)A中的內(nèi)容PUSHPSWCLRTI;清TITXLEN:MOVA,R2;發(fā)送字符塊長(zhǎng)度MOVSBUF,AJNBTI,$;等待發(fā)完CLRTI;發(fā)完后清TITXD:MOVA,@R0;發(fā)送字符送AMOVSBUF,A;啟動(dòng)發(fā)送JNBTI,$;等待發(fā)完

TXSUM:MOVA,R3;若已發(fā)完則發(fā)累加和MOVSBUF,AJNBTI,$;等待發(fā)完CLRTI;發(fā)完后清TIMOVR3,#00H;清累加和寄存器POPPSW;恢復(fù)現(xiàn)場(chǎng)POPACC

RETEND

CLRTI;發(fā)完后清TIADDA,R3;求累加和MOVR3,A;存入R3INCR0;字符塊指針加1DJNZR2,TXD;若字符未全發(fā)完,則繼續(xù)[例5]請(qǐng)用查詢法編出串行口在方式3下的接收程序。設(shè)單片機(jī)主頻為6MHz,波特率為2400bps,接收數(shù)據(jù)區(qū)始址為RBLOCK(內(nèi)部RAM),接收數(shù)據(jù)塊長(zhǎng)度字節(jié)由始發(fā)端發(fā)送來。要求采用累加和校驗(yàn),若傳輸有錯(cuò),轉(zhuǎn)出錯(cuò)處理程序。本程序有主程序、接收子程序和出錯(cuò)處理程序組成主程序:ORG1000HRBLOCKDATA30HSTART:MOVTMOD,#20H;T1工作于方式2MOVTH1,#OF4H;設(shè)置時(shí)間常數(shù)初值MOVTL1,#0F4HSETBTR1;啟動(dòng)T1MOVSCON,#0D0H;串行口工作于方式3接收MOVPCON,#80H;使SMOD=1MOVR0,#RBLOCK;接收數(shù)據(jù)區(qū)始址送R0MOVR3,#00H;累加和寄存器清零ACALLRXSUB;轉(zhuǎn)接收子程序…SJMP$;停機(jī)接收子程序:RXSUB:CLRRI;清RIRXLEN:JNBRI,$;等待接收數(shù)據(jù)塊長(zhǎng)度字節(jié)CLRRI;接收完后清RIMOVA,SBUF;數(shù)據(jù)塊長(zhǎng)度字節(jié)送AMOVR2,A;存入R2ADDA,R3;開始求累加和MOVR3,A;累加和存入R3

RxD:JNBRI,$;等待接收字符CLRRI;接收完后清RIMOVA,SBUFMOV@R0,A;接收字符存入內(nèi)存ADDA,R3;求累加和MOVR3,A;存入R3INCR0;接收數(shù)據(jù)區(qū)指針加1DJNZR2,RxD;若數(shù)據(jù)塊未收完,則繼續(xù)RXSUM:JNBRI,$;等待接收累加和CLRRI;接收完后清RIMOVA,SBUF;接收到的累加和送AXRLA,R3;比較兩個(gè)累加和JNZERROR;若不等,則轉(zhuǎn)出錯(cuò)處理RET;若相等,則返回4.主從式多機(jī)通信MCS-51使用于多機(jī)通信時(shí)必須在方式2或方式3下工作。⑴主機(jī)的SM2=0;所有從機(jī)的SM2=1,以便接收主機(jī)發(fā)來的地址;主從機(jī)的REN=1。⑵主機(jī)給從機(jī)發(fā)送地址時(shí),第9數(shù)據(jù)位上發(fā)送1,以指示從機(jī)接收這個(gè)地址。⑶所有從機(jī)在SM2=1、RB8=1和RI=0時(shí),接收主機(jī)發(fā)來的從機(jī)地址,進(jìn)入相應(yīng)中斷服務(wù)程序,并和本機(jī)地址比較以確認(rèn)是否為被尋址從機(jī)。⑷被尋址從機(jī)通過指令清除SM2,以正常接收數(shù)據(jù),并向主機(jī)發(fā)回接收到的從機(jī)地址,供主機(jī)核對(duì)。未被尋址的從機(jī)保持SM2=1,并退出各自中斷服務(wù)程序。⑸完成主機(jī)和被尋址從機(jī)之間的數(shù)據(jù)通信,被尋址從機(jī)在通信完成后重新使SM2=1,并退出中斷服務(wù)程序,等待下次通信。在多機(jī)通信中,主機(jī)通常把從機(jī)地址作為為8位數(shù)據(jù)(第9數(shù)據(jù)位為1)發(fā)送的。因此,MCS-51構(gòu)成的多機(jī)通信系統(tǒng)最多允許255臺(tái)從機(jī)(地址為00H-FEH),F(xiàn)FH作為一條控制命令由主機(jī)發(fā)送給從機(jī),以便使被尋址從機(jī)的SM2=1。[例]主機(jī)和從機(jī)的通信程序,要求波特率為1200bps。本題程序由主機(jī)程序和從機(jī)程序組成。

在多機(jī)通信中,主從機(jī)之間除傳送從機(jī)地址和數(shù)據(jù)(由發(fā)送數(shù)據(jù)第9位指示)外,還應(yīng)當(dāng)傳送一些供主機(jī)或從機(jī)識(shí)別的命令或狀態(tài)字。①兩條控制命令為:00H-主機(jī)發(fā)送從機(jī)接收命令01H-從機(jī)發(fā)送主機(jī)接收命令兩條命令均以數(shù)據(jù)形式發(fā)送(既第9數(shù)據(jù)位為0)5主從式多機(jī)通信實(shí)例②從機(jī)狀態(tài)字。該狀態(tài)字由被尋址從機(jī)發(fā)送,為主機(jī)所接收,用于指示從機(jī)的工作狀態(tài)。主機(jī)程序:由主機(jī)程序和主機(jī)通信子程序組成。主機(jī)主程序用于定時(shí)器T1初始化、串行口初始化和傳遞主機(jī)通信子程序所需入口參數(shù)。主機(jī)通信子程序用于主機(jī)和從機(jī)間一個(gè)數(shù)據(jù)塊的傳送。程序中所用寄存器分配如下:R0:存放主機(jī)發(fā)送數(shù)據(jù)塊始址R1:存放主機(jī)接收數(shù)據(jù)塊始址R2:存放被尋址的從機(jī)地址R3:存放主機(jī)發(fā)出的命令R4:存放發(fā)送數(shù)據(jù)塊長(zhǎng)度R5:存放接收數(shù)據(jù)塊長(zhǎng)度主機(jī)程序流程圖主機(jī)主程序ORG2000HSTART:MOVTMOD,#20H;定時(shí)器T1為方式2MOVTH1,#0F4H;波特率為1200bpsMOVTL1,#0F4HSETBTR1;啟動(dòng)T1工作MOVSCON,#0D8H;串行口為方式3,允許接收,SM2=0;TB8=1,REN=1MOVPCON,#00H;

MOVR0,#40H;發(fā)送數(shù)據(jù)塊始址送R0MOVR1,#20H;接收數(shù)據(jù)塊始址送R1MOVR2,#SLAVE;被尋址從機(jī)地址送R2

MOVR3,#00H/01H

;若為00H,則主機(jī)發(fā)從機(jī)收命令;若為01H,則從機(jī)發(fā)主機(jī)收命令MOVR4,#20;發(fā)送數(shù)據(jù)塊長(zhǎng)度送R4MOVR5,#20;接收數(shù)據(jù)塊長(zhǎng)度送R5LCALLMCOMMU;調(diào)用主機(jī)通信子程序SJMP$;停機(jī)

ORG2100HMCOMMU:MOVA,R2;從機(jī)地址送AMOVSBUF,A;發(fā)送從機(jī)地址JNBRI,$;等待接收從機(jī)應(yīng)答地址CLRRI;從機(jī)應(yīng)答后清RIMOVA,SBUF;從機(jī)應(yīng)答地址送AXRLA,R2;核對(duì)兩個(gè)地址JZMTXD2;相符,則轉(zhuǎn)MTXD2MTXD1:MOVSBUF,#0FFH;發(fā)送從機(jī)復(fù)位信號(hào)SETBTB8;地址幀標(biāo)志送TB8SJMPMCOMMU;重發(fā)從機(jī)地址MTXD2:CLRTB8;準(zhǔn)備發(fā)送命令MOVSBUF,R3;送出命令JNBRI,$;等待從機(jī)應(yīng)答CLRRI;從機(jī)應(yīng)答后清RIMOVA,SBUF;從機(jī)應(yīng)答命令送AJNBACC.7,MTXD3;核對(duì)命令后無錯(cuò),則命令分類SJMPMTXD1;若命令收錯(cuò),則重新聯(lián)絡(luò)

MTXD3:CJNER3,#00H,MRXD;若為從機(jī)發(fā)送主機(jī)接收命令,則MRXDJNBACC.0,MTXD1;若從機(jī)接收未就緒,則重新聯(lián)絡(luò)MTXD4:MOVSBUF,@R0;若從機(jī)接收就緒,則開始發(fā)送JNBTI,$;等待發(fā)送結(jié)束CLRTI;發(fā)送結(jié)束后清TIINCR0;R0指向下一發(fā)送數(shù)據(jù)DJNZR4,MTXD4;若數(shù)據(jù)未發(fā)完,則繼續(xù)RETMRXD:JNBACC.1,MTXD1;若為從機(jī)發(fā)送未就緒,則重新聯(lián)絡(luò)MRXD1:JNBRI,$;等待接收完畢CLRRI;接收到一幀后清RIMOVA,SBUF;收到的數(shù)據(jù)送AMOV@R1,A;存入內(nèi)存INCR1;接收數(shù)據(jù)區(qū)指針加1DJNZR5,MRXD1;若未接收完,則繼續(xù)RETEND

從機(jī)程序從機(jī)程序有從機(jī)主程序和從機(jī)中斷服務(wù)程序組成。從機(jī)主程序用于定時(shí)器T1初始化、串行口初始化和中斷初始化。從機(jī)中斷服務(wù)程序用于對(duì)主機(jī)的通信。從機(jī)主程序框圖

從機(jī)子程序?yàn)椋篛RG1000HSTART:MOVTMOD,#20H;定時(shí)器T1為方式2MOVTH1,#0F4H;波特率為1200bpsMOVTL1,#0F4HSETBTR1;啟動(dòng)T1工作MOVSCON,#0F8H;串行口為方式3,允許接收,SM2=1,;TB8=1,REN=1MOVPCON,#00HMOVR0,#20H;R0指向發(fā)送數(shù)據(jù)塊始址MOVR1,#40H;R1指向接收數(shù)據(jù)區(qū)始址MOVR2,#20;發(fā)送數(shù)據(jù)塊長(zhǎng)度送R2MOVR3,#20;接收數(shù)據(jù)塊長(zhǎng)度送R3SETBEA;開CPU中斷SETBES;允許串行口中斷CLRRI;清RISJMP$;等接收中斷申請(qǐng)信號(hào)

由于從機(jī)串行口設(shè)定為方式3、SM2=1和RI=0,且串行口中斷已經(jīng)開放,因此從機(jī)的接收中斷總能被響應(yīng)(主機(jī)發(fā)送地址時(shí))。在中斷服務(wù)程序中,SLAVE是從機(jī)的本機(jī)地址,F(xiàn)0H(即PSW.5)為本機(jī)發(fā)送就緒位地址(即:PSW.1=1為本機(jī)已準(zhǔn)備好接收)。寄存器分配為:R0:存放發(fā)送數(shù)據(jù)塊始址R1:存放接收數(shù)據(jù)塊始址R2:存放發(fā)送數(shù)據(jù)塊長(zhǎng)度R3:存放接收數(shù)據(jù)塊長(zhǎng)度

ORG0023HSJMPSINTSBV;轉(zhuǎn)入從機(jī)中斷服務(wù)程序ORG0100HSINTSBV:CLRRI;接收到地址后清RIPUSHACC;保護(hù)A于堆棧PUSHPSW;保護(hù)PSW于堆棧MOVA,SBUF;接收的從機(jī)地址送AXRLA,#SLAVE;和本機(jī)地址核對(duì)JZSRXD1;若是呼叫本機(jī),則繼續(xù)RETURN:POPPSW;若不是呼叫本機(jī),則恢復(fù)PSWPOPACC;恢復(fù)ACCRETI;中斷返回SRXD1:CLRSM2;準(zhǔn)備接收數(shù)據(jù)/命令MOVSBUF,#SLAVE;發(fā)回本機(jī)地址,供核對(duì)JNBRI,$;等待接收主機(jī)發(fā)來的數(shù)據(jù)/命令CLRRI;接收到后清RIJNBRB8,SRXD2;若是數(shù)據(jù)/命令,則繼續(xù)SETBSM2;若是復(fù)位信號(hào),則令SM2=1SJMPRETURN;返回主程序

SRXD2:MOVA,SBUF;接收命令送ACJNEA,#02H,NEXT;命令合法?NEXT:JCSRXD3

溫馨提示

  • 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)論