Re: BV4618 December 09, 2013 05:03PM |
Admin Registered: 11 years ago Posts: 351 |
Re: BV4618 December 11, 2013 09:56PM |
Registered: 9 years ago Posts: 2 |
;*******************Start bit subroutine************************** ; This routine generates a Start condition ; (high-to-low transition of SDA while SCL ; is still high. ;***************************************************************** BSTART bcf PIR1,SSPIF ; Clear SSP interrupt flag bsf SSPCON2,SEN ; Generate Start condition bstart_wait btfss PIR1,SSPIF ; Check if operation completed bra bstart_wait ; If not, keep checking return ;*******************Restart bit subroutine************************** ; This routine generates a Repeated Start ; condition (high-to-low transition of SDA ; while SCL is still high. ;***************************************************************** BRESTART bcf PIR1,SSPIF ; Clear SSP interrupt flag bsf SSPCON2,RSEN ; Generate Restart condition brestart_wait btfss PIR1,SSPIF ; Check if operation completed bra brestart_wait ; If not, keep checking return ;*******************Stop bit subroutine*************************** ; This routine generates a Stop condition ; (low-to-high transition of SDA while SCL ; is still high. ;***************************************************************** BSTOP bcf PIR1,SSPIF ; Clear SSP interrupt flag bsf SSPCON2,PEN ; Generate Stop condition bstop_wait btfss PIR1,SSPIF ; Check if operation completed bra bstop_wait ; If not, keep checking return TX_BYTE bcf PIR1,SSPIF ; Clear SSP interrupt flag movf datao,W ; Copy datao to WREG movwf SSPBUF ; Write byte out to device tx_wait btfss PIR1,SSPIF ; Check if operation completed bra tx_wait ; If not, keep checking return ;----------------------------------------------------------------- RX_BYTE bcf PIR1,SSPIF ; Clear SSP interrupt flag bsf SSPCON2,RCEN ; Initiate reception of byte rx_wait btfss PIR1,SSPIF ; Check if operation completed bra rx_wait ; If not, keep checking movf SSPBUF,W ; Copy byte to WREG movwf datai ; Copy WREG to datai bcf PIR1,SSPIF ; Clear SSP interrupt flag BSF SSPCON2,ACKDT ;GENERATE NACK bsf SSPCON2,ACKEN ; Generate ACK/NO ACK bit rx_wait2 btfss PIR1,SSPIF ; Check if operation completed bra rx_wait2 ; If not, keep checking return ;-------------------------------------------------------------------- ;I2C DISPLAY ROUTINE TEST BV4168 ;I2C DISPLAY TEST BSF PORTC,2 BCF PORTC,5 CALL DBNC CALL DBNC CALL DBNC CALL DBNC CALL DBNC CALL DBNC CALL DBNC CALL BSTART MOVLW LCD ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X1B MOVWF datao CALL TX_BYTE MOVLW 0X30 ;set number of lines to four MOVWF datao CALL TX_BYTE MOVLW 0X04 ;TO FOUR MOVWF datao CALL TX_BYTE CALL BSTOP CALL BSTART MOVLW LCD ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X1B ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X31 ;NUMBER OF CHARACTERS MOVWF datao CALL TX_BYTE MOVLW .20 ;SET TO 20 MOVWF datao CALL TX_BYTE CALL BSTOP CALL BSTART MOVLW LCD ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X1B MOVWF datao CALL TX_BYTE MOVLW 0X01 MOVWF datao CALL TX_BYTE MOVLW 0X01 ;clear screen MOVWF datao CALL TX_BYTE CALL BSTOP CALL BSTART MOVLW LCD ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X1B ;LCD ADRESS MOVWF datao CALL TX_BYTE ;WAKE IT UP MOVLW 0X25 ;HOME CURSOR MOVWF datao CALL TX_BYTE CALL BSTOP CALL BSTART MOVLW LCD MOVWF datao CALL TX_BYTE MOVLW 'H' MOVWF datao CALL TX_BYTE MOVLW 'E' MOVWF datao CALL TX_BYTE MOVLW 'L' MOVWF datao CALL TX_BYTE MOVLW 'L' MOVWF datao CALL TX_BYTE MOVLW 'O' MOVWF datao CALL TX_BYTE CALL BSTOP
Re: BV4618 December 12, 2013 09:52AM |
Admin Registered: 11 years ago Posts: 351 |