?? 干簧管自動檢測臺程序.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 + -