300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > asic码转16进制c语言 十六进制数转换成ascii码

asic码转16进制c语言 十六进制数转换成ascii码

时间:2022-10-02 21:43:28

相关推荐

asic码转16进制c语言 十六进制数转换成ascii码

本文收集整理关于十六进制数转换成ascii码的相关议题,使用内容导航快速到达。

内容导航:

Q1:一个十六进制数转换成ASCII码的单片机程序

HASC:MOVA,R0;从R0中取一个16进制(二进制)数(0-F)

ANLA,#0FH;屏蔽掉高4位

PUSHACC;4位二进制数入栈

CLRC;清进(借)位位

SUBBA,#0AH

POPACC

JCLOOP

ADDA,#07H

LOOP:ADDA,#30H

MOVR2,A

RET

实验结果:R0中的十六进制数(比如A),转换为ASCII码(41H)送入R2中。刚才回答了,没有了吗?

Q2:如何用汇编语言把十六进制数1A5F转换成ascii码并显示在屏幕上

刚好我写了一个,调试都通过可以执行的,。

.386、.model flat,stdcall

option casemap:none

include windows.inc

include user32.inc

include kernel32.inc

includelib user32.lib

includelib kernel32.lib

.data

szCaption db convert num to srting,0

szResult db 6 dup(0)

.code

_Translate proc para1:DWORD,para2:DWORD;定义子函数,para1变量用来放传入的数组,para2用于放编程ASIC后的字符数组LOCAL _iNum;定义零时变量,用于放被除数

LOCAL _iTemp;定义零时变量,用于存放除数

LOCAL _szTemp[265]:BYTE

mov eax,para1;;获取参数para1的值eax寄存器

mov _iNum,eax;将eax中的值放入零时变量_iNum

mov _iTemp,10H

lea ebx,_szTemp

xor ecx,ecx

.while _iNum;当被除数不为0时,就一直循环

xor edx,edx

mov eax,_iNum;将被除数放入eax寄存器中

div _iTemp;寄存器eax中的值除以_iTemp,商放入eax中,余数放入dl中

mov _iNum,eax

.if dl>9H;当余数大于9时,就转化为相对应的英文字母的ASIC的值

add dl,37H

.else

add dl,30H

.endif

mov byte ptr [ebx],dl;把变化后的值放入ebx寄存器中

inc ebx

inc ecx

.endw

mov eax,para2;将参数para2的地址传给eax寄存器,再讲ecx中的值倒序存入eax寄存器中

mov byte ptr [eax+ecx],0

lea ebx,_szTemp

.repeat

mov dl,byte ptr [ebx]

mov byte ptr [eax+ecx-1],dl

inc ebx

.untilcxz ;一直循环,直到cx的值=0,每次循环后ecx的值-1、

ret

_Translate endp

start:

mov eax,1A5FH ;修改这里的数,就能把任意16进制的数转化为ASIC码了

invoke _Translate,eax,offset szResult

invoke MessageBox,NULL,offset szResult,offset szCaption,MB_OK

invoke ExitProcess,0

end start

Q3:51单片机 十六进制数与ASCII码间的转换求详解

这程序的功能就是把一字节十六进制数的低4位转换为一个ASCII码。例如0x0E转换为E、0x08转换为8。

我估计你就是对内码不太熟悉吧。

你翻一下ASCII码的内码表,再对照这程序看看,应该就能明白了。

很好懂的。

Q4:怎么用单片机编写一段程序将若干十六进制数转换为ASCII码?

不知你要的是C语言的还是汇编的,都给你吧

C语言的:

#include typedef unsigned char uchar;

#define NUMBER10、

ucharBufferIn[NUMBER]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x1a,0x1b};//16进制数存放区

ucharBufferOut[2*NUMBER];//ASCII码存放区

//功能:将多字节16进制数转换为ASCII字符

//入口:x:待转换16进制数,x>=0且x<=F

//出口:返回转换完成后的ASCII码字符数据,返回0为失败

ucharGetASCII(uchar x)

{

if(x>0x0f)

{

return 0;

}if(x>9)

{

return (A+x-10);

}

return (0+x);

}

//主程序

voidmain()

{

uchar i;

for(i=0;i{

BufferOut[i*2] = GetASCII(BufferIn[i]/0x10);

BufferOut[i*2+1] = GetASCII(BufferIn[i]%0x10);

}

while(1);

}

汇编的:

;说明:LOOP1循环为预设10个16进制数内容的初始化程序,作为示例

ORG0000H

LJMPSTART

ORG0100H

START:MOVR2,#10;预置10个16进制数

MOVR0,#20H;16进制数存放起始地址

MOVA,#12H

LOOP1:MOV@R0,A

ADDA,#13H

INCR0

DJNZR2,LOOP1;循环10次送10个数

;以上至START为初始化内存,预送10个字节的数据

MOVR0,#20H;16进制数存放起始地址

MOVR1,#30H;ASCII数存放起始地址

MOVR2,#10;转换10个字节

LCALLHEXTOASC;调用转换子程序

JMP$

;=======================================================

;HEXTOASC:将多字节16进制数转换为ASCII字符子程序

;入口:(R0)=16进制数存放起始地址指针

;(R2)=字节数

;出口:(R1)=转换完成后的ASC字符存放起始地址指针

;算法说明:0~9:(ASCII码为30H~39H)+90H后调整后无变化,结果

;为9xH,再加40H为0DxH,调整操作+60H后正好为3xH;

;A~F:(ASCII为41H~46H),+90H后为9xH,调整操作+06H后

;为01H~06H,再加40H调整后不变,正好为41H~46H;

;=======================================================

HEXTOASC:

MOVA,@R0

SWAPA

ANLA,#0FH;处理高4位

ADDA,#90H

DAA

ADDCA,#40H

DAA

MOV@R1,A;保存高4位

INCR1、MOVA,@R0

ANLA,#0FH;处理低4位

ADDA,#90H

DAA

ADDCA,#40H

DAA

MOV@R1,A;保存低4位

INCR1;下一个16进制数

INCR0

DJNZR2,HEXTOASC

RET

END

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。