📄 mypjt.asm
字号:
SLEEP
RETLW 00H
RET_LED_PRC:
MOVLW TM4S
MOVWF fresh_red_time
BCF flag,RED_FRESH_F
RETLW 0x00
;----------------------------------------------
;----------------------------------------------
DELAY_10MS:
; MOVLW 0xE8 ;4MHZ
MOVLW 0x4F
MOVWF temp_va3
MOVLW 0x03
; MOVWF temp_va4 ;4Mhz osc
CLRF temp_va4 ;RC OSC
LOOP: MOVLW 0xff
; NOP ;4MHZ
ADDWF temp_va3, F
BTFSS STATUS,C
DECF temp_va4, F ;4MHZ OSC
MOVF temp_va4, W
IORWF temp_va3, W
BTFSS STATUS, Z
GOTO LOOP
RETLW 0x00
;----------------------------------------------
;----------------------------------------------
DELAY_1MS:
MOVLW 0x0E
MOVWF temp_va3
ONE_LOOP:
DECFSZ temp_va3
GOTO ONE_LOOP
RETLW 00H
;---------------------------------------------------------------
;---------------------------------------------------------------
; RAM 0X07 IS DOOR_HD
KEY_SCAN:
CLRWDT ;清狗,以防复位
MOVF PORTA, W
ANDLW 0xc
MOVWF temp_va1 ;keyvld1-->temp_va1
CALL DELAY_10MS
MOVF 0x5, W
ANDLW 0xc
MOVWF temp_va2 ;keyvld2-->temp_va2
XORWF temp_va1, W ;; temp_va1== temp_va2 ?
BTFSC STATUS, Z
GOTO KEY_OK ;;temp_va1 == temp_va2
RETLW 0x00 ;;temp_va1 != temp_va2
KEY_OK:
MOVF temp_va1, W
XORLW 0x4 ;;open key?
BTFSC STATUS, Z
GOTO KEY_OPEN ;yes,open_key
MOVF temp_va1,w
XORLW 0x08 ;;close key?
BTFSC STATUS, Z
GOTO KEY_CLOSE
MOVLW DUMMY_KEY
GOTO STORE
KEY_OPEN:
MOVLW OPEN_KEY
GOTO STORE
KEY_CLOSE:
MOVLW CLOSE_KEY
GOTO STORE
STORE:
MOVWF keyvld
;以下判别是否有新的按键
XORLW DUMMY_KEY
BTFSS STATUS,Z
GOTO LABEL0
BCF flag,KEYREQ_F
GOTO LABEL1
LABEL0:
MOVF keyvld,w
XORWF keyvld_old,w
BTFSS STATUS,Z
BSF flag,KEYREQ_F
LABEL1:
MOVF keyvld,w
MOVWF keyvld_old
RETLW 00H
;------------------------------------------------------
;------------------------------------------------------
MOTOR_PRC:
CALL DELAY_10MS ;test
MOVF motor_mode,w
XORWF motor_mode_old,w
BTFSS STATUS,Z
CLRF motor_step ;;motor_mode != motor_mode_old
MOVF motor_mode,w
XORLW MM_DUMMY
BTFSC STATUS,Z
GOTO NEXT_STEP5 ;
MOVF motor_mode,w
XORLW MM_OPEN
BTFSC STATUS,Z
GOTO LABEL11
GOTO LABEL12
LABEL11:
GOTO OPEN_CODE ;打开模式
RETLW 00H
LABEL12:
GOTO CLOSE_CODE ;关闭模式
RETLW 00H
;------------------------------------------------------
; motor_mode == DUMMY
;------------------------------------------------------
; EMPTY_CODE:
; MOVF motor_step,w
; XORLW 0x00
; BTFSC STATUS,Z
; GOTO EMPTY_STEP1
; MOVF motor_step,w
; XORLW 0x01
; BTFSC STATUS,Z
; GOTO EMPTY_STEP2
; RETLW 00H
;------------------------------------------------------
;------------------------------------------------------
;EMPTY_STEP1:
; MOVLW MM_STOP
; ANDWF PORTB
; INCF motor_step
; RETLW 00H
;------------------------------------------------------
;------------------------------------------------------
;EMPTY_STEP2:
; RETLW 00H
;------------------------------------------------------
;------------------------------------------------------
OPEN_CODE:
MOVF motor_step,w
XORLW 0x00
BTFSC STATUS,Z
GOTO OPEN_STEP1
MOVF motor_step,w
XORLW 0x01
BTFSC STATUS,Z
GOTO OPEN_STEP2
MOVF motor_step,w
XORLW 0x02
BTFSC STATUS,Z
GOTO OPEN_STEP3
MOVF motor_step,w
XORLW 0x03
BTFSC STATUS,Z
GOTO OPEN_STEP4
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
CLOSE_CODE:
MOVF motor_step,w
XORLW 0x00
BTFSC STATUS,Z
GOTO CLOSE_STEP1
MOVF motor_step,w
XORLW 0x01
BTFSC STATUS,Z
GOTO CLOSE_STEP2
MOVF motor_step,w
XORLW 0x02
BTFSC STATUS,Z
RETLW 00H
GOTO CLOSE_STEP3
;--------------------------------------------------------;
;--------------------------------------------------------;
OPEN_STEP1:
; MOVF door_stu,w
; XORLW DOOR_CLOSE_STU
; BTFSS STATUS,Z
; GOTO DUMMY_CODE ;非关门状态下按OPEN键,什么都不处理
;enable motor
MOVLW TM2S
MOVWF delay_time_L
;若motor方向相反了,改此二条语句
BCF PORTB,4 ;关闭制动
BCF PORTB,6
BSF PORTB,5 ;RB5 =1
; BSF PORTB,6
; BCF PORTB,5
MOVLW DOOR_OPENING_STU
MOVWF door_stu
MOVF motor_mode,w
MOVWF motor_mode_old
INCF motor_step,f
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
OPEN_STEP2:
MOVF delay_time_L,w
XORLW 0x00
BTFSS STATUS,Z
GOTO SUB_TIME_L ;在SUB_TIME_L 里直接返回
;;DELAY 2S TIME OVER
;motor control
MOVLW MM_STOP
ANDWF PORTB
BSF PORTB,4 ;制动motor
MOVF work_mode,w
XORLW AUTO_MODE
BTFSS STATUS,Z
GOTO LABEL9
MOVLW DOOR_AUTO_OPEN_STU
MOVWF door_stu
MOVLW TM8S_L
MOVWF delay_time_L
MOVLW TM8S_H
MOVWF delay_time_H
GOTO LABEL10
LABEL9: ;按键打开时
MOVLW DOOR_KEY_OPEN_STU
MOVWF door_stu
INCF motor_step
INCF motor_step ;不进入第三步,直接进入第四步
RETLW 00H
LABEL10:
; MOVWF door_stu
INCF motor_step
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
OPEN_STEP3:
MOVF delay_time_L,w
XORLW 0x00
BTFSS STATUS,Z
GOTO SUB_TIME_L
MOVF delay_time_H,w
XORLW 0x00
BTFSS STATUS,Z
GOTO SUB_TIME_H
MOVLW MM_CLOSE
MOVWF motor_mode
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;]
OPEN_STEP4:
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
CLOSE_STEP1:
; MOVF door_stu,w
; XORLW DOOR_OPEN_STU
; BTFSS STATUS,Z
; GOTO DUMMY_CODE ;非开门状态下按CLOSE键,什么都不处理
MOVLW TM2S
MOVWF delay_time_L
;若motor方向相反了,改此二条语句
BCF PORTB,4 ;关闭制动功能
BCF PORTB,5 ;RB5 = 0
BSF PORTB,6 ;RB6 =1
; BSF PORTB,5
; BCF PORTB,6
MOVLW DOOR_CLOSING_STU
MOVWF door_stu
MOVF motor_mode,w
MOVWF motor_mode_old
INCF motor_step,f
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
CLOSE_STEP2:
MOVF delay_time_L,w
XORLW 0x00
BTFSS STATUS,Z
GOTO SUB_TIME_L
NOP
;;DELAY 2S TIME OVER
MOVLW MM_STOP
ANDWF PORTB ;STOP MOTOR
BSF PORTB,4 ;制动motor
MOVLW DOOR_CLOSE_STU
MOVWF door_stu
MOVLW MM_DUMMY
MOVWF motor_mode
INCF motor_step
NOP
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
CLOSE_STEP3:
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
SUB_TIME_L:
DECF delay_time_L
RETLW 00H
;-------------------------------------------------------;
;-------------------------------------------------------;
SUB_TIME_H:
DECF delay_time_H
MOVLW 0xff
MOVWF delay_time_L
RETLW 00H
;STOP MOTOR
; DUMMY_CODE:
; MOVF motor_mode,w
; MOVWF motor_mode_old
; NOP
; RETLW 00H
;------------------------------------------------------
;------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -