原创 破解别的IC所发I2C指令和数据程序

2010-7-13 22:51 2147 8 8 分类: MCU/ 嵌入式

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的现实出来。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条