汇编和C语言执行指令的流程是一样的,
都是逐条语句执行的,
只不过汇编直接操作寄存器,
必须对寄存器非常熟悉。
C语言编写起来更方便一点,
特别是处理16位数据,加减乘除。
还有一些复杂的函数调用。
;--------------------------------------
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV P3,#0FFH
MOV P1,#0FFH
CLR P3.5 ;电机停止
LCALL DE3 ;延时8秒
SETB P3.5 ;电机输出
MAN: JB P3.7,MAI
LCALL DSS ;延时等待红外输入
JB P3.7,MAI
MK1: CLR P1.7 ;电机输出
LCALL DE3 ;延时3秒
SETB P1.7 ;电机停止
LCALL DE8 ;延时8秒
CLR P1.7 ;电机输出
LJMP LOOP ;跳检测对接
;--------------------------------------
MAI: JB P3.2,MAN
LCALL DSS ;延时等待行程输入
JB P3.2,MAN
LJMP MK1
;--------------------------------------
LOOP: JB P1.2,LSSP ;********
LCALL DSS ;延时等待对接输入
JB P1.2,LSSP ;********
SETB P1.7 ;电机上升停止
LTTP: JNB P1.2,LTTP ;延时等待对接脱离
LCALL DSS
JNB P1.2,LTTP
CLR P1.7 ;电机输出
LJMP LSSP ;检测上升限位
;--------------------------------------
LSSP: JB P1.4,LOOP
LCALL DSS ;延时检测上升限位
JB P1.4,LOOP
;--------------------------------------
SETB P1.7 ;电机上升停止
LCALL DEL ;延时缓冲
CLR P1.6 ;电机下降输出
LXXP: JB P1.3,LXXP
LCALL DSS ;延时检测上升限位
JB P1.3,LXXP
SETB P1.6 ;电机下降停止
LJMP MAN
DEL: MOV R1,#0FFH
DEL3: MOV R2,#0E1H
DEL2: MOV R3,#08H
DEL1: DJNZ R3,DEL1
DJNZ R2,DEL2
DJNZ R1,DEL3
RET
;--------------------------------------
DSS: MOV R1,#0FFH
DES3: MOV R2,#0AFH
DES2: DJNZ R2,DES2
DJNZ R1,DES3
RET
;--------------------------------------
DE3: MOV R4,#03H
DE33: LCALL DEL
DJNZ R4,DE33
RET
;--------------------------------------
DE8: MOV R4,#03H
DE88: LCALL DEL
DJNZ R4,DE88
RET
;--------------------------------------
END