1、INCLUDE
2、U 0EH IIC_C EQU 0FH T EQU 10H ORG 000H GOTO MAIN ;============================================ MAIN CLRF GPIO MOVLW 20H TRIS GPIO MOVLW 05H OPTION;TIMER064分频,内部弱上拉 CLRF GPIO CLRF STATUS CLRF KTM CLRF KM CLRF KEYDQ CLRF KO CALL INIT_IIC ;
3、 READONEBIT;读一个字节 MOVLW 20H TRIS GPIO CALL START MOVLW 0A0H CALL WRITE_IIC MOVLW 00H CALL WRITE_IIC CALL START MOVLW 0A1H CALL WRITE_IIC CALL READ_IIC MOVLW 04H SUBWF MODE,0 BTFSC STATUS,C CLR
4、F MODE GOTO MLOOP ;----------------------------------------------------------------- MLOOP CLRF TMR0 INCF KTM,1 TABLE_MODE MOVF MODE,0 ADDWF PCL,1 GOTO MODE0 GOTO MODE1 GOTO MODE2 GOTO MODE3 MODE0 BCF LED2 BCF LED4 GOTO MLDS MODE1 BSF LED2 BCF
5、 LED4 GOTO MLDS MODE2 BCF LED2 BSF LED4 GOTO MLDS MODE3 BSF LED2 BSF LED4 GOTO MLDS ;--------------/////////////////////////////////以下按键检测 MLDS BTFSC KEY GOTO TAIQI GOTO ANXIA TAIQI INCF KM,1 CLRF KO MOVLW 04H SUBWF KM,0 BTFSS STATUS,C GOTO M
6、LDTS BSF KEYDQ,1 CLRF KM GOTO MODE_TEST ANXIA INCF KO,1 CLRF KM MODE_TEST BTFSS KEYDQ,1 GOTO MLDTS MOVLW 0AH SUBWF KO,0;kO是否大于10,按下消抖时间是否达到50MS BTFSS STATUS,C GOTO MLDTS INCF MODE,1 CLRF KTM MOVLW 04H SUBWF MODE,0 BTFSC STATUS,C CLRF MODE WT
7、写一个字节 CALL START MOVLW 0A0H CALL WRITE_IIC MOVLW 00H CALL WRITE_IIC MOVF MODE,0 CALL WRITE_IIC CALL STOP CLRF KO BCF KEYDQ,1;防止一直按下,键值发生变化。按键一次清一次键值。 GOTO MLDTS MLDTS MOVLW 4EH;一周时间为 5MS SUBWF TMR0,0 BTFSS STATUS,C GOTO $-3 BCF STA
8、TUS,5 GOTO MLOOP ;======================================================================================================;---------------------------IIc子程序------------------------------------------ DELAY MOVLW 06H MOVWF T DECFSZ T,1 GOTO $-1 RETURN ;---------------------------
9、 INIT_IIC BSF SCL CALL DELAY BSF SDA CALL DELAY RETURN ;--------------------------------- START BSF SDA CALL DELAY BSF SCL CALL DELAY BCF SDA CALL DELAY BCF SCL CALL DELAY RETURN ;--------------------------------- STOP BCF SD
10、A CALL DELAY BSF SCL CALL DELAY BSF SDA RETURN ;--------------------------------- WRITE_IIC MOVWF IIC_TEMP MOVLW 08H MOVWF IIC_C TEMP BCF SDA RLF IIC_TEMP,1 BTFSC STATUS,C BSF SDA CALL DELAY BSF SCL CALL DELAY BCF SCL CALL
11、 DELAY DECFSZ IIC_C,1 GOTO TEMP GETACK BCF SDA MOVLW 21H TRIS GPIO BTFSC SDA GOTO $-1 CALL DELAY BSF SCL CALL DELAY BCF SCL MOVLW 20H TRIS GPIO CALL DELAY RETURN ;----------------------------------- READ_IIC MOVLW 08H MOVWF II
12、C_C MOVLW 21H TRIS GPIO RDTEMP BCF STATUS,C BTFSC SDA BSF STATUS,C RLF IIC_TEMP,1 CALL DELAY BSF SCL CALL DELAY BCF SCL CALL DELAY DECFSZ IIC_C,1 GOTO RDTEMP MASTERACK MOVLW 20H TRIS GPIO BCF SCL CALL DELAY BSF SDA CALL DELAY CALL STOP MOVF IIC_TEMP,0 MOVWF MODE RETURN ;------------------------------------------------ END






