一个51汇编的小错误

来源:互联网 发布:淘宝十大女装品牌 编辑:程序博客网 时间:2024/05/22 08:01

     有空编了个单片机的小程序

;数码管的小程序  

ORG 0000H
 AJMP MAIN
 ORG 0030H
MAIN: MOV SP,#06H
 MOV P0,#0
 MOV P2,#00
LP: MOV R1,#00H
 MOV DPTR,#0100H
LOOP: MOV A,R1
 MOVC A,@A+DPTR
 MOV P0,A
; LCALL DELAY
; lcall DELAY
 LCALL DELAY
 INC R1
 CJNE R1,#10,LOOP
 LJMP LP


DELAY: MOV R5,#200
 MOV R4,#200
LOP1: NOP
LOP2: NOP
 DJNZ R4,LOP2
 DJNZ R5,LOP1
 RET

ORG 0100H
DB 0C0H,0F9H,0A4H,0B0H,99H,092H,82H,0F8H,80H,90H

上面中的R5和R4不知道为什么不能用R7来代替.替代的结果是延时子程序退出时直接跳到了0000H,的确不知道是为啥哦!!进一步学习!(经过请教,发现R7在程序默认执行中具有重要的作用!不能随意调用!)

另:

;test.asm 

org 0000h

 ajmp main
 org 0030h
main: mov r5,#0
 mov P3,#0FFH
loop: mov A,P3
        MOV C,ACC.2
 jc led
 sjmp loop


led: inc r5
 ret

此程序也是常犯错误的!!!

现象:调用led子程序返回时,直接跳转到了main!!

原因:调用子程序只能用lcall和acall另个指令!!!

only for noticing!!