📄 汽车后视镜耐久试验台汇编程序.asm
字号:
;汽车后视镜球头耐磨机,程序通过测试
;原理是通过控制上下左右4个气缸往复运动,模拟人手扳动后视镜做耐久试验。
;89C51,晶振11.0592M
J1 EQU P1.0 ;1#下气缸后退
J2 EQU P1.1 ;1#下气缸前进
J3 EQU P1.2 ;2#上气缸后退
J4 EQU P1.3 ;2#上气缸前进
J5 EQU P1.4 ;3#右气缸后退
J6 EQU P1.5 ;3#右气缸前进
J7 EQU P1.6 ;4#左气缸后退
J8 EQU P1.7 ;4#左气缸前进
K01 EQU P0.1 ;1#下气缸后退到位传感器
K02 EQU P0.0 ;1#下气缸中部到位传感器
K03 EQU P0.2 ;1#下气缸前进到位传感器
K04 EQU P0.4 ;2#上气缸后退到位传感器
K05 EQU P0.3 ;2#上气缸中部到位传感器
K06 EQU P0.5 ;2#上气缸前进到位传感器
K07 EQU P0.6 ;3#右气缸后退到位传感器
K08 EQU P2.7 ;3#右气缸中部到位传感器
K09 EQU P2.6 ;3#右气缸前进到位传感器
K10 EQU P0.7 ;4#左气缸后退到位传感器
K11 EQU P2.5 ;4#左气缸中部到位传感器
K12 EQU P2.4 ;4#左气缸前进到位传感器
AN1 EQU P3.2 ;启动控制按钮
AN2 EQU P3.3 ;回位控制按钮
AN3 EQU P3.4 ;备用控制按钮
AN4 EQU P3.5 ;备用控制按钮
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP ERR
ORG 0100H
MAIN:MOV SP,#60H
MOV PSW,#00H
MOV SCON,#00H
MOV TMOD,#01H ;设置T0为16位定时器
SETB ET0 ;允许T0中断
SETB PT0 ;设置T0中断为高级中断
MOV TL0,#00H ;设定T0的定时初值,定时时间约为16ms(6M晶振)
MOV TH0,#0B0H
SETB EA ;开中断
SETB TR0 ;启动T0
;开机,气缸后退复位
KS: LCALL YS2 ;延时开机
JNB K01,AA1 ;检测下气缸是否在零位
CLR J1 ;不在,下气缸后退
TA1:MOV R4,#0FFH
TA2:JNB K01,TA3 ;检测下气缸是否后退到位
DJNZ R4,TA2
LCALL DOG ;调用喂狗子程序
SJMP TA1
TA3:LCALL YS1 ;延时,防止误动作
JB K01,TA1
SETB J1 ;下气缸后退到位,停止
LCALL YS2 ;延时
AA1:JNB K04,AA2 ;检测上气缸是否在零位
CLR J3 ;不在,上气缸后退
TB1:MOV R4,#0FFH
TB2:JNB K04,TB3 ;检测上气缸是否后退到位
DJNZ R4,TB2
LCALL DOG ;调用喂狗子程序
SJMP TB1
TB3:LCALL YS1 ;延时,防止误动作
JB K04,TB1
SETB J3 ;上气缸后退到位,停止
LCALL YS2 ;延时
AA2:JNB K07,AA3 ;检测右气缸是否在零位
CLR J5 ;不在,右气缸后退
TC1:MOV R4,#0FFH
TC2:JNB K07,TC3 ;检测右气缸是否后退到位
DJNZ R4,TC2
LCALL DOG ;调用喂狗子程序
SJMP TC1
TC3:LCALL YS1 ;延时,防止误动作
JB K07,TC1
SETB J5 ;右气缸后退到位,停止
LCALL YS2 ;延时
AA3:JNB K10,KS1 ;检测左气缸是否在零位
CLR J7 ;不在,左气缸后退
TD1:MOV R4,#0FFH
TD2:JNB K10,TD3 ;检测左气缸是否后退到位
DJNZ R4,TD2
LCALL DOG ;调用喂狗子程序
SJMP TD1
TD3:LCALL YS1 ;延时,防止误动作
JB K10,TD1
SETB J7 ;右气缸后退到位,停止
LCALL YS2 ;延时
;开始运行
KS1:JNB AN1,BB3 ;检测是否按下启动键
BB1:MOV R4,#0FFH
BB2:JNB AN1,BB3 ;检测左气缸是否后退到位
DJNZ R4,BB2
LCALL DOG ;调用喂狗子程序
SJMP BB1
BB3:LCALL YS2 ;延时,防止误动作
JB AN1,BB1 ;按下启动键开始运
MOV R3,#00H
MOV R5,#00H
;主程序
;-------------------下气缸运动程序
KS2:CLR J2 ;下气缸前进
TE1:MOV R4,#0FFH
TE2:JNB K02,TE3 ;检测下气缸是否前进到中位
DJNZ R4,TE2
LCALL DOG ;调用喂狗子程序
SJMP TE1
TE3:LCALL YS1 ;延时,防止误动作
JB K02,TE1
SETB J2 ;下气缸前进到中位,暂停
LCALL YS3 ;延时暂停
KS3:CLR J2 ;下气缸继续前进
FF1:MOV R4,#0FFH
FF2:JNB K03,FF3 ;检测下气缸是否前进到端位
DJNZ R4,FF2
LCALL DOG ;调用喂狗子程序
SJMP FF1
FF3:LCALL YS1 ;延时,防止误动作
JB K03,FF1
SETB J2 ;下气缸前进到端位,停止
LCALL YS2 ;延时
CLR J1 ;下气缸后退回位
TG1:MOV R4,#0FFH
TG2:JNB K01,TG3 ;检测下气缸是否后退回位
DJNZ R4,TG2
LCALL DOG ;调用喂狗子程序
SJMP TG1
TG3:LCALL YS1 ;延时,防止误动作
JB K01,TG1
SETB J1 ;下气缸后退回位,停止
LCALL YS3 ;延时
;-------------------上气缸运动程序
CLR J4 ;上气缸前进
HH1:MOV R4,#0FFH
HH2:JNB K05,HH3 ;检测上气缸是否前进到中位
DJNZ R4,HH2
LCALL DOG ;调用喂狗子程序
SJMP HH1
HH3:LCALL YS1 ;延时,防止误动作
JB K05,HH1
SETB J4 ;上气缸前进到中位,停止
LCALL YS3 ;暂停
CLR J4 ;上气缸继续前进
TI1:MOV R4,#0FFH
TI2:JNB K06,TI3 ;检测上气缸是否前进到端位
DJNZ R4,TI2
LCALL DOG ;调用喂狗子程序
SJMP TI1
TI3:LCALL YS1 ;延时,防止误动作
JB K06,TI1
SETB J4 ;上气缸前进到端位,停止
LCALL YS2 ;延时
CLR J3 ;上气缸后退回位
TJ1:MOV R4,#0FFH
TJ2:JNB K04,TJ3 ;检测上气缸是否后退回位
DJNZ R4,TJ2
LCALL DOG ;调用喂狗子程序
SJMP TJ1
TJ3:LCALL YS1 ;延时,防止误动作
JB K04,TJ1
SETB J3 ;上气缸后退回位,停止
LCALL YS3 ;延时
;-------------------下气缸运动程序(推手柄至中部)
CLR J2 ;下气缸前进
TK1:MOV R4,#0FFH
TK2:JNB K02,TK3 ;检测下气缸是否前进到中位
DJNZ R4,TK2
LCALL DOG ;调用喂狗子程序
SJMP TK1
TK3:LCALL YS1 ;延时,防止误动作
JB K02,TK1
SETB J2 ;下气缸前进到中位,暂停
LCALL YS2 ;延时暂停
CLR J1 ;下气缸后退回位
LL1:MOV R4,#0FFH
LL2:JNB K01,LL3 ;检测下气缸是否后退回位
DJNZ R4,LL2
LCALL DOG ;调用喂狗子程序
SJMP LL1
LL3:LCALL YS1 ;延时,防止误动作
JB K01,LL1
SETB J1 ;下气缸后退回位,停止
LCALL YS3 ;延时
;-------------------右气缸运动程序
; CLR J6 ;右气缸前进
;TM1:MOV R4,#0FFH
;TM2:JNB K08,TM3 ;检测右气缸是否前进到中位
; DJNZ R4,TM2
; LCALL DOG ;调用喂狗子程序
; SJMP TM1
;TM3:LCALL YS1 ;延时,防止误动作
; JB K08,TM1
; SETB J6 ;右气缸前进到中位,停止
; LCALL YS3 ;暂停
CLR J6 ;右气缸前进
TN1:MOV R4,#0FFH
TN2:JNB K09,TN3 ;检测右气缸是否前进到端位
DJNZ R4,TN2
LCALL DOG ;调用喂狗子程序
SJMP TN1
TN3:LCALL YS1 ;延时,防止误动作
JB K09,TN1
SETB J6 ;右气缸前进到端位,停止
LCALL YS2 ;延时
CLR J5 ;右气缸后退回位
TY1:MOV R4,#0FFH
TY2:JNB K07,TY3 ;检测右气缸是否后退回位
DJNZ R4,TY2
LCALL DOG ;调用喂狗子程序
SJMP TY1
TY3:LCALL YS1 ;延时,防止误动作
JB K07,TY1
SETB J5 ;右气缸后退回位,停止
LCALL YS3 ;延时
;-------------------左气缸运动程序
CLR J8 ;左气缸前进
TX1:MOV R4,#0FFH
TX2:JNB K11,TX3 ;检测左气缸是否前进到中位
DJNZ R4,TX2
LCALL DOG ;调用喂狗子程序
SJMP TX1
TX3:LCALL YS1 ;延时,防止误动作
JB K11,TX1
SETB J8 ;左气缸前进到中位,停止
LCALL YS3 ;暂停
CLR J8 ;左气缸继续前进
TT1:MOV R4,#0FFH
TT2:JNB K12,TT3 ;检测左气缸是否前进到端位
DJNZ R4,TT2
LCALL DOG ;调用喂狗子程序
SJMP TT1
TT3:LCALL YS1 ;延时,防止误动作
JB K12,TT1
SETB J8 ;左气缸前进到端位,停止
LCALL YS2 ;延时
CLR J7 ;左气缸后退回位
TU1:MOV R4,#0FFH
TU2:JNB K10,TU3 ;检测左气缸是否后退回位
DJNZ R4,TU2
LCALL DOG ;调用喂狗子程序
SJMP TU1
TU3:LCALL YS1 ;延时,防止误动作
JB K10,TU1
SETB J7 ;左气缸后退回位,停止
LCALL YS3 ;延时
;-------------------右气缸运动程序(推手柄至中部)
CLR J6 ;右气缸前进
TV1:MOV R4,#0FFH
TV2:JNB K08,TV3 ;检测右气缸是否前进到中位
DJNZ R4,TV2
LCALL DOG ;调用喂狗子程序
SJMP TV1
TV3:LCALL YS1 ;延时,防止误动作
JB K08,TV1
SETB J6 ;右气缸前进到中位,停止
LCALL YS2 ;暂停
CLR J5 ;右气缸后退回位
ZZ1:MOV R4,#0FFH
ZZ2:JNB K07,ZZ3 ;检测右气缸是否后退回位
DJNZ R4,ZZ2
LCALL DOG ;调用喂狗子程序
SJMP ZZ1
ZZ3:LCALL YS1 ;延时,防止误动作
JB K07,ZZ1
SETB J5 ;右气缸后退回位,停止
LCALL YS3 ;延时
INC R3 ;计数器,试验3000次后停止
CJNE R3,#200,L1
INC R5
CJNE R5,#15,L1
AJMP KS1
L1: AJMP KS3
;延时子程序
YS1:MOV R0,#02H ;短延时子程序
Y1: MOV R1,#0FH
DJNZ R1,$
LCALL DOG ;调用喂狗子程序
DJNZ R0,Y1
RET
YS2:MOV R1,#0FFH ;中延时子程序
Y2: MOV R2,#0FFH
DJNZ R2,$
LCALL DOG ;调用喂狗子程序
DJNZ R1,Y2
RET
YS3:MOV R0,#04H ;长延时子程序
Y3: MOV R1,#0FFH
Y4: MOV R2,#0FFH
DJNZ R2,$
LCALL DOG ;调用喂狗子程序
DJNZ R1,Y4
DJNZ R0,Y3
RET
;喂狗子程序
DOG:MOV TL0,#00H
MOV TH0,#0B0H
SETB TR0
RET
ERR:POP ACC ;定时器中断
POP ACC ;看门狗软件复位程序
CLR A
PUSH ACC
PUSH ACC
RETI
ORG 0400H
NOP
NOP
NOP
LJMP MAIN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -