第一范文网 - 专业文章范例文档资料分享平台

51单片微型机原理和接口教程 习题答案(完整版)

来源:用户分享 时间:2025/5/26 7:58:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

算法一提示:根据0~9的序号依次查出对应的显示码,然后与40H中的内容比较,如果相等,则根据当前序号查表得到对应的格雷码。 ; 显示码转换成格雷码

;入口参数:子程序名CHGRY,七段显示码被放在内部数据存储器40H中,影响ACC,B,Cy位 ;出口参数:格雷码放在内部数据存储器50H中 CHGRY: PUSH ACC ;保护现场 PUSH B PUSH PSW MOV B, #0 ;用B记录0~9的序号 NEXT: MOV A, B ;

ADD A, #SEGTB-SSG ;用标号表达式,让编译程序计算偏移量 MOVC A, @A+PC ;根据当前序号,查取对应的显示码 SSG: CJNE A, 40H, NEQ ;比较取得的显示码与源单元中的显示码 MOV A, B ;如果相等,则根据当前序号,查取对应的格雷码 ADD A, #GRYTB-SGR MOVC A, @A+PC SGR: MOV 50H, A ;将查取的格雷码送入目标单元 POP PSW ;恢复现场 POP B POP ACC RET ;返回 NEQ: INC B ;如果不想等,则将序号增1,查取下个显示码作比较 SJMP NEXT

SEGTB: DB 3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ;显示码表 GRYTB: DB 00H, 01H, 03H, 02H, 04H, 05H, 07H, 06H, 08H, 09H ;格雷码表

算法二提示:直接将显示码转化成格雷码,程序烦了些,但方法很简单。 ; 显示码转换成格雷码

;入口参数:子程序名CHGRY,七段显示码被放在内部数据存储器40H中,影响ACC,Cy位 ;出口参数:格雷码放在内部数据存储器50H中 CHGRY: PUSH ACC ;保护现场 PUSH PSW MOV A, 40H CJNE A, #3FH, NEQ0 MOV 50H, #00H ;40H单元中的内容=0的显示码,则将0的格雷码送入50H NEQ0: CJNE A, #06H, NEQ1 MOV 50H, #01H ;40H单元中的内容=1的显示码,则将1的格雷码送入50H NEQ1: CJNE A, #6BH, NEQ2 MOV 50H, #03H ;40H单元中的内容=2的显示码,则将2的格雷码送入50H NEQ2: CJNE A, #4FH, NEQ3 MOV 50H, #02H ;40H单元中的内容=3的显示码,则将3的格雷码送入50H NEQ3: CJNE A, #66H, NEQ4 MOV 50H, #04H ;40H单元中的内容=4的显示码,则将4的格雷码送入50H NEQ4: CJNE A, #6DH, NEQ5 MOV 50H, #05H ;40H单元中的内容=5的显示码,则将5的格雷码送入50H NEQ5: CJNE A, #7DH, NEQ6 MOV 50H, #07H ;40H单元中的内容=6的显示码,则将6的格雷码送入50H NEQ6: CJNE A, #07H, NEQ7 MOV 50H, #06H ;40H单元中的内容=7的显示码,则将7的格雷码送入50H NEQ7: CJNE A, #7FH, NEQ8

MOV 50H, #08H ;40H单元中的内容=8的显示码,则将8的格雷码送入50H NEQ8: CJNE A, #6FH, QUIT MOV 50H, #09H ;40H单元中的内容=9的显示码,则将9的格雷码送入50H QUIT: POP PSW ;恢复现场 POP ACC RET

4-14 编一子程序,完成两双字节无符号数相加。设加数和被加数分别放在0区寄存器R2、R3和R4、R5中,运算结果存放在0区寄存器R6、R7中。若运算结果发生进位,使00H位单元=1;反之,使00H位单元=0。

;双字节无符号数相加

;入口参数:子程序名NADD,加数和被加数分别放在0区寄存器R2、R3和R4、R5中,影响ACC, 位Cy ;出口参数:运算结果存放在0区寄存器R6、R7中,00H位单元存放双字节相加的进位标志 NADD: PUSH ACC ;保护现场 PUSH PSW MOV A, R2 ;(R2)+(R4)→R6 ADD A, R4 MOV R6, A MOV A, R3 ;(R3)+(R5)→R7 ADDC A, R5 MOV R7, A MOV 00H, C ;Cy→00H POP PSW POP ACC ;恢复现场 RET

4-15 编制一子程序,完成10ms较精确延时功能。设系统时钟频率为24MHz。

提示:时钟频率为24MHz,则每个机器周期T=0.5us,10ms延时即需要10000us /0.5us =20000=500×40个机器周期T。软件延时子程序,就是用循环结构反复执行一些指令,而指令执行时都需要时间,所以执行完该子程序后,即完成了延时功能。 ;软件延时10ms

;入口参数:子程序名DELAY,影响2区寄存器R0, R1 ;出口参数:无

DELAY: PUSH PSW ;1T MOV PSW, #18H ;1T MOV R0, #40 ;1T DL: MOV R1, #248 ;1T*40 DL1: DJNZ R1, DL1 ;2T*248*40=19840T NOP ;1T*40 DJNZ R0, DL ;2T*40 POP PSW ;1T RET ;2T,总延时3T+40T+19840T+40T+80T+3T=20006T,误差6T=3 us,相当准了

4-16 编制一子程序,将10个非压缩BCD码转换成5个压缩BCD码。设进子程序前,非压缩BCD码被放在40H为首地址的内部数据存储器中;子程序运行后,压缩BCD码放在50H为首地址的内部数据存储器中。 功能说明:若进子程序前40H~49H单元中的内容为01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,则子程序运行后50H~54H中的内容为12H,34H,56H,78H,90H ;BCD码压缩

;入口参数:子程序名BCDCH,非压缩BCD码被放在40H为首地址的内部数据存储器中 ;影响ACC,2区寄存器R0, R1, R7

;出口参数:压缩BCD码放在50H为首地址的内部数据存储器 BCDCH: PUSH ACC ;保护现场 PUSH PSW MOV PSW, #10H ;设定当前工作寄存器区为2区 MOV R0, #40H MOV R1, #50H MOV R7, #5 LOOP: MOV A, @R0 SWAP A INC R0 ORL A, @R0 MOV @R1, A INC R1 DJNZ R7, LOOP POP PSW POP ACC RET

;R0指向源数据块首地址 ;R1指向目标数据块首地址 ;转换5次 ;前一单元内的BCD码送入ACC的高四位 ;R0指向下个源数据 ;后一单元内的BCD码送入ACC的低四位,同时并未改变源数据 ;压缩BCD码送入目标地址 ; R1指向下个目标单元 ;恢复现场 ;返回

4-17 编制一子程序,完成15个单字节补码数据按绝对值大小从小到大进行排队。设数据放在30H为首地址的内部数据存储器中。

提示:排序的基础是比较!无论是对原码、补码还是绝对值排序,基本算法都可沿用无符号数冒泡法的算法,只是在读取数据时需对数据进行一些处理,或在比较两个数的大小时改变一下方法(比如符号位的判断)。补码按绝对值排序的算法我想到了两种(当然不排除有其它方法)。一种是将补码转换成原码,由于原码是在最高位表示符号,而其余各位表示数值部分(即绝对值),这样只需比较原码的低7位即可;或者直接将其中负数的补码转换成其相反数的补码(这样所有比较的数据均为正数的补码,形式上也就是其绝对值,转换的方法是连同符号位一起取反后加1,这种方法也适用于对-128的补码进行转换)。另一种方法,判断两个待比较数的符号,同号时相减,如果差数与减数异号,则被减数绝对值<减数绝对值;两数异号时相加,如果和与被加数异号(或与加数同号),则被加数绝对值<加数绝对值;无论加减,结果为0,则两数绝对值必定相同。 ;绝对值排序,算法一

;入口参数:子程序名PAIXU,影响ACC,寄存器B,2区寄存器R0, R2, R3, 标志位Cy,F0 ;出口参数:排序后数据仍放在30H开始的15个内部数据存储器单元中 PAIXU: NEXT: LOOP: CJNE LOP1: FPOS: CJNE LOP2: PUSH ACC ;保护现场 PUSH PSW MOV PSW, #10H ;设定2区寄存器区,同时0→F0 MOV R3, #14 ;暂存比较次数→R3 CLR F0 ;进入循环前,清除交换标志F0 MOV R0, #30H ;首地址→R0 MOV R2, 13H ;当前比较次数(R3)→R2 MOV A,@R0 ;取出前一个数 A, #80H, LOP1 ;判断正负 JC FPOS ;如果为正数,则不转换 CPL A ;如果是负数,取相反数补码 INC A ;即得负数的绝对值 MOV B, A ;前数的绝对值→B INC R0 ;R0指向下个数 MOV A, @R0 A, #80H, LOP2 JC COMP ; 如果是负数,取相反数补码 CPL A INC A ; 后数的绝对值→ACC COMP: CJNE A, B, NEQ ;比较前后两绝对值 SJMP NEXCH ;后=前,不交换 NEQ: JNC NEXCH ;后>前,不交换 SETB F0 ;后<前,交换位置,置标志F0 MOV A, @R0 ;后数→ACC DEC R0 ;R0指向前单元 XCH A, @R0 ;后数→前单元,前数→ACC INC R0 ;R0恢复指向后单元 MOV @R0, A ;前数→后单元 NEXCH: DJNZ R2, LOOP ;判断一次冒泡是否完成 DEC R3 ;修改每次冒泡中的比较次数 JBC F0, NEXT ;判断冒泡中有无交换,清除F0 POP PSW ;若上次冒泡中无交换,则排序完成 POP ACC RET

51单片微型机原理和接口教程 习题答案(完整版).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c935gi8tztg8n6j487kfv_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top