資源描述:
《主機通信子程序如下》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、主機通信子程序如下:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVPCON,#80HSTAT:MOVSCON,#0D8H;串口方式3,允許接收,TB8=1CLRES;禁止串行中斷CLP1:MOVSBUF,#0FFH;發(fā)送命令,所有從機SM2=1JNBTI,$;等待發(fā)送完畢CLRTI;清發(fā)送中斷標志MOVA,R2;取尋址的從機地址MOVSBUF,A;發(fā)送尋址的從機地址JNBTI,$;等待發(fā)送完畢CLRTIJNBRI,$;等待尋址的從機應(yīng)答(返回地址)CLRRIMOVA,SBUF;讀從機應(yīng)答信號
2、XRLA,R2;核對地址(異或,相同為0)JNZCLP1;若地址不符合,則重發(fā)CLP2:CLRTB8;準備發(fā)送數(shù)據(jù)幀(只有尋址的從機才能接收)MOVSBUF,R3;發(fā)送命令幀JNBTI,$;等待發(fā)送完畢CLRTIJNBRI,$;等待從機應(yīng)答CLRRIMOVA,SBUF;讀應(yīng)答信息JBAcc.7,CLP2;若是非法命令則重發(fā)(ERR=1)CJNER3,#01H,SRX0;若原命令不要求從機發(fā)送,則轉(zhuǎn)STX:JNBAcc.1,CLP2;R3=01H要求從機發(fā)送,發(fā)送未準備好,則重新聯(lián)絡(luò)STX1:JNBRI,$;從機發(fā)送數(shù)據(jù)塊長度,主機等待接
3、收完畢CLRRIMOVA,SBUF;主機接收數(shù)據(jù)塊長度MOVR5,A;保存數(shù)據(jù)塊長度MOVR7,A;暫存數(shù)據(jù)塊長度RX_DATA:JNBRI,$;接收從機發(fā)來的數(shù)據(jù)CLRRIMOVA,SBUFMOV@R1,A;存放數(shù)據(jù)并計算校驗和ADDA,R6MOVR6,A;存放校驗和INCR1;指向下一數(shù)據(jù)存儲單元DJNZR5,STX1;判全部數(shù)據(jù)接收完畢否?未完繼續(xù)JNBRI,$;接收主機發(fā)來的數(shù)據(jù)校驗和CLRRIMOVA,SBUFCJNEA,R6,ERROR;校驗和不正確,則發(fā)81H表明數(shù)據(jù)出錯RET;正確接收完畢,返回ERROR:MOVSBUF
4、,#81HJNBTI,$CLRTIMOVA,R7;恢復R5(收到該數(shù)據(jù)塊的長度)以便恢復R1值MOVR5,ALOOP:DECR1;恢復R1首地址DJNZR5,LOOPMOVR6,00H;恢復累加和AJMPSTX1;重新等待接收SRX0:JCSRX;若原命令要求從機接收,轉(zhuǎn)從機接收RET;否則返回SRX:JNBAcc.0,CLP2;從機接收未準備好,重新聯(lián)絡(luò)SRX1:MOVA,R4;從機接收已準備好則主機發(fā)送數(shù)據(jù)塊長度MOVSBUF,AWAIT1:JBCTI,SRX1;等待主機發(fā)送完畢SJMPWAIT1TX_DATA:MOVA,@R0;主
5、機發(fā)送數(shù)據(jù),并計算校驗和MOVSBUF,AJNBTI,$CLRTIADDA,R6MOVR6,AINCR0;指向下一發(fā)送數(shù)據(jù)DJNZR4,TX_DATA;判全部數(shù)據(jù)發(fā)送完畢否?未完繼續(xù)MOVA,R6;主機發(fā)送校驗和MOVSBUF,AJNBTI,$CLRTIJNBRI,$;等待從機應(yīng)答CLRRIMOVA,SBUF;接受應(yīng)答信CLRCySUBBA,#81HJZRE_SEND;收到應(yīng)答是81H則重新發(fā)送數(shù)據(jù)RET;全部數(shù)據(jù)發(fā)送成功,則返回RE_SEND:MOVA,R7;恢復該數(shù)據(jù)塊長度MOVR4,ALOOP:DECR0;回到該數(shù)據(jù)塊首地址DJN
6、ZR4,LOOPMOVR6,#00H;清校驗和有關(guān)從機中斷、T1、波特率和串行口的初始化,可按如下預(yù)先完成:ORG0023HLJMPSERVEORG0050H;串行中斷服務(wù)程序入口MOVTMOD,#20H;定時器T1初始化工作于方式2MOVTL1,0F3HMOVTH1,0F3HSETBTR1MOVPCON,#80H;SMOD=1波特率倍增MOVSCON,#0F0H;串行方式3,允許接收,SM2=1同時,可用偽指令定義本從機地址:SLAVEQUR2,PSW.5為從機發(fā)送準備就緒狀態(tài)標志(PSW.5=1,發(fā)送準備就緒),PSW.1為從機接收
7、準備就緒狀態(tài)標志(PSW.1=1接收準備就緒)??梢栽谥鞒绦蛑袑SW.1和PSW.5置位。通信中斷服務(wù)子程序如下:SERVE:CLRRI;清接收標志位PUSHAcc;保護現(xiàn)場PUSHPSWSETBRS0;選擇寄存器工作區(qū)CLRRS1MOVA,SBUF;接收主機發(fā)送來的地址XRLA,#SLAV;比較與本從機地址相符否JZSS1;相同,則轉(zhuǎn)接收以下的數(shù)據(jù)SRET:POPPSW;不相符,則恢復現(xiàn)場,中斷返回POPAccRETISS1:CLRSM2;準備接收數(shù)據(jù)MOVSBUF,#SLAV;發(fā)回本機地址回復主機JNBTI,$;等待發(fā)送完畢CLR
8、TIJNBRI,$;等待主機應(yīng)答CLRRIJNBRB8,SS2;若受到RB8=0則從機轉(zhuǎn)接收命令幀SETBSM2;否則置位SM2并返回等待主機重新聯(lián)絡(luò)SJMPSRETSS2:MOVA,SBUFCJNEA,#