16f877 + lcd 16x2 PORTB

Enviado:
20 Out 2006 14:44
por Eloi
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


Enviado:
20 Out 2006 15:41
por jean
Eloi posta o teu código aí pra gente poder dar uma olhada e dar umas dicas.
Re: 16f877 + lcd 16x2 PORTB

Enviado:
20 Out 2006 16:26
por Renie
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.
PULL-UP DO PORTB!

Enviado:
21 Out 2006 11:46
por Fernando Guimarães Aguiar
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)
Re: PULL-UP DO PORTB!

Enviado:
23 Out 2006 06:20
por Eloi
Pessoal obrigo pelas dicas, já confirmei com relação ao LVP, está desabilitado, irei fazer o teste com os pull-up.
Grato
Eloi
Re: PULL-UP DO PORTB!

Enviado:
23 Out 2006 11:06
por Visitante
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