完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟初学单片机,最近要把16进制数用汇编转为10进制数
通过查找资料找到一个算法,如下: 先左移输入的16进制数,最高位移入C, 再左移输出的10进制数,把C移入最低位, 一直移动16次,把16位全部转移完。 在循环过程中校正数值,最后一次不要校正! 校正方法,检测每4位,是否>4,如果是+3到该4位上,否则不改变! 想请教各位大神这其中的原理是什么 为什么检测每4位 为什么要看是否大于4,为什么+3? 代码如下: HEX4_BCD5: ; initial data CLRF BCD_H CLRF BCD_M CLRF BCD_L MOVLW D'16' MOVWF COUNT BCF STATUS,C ; loop part BCD_H BCD_M BCD_L <- HEX_H HEX_l HEX4_BCD5_LOOP: RLF HEX_L RLF HEX_H RLF BCD_L RLF BCD_M RLF BCD_H DECFSZ COUNT,F GOTO HEX4_BCD5_ADJUST_DAT RETLW 0 HEX4_BCD5_ADJUST_DAT: MOVLW BCD_L ; W <- BCD_L地址 MOVWF FSR ; FSR <- W (BCD_L的地址) CALL ADJUST_BYTE_HEX_BCD ; 调整 MOVLW BCD_M MOVWF FSR CALL ADJUST_BYTE_HEX_BCD MOVLW BCD_H MOVWF FSR CALL ADJUST_BYTE_HEX_BCD GOTO HEX4_BCD5_LOOP ADJUST_BYTE_HEX_BCD: MOVLW H'03' ; W<-3 ADDWF INDF,W ; F+W → W ,低四位加3 MOVWF TEMP BTFSC TEMP,3 ; ? 结果 > 7 MOVWF INDF ; 保存结果(结果 > 7) MOVLW H'30' ; W<-0X30 ADDWF INDF,W ; F+W → W ,高四位加3 MOVWF TEMP BTFSC TEMP,7 ; ? 结果 > 7 MOVWF INDF ; 保存结果(结果 > 7) RETLW 0 谢谢各位大神 |
|
相关推荐
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2084 浏览 1 评论
3629 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2336 浏览 2 评论
2763 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4024 浏览 5 评论
972浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6358浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 16:27 , Processed in 0.803379 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号