📄 干簧管自动检测台程序.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 + -