16f877 + lcd 16x2 PORTB

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

16f877 + lcd 16x2 PORTB

Mensagempor Eloi » 20 Out 2006 14:44

Pessoal, alguem poderia me dar alguma dica de como resolver este problema:
Estou utilizando o PIC 16F877 + LCD 16X2, quando eu configuro para o PORTD, ele funciona normalmente, ma squando muda para a PORTB e não funciona nada.

Grato


Eloi

:?:
Eloi
 
Mensagens: 3
Registrado em: 20 Out 2006 14:39
Localização: Campinas - SP

Mensagempor jean » 20 Out 2006 15:41

Eloi posta o teu código aí pra gente poder dar uma olhada e dar umas dicas.
[]
Jean

"Quem quer fazer alguma coisa, encontra um meio. Quem não quer fazer nada, encontra uma desculpa."
Roberto Shinyashiki
jean
Byte
 
Mensagens: 134
Registrado em: 12 Out 2006 12:03
Localização: Blumenau-SC

Re: 16f877 + lcd 16x2 PORTB

Mensagempor Renie » 20 Out 2006 16:26

Olá Eloi!

De principio, verifique como está gravando a configuração do LVP (
programação em baixa voltagem), se ela estiver habilitada, o pino RB3
não estará disponível.
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

PULL-UP DO PORTB!

Mensagempor Fernando Guimarães Aguiar » 21 Out 2006 11:46

Eloi, não se esqueça de colocar os resistores de pull-up no portb!

Tente isso e veja se funciona!?

Ahh verifique o LVP (Renie)
Avatar do usuário
Fernando Guimarães Aguiar
Nibble
 
Mensagens: 53
Registrado em: 21 Out 2006 10:54
Localização: São Carlos

Re: PULL-UP DO PORTB!

Mensagempor Eloi » 23 Out 2006 06:20

Pessoal obrigo pelas dicas, já confirmei com relação ao LVP, está desabilitado, irei fazer o teste com os pull-up.


Grato

Eloi
Eloi
 
Mensagens: 3
Registrado em: 20 Out 2006 14:39
Localização: Campinas - SP

Re: PULL-UP DO PORTB!

Mensagempor Visitante » 23 Out 2006 11:06

Pessoal este é o código, esse mesmo código funciona na PORTD.
Já coloque resistores de pull up, más não resolveu




list p=16f877
errorlevel -302

; Cristal de 4MHz varredura de ciclo é de 1us => 0.000,001 s

#include <p16f877.inc>
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_ENABLE_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

;-----------------------------------------------------------------------------


;--------------------------------------------------------------------------

RS EQU 0X01 ;REGISTER SELECT 1 = DADO, 0 = INSTRUÇÃO
RW EQU 0X02 ;READ/WRITE 1 = LEITURA 0 = ESCRITA
E EQU 0X03 ;ENABLE
BUSYFLAG EQU 0X07 ;BUSY FLAG 1 = OCUPADO 0 = LIVRE


CBLOCK 0X20
CONTROL
DADO
count
off
ENDC

#DEFINE BAUD D'100'
#DEFINE FOSC D'4000'


Bank0 MACRO
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
Bank1 MACRO
bsf STATUS,RP0
bcf STATUS,RP1
ENDM

MOVLF macro literal,dest
movlw literal
movwf dest
endm
MOVFF macro source,dest
movf source,W
movwf dest
endm

org 0
goto inicio

org 4
retfie

Table1 addwf PCL,f
DT "Teste Linha 01 " ; off = 0
DT "Teste Linha 02 " ; off = 16

InitPorts
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
Bank1
MOVLF B'00001111',TRISA
MOVLF B'00000000',TRISB
MOVLF B'00000000',TRISC
MOVLF B'00000000',TRISD
MOVLF B'00000000',TRISE
MOVLF B'10000000',OPTION_REG
MOVLF B'00000111',ADCON1
Bank0 ;
MOVLF B'00000000',INTCON ;B'11000000'
return

inicio
call InitPorts
call IncLCD
call mensg_Cont

Varredura
goto Varredura

IncLCD
movlw 0X28 ;INÍCIO DA CONFIGURAÇÃO DO LCD
call EC ;CONFIGURA PARA:
movlw 0X28 ;DUAS LINHAS
call EC ;5 X 7 PONTOS
movlw 0X06 ;16 X 2 CARACTERES
call EC ;4 BITS
movlw 0X0C
call EC
movlw 0X01
call EC ;FIM DA CONFIGURAÇÃO DO LCD
return


;******************************
;*** ROTINAS DO LCD ***
;******************************

ED
bsf PORTB,RS
bcf PORTB,RW
ENVIABYTE ;ROTINA PARA O ENVIO DE UM BYTE QUALQUER
BSF PORTB,E
MOVWF DADO
MOVLW 0X0F
ANDWF PORTB,F
MOVLW 0XF0
ANDWF DADO,W
IORWF PORTB,F
BCF PORTB,E
BSF PORTB,E
SWAPF DADO,F
MOVLW 0X0F
ANDWF PORTB,F
MOVLW 0XF0
ANDWF DADO,W
IORWF PORTB,F
BCF PORTB,E
call CHECABUSYFLAG
return

EC ;ENVIA O COMANDO QUE ESTÁ EM 'W' PARA O LCD
bcf PORTB,RS
bcf PORTB,RW
call ENVIABYTE
return

CHECABUSYFLAG ;ROTINA QUE SÓ RETORNA QUANDO BUSYFLAG = 0
bsf STATUS,RP0 ;VAI PARA O BANCO 1
MOVLF 241,TRISB ;ONFIGURA O TRISB
bcf STATUS,RP0 ;VOLTA PARA O BANCO 0
bcf PORTB,RS
bsf PORTB,RW
bsf PORTB,E
btfss PORTB,BUSYFLAG ;TESTA BUSY FLAG
goto RETORNO ;SE BUSYFLAG = 0 VAI PARA A ROTINA DE RETORNO
bcf PORTB,E
bsf PORTB,E
bcf PORTB,E
goto $ - 6 ;LOOP PARA NOVO TESTE DO BUSY FLAG
RETORNO ;ROTINA PARA RETORNAR DE CHECABUSYFLAG
bcf PORTB,E
bsf PORTB,E
bcf PORTB,E
bsf STATUS,RP0 ;VAI PARA O BANCO 1
MOVLF 1,TRISB ;CONFIGURA O TRISB
bcf STATUS,RP0 ;VOLTA PARA O BANCO 0
return

linha_01
MOVLF 16,count
movlw 0X80 ;muda para linha 1
call EC ;EE
return
linha_02
MOVLF 16,count
movlw 0XC0 ; muda para linha 2
call EC ;EE
return

mensg_Cont
MOVLF 0,off
call linha_01
call ler_TABLE1
MOVLF 16,off
call linha_02
call ler_TABLE1
return

ler_TABLE1
movf off,w
call table1
Call ED
incf off,f
decfsz count,f ; 16 caracteres ?
goto ler_TABLE1 ; continua escrevendo
return


end

Se alguem tiver mais alguma sugestão eu agradeço


Eloi
Visitante
 


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x