单片机小程序求救

来源:百度知道 编辑:UC知道 时间:2024/06/16 23:19:53
这是一个例题,目的是将acc中的一个十六进制数的asc码转换为十六进制数,然后存放到acc中,我认为这个程序有问题,请高手指教啊,回答的满意的加分
ASCH: CLR C
SUBB A,#30H
CJNE A,#10,+3
JC AH10
SUBB A,#07
AH10: RET
这个子程序的算法我是清楚的,我就是想问问"CJNE A,#10,+3 "中的偏移量为+3是否正确?您只需要告诉我+3在这里正不正确就可以了.
还有一楼的朋友:"JNB ACC.4,ASH1 "你这句能判断出寄存器A中的数值是否超过10吗?

没有问题的。
0——9对于的ASCII是30H到39H
字母的ASCII和数字的ASCII之间有7个数字是空的。
那样的话,A的ASCII就是41H,B的是42H...
现在用ACC减去30h,假如之前存的是数字0——9(ASCII就是30H——39H)
那现在再与10比较肯定小了,小了就返回,也就达到了目的。
如果比10大,说明是字母了。比如是a(41H),减去了30h,再减去7,就剩下
10了,正好是A的值。

就这样咯

标号: ASCH 功能:ASCII码转换成十六进制数
入口条件:待转换的ASCII码(30H~39H或41H~46H)在A中。出口信息:转换后的十六进制数(00H~0FH)仍在累加器A中。影响资源:PSW、A 。堆栈需求:2字节。
ASCH: CLR C
SUBB A,#30H
JNB ACC.4,ASH1
SUBB A,#7
ASH1: RET

CJNE A,#10,+3 不正确(正确CJNE A,#10,AH10)

:"JNB ACC.4,ASH1 "肯定能判断出寄存器A中的数值是否超过10
ASCII码(30H~39H或41H~46H)减去30h A超过10 ACC.4等于1(0001xxxx)