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

📄 干簧管自动检测台程序.asm

📁 几年前设计的一个干簧管自动检测台
💻 ASM
字号:
;干簧管检测仪程序
      K1 EQU P1.0     ;设置键
      K2 EQU P1.1     ;上调键
      K3 EQU P1.2     ;下调键
      BHGJS EQU P1.3  ;不合格计数输出
      JSQ EQU P1.4    ;计数信号输出
      BY1 EQU P1.5    ;自动排放元件机构控制端1
      BY2 EQU P1.6    ;自动排放元件机构控制端2
      QYK EQU P1.7    ;干簧管取样检测口

      XTDT EQU P3.0   ;吸头动态位置检测开关
      XTJT EQU P3.1   ;吸头静态位置检测开关
      XZMC EQU P3.2   ;吸头电机旋转脉冲开关
      JCK EQU P3.3    ;自动检测口
      AYDT EQU P3.4   ;压杆动态位置检测开关
      AYJT EQU P3.5   ;压杆静态位置检测开关 
      BY3 EQU P3.6    ;备用传感器
      BEEL EQU P3.7   ;蜂鸣器

      AYNZ EQU P2.0   ;控制按压电机逆转
      AYSZ EQU P2.1   ;控制按压电机顺转
      FXNZ EQU P2.2   ;控制分选电机逆转
      FXSZ EQU P2.3   ;控制分选电机顺转
      DCT3 EQU P2.4   ;3#电磁铁
      DCT2 EQU P2.5   ;2#电磁铁
      DCT1 EQU P2.6   ;1#电磁铁
      DCXT EQU P2.7   ;电磁吸头


      ORG 0000H
      AJMP KS
      ORG 1*8+3       ;INT0中断入口	
      AJMP INT_T0     ;转去定时器0中断服务程序入口


;初始化程序
      ORG 0100H
KS:   MOV R1,#0FFH    ;设置R1初值
      CLR BEEL        ;蜂鸣器提示通电
      DJNZ R1,$       ;开机延时
      MOV P0,#11101000B;将干簧管工作电压设为12V
      MOV 31H,#11101000B;预存P0至31H,以被调节用
      ACALL YS        ;延时
      SETB P1.4
      ACALL YS
      MOV P0,#11110111B;将电磁铁工作电压设为9V
      MOV 32H,#11110111B;预存P0至32H,以被调节用
      MOV SP,#40H     ;设SP初值
      MOV R0,#00H     ;设置R0初值
      MOV R6,#00H     ;设置R6初值
      SETB BY1        ;信号置1,自动排放元件机构处于关闭状态
      SETB BEEL       ;关蜂鸣器
      MOV TMOD,#01H   ;按压头不在静态位置则回位,设置中断方式
      MOV TH0,#01H    ;设置中断初值
      MOV TL0,#01H
      SETB ET0        ;开T0中断
      SETB EA         ;开总中断


;按压头回位程序
      JNB AYJT,XTHW   ;按压头是否在静态位置,在,则转至检测吸头是否在动态位置
      SETB TR0        ;定时器0开始运行
      CLR AYNZ        ;按压头上移
ZF100:ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB AYJT,ZF100   ;继续检测按压头是否回到静态位置
      SETB AYNZ       ;按压头上移到位后停止运转
      CLR TR0         ;中断程序暂停
      MOV TH0,#01H    ;设置中断初值,开始设定时间
      MOV TL0,#01H
      MOV R0,#00H     ;设定时间初始值为0


;吸头回位程序
XTHW: JNB XTDT,KS0    ;吸头是否在动态位置,在,则转至检测检测口是否有干簧管
      SETB TR0        ;吸头不在动态位置则回位,定时器0开始运行
      CLR FXNZ        ;分选电机逆转
ZF1:  CJNE R0,#1AH,ZF2;在规定的时间内吸头必须运动到动态位置,否则电机反转
      SETB FXNZ       ;分选电机停止运转
      CLR TR0         ;中断程序暂停
      ACALL YS        ;延时
      ACALL ZF11      ;延时,中断程序再次运行
      CLR FXSZ        ;分选电机顺转
ZF3:  CJNE R0,#1BH,ZF5;在规定的时间内吸头必须运动到动态位置,否则认为机械故障
      SETB FXSZ       ;出现机械故障,分选电机停止运转
ZF4:  MOV R1,#0FFH    ;延时
      ACALL YS1
      CLR BEEL        ;开报警器提示出现故障
      MOV R1,#0FFH    ;延时
      ACALL YS1
      SETB BEEL       ;关报警器
      JB XTDT,ZF4     ;检测吸头是否在动态位置
      SJMP ZF6        ;在,转检查检测口是否有干簧管
ZF5:  JB XTDT,ZF3     ;检测吸头是否运动到动态位置
      SETB FXSZ       ;到达动态位置,停止运转
      SJMP ZF6        ;转检查检测口是否有干簧管
ZF2:  JB XTJT,ZF7     ;检测吸头是否运动到静态位置
      MOV R0,#00H     ;到静态位置,R0清零使分选电机再向前运动,让其到达动态位置
ZF7:  JB XTDT,ZF1     ;检测吸头是否运动到动态位置,未到则返回继续等待
      SETB FXNZ       ;到达动态位置,停止运转
ZF6:  MOV R0,#00H     ;设定时间初始值为0
      CLR TR0         ;中断程序停止运行



;有无干簧管程序
KS0:  CLR BY1         ;向自动排放元件机构电路发出排放元件的信号
KS1:  ACALL SHEZ      ;调用设置程序(调节工作电压)
      JB JCK,KS1      ;吸头在静态位置则看检测口是否有干簧管
      ACALL YS        ;延时
      JB JCK,KS1      ;无干簧管则返回继续检测
      SETB P0.5       ;黄色亮表示待检
      SETB P0.6
      SETB P0.7
      SETB BY1        ;信号置1,向自动排放元件机构电路发出收到元件的信号


;按压程序
      CLR AYSZ
      ACALL ZF11      ;规定电机转动时间不能过长,否则认为机械故障而停机
AY:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB AYDT,AY      ;检测吸头是否运动到静态位置
      SETB AYSZ       ;到达静态位置,停止运转
      CLR TR0         ;中断程序暂停
      MOV TH0,#01H    ;设置中断初值,开始设定时间
      MOV TL0,#01H
      MOV R0,#00H     ;设定时间初始值为0
ZF14: JNB JCK,ZF12     ;确认检测口有干簧管,没有或不在检测口则报警提示
      MOV R1,#0FFH    ;报警器报警程序
      ACALL YS1
      CLR BEEL
      MOV R1,#0F2H
      ACALL YS1
      SETB BEEL
      SJMP ZF14

;检测干簧管及合格程序
ZF12: ACALL YS
      JNB QYK,BHG1    ;开始检测,干簧管常闭则不合格
      CLR DCT1        ;1#电磁铁通电
      ACALL YS
      ACALL YS
      JB QYK,BHG2     ;干簧管不吸合则不合格
      SETB DCT1       ;1#电磁铁停止通电
      CLR DCT3        ;3#电磁铁通电
      ACALL YS        ;延时
      ACALL YS
      JB QYK,BHG3     ;干簧管不吸合则不合格
      SETB DCT3       ;3#电磁铁停止通电
      ACALL YS        ;延时
      ACALL YS
      CLR DCT1        ;1#电磁铁通电
      CLR DCT3        ;3#电磁铁通电
      ACALL YS        ;延时
      ACALL YS
      JNB QYK,BHG4    ;干簧管吸合则不合格
      SETB DCT1       ;1#电磁铁停止通电
      SETB DCT3       ;3#电磁铁停止通电
      CLR P0.5        ;绿色亮表示合格
      CLR P0.6
      CLR P0.7
      SJMP KS5        ;转按压头提起和自动分选程序

;不合格报警程序
BHG1: CLR P0.5
      SJMP BHG
BHG2: CLR P0.6
      SJMP BHG
BHG3: CLR P0.7
      SJMP BHG
BHG4: CLR P0.5
      CLR P0.7

BHG:  CLR BEEL        ;蜂鸣器报警提示
      SETB DCT1       ;1#电磁铁停止通电
      SETB DCT3       ;3#电磁铁停止通电


;按压头提起程序
KS5:  CLR AYNZ
      CLR JSQ         ;计数器加1
      ACALL ZF11      ;规定电机转动时间不能过长,否则认为机械故障而停机
AY1:  ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB AYJT,AY1     ;检测吸头是否运动到静态位置
      SETB AYNZ       ;到达静态位置,停止运转
      CLR TR0         ;关定时器0
      SETB JSQ        ;计数器输入端转为高电平(输入状态)

;吸走干簧管和分选程序
      CLR FXSZ        ;分选电机顺转
      ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
Z1:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB XTJT,Z1      ;检测吸头是否运动到静态位置
      SETB FXSZ       ;到达静态位置,停止运转
      CLR TR0         ;关定时器0
      ACALL YS        ;延时
      ACALL YS        ;延时     
      JNB XTJT,KS2    ;检测吸头是否运动到静态位置,在,则返回
      CLR FXNZ        ;不在,即旋转过头,则分选电机退转
      MOV R1,#04FH    ;延时子程序
      ACALL YS1       ;延时
      SETB FXNZ       ;电机停止
      ACALL YS        ;延时
KS2:  CLR DCXT        ;电磁吸头通电吸走干簧管
      ACALL YS        ;延时
      ACALL YS        ;延时
      JB JCK,KS3      ;确认干簧管是否被吸走
      SETB DCXT       ;干簧管未被吸走,则断电重新吸取
      ACALL YS        ;延时
      ACALL YS        ;延时
      ACALL YS        ;延时
      CLR DCXT        ;电磁吸头通电吸走干簧管
      ACALL YS        ;延时
      ACALL YS        ;延时
      JB JCK,KS3      ;确认干簧管是否被吸走
      CLR FXSZ        ;干簧管未被吸走,分选电机开始顺转
      MOV R1,#04FH    ;延时
      ACALL YS1
      SETB FXSZ       ;电机停止
      JB JCK,KS3      ;确认干簧管是否被吸走
      ACALL YS        ;延时
      CLR FXNZ        ;干簧管未被吸走,分选电机开始逆转
      ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
Z2:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB XTJT,Z2      ;检测吸头是否运动到静态位置
      SETB FXNZ       ;电机停止
      CLR TR0         ;关定时器0
      JB JCK,KS3      ;确认干簧管是否被吸走,未吸走则返回重新吸取
      INC R6          ;计数
      CJNE R6,#30H,KS2;当电磁铁多次通电仍不能吸走干簧管,则报警提示
      AJMP ZF10       ;转报警程序
KS3:  MOV R6,#00H     ;R6清零,以备下次计数用
      MOV A,P0        ;将P0输入A
      ORL A,#1FH      ;取P0.5、P0.6、P0.7值
      CJNE A,#1FH,ZF13;查看干簧管是否合格,以备分区放置
      CLR FXNZ
      MOV A,#0        ;将A清零
M10:  ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
M20:  ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB XZMC,M20     ;脉冲信号计数
      ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
M30:  ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JNB XZMC,M30    ;脉冲信号计数
      INC A           ;脉冲信号加1
      CJNE A,#25,M10  ;电机旋转至规定区域
      SETB FXNZ       ;电机停止
      CLR TR0         ;关定时器0
      SJMP ZF15

;不合格分区(自动分选脉冲计数程序)
ZF13: CLR BHGJS       ;不合格计数信号输出
      CLR FXNZ
      MOV A,#0        ;将A清零
M1:   ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
M2:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB XZMC,M2      ;脉冲信号计数
      ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
M3:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JNB XZMC,M3     ;脉冲信号计数
      INC A           ;脉冲信号加1
      CJNE A,#30,M1   ;电机旋转至规定区域
      SETB FXNZ       ;电机停止
      CLR TR0         ;关定时器0
      SETB BHGJS      ;关闭不合格计数信号

ZF15: SETB DCXT       ;吸头断电释放干簧管
      SETB BEEL       ;蜂鸣器停止报警
      AJMP KS0        ;返回再次工作   
;检测完毕




;延时子程序     
YS:   MOV R1,#0F1H    ;延时子程序
YS1:  MOV R2,#0FFH
      DJNZ R2,$
      DJNZ R1,YS1
      RET

;中断程序
INT_T0:PUSH ACC
      PUSH PSW        ;中断保护
      MOV TH0,#01H    ;置T0初值,晶振3.579MHz
      MOV TL0,#01H    ;每 3-5ms秒中断一次
      INC R0          ;作加1计数
      POP PSW         ;恢复现场保护
      POP ACC
      RETI

;中断子程序(定时器)
ZF11: MOV TH0,#01H    ;设置中断初值
      MOV TL0,#01H
      SETB TR0        ;定时器0开始运行
      MOV R0,#00H     ;设置R0初值
      RET
      
;检测是否出现机械故障子程序
ZF8:  CJNE R0,#21H,ZF9;在规定的时间内吸头必须运动到规定的位置,否则认为机械故障
      MOV P2,#0FFH    ;关闭P2口所有控制端
      MOV R0,#00H     ;设置R0初值
      CLR ET0         ;关T0中断
      CLR TR0         ;关定时器0
      CLR EA          ;关总中断
      SETB BHGJS      ;关闭不合格计数信号
      SETB JSQ        ;关闭不合格计数信号
ZF10: MOV R1,#0FFH    ;报警器报警程序
      ACALL YS1
      CLR BEEL
      MOV R1,#0F2H
      ACALL YS1
      SETB BEEL
      SJMP ZF10
ZF9:  RET


;数控电源程序
SHEZ: ACALL YS        ;延时
      JB K1,KS21      ;设置键非误动作时有效
      CLR BEEL        ;蜂鸣器响提示开关接通按下有效
      JNB K1,$        ;等待按键松开
      SETB BEEL       ;蜂鸣器
      MOV R3,#15H
      MOV A,P0
      ORL A,#1FH
      MOV 33H,A
F4:   ACALL YS
      JNB K1,SHEZ0    ;若两次按下设置键则转设置干簧管工作电压
      DJNZ R3,F4
      ANL A,32H
      MOV P0,A
      MOV R3,#01H     ;标志,用于判定设置键按下的次数
      SJMP SHEZ1
SHEZ0:CLR BEEL        ;两次按下设置键程序,按键接通提示声
      ACALL YS
      SETB BEEL       ;关提示声
      ACALL YS
      ACALL YS
      CLR BEEL        ;两次按下设置键程序,按键接通提示声
      ACALL YS
      SETB BEEL       ;关提示声
      ANL A,31H
      MOV P0,A
      MOV R3,#02H     ;标志,用于判定设置键按下的次数

SHEZ1:ORL A,#0F0H     ;屏蔽高4位
      MOV R4,#50H
F5:   ACALL YS
      JNB K2,SHANGT   ;以下用于区分按下K2、K3键
      JNB K3,XIAT
      DJNZ R4,F5

KS20: SETB P1.4
      ACALL YS
      MOV P0,32H
KS21: RET             ;返回

SHANGT:CJNE A,#0F0H,F1;上调程序,检测是否调至0FFH
      SJMP SHEZ1      ;当调至0FFH不可再调
F1:   DEC A           ;从初始值开始上调
      SJMP F3         ;转ZF3

XIAT: CJNE A,#0FFH,F2 ;下调程序,检测是否调至0F0H
      SJMP SHEZ1      ;当调至0FFH不可再调
F2:   INC A           ;从初始值开始下调

F3:   CLR BEEL        ;蜂鸣器提示按下有效
      ANL A,33H
      CJNE R3,#02H,F6
      ANL A,#0EFH
      MOV 31H,A
      SJMP F7
F6:   ORL A,#10H
      MOV 32H,A
F7:   MOV P0,A
      ACALL YS
      SETB BEEL
      JNB K2,$
      JNB K3,$
      SJMP SHEZ1


;防止程序跑飞
      ORG 0400H
      NOP
      NOP
      NOP
      LJMP KS

      END


      CLR FXNZ        ;干簧管被吸走,分选电机开始逆转
      ACALL ZF11      ;规定分选电机转动时间不能过长,否则认为机械故障而停机
Z3:   ACALL ZF8       ;调用故障检测程序,出现机械故障报警
      JB XTDT,Z3      ;检测吸头是否运动到动态位置
      SETB FXNZ       ;吸头运动到动态位置,分选电机停转
      CLR TR0         ;关定时器0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -