資源描述:
《匯編語(yǔ)言串口通信接收發(fā)送程序題》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、例2利用定時(shí)/計(jì)數(shù)器T0的方式1,產(chǎn)生10ms的定時(shí),并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。解:1、計(jì)算計(jì)數(shù)初值X:由于晶振為12MHz,所以機(jī)器周期Tcy為1ms。所以:N=t/Tcy=10×10-3/1×10-6=10000X=65536-10000=55536=D8F0H即應(yīng)將D8H送入TH0中,F(xiàn)0H送入TL0中2、求T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字為01H;ORG0000HLJMPMAIN;跳轉(zhuǎn)到主程序ORG000BH;T0的中斷入口地址LJMPDVT0;轉(zhuǎn)向中斷服務(wù)程
2、序ORG0100HMAIN:MOVTMOD,#01H;置T0工作于方式1MOVTH0,#0D8H;裝入計(jì)數(shù)初值MOVTL0,#0F0HSETBET0;T0開(kāi)中斷SETBEA;CPU開(kāi)中斷SETBTR0;啟動(dòng)T0SJMP$;等待中斷DVT0:CPLP1.0;P1.0取反輸出MOVTH0,#0D8H;重新裝入計(jì)數(shù)值MOVTL0,#0F0HRETI;中斷返回END?2、串行口方式1的發(fā)送和接收例7-4:89C51串行口按雙工方式收發(fā)ASCII字符,最高位用來(lái)作奇偶校驗(yàn)位,采用奇校驗(yàn)方式,要求傳送的波特率為1200b/s。編寫(xiě)有關(guān)的通信程序。解:7位ASCII碼加1位奇校驗(yàn)共8位數(shù)據(jù)
3、,故可采用串行口方式1。89C51單片機(jī)的奇偶校驗(yàn)位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時(shí),P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了偶校驗(yàn),與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗(yàn)。?2、串行口方式1的發(fā)送和接收?雙工通信要求收、發(fā)能同時(shí)進(jìn)行。收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫(xiě)入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過(guò)檢測(cè)是RI置位還是TI置位來(lái)決定CPU是進(jìn)行發(fā)送操作還是接收操作。發(fā)送和接收都通過(guò)調(diào)用子程序來(lái)完成,設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,f
4、osc為6MHz,通過(guò)查波特率初值(表7-2)可知定時(shí)器的初裝值為F3H。定時(shí)器T1采用工作模式2,可以避免計(jì)數(shù)溢出后用軟件重裝定時(shí)初值的工作。?2、串行口方式1的發(fā)送和接收主程序MOVTMOD,#20H;定時(shí)器1設(shè)為模式2MOVTL1,#0F3H;定時(shí)器初值MOVTH1,#0F3H;8位重裝值SETBTR1;啟動(dòng)定時(shí)器1MOVSCON,#50H;設(shè)置為方式1,;REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址MOVR1,#40H;接收數(shù)據(jù)取首址ACALLSOUT;先輸出一個(gè)字符SETBESSETBEASJMP$;等待中斷?2、串行口方式1的發(fā)送和接收發(fā)送子程序SOUT:CLR
5、TIMOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標(biāo)識(shí)賦予CCPLC;奇校驗(yàn)MOVACC.7,CINCR0;修改發(fā)送數(shù)據(jù)指針MOVSBUF,A;發(fā)送ASCII碼RET;返回?2、串行口方式1的發(fā)送和接收?例7-7:利用串行口和堆棧技術(shù)發(fā)送字符串常量。?上面兩個(gè)例子中,發(fā)送和接收的都是一些變量數(shù)據(jù),且存放在內(nèi)部RAM單元中?,F(xiàn)說(shuō)明如何利用堆棧技術(shù)發(fā)送存放在程序存儲(chǔ)器內(nèi)的字符串常量。?下面的例子中,這些字符串是發(fā)送給CRT終端的,以回車(chē)符(CR)和換行符(LF)開(kāi)始,以換碼符(ESC)為結(jié)尾。下面是程序片斷:?2、串行口方式1的發(fā)送和接收CREQU0DH;ASCII回車(chē)符LF
6、EQU0AH;ASCII換行符ESCEQU1BH;ASCII換碼符……MOVTMOD,#20H;設(shè)置定時(shí)器T1為模式2MOVTL1,#0FDH;設(shè)波特率位9600b/s;(fosc=11.059MHz)MOVTH1,#0FDHSETBTR1;啟動(dòng)T1運(yùn)行MOVSCON,#01000000B;設(shè)置串行口方式1ACALLXSTRINGDBCR,LFDB‘NU&BIAA’;字符串常量DBESCMOVB,#01H……?3、串行口方式2、方式3的發(fā)送和接收?串行口方式2與方式3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送11位信息:開(kāi)始為l位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位
7、程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式l多了一位程控位。?3、串行口方式2、方式3的發(fā)送和接收例7-8:用第9個(gè)數(shù)據(jù)位作奇偶校驗(yàn)位,編制串行口方式2的發(fā)送程序。?解:設(shè)計(jì)一個(gè)發(fā)送程序,將片內(nèi)RAM50H~5FH中的數(shù)據(jù)串行發(fā)送;串口設(shè)定為方式2,TB8作奇偶校驗(yàn)位。在數(shù)據(jù)寫(xiě)入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫(xiě)入TB8,這時(shí),第9位數(shù)據(jù)作奇偶校驗(yàn)用。程序清單如下:TRT:MOVSCON,#80H;方式2設(shè)定MOVPCON,#80H;取波特率為fosc/32MOVR7,#