⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 汽车后视镜耐久试验台汇编程序.asm

📁 用汇编语言编写的51程序
💻 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 + -