;工業(yè)控制程序
;實驗?zāi)康?
;1.掌握單片機開發(fā)系統(tǒng)的使用
;2.掌握一次性在線仿真調(diào)試的全過程
;3.掌單片機如何編程及中斷的應(yīng)用
;實驗原理:
;在工業(yè)控制中,象沖壓、注塑、輕紡、制瓶等生產(chǎn)過程,都是一些斷續(xù)生產(chǎn)過程,
;這些斷續(xù)生產(chǎn)過程又都是按某種順序有規(guī)律地完成預定的動作。對這類斷續(xù)生
;產(chǎn)過程的控制稱順序控制。
;例如注塑機要生產(chǎn)一個工件,其工藝過程大致按"合�!⑸洹訒r→開模
; →產(chǎn)伸→產(chǎn)退"這么個時間順序動作。這種順序控制采用單片機是很容易實現(xiàn)的。
;本實驗是以控制注塑機為例而設(shè)計的典型時間順序控制實驗。
; 我們把89XX P0口的0-6位依次用發(fā)光二極管作為模擬輸出指示,
;共分7道工序,P1.7為聲光報警,P3.4為開工啟動開關(guān),P3.2,P3.3為外部故障輸入模擬開關(guān),
;低電平告警。
;為了問題簡單化,我們設(shè)定每道工序只有一位有輸出(高電平燈亮),工作流程表如下:
;P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 工序 控制字
;0 0 0 0 0 0 0 1 1 01H
;0 0 0 0 0 0 1 0 2 02H
;0 0 0 0 0 1 0 0 3 04H
;0 0 0 0 1 0 0 0 4 08H
;0 0 0 1 0 0 0 0 5 10H
;0 0 1 0 0 0 0 0 6 20H
;0 1 0 0 0 0 0 0 0 40H
;1 0 0 0 0 0 0 0 0 80H
;以上設(shè)硬件接線為高電平有效,如果設(shè)硬件接線為低電平有效(灌電流,減小CPU功耗),
;LED燈亮,你又如何寫出控制字!請你畫出程序流程圖!
ORG 0000H ;工業(yè)順序控制程序
AJMP MIN ;轉(zhuǎn)主程序
ORG 0003H ;INT0中斷入口地址
AJMP INTA ;轉(zhuǎn)中斷服務(wù)程序
ORG 0013H ; INT1中斷入口地址
AJMP INTB ;轉(zhuǎn)中斷服務(wù)程序
ORG 0050H ;主程序
MIN: MOV SP,#50H
MOV P0,#0FFH ;關(guān)P0口(設(shè)高電平LED燈亮)
MOV P3,#0FFH ;關(guān)P3口(設(shè)低電平工作
L0056: JNB T0,$ ;等開工(P3.4)
ORL IE,#85H ;允許INT0,INT1中斷
ORL IP,#04H ;設(shè)為INT1為優(yōu)先中斷
L005F: MOV P0,#0FEH ;執(zhí)行工序1
ACALL S00E0 ;延時
MOV P0,#0FDH ; 執(zhí)行工序2
ACALL S00E0 ;
MOV P0,#0FBH ; 執(zhí)行工序3
ACALL S00E0 ;
MOV P0,#0F7H ; 執(zhí)行工序4
ACALL S00E0 ;
MOV P0,#0EFH ; 執(zhí)行工序5
ACALL S00E0 ;
MOV P0,#0DFH ; 執(zhí)行工序6
ACALL S00E0 ;
MOV P0,#0BFH ; 執(zhí)行工序7
ACALL S00E0 ;
MOV P0,#7FH ;執(zhí)行工序8
ACALL S00E0 ;
SJMP L005F ;循環(huán)
ORG 0090H ;INT0中斷服務(wù)程序
INTA: MOV B,R2 ;保護現(xiàn)場
MOV P0,#0FFH ;關(guān)輸出
MOV 20H,#0F0H ;報警聲參數(shù)
L0098: SETB P1.7 ;P1.7輸出報警聲
ACALL S00D0 ;延時時間比INT1長
CLR P1.7 ;
ACALL S00D0 ;
DJNZ 20H,L0098 ;不為零轉(zhuǎn)
CLR P1.7 ;
ACALL S00E0 ;
JNB INT0,L0098 ;INT0為零繼續(xù)報警
MOV R2,B ; INT0為1不報警,恢復現(xiàn)場
SETB P1.7
RETI ;中斷返回
ORG 00B0H ; INT1中斷服務(wù)程序
INTB: MOV B,R2 ; 保護現(xiàn)場
MOV P1,#0FFH ; 關(guān)輸出
MOV B,#20H ; 報警聲參數(shù)
L00B8: SETB P1.7 ; P1.7輸出報警聲
ACALL S00D6 ; 延時時間比INT0短
CLR P1.7 ;
ACALL S00D6 ;
DJNZ 20H,L00B8 ; 不為零轉(zhuǎn)
CLR P1.7 ;
ACALL S00E0 ;
JNB INT1,L00B8 ; INT1為零繼續(xù)報警
MOV R2,B ; INT1為1不報警,恢復現(xiàn)? SETB P1.7
RETI ; 中斷返回
ORG 00D0H
S00D0: MOV R2,#07H ;
ACALL S00EB ;
RET ;
ORG 00D6H
S00D6: MOV R2,#05H ;
ACALL S00EB
RET
ORG 00E0H ;
S00E0: MOV R2,#25H
ACALL S00EB
RET
ORG 00EBH ;通用延時子程序
S00EB: PUSH 02H ;R2(復位后R2即為02H)存放時間常數(shù),進棧保護
L00ED: PUSH 02H ; R2進棧保護
L00EF: PUSH 02H ; 進棧
L00F1: DJNZ R2,$ ;R2不為零等待
POP 02H ;出棧
DJNZ R2,L00EF ; R2不為零轉(zhuǎn)
POP 02H ; 出棧
DJNZ R2,L00ED ; R2不為零轉(zhuǎn)
POP 02H ; 出棧
DJNZ R2,S00EB ; R2不為零轉(zhuǎn)
RET ;子程序返回
END
|