LIST P="16F873"
#INCLUDE <P16F873.INC>
;;;;;;;;;;;;;;;;;;;;;;;;;
CBLOCK 0X20
FLG_I2C_EN
TEMP
REC_TEMP_DATA
OLD_PORTA
TEMP_PORTA
ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0X0000
NOP
GOTO INITIAL
;;;;;;;;;;;;;;;中断入口;;;;;;;;;;;;;;;;;
ORG 0X0004
BANKSEL INTCON
BTFSC INTCON ,RBIF
GOTO RB7INT
RB0_JUDG
BTFSC INTCON ,INTF
GOTO RB0_CHG
ENDINT
BANKSEL INTCON
BCF INTCON ,RBIF
BCF INTCON ,INTF
BANKSEL PORTA
RETFIE
RB0_CHG
BANKSEL PORTA
BTFSS FLG_I2C_EN ,0
GOTO RB0_INT_H_STOP
BTFSS PORTA ,0
GOTO REC_0
REC_1 ;;;;;;;接收到数据1
MOVLW high(REC_1_SWITCH)
MOVWF PCLATH
incf TEMP ,F
MOVLW low(REC_1_SWITCH)
ADDWF TEMP ,W
MOVWF PCL
GOTO RB0_INT_H
REC_0 ;;;;;接收到数据0
MOVLW high(REC_0_SWITCH)
MOVWF PCLATH
incf TEMP ,F
MOVLW low(REC_0_SWITCH)
ADDWF TEMP ,W
MOVWF PCL
GOTO RB0_INT_H
RB0_INT_H_STOP
CLRF TEMP
CLRF REC_TEMP_DATA
RB0_INT_H
BANKSEL INTCON
BCF INTCON ,INTF
BANKSEL PORTA
GOTO ENDINT
RB7INT
BANKSEL PORTB
MOVF PORTB ,W
BTFSS PORTB ,0
GOTO RB7INT_END
RB7INT_RB0H
BTFSS PORTB ,7
GOTO RB7INT_HL_RB0H
RB7INT_LH_RB0H ;;;;STOP
BCF FLG_I2C_EN ,0
CLRF TEMP
CLRF REC_TEMP_DATA
GOTO RB7INT_END
RB7INT_HL_RB0H ;;;START
BSF FLG_I2C_EN ,0
CLRF TEMP
CLRF REC_TEMP_DATA
GOTO RB7INT_END
RB7INT_END
BANKSEL INTCON
; BCF INTCON ,RBIF
GOTO RB0_JUDG
INITIAL
;; 端口初始化
BANKSEL ADCON1 ;;bank设置为ADCON1所在bank
MOVLW 0X06
MOVWF ADCON1 ;;将PORTA设置为数字IO口
BANKSEL PORTA
CLRF PORTA
CLRF PORTB
CLRF PORTC
BANKSEL TRISA
MOVLW 0XFF
MOVWF TRISB
MOVWF TRISA
CLRF TRISC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANKSEL OPTION_REG
BSF OPTION_REG ,INTEDG
BCF OPTION_REG ,NOT_RBPU
BANKSEL INTCON
CLRF INTCON
BSF INTCON ,INTE
BSF INTCON ,RBIE
BSF INTCON ,GIE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANKSEL PORTA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 0X30
MOVWF FSR
CLRF TEMP
MOVF PORTA ,W
MOVWF OLD_PORTA
MAIN
LOOP
CLRWDT
NOP
NOP
BTFSC PORTA ,1
GOTO LOOP
GOTO DIR_KEY
REC_1_SWITCH GOTO REC_1_SWITCH0
GOTO REC_1_SWITCH1
GOTO REC_1_SWITCH2
GOTO REC_1_SWITCH3
GOTO REC_1_SWITCH4
GOTO REC_1_SWITCH5
GOTO REC_1_SWITCH6
GOTO REC_1_SWITCH7
GOTO REC_1_SWITCH8
GOTO REC_1_SWITCH9
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
REC_1_SWITCH0
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
REC_1_SWITCH1
CLRF REC_TEMP_DATA
BSF REC_TEMP_DATA,7
GOTO RB0_INT_H
REC_1_SWITCH2
BSF REC_TEMP_DATA,6
GOTO RB0_INT_H
REC_1_SWITCH3
BSF REC_TEMP_DATA,5
GOTO RB0_INT_H
REC_1_SWITCH4
BSF REC_TEMP_DATA,4
GOTO RB0_INT_H
REC_1_SWITCH5
BSF REC_TEMP_DATA,3
GOTO RB0_INT_H
REC_1_SWITCH6
BSF REC_TEMP_DATA,2
GOTO RB0_INT_H
REC_1_SWITCH7
BSF REC_TEMP_DATA,1
GOTO RB0_INT_H
REC_1_SWITCH8
BSF REC_TEMP_DATA,0
MOVF REC_TEMP_DATA,W
MOVWF INDF
; MOVWF PORTC
INCF FSR ,F
GOTO RB0_INT_H
REC_1_SWITCH9
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
;;;;;;;;;;;;;;;;;;;;
REC_0_SWITCH GOTO REC_0_SWITCH0
GOTO REC_0_SWITCH1
GOTO REC_0_SWITCH2
GOTO REC_0_SWITCH3
GOTO REC_0_SWITCH4
GOTO REC_0_SWITCH5
GOTO REC_0_SWITCH6
GOTO REC_0_SWITCH7
GOTO REC_0_SWITCH8
GOTO REC_0_SWITCH9
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
REC_0_SWITCH0
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
REC_0_SWITCH1
CLRF REC_TEMP_DATA
BCF REC_TEMP_DATA,7
GOTO RB0_INT_H
REC_0_SWITCH2
BCF REC_TEMP_DATA,6
GOTO RB0_INT_H
REC_0_SWITCH3
BCF REC_TEMP_DATA,5
GOTO RB0_INT_H
REC_0_SWITCH4
BCF REC_TEMP_DATA,4
GOTO RB0_INT_H
REC_0_SWITCH5
BCF REC_TEMP_DATA,3
GOTO RB0_INT_H
REC_0_SWITCH6
BCF REC_TEMP_DATA,2
GOTO RB0_INT_H
REC_0_SWITCH7
BCF REC_TEMP_DATA,1
GOTO RB0_INT_H
REC_0_SWITCH8
BCF REC_TEMP_DATA,0
MOVF REC_TEMP_DATA ,W
MOVWF INDF
INCF FSR ,F
GOTO RB0_INT_H
REC_0_SWITCH9
CLRF REC_TEMP_DATA
CLRF TEMP
GOTO RB0_INT_H
DIR_KEY:
MOVF PORTA ,W
XORWF OLD_PORTA ,W
MOVWF TEMP_PORTA
BTFSC TEMP_PORTA ,1
GOTO DIR_R1
BTFSC TEMP_PORTA ,2
GOTO DIR_R2
GOTO DIR_KEY
DIR_R1
BTFSS OLD_PORTA ,1
GOTO DIR_R1_LH
DIR_R1_HL
BCF OLD_PORTA ,1
MOVLW 0X30
MOVWF FSR
MOVF INDF ,W
MOVWF PORTC
GOTO DIR_KEY
DIR_R1_LH
BSF OLD_PORTA ,1
GOTO DIR_KEY
;;;;;;;;;;
DIR_R2
BTFSS OLD_PORTA ,2
GOTO DIR_R2_LH
DIR_R2_HL
BCF OLD_PORTA ,2
INCF FSR ,F
MOVF INDF ,W
MOVWF PORTC
GOTO DIR_KEY
DIR_R2_LH
BSF OLD_PORTA ,2
GOTO DIR_KEY
ORG 0X07FF
END
;;初步的程序,,还没有用串口打印,先接受I2C数据,然后按KEY才通过IO口将数据8BIT,8BIT的现实出来。
文章评论(0条评论)
登录后参与讨论