❶ 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單片機匯編語言程序
程序中那些轉移指令有點亂,不能從一個中斷服務程序直接跳到服務程序外。再就是主程序和子程序之間的位置關系也亂了。