📄 remote_v01.asm.bak
字号:
LIST P=16F676,R=DEC
INCLUDE "P16F676.INC"
__CONFIG _INTRC_OSC_NOCLKOUT&_WDT_OFF&_MCLRE_OFF&_BODEN
;----------------------------------------
BANK_0 MACRO
BCF STATUS,RP0
;BCF STATUS,RP1
ENDM
BANK_1 MACRO
BSF STATUS,RP0
;BCF STATUS,RP1
ENDM
;-----------------------------------------------------------------------
; PAGE MACRO
PAGE_0 MACRO
BCF PCLATH,3
;BCF PCLATH,4
ENDM
PAGE_1 MACRO
BSF PCLATH,3
;BCF PCLATH,4
ENDM
;----------- define regisister --------
CBLOCK 0X20 ; NAME_1 WILL BE ASSIGNED 20
FLAG0
KEYL
SEND_BIT_CNT
SEND_CNT0
SEND_CNT
SLEEPH
SLEEPL
ENDC
#DEFINE IR PORTC,3
#DEFINE BIT_FLAG FLAG0,0
#DEFINE IDLE_FLAG FLAG0,1
;---------------------------------
;- FLAG_T1 21 -
;---------------------------------
ORG 0H
POWER_RESET
CLRF STATUS
GOTO power_on
ORG 04H
CLRF INTCON
RETFIE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; DELAY_300US ;
ORG 0X10
;--------------------------------------
power_on:
CLRWDT
CLRF INTCON
CLRF T1CON
MOVLW B'00000111'
MOVWF CMCON
BANK_1
CALL H'3FF'
MOVWF OSCCAL
MOVLW B'01100000' ; Fosc/64
MOVWF ADCON1
MOVLW B'00000000' ; AD SELECT A0
MOVWF ANSEL
MOVLW B'10000111' ; DISABLE RB PULL UP
MOVWF OPTION_REG ;the prescaler is 256 to time0
;MOVLW B'00000000' ;
;MOVWF PIE1
CLRF PIE1
MOVLW B'11111111'
MOVWF TRISA
CLRF WPUA
MOVLW B'11110111'
MOVWF TRISC
MOVLW B'00111111'
MOVWF IOCA
BANK_0
CLRF PORTA ;init the porta
CLRF PORTC ;init the portB
MOVLW B'00000000' ; LEFT JUSTIFIED ,Vref VDD,
MOVWF ADCON0
BCF STATUS,IRP
MOVLW B'00110101'
MOVWF T1CON
CLRF SEND_CNT
CALL READ_KEY
TEST_ME:
CALL SEND_IR
CALL READ_KEY
BTFSS STATUS,Z
GOTO TEST_ME
MOVLW 10
MOVWF SLEEPL
MOVLW 1
MOVWF SLEEPH
MAIN:
CALL READ_KEY
BTFSC STATUS,Z
GOTO MAIN_SEND_IR
MOVWF SLEEPH
CLRF SLEEPL
; MOVLW 8
BSF SEND_CNT,3
MAIN_SEND_IR:
MOVF SEND_CNT
BTFSC STATUS,Z
GOTO SLEEP_TEST
DECF SEND_CNT
BSF IDLE_FLAG
MOVLW 7
ANDWF SEND_CNT,W
BTFSC STATUS,Z
BCF IDLE_FLAG
CALL SEND_IR
SLEEP_TEST:
;BTFSS TMR1H,6
;BSF IR
;BTFSC TMR1H,6
;BCF IR
;****************
BTFSS TMR1H,7
GOTO MAIN
BCF TMR1H,7
DECFSZ SLEEPL
GOTO MAIN
DECFSZ SLEEPH
GOTO MAIN
;**************
BCF IR
MOVLW B'10001000'
MOVWF INTCON
CLRWDT
SLEEP
CLRF INTCON
GOTO MAIN
;************************
;************************
SEND_IR:
BCF KEYL,7
CLRF SEND_CNT0
BTFSC KEYL,0
INCF SEND_CNT0
BTFSC KEYL,1
INCF SEND_CNT0
BTFSC KEYL,2
INCF SEND_CNT0
BTFSC KEYL,3
INCF SEND_CNT0
BTFSC KEYL,4
INCF SEND_CNT0
BTFSC KEYL,5
INCF SEND_CNT0
BTFSC KEYL,6
INCF SEND_CNT0
BTFSC SEND_CNT0,0
BSF KEYL,7
;SEND_HEAD:
MOVLW 48
BSF BIT_FLAG
CALL SEND_BIT2
CALL SEND_BIT_NO
BCF STATUS,C
MOVLW 9
MOVWF SEND_CNT0
SEND_IR2:
MOVLW 12
BSF BIT_FLAG
CALL SEND_BIT2
RRF KEYL
BTFSC STATUS,C
CALL SEND_BIT_NO_LONG
SEND_IR8:
CALL SEND_BIT_NO
DECFSZ SEND_CNT0
GOTO SEND_IR2
RETURN
;----------------------------
SEND_BIT_NO_LONG:
BCF BIT_FLAG
MOVLW 20
GOTO SEND_BIT2
SEND_BIT_NO:
BCF BIT_FLAG
MOVLW 8
SEND_BIT2:
MOVWF SEND_BIT_CNT
SEND_BIT4:
BTFSC IDLE_FLAG
GOTO SEND_BIT6
BTFSC BIT_FLAG
BSF IR
SEND_BIT6:
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
BCF IR
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
DECFSZ SEND_BIT_CNT
GOTO SEND_BIT4
RETURN
; 1-VCC GND-14
; K2 2-RA5 RA0-13 K1
; K5 3-RA4 RA1-12 DOWN
; K6 4-RA3 RA2-11 LEFT
; K3 5-RC5 RC0-10 RIGHT
; K4 6-RC4 RC1-9 UP
; IR OUT 7-RC3 RC2-8
READ_KEY:
CLRWDT
CLRF KEYL
BTFSC PORTC,2 ;DOWN
BSF KEYL,6
BTFSC PORTA,2 ;LEFT
BSF KEYL,5
BTFSC PORTC,0 ;RIGHT
BSF KEYL,4
BTFSC PORTC,1 ;UP
BSF KEYL,3
;--------------------------------
INCF KEYL
BTFSC PORTA,0
GOTO READ_KEY_END ;KEY1
INCF KEYL
BTFSC PORTA,5 ;KEY2
GOTO READ_KEY_END
INCF KEYL
BTFSC PORTC,5 ;KEY3
GOTO READ_KEY_END
INCF KEYL
BTFSC PORTC,4 ;KEY4
GOTO READ_KEY_END
INCF KEYL
BTFSC PORTA,4 ;KEY5
GOTO READ_KEY_END
INCF KEYL
BTFSC PORTA,3 ;KEY6
GOTO READ_KEY_END
MOVLW 01111000B
ANDWF KEYL
READ_KEY_END:
MOVF KEYL,W
RETLW 5
;--------------------------------------
;--------------------------------------
;GOTO POWER_RESET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -