第四章 MCS-51单片机的应用程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第四章MCS-51单片机的应用程序设计过程A过程B是否入口出口条件满足?P2入口出口P1P3过程是否入口出口条件满足?(a)顺序结构(b)分支结构(c)循环结构图4-1基本程序结构4-1运算程序一、多字节数加法1.多字节无符号数加法(43H)(42H)(41H)(40H)CYCYCY+)(53H)(52H)(51H)(50H)(43H)(42H)(41H)(40H)MOVR0,#40H;(R0)=40HMOVR1,#50H;(R1)=50HMOVR2,#04H;(R2)=04HCLRCLOOP:MOVA,@R0;(A)=((R0))=(40H)ADDCA,@R1;(A)=(A)+((R1))+CY=(A)+(50H)+CYMOV@R0,A;((R0))=(40H)=(A)4-1运算程序4-1运算程序INCR0;(R0)=41HINCR1;(R1)=51HDJNZR2,LOOP;(R2)=(R2)-1=0?SJMP$END二、多字节数减法MOVR0,#40H;指向被减数最低位MOVR1,#50H;指向减数最低位MOVR2,#04H;字节数CLRCLOOP1:MOVA,@R0SUBBA,@R1;(A)=(A)-((R1))-CYMOV@R0,AINCR0INCR1DJNZR2,LOOP1SJMP$END三、多字节十进制数(BCD码)加法BCDADD:MOVR0,#40H;(R0)=40HMOVR1,#50H;(R1)=50HMOVR2,#04H;(R2)=04HCLRCLOOP0:MOVA,@R0;取被加数ADDCA,@R1;两数相加DAA;十进制调整MOV@R0,AINCR0;指针加1INCR1DJNZR2,LOOP0;作完加法否JNCRETURN;有无进位MOV@R0,#01HRETURN:SJMP$END四、多字节数乘法ZHENFA:MOVA,R2MOVB,R3MULAB;(R3)*(R2)MOVR5,A;积的低位送到R5MOVR6,B;积的高位送到R6MOVA,R2MOVB,R4MULAB;(R4)*(R2)ADDA,R6;(R3)*(R2)的高位加(R4)*(R2)的低位MOVR6,A;结果送R6,进位在CY中MOVA,BADDCA,#00H;(R4)*(R2)的高位加低位来的进位MOVR7,A;结果送R7RETR4R3)R2C(R3R2)H(R3R2)L(R4R2)H(R4R2)LR7R6R5四、多字节数乘法五、多字节数除法DV:MOVR7,#08H;设计数初值DVl:CLRCMOVA,R5RLCAMOVR5,AMOVA,R6RLCA;将(R6)、(R5)左移一位MOV07H,C;将移出的一位送07H位保存CLRC图4-2除法程序流程图SUBBA,R2;余数(高位)减除数JBO7H,GOU;若标志位为1,说明够减JNCGOU;无借位也说明够减ADDA,R2;否则,恢复余数AJMPDV2GOU:INCR5;商上1DV2:MOVR6,A;保存余数(高位)DJNZR7,DVlRET除法次数→R77YN标志位=1?开始清进位(R6)(R5)左移一位进位位=0?YN恢复余数返回余数高位-除数移出的位→标志位商上1保存余数(R7)-1=0?YN1010111000-10101000100-101011101101余商一、数据的拼拆4.2数据的拼拆和转换例4-1设在30H和31H单元中各有一个8位数据:(30H)=x7x6x5x4x3x2x1x0(3lH)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,并且规定:(40H)=y2y1y0x4x3x2x1x0解:利用逻辑指令ANL、ORL来完成数据的拼拆,程序清单如下:MOV40H,30H;(40H)=X7X6X5X4X3X2X1X0ANL40H,#00011111B;(40H)=000X4X3X2X1X0MOVA,31H;(A)=(31H)=y7y6y5y4y3y2y1y0SWAPA;(A)=Y3Y2Y1Y0Y7Y6Y5Y4RLA;(A)=Y2Y1Y0Y7Y6Y5Y4Y3ANLA,#11100000B;(A)=Y2Y1Y000000ORL40H,A;(40H)=y2y1y0x4x3x2x1x0例4-2设20H单元中有一个8位数据:(20H)=X7X6X5X4X3X2X1X0现在要将20H单元的低4位送到21H单元,并按相反的次序装排,高4位置零,即要求(21H)=0000X0X1X2X3适合这种要求的程序段是:MOVC,00H;(C)=(20H.0)=X0RLCA;X0移入ACC.0MOVC,01H;RLCA;X1移入ACC.0,X0移入ACC.1MOVC,02HRLCAMOVC,03HRLCAANLA,#00001111B;屏蔽高4位MOV21H,A;完成拼装例4-3假定暂存单元7CH中的数据是两个BCD码,现在要将它们分开,并将高位BCD码送到R6中,将低位BCD码送到R5中。拆开数据的程序如下:设(7CH)=34HMOVR1,#7CH;(R1)=7CHMOVA,#00HXCHDA,@R1;(7CH)=30H,(A)=04HMOVR5,A;(R5)=04HMOVA,7CH;(A)=30HSWAPA;(A)=03HMOVR6,A;(R6)=03H二、数据的转换1.ASCII码与二进制数的互相转换例4-4编程实现十六进制数表示的ASC1I代码转换成4位二进制数(1位十六进制数)。解:对于这种转换,只要注意到下述关系便不难编写出转换程序:“字符0”~“字符9”的ASCII码值为“30H”~“39H”,它们与30H之差恰好为“00H”~“09H”,结果均<0AH。“字符A”~“字符F”的ASCII码值为“41H”~“46H”,它们各自减去37H后恰好为“0AH”~“0FH”,结果≥0AH。根据这个关系可以编出转换程序如下,程序以R1作为入口和出口。ASCHIN:MOVA,R1;取操作数41HCLRC;清进位标志位CSUBBA,#30H;ASCII码减去30H.11HMOVR1,A;暂存结果11HSUBBA,#0AH;结果是否9?7HJCLOOP;若≤9,则转换正确XCHA,R1;(A)=11HSUBBA,#07H;若9,则减37H(A)=0AHMOVR1,A;(R1)=0AHLOOP:RET例4-51位十六进制数(4位二进制数)转换成ASCII码。这种转换实际上是例4-4的反转换,常用于输出,从二进制数和ASCII代码之间的对应关系得到的算法是:当二进制数0AH时,加30H即得到相应的ASCII码;若二进制数介于0AH与0FH之间(包括0AH和0FH),则加37H即得到相应的ASCII码.下述程序提供的是另一种算法,其执行速度较快。程序以R2作为入口和出口.HEXASC2:M()VA.R2ANLA,#0FH;0AHADDA,#90H;9AHDAA;(A)=00H,C=1ADDCA,#40H;41HDAA;C=0MOVR2,A;(R2)=41HRET如果执行ADDA,#90H和DAA两条指令后产生对CY的进位,则说明被转换的二进制数≥0AH,否则就是0AH。后两条指令ADDCA,#40H和DAA在于产生正确的高位ASCII代码4H(对于≥0AH的二进制数)或3H(对于0AH的二进制数)。2.BCD码与二进制数的转换3615=[(3*10+6)*10+1]*10+5123例4-6BCD码转换成二进制数43H~40H单元中4个BCD码,转换成二进制数,结果存放在R3R2中.R3R2*)10(R2*10)H(R2*10)L(R3*10)LR3R2+)C((R0))R3R2MOVR7,#03HMOVR0,#43HMOVR3,#00HMOVA,@R0MOVR2,AML10:MOVA,R2MOVB,#0AHMULABMOVR2,AMOVA,BXCHA,R3MOVB,#0AHMULABADDA,R3MOVR3,AJAFA:DECR0MOVA,@R0ADDA,R2MOVR2,AMOVA,R3ADDCA,#00HMOVR3,ADJNZR7,ML10RET例4-7二进制数转换成BCD码(二翻十).假定一个待转换的16位二进制数0E1FH存放在(R3R2)中,现在要将它转换成BCD码,并存放到数据区44H~40H中,如下所示:P71由于16位二进制数最大为FFFFH,转换结果为65535,共5位,所以需要5个结果单元.在这里采用连减法,即用从二进制数中连续减去10的幂次的方法来进行从二进制数到BCD码的转换。连减的原理是:P72求得万位计数值之后,再将余数减103,方法类似于求万位计数值……照此办理可得千位计数值以及百位、十位的计数值.最后的余数为个位。另外,还应注意到:104=2710Hl03=03E8H102=0064H10=000AH因此.尚可采用查表的办法来实现对10的幂次的连减.在下述程序中,用R0作转换结果单元的地址指针;用DPTR和R6作幂值表的指针,用R5R4作幂值暂存单元,用R7作计数单元。程序清单如下:BBCD:MOVR0,#44HMOVR7,#04HMOVDPTR,#PWTABMOVR6,#00HBBC1:MOVA,R6MOVCA,@A+DPTRMOVR4,AINCR6MOVA,R6MOVCA,@A+DPTRMOVR5,AINCR6MOV@R0,#00HBBC2:CLRCMOVA,R2SUBBA,R4MOVR2,AMOVA,R3SUBBA,R5MOVR3,AJCBBC3INC@R0SJMPBBC2BBC3:MOVA,R2ADDA,R4MOVR2,AMOVA,R3ADDCA,R5MOVR3,ADECR0DJNZR7,BBC1MOVA,R2MOV@R0,ARETPWTAB:DB10H,27HDB0E8H,03HDB64H,00HDB0AH,00H

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功