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字符)就可以了。

你可能感兴趣的:(Technology)