




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MCS-51系列单片机的程序设计,第四章,交叉汇编语言MASM51,单片机汇编语言程序设计方法及技巧,了解交叉汇编语言MASM51的特点,掌握顺序程序、分支程序、循环程序、查表程序、子程序的基本设计方法和技巧,掌握汇编语言程序设计的一般步骤,4.1交叉汇编语言MASM51,汇编语言源程序是由汇编指令和伪指令组成的文件,其扩展名为“ASM”。,1)人工汇编人工汇编是通过人工查出源程序中所有汇编指令的机器码,并依次将机器码输入单片机中,使之成为单片机能直接执行的目标程序。,2)机器汇编机器汇编是指在计算机上通过汇编程序对源程序进行汇编,即从源程序到目标程序的转换过程是由计算机上的汇编程序自动完成的。,3)交叉汇编是指用一种计算机上的汇编程序去汇编另一种计算机的源程序,为另一种计算机产生目标程序。,单片机MCS-51汇编语言程序设计步骤:1分析问题2确定算法3设计程序流程图4分配内存单元5编写汇编语言源程序6调试程序,4.2程序设计方法及技巧,4.2.1顺序程序设计,分析:应注意片内和片外的寻址指令不同,ORG1000HMOVR0,#68HMOVA,R0;片内RAM104单元内容送累加器MOVDPTR,#0104HMOVXDPTR,A;完成片内RAM104单元内容送片;外104H单元中INCR0MOVA,R0;片内RAM105单元内容送累加器INCDPTRMOVXDPTR,A;完成片内RAM105单元内容送片;外105H单元中SJMP$END,1.简单分支程序,4.2.2分支程序设计,图4.1简单分支程序转移,分析:只要将两数进行比较,用比较的结果作为分支转移的条件就很容易地找出其中的大数。,ORG1000HCLRCMOVR0,#FIRST;第一个数地址送R0中MOVA,R0;取第一个数INCR0;R0指向第二个数地址SUBBA,R0;两数比较JCBIG;第二个数大转BIGDECR0;R0指向第一个数地址BIG:MOVSECOND,R0;存大数SJMP$END,参考程序,2)多路分支程序(散转程序),图4.2多路分支程序转移,1)把AJMP或LJMP指令组成一个分支程序的转移表,表的首地址放入DPTR中;2)调整后的出口信息放入累加器A中;3)执行JMPA+DPTR转向对应的分支程序。,可通过间接转移指令JMPA+DPTR和无条件转移指令中的AJMP或LJMP指令来实现多路分支转移:,例4.3,已知R0中存放有一数字关键码,要求根据码值的不同,分别转向对应的码值程序段去执行。即当R0=K时,便执行CODEK程序。,ORG1000HMOVDPTR,#TAB;表首址送DPTRMOVA,R0;取数字关键码ADDA,R0;每条AJMP指令占用两个字;节,将关键码乘以2JNCLESS;关键码小于128转LESSINCDPHLESS:JMPA+DPTRTAB:AJMPCODE0;关键码为0,转CODE0执行AJMPCODE1;关键码为1,转CODE1执行AJMPCODE255;关键码为255,转CODE255;执行,AJMP指令的转移范围不超出所在的2KB字节区间,如各小段程序较长,在2KB字节内无法全部容纳,上面的程序应该怎样修改?,思考,1)循环初始化设置循环的初始状态,位于循环程序的开头位置2)循环处理循环程序的主体部分,是通过反复执行来完成数据的具体处理,它位于循环体内。,4.2.3循环程序设计,循环程序由4部分组成:,3)循环控制也在循环体内,是用于控制循环的继续与否。4)循环结束通常位于循环体后,是用来存放循环处理的最终结果及恢复各寄存器与工作单元的原始值。,设MCS-51单片机内部RAM从40H开始的连续16个单元中,每个单元中分别存放有单字节的带符号数。要求将其中的正数存入50H开始的连续单元中,负数存入60H开始的连续单元中,并将正数、负数和零的个数分别存入70H、71H、72H单元中。,例4.4,1)带符号数的最高位为符号位,可通过最高位来判断正负。2)程序中需要分别从40H、50H和60H单元开始取源数、存放正数和负数,故需要三个地址指针来指向对应的内存单元;设对应的地址指针分别为R0、R1和R2,由于R2不能用间接寻址方式,故R2需要同R1或R0进行交换后,才能进行负数的存放。,分析,图4.3程序流程图,参考程序:ORG1000HCLRAMOV70H,A;存放正数的个数单元清0MOV71H,A;存放负数的个数单元清0MOV72H,A;存放零的个数单元清0MOVR3,#10H;设循环计数器初值MOVR0,#40H;设源数地址指针MOVR1,#50H;设正数地址指针MOVR2,#60H;设负数地址指针,LOOP:MOVA,R0;取源数JZZERO;源数为0,转ZER0JNBACC.7,POSI;源数为正,转POSIINC71H;负数个数加1MOVR4,A;暂存源数MOVA,R2XCHA,R1;R1与R2中的内容交换XCHA,R4MOVR1,A;存负数XCHA,R4XCHA,R1;R1与R2中的内容交换INCR2;调整负数地址指针SJMPLOOP1;转循坏控制,POSI:INC70H;正数个数加1MOVR1,A;存正数INCR1;调整正数地址指针SJMPLOOP1ZERO:INC72H;零的个数加1LOOP1:INCR0;调整源数地址指针DJNZR3,LOOP;未送完,继续SJMP$END,查表就是把事先计算或测得的数据按照一定的顺序编制成表格存放在存储器中,然后根据输入的数据,从表格中查出所需的结果。,4.2.4查表程序设计,片内RAM的EGA单元中有一个大写的英文字母,要求将此字母在英文字母表中的位置送入片内的COUNT单元中,如EGA单元中字母为I时,则COUNT单元中需送入数字9。,例4.6,如果将26个英文字母按照顺序编成一个表,通过查表法得到一个字母与EGA单元中的字母比较,若不相等再查,同时记录查表的次数。查完后,将记录次数送COUNT单元。,分析,ORG1000HEGAEQU50HCOUNTEQU60HMOVCOUNT,#00HMOVA,#16;调整地址LOOP:PUSHAMOVCA,A+PC;查表CJNZA,EGA,NF;所查字母与EGA中字母比较SJMPLAST;相等则转到LASTNF:POPAINCA;调整地址INCCOUNT;记数值加1SJMPLOOP;继续查LAST:INCCOUNT;记数值加1SJMP$;等待ALPT:DBA,B,Y,Z,求y=n!(n=0,1,9),已知n的值在片内RAM的NUM单元中,求得的y值用BCD码表示且存放到片内GETY开始的单元中。,例4.6,分析:可将函数值列成表,采用查表法求y=n!当n=9时,y=362880H,需要三个单元存放结果。设每个n对应的y值都用3个单元来存放,则y值在表格中的首地址的计算公式为:y地址=函数表首址+n*3,参考程序ORG1000HNUMEQU50HGETYEQU60HMOVR1,#03HMOVR0,#GETYMOVA,NUM;取n值MOVB,#03HMULAB;n*3MOVR2,A;暂存MOVDPTR,#TAB;表的首地址送DPTR中,LOOP:MOVCA,A+DPTR;查表MOVR0,A;存结果INCR0;调整存放结果地址指针INCDPTR;修正表地址指针MOVA,R2;恢复n*3DJNZR1,LOOP;未查完,继续SJMP$TAB:DB01H,00H,00H,01H,00H,00HDB02H,00H,00H,06H,00H,00HDB24H,00H,00H,20H,01H,00HDB20H,07H,00H,40H,50H,00HDB20H,03H,04H,80H,28H,36H,编写子程序时应注意:a.子程序的第一条指令之前必须有标号;b.子程序中需要保护现场;c.主程序和子程序之间的参数传递。,4.2.5子程序设计,1)数码转换子程序,例4.7二进制码转换为ASCII码,二进制数与ASCII码的对应关系:四位二进制ASCII0000(0)30H0001(1)31H1001(9)39H1010(A)41H1111(F)46H,ORG1000BTOASC:PUSHAPUSHPSWMOVA,R0ANLA,#0FH;取四位二进制数MOVR0,A;暂存CLRCSUBBA,#0AH;与10比较MOVA,R0;恢复四位二进制数JCLOOP;小于10转LOOPADDA,#07H;大于10先加07HLOOP:ADDA,#30H;加30HMOVR0,A;存结果POPPSWPOPARET,已知片内BLOCKB单元开始处有一数据块,块长在R2中,在此数据块的每个单元中存放有一个未组合的BCD码,要求将每个BCD码转换为ASCAII码,并存放在片内BLOCKA开始的连续单元中。,例4.8BCD码转换为ASCAII码,主程序:ORG1000HMOVR2,#LMOVR0,#BLOCKB;设BCD码的地址指针MOVR1,#BLOCKA;设ASCAII的地址指针LOOP:ACALLTRANS;调用TRANS子程序DJNZR2,LOOP;未转换完,继续SJMP$,将一位BCD码转换为ASCAII码的子程序:TRANS:MOVA,R0;取BCD码ADDA,#30HMOVR1,A;送ASCAII码INCR0INCR1RET;返回,分析:将一位BCD码转换为相应的ASCAII码只需加上30H即可。,设片内40H单元中有一组合的BCD码,要求将其转换为二进制数存回原处。分析:1)组合的BCD码为两位十进制数,需将十位数和个位数分开处理。2)十位数转换时只要累加0AH就能将其转换为相应的二进制数,然后再将个位数直接加到转换后的十位数上就可完成整个数的转换。,例4.9BCD码转换为二进制数,ORG1000HBCDTOB:MOVA,40HANLA,#F0H;取十位数SWAPA;将十位数换到低4位JZDONE;十位数为0,返回MOVR3,#00H;累加和寄存器清0LOOP:DECAACALLADD0AH;调用加10子程序JNZLOOP;未加完继续MOVA,40HANLA,#0FH;取个位数ADDA,R3;与十位相加MOV40H,A;转换完,存结果DONE:RET;(书上此处有错),加10子程序:,已知8位二进制数在R0中,要求将其转换为BCD码并存放在片内30H、31H单元中。,分析:8位二进制数转换成3位BCD码数,用压缩BCD码存放,百位数放31H单元,十位、个位数放30H单元。,例4.10二进制数转换为BCD码,程序流程图为:,ORG1000HBTOBCD:MOVA,R0;取二进制数MOVB,#100DIVAB;除以100MOVR1,#31HMOVR1,A;百位的BCD码数存31H单元DECR1XCHA,B;二进制数除以100的余数送累加器中MOVB,#10DIVAB;除以10SWAPAADDA,B;十位与个位的BCD码进行组合MOVR1,A;组合的BCD码送30H中RET,已知片内RAMADR1开始的单元依次从低位到高位存放有L个字节的无符号数,片外RAMADR2开始的单元也依次从低位到高位存放有L个字节的无符号数。请编一个加法程序,将他们的和存放在ADR1开始的连续单元中。,2)算术运算子程序,例4.11多字节无符号数相加,程序流程框图:,ORG1000HNSADD:MOVR0,#ADDR1;设被加数的地址指针MOVDPTR,#ADDR2;设加数的地址指针MOVR2,#L;设循环计数器初值CLRCLOOP:MOVXA,DPTR;取加数ADDCA,R0;两数相加MOVR0,A;存和INCR0;调整被加数地址指针INCDPTR;调整加数地址指针DJNZR2,LOOP;未加完,继续RET;返回,已知被乘数和乘数分别为双字节的无符号数,被乘数的高字节和低字节分别存放在R7和R6中,乘数的高字节和低字节分别存放在R5和R4中。要求乘积存放在片内RAM以ADR开始的单元中。分析:由于只有单字节乘法指令,双字节的乘法需要分作4次乘法运算才能实现。,例4.15两双字节无符号数相乘,ORG1000HMUL1:MOV40H,#00H;统计bdH+adL+bcL;的进位单元清0MOV41H,#00H;统计adH+bcH+acL;的进位单元清0MOVR0,#50H;积的首地址送R0中MOVA,R6;b送AMOVB,R4;d送BMULAB;bdMOVR0,A;bdL送50H单元中MOVR1,B;bdH送R1中,MOVA,R7;a送AMOVB,R4;d送BMULAB;adMOVR2,A;adL送R2中MOVR3,B;adH送R3中MOVA,R6;b送AMOVB,R5;c送BMULAB;bcADDA,R2;bcL+adLJNCNEXT1INC40H;统计进位NEXT1:ADDA,R1;bcL+adL+bdHJNCNEXT2INC40H;统计进位NEXT2:INCR0MOVR0,A;存bcL+adL+bdH结果于51H单元,MOVR1,B;bcH存R1中MOVA,R7;a送AMOVB,R5;c送BMULAB;acADDA,40H;acL加低位进位JNCNEXT3;无进位转NEXT3INC41H;统计进位NEXT3:ADDA,R1;acL+bcHJNCNEXT4;无进位转NEXT4INC41H;统计acL+bcH进位NEXT4:ADDA,R3;acL+bc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产200kt磷酸铁锂正极材料生产线项目可行性研究报告模板-立项拿地
- 2025玛纳斯县司法局招聘编制外专职人民调解员(5人)笔试备考题库及答案解析
- 2025年文化与科技融合趋势下的智慧农业解决方案报告
- 2025年工业互联网平台传感器网络自组网技术在智能工厂设备智能调度中的应用报告
- 合作学习:大学英语词汇教学的创新与突破
- 教师招聘之《小学教师招聘》考试历年机考真题集附参考答案详解【典型题】
- 教师招聘之《小学教师招聘》高分题库附答案详解(综合卷)
- 教师招聘之《小学教师招聘》通关测试卷含答案详解(综合题)
- 押题宝典教师招聘之《幼儿教师招聘》模考模拟试题附答案详解(模拟题)
- 2025年湖南中烟招聘考试笔试试题试题附答案
- 食材库房防霉防潮卫生管理措施
- 腹透患者的饮食管理
- 人工智能辅助药物服务企业制定与实施新质生产力项目商业计划书
- 门诊部护理质控
- 财务部实习生聘用合同模板
- 2025至2030全球及中国人工智能招聘行业发展趋势分析与未来投资战略咨询研究报告
- 基金从业资格-私募股权投资基金基础知识讲义
- 社会法课件教学课件
- 麻醉恢复室患者的安全转运
- 2025年福建省中考语文试卷真题(含标准答案)
- 供方准入管理制度
评论
0/150
提交评论