
西门子S7-200PLC早已经停产了,代替他的是Smart,当然S7-1200在一些场合上也是会用于代替200的产品,但是以往的产品还是有很多场合在使用,而且市场上有很多类似的高仿制品在使用着,并且,很多指令方面的应用,也是大同小异,多了解些内容,也有助于后面自己对不同PLC的学习。
今天这里分享的指令是16进制码和ASCII码之间的转换,16进制转换为ASCII码,VB103中如果是FF ,VB2=3 那么从VB130开始的3个字节的ASCII码值为F F 0 ,如果VB2=4 ,那么VB103的开始4个字节的ASCII就是F F 0 0,如下图:
第二个分享的是BCD码与整数之间的转换,以16进制的格式进行写入,比如VW0赋值为256,对应的16进制位16#0100,这时候输出VW4=100,VW8里面的值是多少,VW20里面的值就是多少,但是输出格式是16进制。当然,如果将一个两位数用数码管显示出来,就必须先将转换成BCD码,然后再用段码指令进行输出。
以上的主要还是对指令的熟悉,如果手边有PLC的话,是可以在线监控,这样就更好的理解了,也希望大家有好的学习方法与我进行交流,谢谢!
每个数字+0x30,每个字母+0x37就成了。比如开头五个fad1e:
f的16进制是1111,加0x37即1111+00110111=01000110=0x46;
a的16进制是1010,加0x37即1010+00110111=01000001=0x41;
d的16进制是1101,加0x37即1101+00110111=01000100=0x44;
1的16进制是0001,加0x37即0001+00110111=00110001=0x31;
e的16进制是1110,加0x37即1110+00110111=01000101=0x45。
所以16进制数fad1e的ASCII码就是:46 41 44 31 45。
其他的你就照猫画虎吧……
;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。
;推荐答案,写的并非是一位。
;程序如下:
ASSUME CS:CODE
CODE SEGMENT
START:
MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数
AND AL, 0FH ;无用位清零,保留该数字
;下面是变成ASCII码
CMP AL, 0AH
JB NEXT
ADD AL, 07H
NEXT:
ADD AL, 30H
;下面是显示输出
MOV DL, AL ;送到DL
MOV AH, 2 ;显示单个字符
INT 21H ;显示
MOV AH, 4CH ;结束程序
INT 21H ;返回DOS
CODE ENDS
END START
以下程序仅供参考,VB(需自行创建两个文本框):
dim s1 as string,s2 as string,i as integers1=text1text
for i=1 to len(s1)
s2=s2 & str(asc(mid(s1,i,1)))
next i
text2text=s2
HASC:MOV A,R0 ;从R0中取一个16进制(二进制)数(0-F)
ANL A,#0FH ;屏蔽掉高4位
PUSH ACC ;4位二进制数入栈
CLR C ;清进(借)位位
SUBB A,#0AH
POP ACC
JC LOOP
ADD A,#07H
LOOP:ADD A,#30H
MOV R2,A
RET
实验结果:R0中的十六进制数(比如A),转换为ASCII码(41H)送入R2中。
补充:之前第一段话说的有问题,所以修改了下,如下:(另外提交的时候没注意,第一个兄弟的回答已经是正确的了^_^)
主要思想是0~9转为对应的ASCII码时加30h,而a,b,c,d,e,f则加37h,比30h多出来的7h就是通过adc(多加了CF的01h)以及daa(多加了06h)实现的。
先说对0~9的,以5为例,
and al,0fh
add al,90h
变为95h
daa
这个时候的daa,由于95h低位,高位都小于9,且无进位,所以不变
adc al,40h
95h + 40h + CF = D5h
daa
低位不变,高位大于9,所以加60h,变为35h,且CF = 1
最终结果为35h,即字符5对应的ascii码53
然后是A~F,以C为例:
and al,0fh
add al,90h
变为9Ch
daa
这个时候的daa,先看低位,由于低位是C,大于9,所以加06h,结果变为A2h,再看高位,高位A,大于9,所以加60h,变为02h,CF = 1(有进位)
adc al,40h
adc *** 作,02h + 40h + CF = 43h
daa
此时43h低高位都小于9,所以无变化。最后结果43h,也即C的ASCII码67
请教怎么把16进制字符串转换为Ascii码
使用这个方法可以传进去的16进制的数字组成的字符串转化为utf-8格式的字符串
public static String toStringHex1(String s) {
byte[] baKeyword = new byte[slength() / 2];
for (int i = 0; i < baKeywordlength; i++) {
try {
baKeyword[i] = (byte) (0xff & IntegerparseInt(ssubstring(
i 2, i 2 + 2), 16));
} catch (Exception e) {
eprintStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1printStackTrace();
}
return s;
}
以上就是关于十六进制转ascii码算法全部的内容,包括:十六进制转ascii码算法、怎么将16进制转换成ASCII码、汇编语言 编写一个程序,将AL寄存器中的一位十六进制数转化成ASCII码 显示输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)