单片机编程问题

ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV P3,#0FFH
JNB P3.0,LOOP1
JNB P3.1,LOOP2
JMP MAIN
LOOP1:JB P3.0,MAIN
MOV P1,#01H
LCALL DELAY4
MOV P1,#02H
LCALL DELAY4
MOV P1,#04
LCALL DELAY4
MOV P1,#08
LCALL DELAY4
JMP LOOP1
LOOP2:JB P3.1,MAIN
MOV P1,#0FFH
LCALL DELAY3
MOV P1,#00H
LCALL DELAY3
JMP LOOP2

DELAY4:MOV R4,#100
DELAY1:MOV R1,#10
LOOP3:MOV R2,#249
DJNZ R2,$
DJNZ R1,LOOP3
DJNZ R4,DELAY1
RET
DELAY3:MOV R3,#50
DELAY2:MOV R1,#10
LOOP4 :MOV R2,#249
DJNZ R2,$
DJNZ R1,LOOP4
DJNZ R3,DELAY2
RET

请帮我分析下这个程序 最好每句分析 还有有哪些嵌套 怎么实现功能等等 谢谢 说得好的有分加

ORG 0000H是伪指令,表示程序从这里开始
AJMP MIAN:散转指令,程序跳转到标号为MIAN的子程序
ORG 0030H:由于中断入口地址占用了0003H-0023H的空间,所以用户程序从0030H开始
以下是主程序:
MAIN:MOV P3,#0FFH P3口全置高电平
JNB P3.0 LOOP1:P3.0为低电平 转到标号为LOOP1的子程序
JNB P3.1 LOOP2: P3.1为低电平 转到标号为LOOP2的子程序

以下为子程序:
LOOP1:JB P3.0,MAIN P3.0为1 跳转到主程序MAIN
MOV P1,#01H 给P1口赋值01H
LCALL DELAY4 调用延时子程序 DELAY4
MOV P1,#02H 给P1口赋值02H
LCALL DELAY4 调用延时子程序 DELAY4
MOV P1,#04 给PI口赋值04H
LCALL DELAY4 调用延时子程序 DELAY4
MOV P1,#08 给PI口赋值08H
LCALL DELAY4 调用延时子程序 DELAY4
JMP LOOP1

LOOP2:JB P3.1,MAIN P3.1为1 跳转到主程序MAIN
MOV P1,#0FFH PI口全置1
LCALL DELAY3 调用延时子程序 DELAY3
MOV P1,#00H P1口全置0
LCALL DELAY3 调用延时子程序 DELAY3
JMP LOOP2
延时子程序DELAY4:
DELAY4:MOV R4,#100 给R4赋值100
DELAY1:MOV R1,#10 给R1赋值10
LOOP3:MOV R2,#249 给R2赋值249
DJNZ R2,$ R2减1 不等于0 就继续执行该指令 相当于DJNZ R2 ,$被执行249次
DJNZ R1,LOOP3 R1减1不等于0 则转到标号LOOP3处
DJNZ R4,DELAY1 R4减1不等于0 则转到标号DELAY1处
RET 子程序返回指令

延时程序DELAY3:
DELAY3:MOV R3,#50 给R3赋值50
DELAY2:MOV R1,#10 给R1赋值10
LOOP4 :MOV R2,#249 给R2赋值249
DJNZ R2,$ R2减1不等于0 则继续执行 到R2等于0 相当于执行249次 该指令
DJNZ R1,LOOP4 R1减1不等于0 转LOOP4处
DJNZ R3,DELAY2 R3减1不等于0 转DELAY2处
RET 返回

具体的功能还是自己分析下吧 !
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-23
自己多看看书就能看懂了,没啥难的。
第2个回答  2008-10-23
汇编看的头痛
相似回答