|
Press控制板之實作報告
|
| 繞線機控制(煞車馬達式) |
![]() |
程式名稱 : coil.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 MOTOR REG P3.4 ; P3.4 繞線煞車馬達 START REG PP0.0 ; P0.0 起動 COUNTIN REG PP0.1 ; P0.1 計數輸入 ON/OFF 加一 ;============================================================================ ORG 0H JMP AGAIN ORG 0BH ;TIMER0 中斷向量 JMP TIMER0 ;============================================================================ AGAIN: CPL WATCHDOG SETB AIRSOL 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 CALL DEL1 JNB START,WORK CALL READ_FG ;讀取圈數 CALL DEC_HEX MOV R1,R0 CLR MOTOR ;起動繞線馬達 WORK10: CPL WATCHDOG ;比較計數值 CALL COUNT DJNZ R1,WORK10 SETB MOTOR ;停止繞線馬達 WORK50: CPL WATCHDOG JB START,WORK50 CALL DEL1 JB START,WORK50 JMP WORK ;============================================================================ ;計數一次 COUNT: CPL WATCHDOG JNB COUNTIN,COUNT CALL DEL1 JNB COUNTIN,COUNT COUNT10: CPL WATCHDOG JB COUNTIN,COUNT10 CALL DEL1 JB COUNTIN,COUNT10 RET ;============================================================================ ;讀入一位數指撥開關十六進制值,放在 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觀看 |