資源描述:
《MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例1查表程序設(shè)計(jì)查表程序是一種常用程序,它廣泛使用于LED顯示控制、打印機(jī)打印控制、數(shù)據(jù)補(bǔ)償、數(shù)值計(jì)算、轉(zhuǎn)換等功能程序中,這類程序具有簡(jiǎn)單、執(zhí)行速度快等特點(diǎn)。所謂查表法,就是預(yù)先將滿足一定精度要求的表示變量與函數(shù)值之間關(guān)系的一張表求出,然后把這張表存于單片機(jī)的程序存儲(chǔ)器中,這時(shí)自變量值為單元地址,相應(yīng)的函數(shù)值為該地址單元中的內(nèi)容。查表,就是根據(jù)變量X在表格中查找對(duì)應(yīng)的函數(shù)值Y,使Y=f(X)。MCS-51指令系統(tǒng)中,有兩條查表指令:MOVCA,@A+PCMOVCA,@A+DPTR例1一個(gè)十六進(jìn)制數(shù)存放在內(nèi)部RAM的HEX單
2、元的低4位中,將其轉(zhuǎn)換成ASCII碼并送回HEX單元。十六進(jìn)制0~9的ASCII碼為30H~39H,A~F的ASCII碼為41H~46H,ASCII碼表格的首地址為ASCTAB。編程如下:ORG1000HHEXASC:MOVA,HEXANLA,#0FHADDA,#03H;修改指針MOVCA,@A+PCMOVHEX,ARETASCTAB:DB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39HDB41H,42H,43H,44H,45HDB46H在這個(gè)程序中,查表指令MOVCA,@A+PC到表格首地址有兩條指令,占用3
3、個(gè)字節(jié)地址空間,故修改指針應(yīng)加3。例2設(shè)有一個(gè)巡回檢測(cè)報(bào)警裝置,需對(duì)96路輸入進(jìn)行控制,每路有一個(gè)額定的最大值,是雙字節(jié)數(shù)。當(dāng)檢測(cè)量大于該路對(duì)應(yīng)的最大值時(shí),就越限報(bào)警。假設(shè)R2為保存檢測(cè)路數(shù)的寄存器,其對(duì)應(yīng)的最大額定值存放于31H和32H單元中。查找最大額定值的程序如下:FMAX:MOVA,R2ADDA,R2;表中一個(gè)額定值為2個(gè)字節(jié)MOV31H,AMOVDPTR,#TAB;表首址MOVCA,@A+DPTR;查表讀取第一個(gè)字節(jié)XCHA,31H;第一個(gè)字節(jié)內(nèi)容存入31HINCDPTRMOVCA,@A+DPTR;查表讀取第二個(gè)字節(jié)MOV32H,A;第二
4、字節(jié)的內(nèi)容存入32HTAB:DW1230H,1450H,...DW2230H,2440H,...DW3120H,3300H,...2數(shù)制轉(zhuǎn)換例4將一個(gè)字節(jié)二進(jìn)制數(shù)轉(zhuǎn)換成3位非壓縮型BCD碼。設(shè)一個(gè)字節(jié)二進(jìn)制數(shù)在內(nèi)部RAM40H單元,轉(zhuǎn)換結(jié)果放入內(nèi)部RAM50H#,51H,52H單元中(高位在前),程序如下:HEXBCD:MOVA,40HMOVB,#100DIVABMOV50H,AMOVA,#10XCHA,BDIVABMOV51H,AMOV52H,BRET例5BCD碼轉(zhuǎn)換為二進(jìn)制代碼(方法:先將高半字節(jié)×1010,再加低半字節(jié))。設(shè)待轉(zhuǎn)換的B
5、CD碼存放在R2中DTOBMOVA,R2;ANLA,#0F0H;屏蔽低四位SWAPAMOVB,#0AHMULABMOVR3,AMOVA,R2ANLA,#0FH屏蔽高四位ADDA,R3得轉(zhuǎn)換結(jié)果RET例6雙字節(jié)BCD碼轉(zhuǎn)換為二進(jìn)制碼設(shè)BCD碼表示的4位十進(jìn)制數(shù)分別存放在R1和R2中,其中R2存放千、百位,R1存放十、個(gè)位。轉(zhuǎn)換后的結(jié)果低字節(jié)存放在20H單元,高字節(jié)存放在21H單元。轉(zhuǎn)換時(shí),可由高位到低位逐位檢查BCD碼的數(shù)值,然后累加各十進(jìn)制對(duì)應(yīng)的二進(jìn)制數(shù)。其中,千位1000=03E8H百位100=0064H十位10=000AH各位BCD碼=二進(jìn)制碼例BCD碼324
6、5=0011001001000101則千位累加了3次03E8H,百位累加了2次0064H,十位累加了4次000AH,再加上個(gè)位。BBCD11:MOV20H,#00H;MOV21H,#00H;MOVR3,#0E8H;MOVR4#00H;一千位二進(jìn)制數(shù)送R3,R4MOVA,R2ANLA,#0F0H;屏蔽百位SWAPA;千位換到低四位JZBRAN1;LOOP1:DECA;千位減1ACALLADDT;調(diào)用累加子程序JNZLOOP1;千位為0否?BRAN1:MOVR3,#64H;MOVR4,#00H;一百位二進(jìn)制數(shù)送R3,R4MOVA,R2;ANLA,#0FH;屏蔽千位JZ
7、BRAN2;百位為十轉(zhuǎn)到個(gè)位處執(zhí)行LOOP2DECA;百位減1ACALLADDT;調(diào)用累加子程序JNZLOOP2;百位為0否BRAB2MOVR3,#0AH;十的二進(jìn)制數(shù)送R3MOVA,R1;ANL#F0H;屏蔽個(gè)位SWAPA;十位換到低四位JZBRAN3;十位為0轉(zhuǎn)到個(gè)位處執(zhí)行LOOP3:DECA;十位減1ACALLADDT;調(diào)用累加子程序JNZLOOP3;十位為0否?BRAN3:MOVA,R1;ANLA,#0FH;屏蔽十位MOVR3,A;ACALLADDT;RETADDT:PUSHPSWPUSHACCCLRCMOVA,20HADDA,R3低位字節(jié)相加MOV20H
8、,A結(jié)果送