⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mypjt.asm

📁 办公室及高档娱乐场所用的垃圾自动开门及关门。用红外感应头可感受到人手的动作
💻 ASM
📖 第 1 页 / 共 2 页
字号:
             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 + -