学习arm9以来,回头看c51就简单多了。中断就操作几个寄存器打开开关,关闭开关。但主程序和中断程序都要调用相同程序时就要考虑压栈,当然这里不说了。还要注意的是哪些需要手动清除的中断。
写汇编学汇编:
ORG 0000H
AJMP START
ORG 0003H
AJMP INT
ORG 0030H
START:
MOV TCON,#01H
MOV IP,#01H
MOV IE,#81H
MOV R2,#1 ;single
MOV R3,#0FEH ;k1
MOV R0,#250 ;T0
STEP00:
CJNE R2,#1,STEP01 ;第一个if分支(中分支)
LCALL DELAY0
CJNE R2,#1,STEP01
MOV P1,R3
LCALL DELAY ;第二个if小分支(判断)
CJNE R3,#0FFH,STEP10 ;
MOV R3,#0FEH
STEP10:
MOV A,R3
RL A
MOV R3,A
STEP01:
NOP
LJMP STEP00
INT: ;中断程序
MOV A,R2
CPL A
MOV R2,A
CJNE R2,#1,INT00 ;中断第一个if
MOV A,R0
SUBB A,#50
MOV R0,A
INT00:
CJNE R0,#50,INT01
MOV R0,#250
INT01: ;…………r0没有变化……………………
RETI
DELAY:
MOV A,R0
MOV R6,A
DL1:
MOV R1,#200
DL2:
NOP
NOP
NOP
NOP
NOP
DJNZ R1,DL2
DJNZ R6,DL1
RET
DELAY0:
MOV R4,#25
DL3:
MOV R5,#10
DL4:
NOP
NOP
NOP
NOP
NOP
DJNZ R5,DL4
DJNZ R4,DL3
RET
END
c及汇编:
.zip
阅读(982) | 评论(0) | 转发(1) |