|
Press控制板之實作報告
|
| 空油增壓機控制(定位+計時型) |
![]()
|
程式名稱 : airoil-1.zip (下載) CHIP 80152 PP0 EQU 080H PP2 EQU 0A0H DELTIM EQU 30H DELTIM_REG EQU 31H WATCHDOG REG PP2.7 STOPBIT REG 20H.0 RUNBIT REG 20H.1 AIRSOL REG P3.4 ; P3.4 空壓電磁閥 OILSOL REG P3.5 ; P3.5 增壓電磁閥 RUNSOL REG P3.7 ; P3.7 工作中 START REG PP0.0 ;起動 UPLS REG PP0.1 ;上位停止極限開關 DOWNLS REG PP0.2 ;增壓起動極限開關 ;============================================================================ ORG 0H JMP AGAIN ORG 0BH ;TIMER0 中斷向量 JMP TIMER0 ;============================================================================ AGAIN: CPL WATCHDOG SETB AIRSOL SETB OILSOL CLR RUNBIT CLR STOPBIT MOV P1,#11110000B MOV P0,#11111111B MOV TMOD,#00000001B MOV TH0,#0D8H ;TIMER0 = 65535 - 55535 = 10000 = 0.01 秒 MOV TL0,#0EFH ; SETB TR0 MOV IE,#10000010B ;CPU中斷致能, TIMER0中斷致能 CALL DEL ;============================================================================ MOV P1,#11110000B WORK: CPL WATCHDOG JNB START,WORK ;檢察起動開關ON CALL DEL1 JNB START,WORK CALL READ_FG CALL DEC_HEX MOV DELTIM_REG,R0 CLR AIRSOL ;空壓電磁閥ON CLR RUNSOL WORK20: CPL WATCHDOG JNB DOWNLS,WORK20 ;檢察增壓起動極限開關 CALL DEL1 JNB DOWNLS,WORK20 CLR OILSOL ;增壓電磁閥ON MOV R0,DELTIM_REG ;增壓計時 CALL DEL_TEN SETB AIRSOL ;空壓電磁閥OFF SETB OILSOL ;增壓電磁閥OFF WORK30: CPL WATCHDOG JNB UPLS,WORK30 ;檢察上位停止極限開關 CALL DEL1 JNB UPLS,WORK30 WORK90: CPL WATCHDOG ;檢察起動開關OFF JB START,WORK90 CALL DEL1 JB START,WORK90 SETB RUNSOL JMP WORK ;============================================================================ ;讀入一位數指撥開關十六進制值,放在 R0 ;P1 = 11110111B READ_DL: MOV P1,#11110111B CALL DEL_RD MOV A,P1 CPL A SWAP A ANL A,#00001111B MOV R0,A RET ;============================================================================ ;讀入兩位數指撥開關十進制值,放在 R1 ;第 1 位 P1 = 11110000B ;第 2 位 P1 = 11110001B READ_FG: MOV P1,#11110000B CALL DEL_RD MOV A,P1 CPL A ANL A,#11110000B SWAP A MOV R1,A MOV P1,#11110001B CALL DEL_RD MOV A,P1 CPL A ANL A,#11110000B ORL A,R1 MOV R1,A RET ;============================================================================ DEL_RD: MOV R4,#20 DEL_RD2: DJNZ R4,DEL_RD2 RET ;============================================================================ DEL: MOV R3,#0FFH DELA: MOV R4,#0FFH DELB: CPL WATCHDOG DJNZ R4,DELB DJNZ R3,DELA RET ;============================================================================ DEL1: MOV R3,#020H DEL1A: MOV R4,#0FFH DEL1B: CPL WATCHDOG DJNZ R4,DEL1B DJNZ R3,DEL1A RET ;============================================================================ ;1 BYTE 十進制 >> 十六進制 ;R1 => 欲轉換十進制值 ;R0 => 轉換後十六進制值 DEC_HEX: MOV A,R1 SWAP A ANL A,#00001111B MOV B,#10 MUL AB MOV R0,A MOV A,R1 ANL A,#00001111B ADD A,R0 MOV R0,A RET ;============================================================================ ;0.1 秒計時,使用 R0 設定時間長短 ;當 STOPBIT = 1 時結束跳出 DEL_TEN: CPL WATCHDOG JNB STOPBIT,DEL_TEN0 DEL_TEN0: CJNE R0,#0,DEL_TEN2 RET DEL_TEN2: MOV A,#10 MOV DELTIM,A DEL_TEN4: CPL WATCHDOG JNB STOPBIT,DEL_TEN6 RET DEL_TEN6: MOV A,DELTIM CJNE A,#0,DEL_TEN4 DEC R0 JMP DEL_TEN0 ;=================== ======================================================== ;0.01 秒計時,使用 Acc 設定時間長短 ;當 START = 0 時結束跳出 DELINT_RUN: CPL WATCHDOG JB START,DELINT_RUN2 RET DELINT_RUN2: MOV DELTIM,A DELINT_RUN4: CPL WATCHDOG JB START,DELINT_RUN6 RET DELINT_RUN6: MOV A,DELTIM CJNE A,#0,DELINT_RUN4 RET ;=================== ======================================================== ;0.01 秒計時,使用 Acc 設定時間長短 DELINT: MOV DELTIM,A DELINT1: CPL WATCHDOG MOV A,DELTIM CJNE A,#0,DELINT1 RET ;=================== ======================================================== TIMER0: PUSH A PUSH PSW MOV TH0,#0D8H MOV TL0,#0EFH MOV A,DELTIM CJNE A,#0,TIMER0A JMP TIMER0B TIMER0A: DEC DELTIM TIMER0B: JNB RUNBIT,TIMER0C JB STOPBIT,TIMER0C JB STOP,TIMER0C SETB STOPBIT TIMER0C: POP PSW POP A RETI |
|
<<商標聲明>>
本網站於瀏覽者顯示器所出現之商標,皆為所屬公司之註冊商標,絕無侵犯之意。 建議使用I.E 4.0以上版本瀏覽器解析度1024*768觀看 |