Moderadores: andre_luis, 51, guest2003, Renie
;*****************************************************************************
;PROGRAMA TESTE EEPROM 24C04 EXTERNA COM PIC16F877A E COMUNICACAO I2C
;LIVRO CONECTANTO O PIC - RECURSOS AVANCADOS - EXEMPLO 8
;VERSÃO 2.0 - DATA: 24/02/2003 - NICOLAS CESAR LAVINA E DAVID JOSE DE SOUZA
;*****************************************************************************
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
;*****************************************************************************
CBLOCK 0X20
FILTRO_BOTOES
TEMPO_TURBO
TEMPO1
TEMPO0
FLAG
AUX
ENDERECO_HIGH
ENDERECO_LOW
BUFFER
VALOR_DADOS
ENDC
;*****************************************************************************
#INCLUDE <P16F877A.INC>
ERRORLEVEL -302
;*****************************************************************************
#DEFINE BANK1 BSF STATUS,RP0
#DEFINE BANK0 BCF STATUS,RP0
;*****************************************************************************
FILTRO_TECLA EQU .200
TURBO_TECLA EQU .60
END_EEPROM_H EQU 0X00
END_EEPROM_L EQU 0X00
;*****************************************************************************
#DEFINE F_ERRO FLAG,0
;*****************************************************************************
#DEFINE BOTAO_0 PORTB,0
#DEFINE BOTAO_1 PORTB,1
#DEFINE BOTAO_2 PORTB,2
#DEFINE BOTAO_3 PORTB,3
;*****************************************************************************
#DEFINE DISPLAY PORTD
#DEFINE RS PORTE,0
#DEFINE ENABLE PORTE,1
#DEFINE SCL PORTC,3
;*****************************************************************************
#DEFINE SDA PORTC,4
;*****************************************************************************
ORG 0X00
GOTO CONFIG
;*****************************************************************************
CONFIG
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BANK1
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'11111111'
MOVWF TRISB
MOVLW B'11110101'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000100'
MOVWF TRISE
MOVLW B'11011111'
MOVWF OPTION_REG
MOVWF B'00000000'
MOVWF INTCON
MOVLW B'00000111'
MOVWF ADCON1
MOVLW B'00001001'
MOVWF SSPADD
MOVLW B'10000000'
MOVWF SSPSTAT
BANK0
MOVLW B'00101000'
MOVWF SSPCON
BSF SCL
BTFSC STATUS,NOT_TO
GOTO $
MOVLW 0X20
MOVWF FSR
LIMPA_RAM
CLRF INDF
INCF FSR,F
MOVF FSR,W
XORLW 0X80
BTFSS STATUS,Z
GOTO LIMPA_RAM
;*****************************************************************************
INICIALIZACAO_DISPLAY
BCF RS
MOVLW 0X30
CALL ESCREVE
MOVLW .3
CALL DELAY_MS
MOVLW 0X30
CALL ESCREVE
MOVLW 0X30
CALL ESCREVE
MOVLW B'00111000'
CALL ESCREVE
MOVLW B'00000001'
CALL ESCREVE
MOVLW .1
CALL DELAY_MS
MOVLW B'00001100'
CALL ESCREVE
MOVLW B'00000110'
CALL ESCREVE
BSF RS
;*****************************************************************************
LE_MEMORIA_EEPROM
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
CALL I2C_EEPROM_READ
MOVF BUFFER,W
MOVWF VALOR_DADOS
;*****************************************************************************
CALL ATUALIZA_TELA_LINHA_1
CALL ATUALIZA_TELA_LINHA_2
;*****************************************************************************
VARRE
CLRWDT
VARRE_BOTOES
BTFSS BOTAO_0
GOTO TRATA_BOTAO_0
BTFSS BOTAO_1
GOTO TRATA_BOTAO_1
BTFSS BOTAO_2
GOTO TRATA_BOTAO_2
BTFSS BOTAO_3
GOTO TRATA_BOTAO_3
;*****************************************************************************
MOVLW FILTRO_TECLA
MOVWF FILTRO_BOTOES
MOVLW .1
MOVWF TEMPO_TURBO
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_0
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
DECFSZ TEMPO_TURBO,F
GOTO VARRE
MOVLW TURBO_TECLA
MOVWF TEMPO_TURBO
INCF VALOR_DADOS,F
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_1
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
DECFSZ TEMPO_TURBO,F
GOTO VARRE
MOVLW TURBO_TECLA
MOVWF TEMPO_TURBO
DECF VALOR_DADOS,F
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_2
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z
GOTO VARRE
GRAVA_MEMORIA_EEPROM
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
MOVF VALOR_DADOS,W
MOVWF BUFFER
CALL I2C_EEPROM_WRITE
MOVLW .10
CALL DELAY_MS
GOTO VARRE
;*****************************************************************************
TRATA_BOTAO_3
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z
GOTO VARRE
DECFSZ FILTRO_BOTOES,F
GOTO VARRE
MOVLW END_EEPROM_H
MOVWF ENDERECO_HIGH
MOVLW END_EEPROM_L
MOVWF ENDERECO_LOW
CALL I2C_EEPROM_READ
BTFSC F_ERRO
GOTO $+3
MOVF BUFFER,W
MOVWF VALOR_DADOS
CALL ATUALIZA_TELA_LINHA_2
GOTO VARRE
;*****************************************************************************
;SUB-ROTINAS
;*****************************************************************************
DELAY_MS
MOVWF TEMPO1
MOVLW .250
MOVWF TEMPO0
CLRWDT
DECFSZ TEMPO0,F
GOTO $-2
DECFSZ TEMPO1,F
GOTO $-6
RETURN
;*****************************************************************************
ESCREVE
MOVWF DISPLAY
NOP
BSF ENABLE
GOTO $+1
BCF ENABLE
MOVLW .1
CALL DELAY_MS
RETURN
;*****************************************************************************
ATUALIZA_TELA_LINHA_1
BCF RS
MOVLW 0X83
CALL ESCREVE
BSF RS
MOVLW 'M'
CALL ESCREVE
MOVLW 'A'
CALL ESCREVE
MOVLW 'S'
CALL ESCREVE
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW 'R'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'I'
CALL ESCREVE
MOVLW '2'
CALL ESCREVE
MOVLW 'C'
CALL ESCREVE
RETURN
;*****************************************************************************
ATUALIZA_TELA_LINHA_2
BCF RS
MOVLW 0XC6
CALL ESCREVE
BSF RS
SWAPF VALOR_DADOS,W
ANDLW B'00001111'
MOVWF AUX
MOVLW 0X0A
SUBWF AUX,W
MOVLW 0X30
BTFSC STATUS,C
MOVLW 0X37
ADDWF AUX,W
CALL ESCREVE
MOVF VALOR_DADOS,W
ANDLW B'00001111'
MOVWF AUX
MOVLW 0X0A
SUBWF AUX,W
MOVLW 0X30
BTFSC STATUS,C
MOVLW 0X37
ADDWF AUX,W
CALL ESCREVE
MOVLW 'h'
CALL ESCREVE
RETURN
;*****************************************************************************
AGUARDA_I2C_LIVRE
BANK1
BTFSC SSPSTAT,R_W
GOTO $-1
MOVF SSPCON2,W
ANDLW B'00011111'
BTFSS STATUS,Z
GOTO $-3
BANK0
RETURN
;*****************************************************************************
ACK_OUT
BANK1
BCF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
BANK0
RETURN
;*****************************************************************************
NACK_OUT
BANK1
BSF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
BANK0
RETURN
;*****************************************************************************
TESTA_ACK
BANK1
BTFSC SSPCON2,ACKSTAT
GOTO RECEBEU_NACK
BANK0
BCF F_ERRO
RETURN
;*****************************************************************************
RECEBEU_NACK
BANK0
BSF F_ERRO
RETURN
;*****************************************************************************
I2C_EEPROM_READ
BANK1
BSF SSPCON2,SEN
BANK0
CALL AGUARDA_I2C_LIVRE
BCF STATUS,C
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF ENDERECO_LOW,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,RSEN
BANK0
CALL AGUARDA_I2C_LIVRE
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,RCEN
BANK0
CALL AGUARDA_I2C_LIVRE
MOVF SSPBUF,W
MOVWF BUFFER
CALL NACK_OUT
CALL AGUARDA_I2C_LIVRE
BANK1
BSF SSPCON2,PEN
BANK0
CALL AGUARDA_I2C_LIVRE
RETURN
;*****************************************************************************
I2C_EEPROM_WRITE
BANK1
BSF SSPCON2,SEN
BANK0
CALL AGUARDA_I2C_LIVRE
BCF STATUS,C
RLF ENDERECO_HIGH,W
IORLW B'10100000'
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF ENDERECO_LOW,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
MOVF BUFFER,W
MOVWF SSPBUF
CALL AGUARDA_I2C_LIVRE
CALL TESTA_ACK
BTFSC F_ERRO
GOTO I2C_ERRO
BANK1
BSF SSPCON2,PEN
BANK0
CALL AGUARDA_I2C_LIVRE
RETURN
;*****************************************************************************
I2C_ERRO
BANK1
BSF SSPCON2,PEN
BANK0
BCF RS
MOVLW 0XC6
CALL ESCREVE
BSF RS
MOVLW 'E'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
MOVLW .250
CALL DELAY_MS
CALL ATUALIZA_TELA_LINHA_2
RETURN
;*****************************************************************************
END ;FIM DO PROGRAMA.
;*****************************************************************************
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante