❶ 51单片机汇编语言
reti是中断子程序的返回命令!
假设执行的主程序是反复执行的循环程序,与中断子程序无关。在主程序循环的过程中有中断响应,则结束主程序的一切循环,而去执行中断子程序,执行到RETI则说明中断子程序执行完毕,跳回主程序继续执行主程序的循环。
❷ 51单片机入门编程(汇编语言)
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0ISR
ORG0030H
MAIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
SETBET0
SETBEA
CLRP1.0
SJMP$
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
CPLP1.0
RETI
END
❸ 51单片机 汇编语言
;P1 IS KEY
;P0 IS LED
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
JB P1.0,MAIN1
MOV A,#0FEH
SJMP MLED
MAIN1:
JB P1.1,MAIN2
MOV A,#0FCH
SJMP MLED
MAIN2:
JB P1.2,MAIN3
MOV A,#0F8H
SJMP MLED
MAIN3:
JB P1.3,MAIN4
MOV A,#0F0H
SJMP MLED
MAIN4:
JB P1.4,MAIN5
MOV A,#0E0H
SJMP MLED
MAIN5:
JB P1.5,MAIN6
MOV A,#0C0H
SJMP MLED
MAIN6:
JB P1.6,MAIN7
MOV A,#80H
SJMP MLED
MAIN7:
JB P1.7,MAIN
MOV A,#0
MLED:
MOV P0,A
LJMP MAIN
END
❹ C51单片机汇编语言
你用的是跳转指令进入程序段,而不是子程序调用,所以不能用RET返回,只能同样跳回去
用LCALL或者ACALL命令调用子程序时会把当前的程序地址压入堆栈当前点,在遇到RET指令时就会把保存的断点地址弹回PC寄存器,继续调用之前的执行,但是JMP系列指令不会保存断点地址,所以RET时就会把堆栈当前点数据装入PC,上电后RAM中未初始化的单元都是0,所以就会把0装入PC,于是程序就回到0地址了。
❺ 51单片机汇编语言
ORG 00H
LJMP MAIN
ORG 30H
MAIN:
MOV R2,#0
MOV R0,#40H
MOV R1,#30H
MOV DPTR,#2000H
LOOP1:
MOVX A,@DPTR
MOV B,#2
MUL AB
ADD A,@R1
DEC A
MOV @R0,A
INC R0
INC R1
INC DPTR
CJNE R2,#10,LOOP1
MOV R2,#0
MOV R1,#40H
MOV DPTR,#3000H
LOOP2:
MOV A,@R1
MOVX @DPTR,A
INC R0
INC R1
INC DPTR
CJNE R2,#10,LOOP2
SJMP $
END(未完)
❻ 关于51单片机汇编语言程序
ORG 0000H
LJMP MAIN
ORG 000BH
LCALL TIMER0
ORG 1000H
MAIN:
LCALL INIT
WAIT :
CJNE R0,#10,WAIT
MOV R0,#0
RRC A
MOV P1,A
SJMP WAIT
INIT
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#B0H
SETB EA
SETB ET0
SETB TR0
MOV A,#01H
MOV P1,A
RET
TIMER0:
MOV TH0,#3CH
MOV TL0,#B0H
INC R0
RETI
❼ 51单片机汇编语言程序
程序中那些转移指令有点乱,不能从一个中断服务程序直接跳到服务程序外。再就是主程序和子程序之间的位置关系也乱了。