Respuestas aleatorias de las salidas de un pic

Hola Chic@s,

voy a lanzaros una pregunta que es probable que a alguno os haya pasado.

Despues de mucho pelear para poder armar un programador para el 16f877, resulta que con un programa tan sencillo como parpadear el puerto B, mi pic entrega salidas aleatorias, eso si, anula los puertos que tengo conectados (en mi caso con diodos) y enciende el resto, pero no parpadea.

¿¿¿Podeis darme alguna pista??

un millon de gracias.

os dejo el programa para confirmar que no he metido la pata.



;Programa para el parpadeo de un puerto copleto

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
list p=16f877
include <p16f877.inc>

ADDR_L equ 0x20
DATA_L equ 0x21
contador

org 0x00
nop
nop

bsf STATUS,RP0 ; ir al banco 1
bcf STATUS,RP1

clrf TRISA ;Configuracion de puertosTODOS COMO SALIDAS .
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE


movlw b'00000110' ; TODAS LAS SALIDAS DIGITALES
movwf ADCON1

_inicio
movlw b'11111111' ; configuracion de 1 a la salida
movwf PORTB ; mueve el contenido de W al puerto B
call _retardo_
clrf PORTB
call _retardo_

goto _inicio

;**** Demora ****
_retardo_
movlw 0x28 ;
movwf contador ; Iniciamos contador1.-
Repeticion
decfsz contador,1 ; Decrementa Contador1.-
goto Repeticion ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-


end
 
Hola, se te olvido regresar al banco 0...
.
.
.
movlw b'00000110' ; TODAS LAS SALIDAS DIGITALES
movwf ADCON1

bcf STATUS,RP0 ; ir al banco 0;**********

_inicio
movlw b'11111111' ; configuracion de 1 a la salida
movwf PORTB ; mueve el contenido de W al puerto B
.
.
.
 
Gracias Saint_, vaya patazo mas gordo.

Una pregunta más. El RB7 configurado como salida (esto me sucede en mas de un programa) siempre esta ON. He probado con otro pic y me sucede lo mismo. ¿estoy pasando por alto algún protocolo de configuracion? quiero decir, no uso la configuracion de resitencia pullups internas ni nada, pero me parece raro que siempre enste a 1.
 
Hola, que tal.
ten en cuenta que cuando el micro se inicia este puede adoptar valores aleatorios en los puertos(cuando estos se configuran como salidas).

Una solucion practica para este caso es:

antes de configuurar el puesto como salida sera mejor escribir un valor a la salida de los puertos, asi cuando los configures como salida estos ya tendran un valor predefinido.
Ej.

.
.
.
movlw 0
movwf PORTB
bsf STATUS,5 ;banco 1
movlw 0
movwf TRISB ;puerto b como salida
bcf STATUS,5 ;banco 0
.
.
.
un saludo.
 
Atrás
Arriba