




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 查表程序设计,查表程序是一种常用程序, 它广泛使用于 LED显示控制、 打印机打印控制、数据补偿、数值计算、转换等功能程序中, 这类程序具有简单、执行速度快等特点。 所谓查表法, 就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出, 然后把这张表存于单片机的程序存储器中, 这时自变量值为单元地址, 相应的函数值为该地址单元中的内容。查表, 就是根据变量 X在表格中查找对应的函数值 Y, 使 Y=f(X)。,MCS - 51指令系统中, 有两条查表指令: MOVC A, A+PC MOVC A, A+DPTR,例 1 一个十六进制数存放在内部 RAM 的 HEX单元的低 4 位中, 将其转换成ASCII码并送回 HEX单元。 十六进制 09的ASCII码为 30H39H, AF的ASCII码为41H46H, ASCII码表格的首地址为ASCTAB。编程如下:,ORG 1000H HEXASC: MOV A, HEX ANL A, 0FH ADD A, 03H; 修改指针 MOVC A, A+PC MOV HEX, A RET,ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H 在这个程序中, 查表指令MOVC A, A+PC到表格首地址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。,例 2 设有一个巡回检测报警装置, 需对 96 路输入进行控制, 每路有一个额定的最大值, 是双字节数。当检测量大于该路对应的最大值时, 就越限报警。假设R2 为保存检测路数的寄存器, 其对应的最大额定值存放于 31H和 32H单元中。 查找最大额定值的程序如下:,FMAX: MOV A, R2 ADD A, R2 ; 表中一个额定值为2个字节 MOV 31H, A MOV DPTR, TAB ; 表首址,MOVC A, A+DPTR; 查表读取第一个字节 XCH A, 31H ; 第一个字节内容存入31H INC DPTR MOVC A, A+DPTR; 查表读取第二个字节 MOV 32H, A ; 第二字节的内容存入32H TAB: DW 1230H, 1450H, . DW 2230H, 2440H, . DW 3120H, 3300H, .,2 数制转换,例 4 将一个字节二进制数转换成 3 位非压缩型BCD码。 设一个字节二进制数在内部RAM 40H单元, 转换结果放入内部 RAM 50H#, 51H, 52H单元中(高位在前), 程序如下:,HEXBCD: MOV A, 40H MOV B, 100 DIV AB MOV 50H, A MOV A, 10 XCH A, B DIV AB MOV 51H, A MOV 52H, B RET,例5 BCD码转换为二进制代码(方法:先将高半字节 1010,再加低半字节)。设待转换的BCD 码存放在R2中 DTOB MOV A, R2; ANL A, #0F0H ; 屏蔽低四位 SWAP A MOV B, #0AH MUL AB MOV R3,A MOV A, R2 ANL A, #0FH 屏蔽高四位 ADD A, R3 得转换结果 RET,例6 双字节BCD码转换为二进制码 设BCD码表示的4位十进制数分别存放在R1和R2中,其中R2存放千、百位,R1存放十、个位。转换后的结果低字节存放在20H单元,高字节存放在21H单元。 转换时,可由高位到低位逐位检查BCD码的数值,然后累加各十进制对应的二进制数。其中, 千位 1000 =03E8H 百位 100 = 0064H 十位 10 = 000AH 各位 BCD码=二进制码,例 BCD码3245 = 0011 0010 0100 0101 则千位累加了3次03E8H,百位累加了2次0064H, 十位累加了4次000AH,再加上个位。 BBCD11: MOV 20H, #00H; MOV 21H, #00H; MOV R3, #0E8H; MOV R4 #00H ; 一千位二进制数送R3,R4 MOV A, R2 ANL A, #0F0H; 屏蔽百位 SWAP A; 千位换到低四位 JZ BRAN1; LOOP1: DEC A ; 千位减1 ACALL ADDT ; 调用累加子程序,JNZ LOOP1 ; 千位为0否? BRAN1: MOV R3, #64H ; MOV R4, #00H ; 一百位二进制数送R3,R4 MOV A ,R2 ; ANL A, #0FH ; 屏蔽千位 JZ BRAN2 ; 百位为十转到个位处执行 LOOP2 DEC A ; 百位减1 ACALL ADDT ; 调用累加子程序 JNZ LOOP2 ; 百位为0否 BRAB2 MOV R3, #0AH ; 十的二进制数送R3 MOV A, R1 ; ANL #F0H ; 屏蔽个位 SWAP A ; 十位换到低四位 JZ BRAN3 ; 十位为0转到个位处执行,LOOP3: DEC A ; 十位减1 ACALL ADDT; 调用累加子程序 JNZ LOOP3 ; 十位为0否? BRAN3: MOV A,R1 ; ANL A, #0FH ; 屏蔽十位 MOV R3, A; ACALL ADDT; RET ADDT: PUSH PSW PUSH ACC CLR C MOV A, 20H ADD A, R3 低位字节相加,MOV 20H, A 结果送20H单元 MOV A, 21H ADDC A,R4 高位字节相加 MOV 21H, A POP ACC POP PSW RET,3 运算程序,一、 加、 减法程序,例 7 将40H开始存放的 10 个字节的数与 50H开始存放的10 个字节的数相减(假设被减数大于减数)。 设被减数指针为 R0, 减数指针为 R1, 差数放回被减数单元, R5 存放字节个数, 则程序如下:,SUB: MOV R0, 40H MOV R1, 50H MOV R5, 10 CLR C SUB1: MOV A, R0 SUBB A, R1 MOV R0, A INC R0 INC R1 DJNZ R5, SUB1 RET,二、 乘法运算程序 在计算机中, 常将乘法采用移位和加法来实现。 例8 将(R2R3)和(R6R7)中双字节无符号数相乘, 结果存入 R4R5R6R7。 此乘法可以采用部分积右移的方法来实现, 其程序框图如图 4.6 所示, 程序如下:,NMUL: MOV R4, 0 ; 初始化 MOV R5, 0 CLR C MOV R0, 16,NMUL1: MOV A, R4 ; CyR4R5R6R7右移一位 RRC A MOV R4, A MOV A, R5 RRC A MOV R5, A MOV A, R6 RRC A MOV R6, A MOV A, R7 RRC MOV R7, A JNC NMUL2; C为移出乘数的最低位 MOV A, R5 ; (R4R5)+(R6F7)(R4R5),ADD A, R3 MOV R5, A MOV A, R4 ADDC A, R2 MOV R4, A NMUL2: DJNZR0, NMUL1; 循环16位 MOV A, R4; 最后结果再移一位 RRC A MOV R4, A MOV A, R5 RRC A MOV R5, A MOV A, R6,RRC A MOV R6, A MOV A, R7 RRC A MOV R7, A RET,图4.6 NMUL程序框图,例 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: MOV A, R2 MOV B, R3 MUL AB ; (R3)(R2) MOV R5, A ; 积的低位送R5 MOV R6, B ; 积的高位送R6 MOV A, R2 MOV B, R4 MUL AB ; (R4)(R2) ADD A, R6 ; (R3)(R2)的高位加(R4)(R2)的低位 MOV A, B ADDC A, 00H ; (R4)(R2)的高位加Cy MOV R7, A ; 结果送R7 RET,三、 除法运算程序 除法是乘法的逆运算, 用移位、 相减的方法来完成。 首先比较被除数的高位字与除数, 如被除数高位大于除数, 则商为1, 并从被除数中减去除数, 形成一个部分余数; 否则商位为 0, 不执行减法。 然后把新的部分余数左移一位, 并与除数再次进行比较。循环此步骤, 直到被除数的所有位都处理完为止,一般商的字长为 n, 则需循环n次。 一般计算机中, 被除数均为双倍位, 即如果除数和商为双字节, 则被除数为四字节。如果在除法中发生商大于规定字节, 称为溢出。 在进行除法前, 应该检查是否会产生溢出。一般可在进行除法前, 先比较被除数的高位与除数, 如被除数高位大于除数, 则溢出, 置溢出标志, 不执行除法。,图 4.7 除法程序的流程,例 10 将(R4R5R6R7)除以(R2R3), 商放在(R6R7)中, 余数放在(R4R5)中。,NDIV: MOV A, R5 ; 判商是否产生溢出 CLR C SUBB A, R3 MOV A, R4 SUBB A, R2 JNC NDIV1 ; 溢出, 转溢出处理 MOV B, 16; 无溢出, 执行除法,NDIV2: CLR C ; 被除数左移一位, 低位送 0 MOV A, R7 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A XCH A, R4 RLC A XCH A, R4,MOV F0, C ; 保护移出的最高位 CLR C SUBB A, R3 ; 部分余数与除数比较 MOV R1, A MOV A,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年证券从业资格证考试经验交流与分享试题及答案
- 注会考试交流分享会试题与答案
- 项目管理投资效益分析试题及答案
- 证券从业资格证考试的知识体系试题及答案
- 关注微生物检验考试的试题及答案发展导航
- 项目管理考试技巧与试题及答案
- 细化项目管理沟通流程的关键题目试题及答案
- 项目管理经验分享试题及答案
- 2025年注会考试过程中的知识点适应性试题及答案
- 微生物检验与社会责任的关系试题及答案
- DBT29-265-2019 天津市市政基础设施工程资料管理规程
- -城乡规划法-最新课件
- DB32T 4013-2021 第三方社会稳定风险评估技术规范
- 夏日泛舟海上 (3)
- 垂体瘤-PPT课件
- 钻井井控装置
- ESC指南心包疾病
- 第三章卫星运动基础与GPS卫星星历
- 赣美版(江西)小学四年级美术下全册教案
- 三年级美术下册 第12课《班级小报》课件1 浙美版
- 预拌商品混凝土项目运营方案(模板范文)
评论
0/150
提交评论