




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MCS 51单片机汇编语言程序设计举例 1查表程序设计 查表程序是一种常用程序 它广泛使用于LED显示控制 打印机打印控制 数据补偿 数值计算 转换等功能程序中 这类程序具有简单 执行速度快等特点 所谓查表法 就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出 然后把这张表存于单片机的程序存储器中 这时自变量值为单元地址 相应的函数值为该地址单元中的内容 查表 就是根据变量X在表格中查找对应的函数值Y 使Y f X MCS 51指令系统中 有两条查表指令 MOVCA A PC MOVCA A DPTR 例1一个十六进制数存放在内部RAM的HEX单元的低4位中 将其转换成ASCII码并送回HEX单元 十六进制0 9的ASCII码为30H 39H A F的ASCII码为41H 46H ASCII码表格的首地址为ASCTAB 编程如下 ORG1000H HEXASC MOVA HEX ANLA 0FH ADDA 03H 修改指针 MOVCA A PC MOVHEX A RET ASCTAB DB30H 31H 32H 33H 34H DB35H 36H 37H 38H 39H DB41H 42H 43H 44H 45H DB46H 在这个程序中 查表指令MOVCA A PC到表格首地址有两条指令 占用3个字节地址空间 故修改指针应加3 例2设有一个巡回检测报警装置 需对96路输入进行控制 每路有一个额定的最大值 是双字节数 当检测量大于该路对应的最大值时 就越限报警 假设R2为保存检测路数的寄存器 其对应的最大额定值存放于31H和32H单元中 查找最大额定值的程序如下 FMAX MOVA R2 ADDA R2 表中一个额定值为2个字节 MOV31H A MOVDPTR TAB 表首址 MOVCA A DPTR 查表读取第一个字节 XCHA 31H 第一个字节内容存入31H INCDPTR MOVCA A DPTR 查表读取第二个字节 MOV32H A 第二字节的内容存入32H TAB DW1230H 1450H DW2230H 2440H DW3120H 3300H 2数制转换 例4将一个字节二进制数转换成3位非压缩型BCD码 设一个字节二进制数在内部RAM40H单元 转换结果放入内部RAM50H 51H 52H单元中 高位在前 程序如下 HEXBCD MOVA 40H MOVB 100 DIVAB MOV50H A MOVA 10 XCHA B DIVAB MOV51H A MOV52H B RET 例5BCD码转换为二进制代码 方法 先将高半字节 1010 再加低半字节 设待转换的BCD码存放在R2中DTOBMOVA R2 ANLA 0F0H 屏蔽低四位SWAPAMOVB 0AHMULABMOVR3 AMOVA R2ANLA 0FH屏蔽高四位ADDA R3得转换结果RET 例6双字节BCD码转换为二进制码设BCD码表示的4位十进制数分别存放在R1和R2中 其中R2存放千 百位 R1存放十 个位 转换后的结果低字节存放在20H单元 高字节存放在21H单元 转换时 可由高位到低位逐位检查BCD码的数值 然后累加各十进制对应的二进制数 其中 千位1000 03E8H百位100 0064H十位10 000AH各位BCD码 二进制码 例BCD码3245 0011001001000101则千位累加了3次03E8H 百位累加了2次0064H 十位累加了4次000AH 再加上个位 BBCD11 MOV20H 00H MOV21H 00H MOVR3 0E8H MOVR4 00H 一千位二进制数送R3 R4MOVA R2ANLA 0F0H 屏蔽百位SWAPA 千位换到低四位JZBRAN1 LOOP1 DECA 千位减1ACALLADDT 调用累加子程序 JNZLOOP1 千位为0否 BRAN1 MOVR3 64H MOVR4 00H 一百位二进制数送R3 R4MOVA R2 ANLA 0FH 屏蔽千位JZBRAN2 百位为十转到个位处执行LOOP2DECA 百位减1ACALLADDT 调用累加子程序JNZLOOP2 百位为0否BRAB2MOVR3 0AH 十的二进制数送R3MOVA R1 ANL F0H 屏蔽个位SWAPA 十位换到低四位JZBRAN3 十位为0转到个位处执行 LOOP3 DECA 十位减1ACALLADDT 调用累加子程序JNZLOOP3 十位为0否 BRAN3 MOVA R1 ANLA 0FH 屏蔽十位MOVR3 A ACALLADDT RETADDT PUSHPSWPUSHACCCLRCMOVA 20HADDA R3低位字节相加 MOV20H A结果送20H单元MOVA 21HADDCA R4高位字节相加MOV21H APOPACCPOPPSWRET 3运算程序 一 加 减法程序 例7将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减 假设被减数大于减数 设被减数指针为R0 减数指针为R1 差数放回被减数单元 R5存放字节个数 则程序如下 SUB MOVR0 40H MOVR1 50H MOVR5 10 CLRC SUB1 MOVA R0 SUBBA R1 MOV R0 A INCR0 INCR1 DJNZR5 SUB1 RET 二 乘法运算程序 在计算机中 常将乘法采用移位和加法来实现 例8将 R2R3 和 R6R7 中双字节无符号数相乘 结果存入R4R5R6R7 此乘法可以采用部分积右移的方法来实现 其程序框图如图4 6所示 程序如下 NMUL MOVR4 0 初始化 MOVR5 0 CLRC MOVR0 16 NMUL1 MOVA R4 CyR4R5R6R7右移一位 RRCA MOVR4 A MOVA R5 RRCA MOVR5 A MOVA R6 RRCA MOVR6 A MOVA R7 RRC MOVR7 A JNCNMUL2 C为移出乘数的最低位 MOVA R5 R4R5 R6F7 R4R5 ADDA R3 MOVR5 A MOVA R4 ADDCA R2 MOVR4 A NMUL2 DJNZR0 NMUL1 循环16位 MOVA R4 最后结果再移一位 RRCA MOVR4 A MOVA R5 RRCA MOVR5 A MOVA R6 RRCA MOVR6 A MOVA R7 RRCA MOVR7 A RET 图4 6NMUL程序框图 例9假定被乘数在 R4R3 中 乘数放在R2中 乘积放在R7R6和R5中 MCS 51中有8位数的乘法指令MUL 用它来实现多字节乘法时 可表示为 R4R3 R2 R4 28 R3 R2 R4 R2 28 R3 R2 其中 R4 R2 和 R3 R2 都是可直接用MUL指令来实现 而乘以28意味着左移8位 由此可编写如下程序 NMUL1 MOVA R2 MOVB R3 MULAB R3 R2 MOVR5 A 积的低位送R5 MOVR6 B 积的高位送R6 MOVA R2 MOVB R4 MULAB R4 R2 ADDA R6 R3 R2 的高位加 R4 R2 的低位 MOVA B ADDCA 00H R4 R2 的高位加Cy MOVR7 A 结果送R7 RET 三 除法运算程序 除法是乘法的逆运算 用移位 相减的方法来完成 首先比较被除数的高位字与除数 如被除数高位大于除数 则商为1 并从被除数中减去除数 形成一个部分余数 否则商位为0 不执行减法 然后把新的部分余数左移一位 并与除数再次进行比较 循环此步骤 直到被除数的所有位都处理完为止 一般商的字长为n 则需循环n次 一般计算机中 被除数均为双倍位 即如果除数和商为双字节 则被除数为四字节 如果在除法中发生商大于规定字节 称为溢出 在进行除法前 应该检查是否会产生溢出 一般可在进行除法前 先比较被除数的高位与除数 如被除数高位大于除数 则溢出 置溢出标志 不执行除法 图4 7除法程序的流程 例10将 R4R5R6R7 除以 R2R3 商放在 R6R7 中 余数放在 R4R5 中 NDIV MOVA R5 判商是否产生溢出 CLRC SUBBA R3 MOVA R4 SUBBA R2 JNCNDIV1 溢出 转溢出处理 MOVB 16 无溢出 执行除法 NDIV2 CLRC 被除数左移一位 低位送0 MOVA R7 RLCA MOVR7 A MOVA R6 RLCA MOVR6 A MOVA R5 RLCA MOVR5 A XCHA R4 RLCA XCHA R4 MOVF0 C 保护移出的最高位 CLRC SUBBA R3 部分余数与除数比较 MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行唐山市路北区2025秋招英文面试题库及高分回答
- 浦发银行长治市黎城县2025秋招金融科技岗笔试题及答案
- 2025年供配电技术试题及答案
- 光大银行岳阳市岳阳楼区2025秋招笔试英文行测高频题含答案
- 光大银行太原市小店区2025秋招结构化面试15问及话术
- 光大银行嘉兴市平湖市2025秋招金融科技岗笔试题及答案
- 中信银行宝鸡市渭滨区2025秋招群面案例总结模板
- 2025年管路护理知识题库及答案
- 兴业银行莆田市涵江区2025秋招笔试英语题专练及答案
- 2025年变电综合考试试题及答案
- 《背影》阅读理解及答案4篇
- 中建投融资+工程总承包业态工程总承包项目管理作业指导书2022年
- 食品车间安全培训
- 甜米酒创业计划书
- 塔吊租赁服务技术实施方案技术标
- 罐头行业成本分析
- 员工组织承诺的形成过程内部机制和外部影响基于社会交换理论的实证研究
- 计算机应用技术专业汇报课件
- 优质课件:几代中国人的美好夙愿
- 2023年真空镀膜机行业市场分析报告及未来发展趋势
- 物业礼仪规范培训方案
评论
0/150
提交评论