Hola a todos! Es la primera vez que escribo y acabo de empezar en esto de los PICs. He comenzado con el 16F876 porque me lo recomendaron como uno de los más sencillos.
Mi problema aparece al empezar a probar con el PIC, para lo que escribí un simple programa que lee del puerto A y escribe lo que ha leido en el puerto B. Cuando simulo con Pic Simulator IDE funciona correctamente, pero al meterlo al micro la cosa no funciona. Aparentemente es tan simple que no se que falla. LLevo días dándole vueltas y no se que hacer ya. Agradecería que alguien me echara una mano. Os pongo el programa a continuación:
; Leer/escribir en puertos
LIST P=16F876
RADIX HEX
;***********************************************
;******* Registros *******
;***********************************************
TMR_OPT EQU 0x01 ;Timer
STATUS EQU 0x03 ;Estado
PUERTOA EQU 0x05 ;Puerto A
PUERTOB EQU 0x06 ;Puerto B
ADCON EQU 0x1F ;Configuración del Puerto A
ORG 0
goto inicio
ORG 5
inicio movlw 0x00 ;Escribo 00 en todos los puertos
movwf PUERTOA ;para limpiar la salida de datos latcheada
movwf PUERTOB
bsf STATUS,5 ;Acceso al banco 1
;Configuracion e inicialización de registros
movlw b'00000000' ;CLK interno,flanco bajada,preescalado de 2
movwf TMR_OPT ;En el banco 1 este es el OPTION_REG.
;Con este valor habilita PullUp internas del
;Puerto B para que sea salida
movlw 0x00 ;Escribimos 00 en el registro TRISB
movwf PUERTOB ;para que PUERTO B sea SALIDA de datos
movlw b'00000111' ;Todo el puerto A queda como puerto
movwf ADCON ;Digital. Escribimos en reg ADCON1
movlw b'11111111' ;Escribimos FF en el registro TRISA
movwf PUERTOA ;Todo el Puerto A como ENTRADA, A6 y A7 se leeran siempre como 0
bcf STATUS,5 ;Acceso al banco 0
bucle movf PUERTOA,0 ;Leemos el puerto A PuertoA -> W
nop
movwf PUERTOB ;Llevamos lo de W al puerto B W->PuertoB
goto bucle
END
Os agradecería cualquier comentario porque de verdad no se que probar ya.
Por si sirve de algo, genero el HEX con MPlab, utilizo un programador Te20 y descargo con IcProg.
Gracias a todos