51单片机实验

删了怪可惜的,不要浪费。

单字节十六进制数转换成双字节 ASCII 码
功    能:单字节十六进制数转换成双字节 ASCII 码
入口条件:待转换的单字节十六进制数在累加器 A 中。
出口信息:高四位的 ASCII 码在 A 中,低四位的 ASCII 码在 B 中

实现1:(计算法)
   PUSH A                ;将A压栈,保存     
   MOV DPTR,#AST        ;把AST数据段起始地址送DPTR,作为基址  
   ANL A,#0FH            ;取低四位,即为低位ASCII码表示的数据大小
   ADD A, 30H            ;A值加30H即为对应ASCII码字符
   XCH A,B              ;交换,将结果送B保存
   POP    A                ;弹栈,将入口值返回到寄存器A
   SWAP A                ;高低半字节交换
   ANL A,#0FH            ;取ASCII码对应高位表示数据
   ADD A, 30H             ;A值加30H即为对应ASCII码字符。至此,功能完成
   SJMP $                 ;原地踏步指令,相当于停机

实现2:(查表法)
   PUSH A                ;将A压栈,保存     
   MOV DPTR,#AST        ;把AST数据段起始地址送DPTR,作为基址  
   ANL A,#0FH            ;取低四位,即为低位ASCII码表示的数据大小
   MOVC A,@A+DPTR        ;寄存器间接寻址/查表指令,获得ASCII码低位字符数据,送A
   XCH A,B              ;交换,将结果送B保存
   POP    A                ;弹栈,将入口值返回到寄存器A
   SWAP A                ;高低半字节交换
   ANL A,#0FH            ;取ASCII码对应高位表示数据
   MOVC A,@A+DPTR         ;寄存器间接寻址/查表指令,获得ASCII码高位字符数据,送A。至此,功能完成
   SJMP $                 ;原地踏步指令,相当于停机
AST:DB 30H,31H,32H,33H,34H,35H,36H,37H    ;对应0~7字符的ASCII码
    DB 38H,39H,41H,42H,43H,44H,45H,46H    ;对应8~F字符的ASCII码

程序整体思路:
    A、B寄存器为8位寄存器,所以高四位和低四位分别等于双字节ASCII码的高低两位字符代表的数字值。
    比如10110011B=B3H,1011B=12D=BH 0011B=3D=3H (B:二进制,D:十进制,H:十六进制)
    所以只要分别取入口参数的高低四位的数值,加上30H(或用查表法查得ASCII字符)就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值