单片机代码解释,求各位大神帮帮忙啊,小弟感激不尽。

 我来答
暨谷兰sY
推荐于2017-09-24 · TA获得超过352个赞
知道小有建树答主
回答量:521
采纳率:0%
帮助的人:67.8万
展开全部
将内部RAM中从DTTA1开始的N个数传送到外部RAM从DTTA2开始的区域,如果遇到‘#’或者‘*’刚停止传送。
代码如下:
ORG 0000H
AJMP MAIN
ORG 1000H
MAIN: MOV R0,#DTTA1;
MOV DPTR,#DTTA2;
LOOP:MOV A,@R0;
CJNE A,'#',L1;
AJMP E
L1:CJNE A.'*',L1
AJMP E
MOV @DPTR,A
INC DPTR
INC RO
DJNZ R7,LOOP
E:END
更多追问追答
追答
以下用C语言和注释进行解释
ORG 0000H//以下程序代码从0X0000开始
AJMP MAIN//跳转到程序代码0x1000
ORG 1000H//以下程序代码从0x1000开始
MAIN: MOV R0,#DTTA1;//R0=DTTA1; 给R0赋值
MOV DPTR,#DTTA2;//DPTR=DTTA2; 给DPTR赋值,外部RAM需要DPTR寄存器传送
LOOP:MOV A,@R0;//A=*(unsigned char*)R0; R0地址的数据传送到累加器
CJNE A,'#',L1;//if(A != '#') goto L1;
AJMP E//goto E;
L1:CJNE A.'*',L1//if(A != '*') goto L1;
AJMP E//goto E;
MOV @DPTR,A//*(unsigned char*)DPTR = A;
INC DPTR//DPTR ++;
INC RO//R0 ++;
DJNZ R7,LOOP//if((--R7) != 0) goto LOOP;
E:END//结束

有个错误在里面,L1:CJNE A,'*',L1这句,应该改成L1:CJNE A,'*',L2,然后把MOV @DPTR,A前面加上标号L2:
否则程序会一直卡在L1:CJNE A.'*',L1这里。
DJNZ R7,LOOP这句虽然看懂了,但是R7没有指明什么意义。感觉像是数据长度。相当于拷贝R7个退出,或者遇到#*退出。
追问
这串代码啥意思啊我们老师让我解释啊
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式