下面是前辈留下的汇编程序的一段,后面的注释是我理解加上的,小弟想把它改写成C的,对其中的一部分不理解,请高手指点,不胜感激!
MOV DPTR,#0000H
ADCStart: MOV 0D8H,#10H ;ADC控制字赋值,启动ADC转换
Wait: MOV A,0F5H ;ADC状态字读入累加器A
JB ACC.7 Wait ;判断ACC.7是否清0,为1表示ADC忙
MOV A,0D9H ;转换结束,ADC转换值低8位读入累加器
ADD A,46H ;???????
MOV 46H,A
MOV A,0DAH ;ADC转换值高8位读入累加器
ADDC A,45H ;???????
MOV 45H,A
MOV A,44H
ADDC A,#00H
MOV 44H,A
INC DPTR
MOV A,DPL
JNZ ADCStart ;是否是一个多次采样结果累加的循环?
* MOV A,46H
RLC A
MOV 46H,A
MOV A,45H
RLC A
MOV 45H,A
MOV A,44H
RLC A
MOV 44H,A
MOV A,46H
RLC A
MOV 46H,A
MOV A,45H
RLC A ;*号区间这部分指令对ADC采集数据做了什么处理?
MOV 45H,A
MOV A,44H
RLC A
MOV 44H,A
MOV A,45H
RLC A
MOV A,44H
RLC A
CLR ACC.7
MOV 40H,A
MOV A,45H
SETB ACC.7
MOV 41H,A
XRL A,40H
* MOV 42H,A
SETB 2FH.6
SETB 2FH.5
MOV SBUF,40H
MOV DPTR,#0000H
CLR A
MOV 44H,A
MOV 45H,A
MOV 46H,A
INC 48H
MOV A,48H
JNZ ADCStart
CPL P1.0
SJMP ADCStart
主要是*号区间这部分指令对ADC采集数据做了什么处理我理解不了。
小弟汇编语言只接触过一点点,遇到寄存器之间倒腾头都大了!
[
本帖最后由 liusl1978 于 2013-9-17 21:22 编辑 ]
此帖出自
小平头技术问答
具体而言,执行了什么操作?
比如这里头就是纯粹以A为中转操作一系列位置
具体操作了什么变量,从什么变到什么。
把这些理顺了,就可以慢慢地 理解数据被做了什么操作,你又知道具体的应用情形
ADC
那么,除了你,没人比你更合适理清楚这个程序了
一周热门 更多>