有空编了个单片机的小程序
;数码管的小程序
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!!