TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Azpi en 24 de Febrero de 2004, 13:45:00
-
Hola a todos! Acabo de empezar con un 16F876 y me esta dando muchos quebraderos de cabeza.
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
STATUS EQU 0x03
PUERTOA EQU 0x05
PUERTOB EQU 0x06
ADCON EQU 0x1F ;Configuración del Puerto A
ORG 0
goto inicio
ORG 5
inicio movlw 0x00
movwf PUERTOA
movwf PUERTOB
bsf STATUS,5 ;Acceso al banco 1
movlw b"00000000"
movwf TMR_OPT ;En el banco 1 este es el OPTION_REG.
;habilita PullUp internas
movlw 0x00 ;Escribimos 00 en el registro TRISB
movwf PUERTOB
movlw b"00000111"
movwf ADCON
movlw b"11111111"
movwf PUERTOA ;Puerto A entrada Digital
bcf STATUS,5 ;Acceso al banco 0
bucle movf PUERTOA,0
nop
movwf PUERTOB
goto bucle
END
Os agradecería cualquier comentario porque de verdad no se que probar ya.
-
hla compañero, lo único que te puedo decir es que este pic es desesperante yo yevo dos meses intentando programarlo con eso te digo todo, antes yo programaba un 16f84 y iba a las mil maravillas pero me metí en un proyecto que requería mas puertos y pensé en hacerlo con este pic y la verdad en que hora pensé en el, tienes razón pq a mi me pasa lo mismo en el ordenador el programa que diseñas funciona a la perfección y luego en el cacharro ni flores vamos, parece que le estes escribiendo en chino, ante todo decirte que yo utilizo el MPLAB pero bueno viendo tu programa yo no pondría ninguno de esos registros que pones, el pic ya sabe donde tiene el cada cosa vamos que lo de indicarle direcciones de memoria es solo para variables que tu te inventes yo pondría esto:
; Leer/escribir en puertos
LIST P=16F876
#include "p16f876.inc"
;AQUI IRIAN LAS VARIABLES QUE TU TE INVENTES PARA TU
;PROGRAMA
ORG 0x00
goto inicio
ORG 0x05
inicio
bsf STATUS,5
movlw 0x07
movwf ADCON1 ;Seleccionamos I/O Digitales
movlw b"00111111" ;Puerto A como entrada
movwf TRISA
movlw b"00000000" ;Puerto B como salida
movwf TRISB
bcf STATUS,5
bucle
movf PORTA,0
movwf PORTB
goto bucle
end
Como ves con solo ponerle el nombre del registro o del puerto en cuestión en mayusculas el ya sabe donde tiene que ir no hace falta indicarle en cada momento la dirección donde tiene que ir.
Otra cosa a tener en cuenta es con que le programas yo lo hago con el T-20 y a este hay que hacerle una modificación para que grabe este pic, y tb si programas con el ICPROG al seleccionar el dispositivo cuando cargues el archivo exe, a la derecha donde pone oscilador debes seleccionar XT y debajo en bits de configuración quitarlos todos pq si no hace cosas raras.
El programa que te pongo esta probado y funciona correctamente.
Espero haberte ayudado. 1Saludo

-
Hola amigos:
Segun el data sheet de Microchip para configurar el puerto A hay quie escribir en el registro ADCON1 el valor 0x06 (entradas-Salidas digitales) estais ecribiendo el valor 0x07.
Probad de esta manera a ver si os funciona
Un saludo Fermín
-
A mi me pasaba algo parecido y desactivando LVP (Low Voltage Program) en la palabra de configuración parece que se solucionó. Ahora mis problemas con el micro son otros....
-
Hola Azpi:
Mira revisando el código que has puesto veo que configuras el registro Adcon en la pagina 0 para configurar la puerta A como entrada digital. Para que sean digitales hay que configurar el puerta A como digital pero preimero hay que configurar el registro ADCON1 en la página 1 con el valor 0x06.
Te adjunto un pequeño codigo de como se realiza:
clrf TRISA ;Borra el puerto A.
clrf TRISB ;Borra el puerto B.
clrf TRISC ;Borra el puerto C.
bsf STATUS,5 ;Selección del banco 1
movlw b"00000110" ;Valor a cargar W para configurar la
movwf ADCON1 ;Puerta A como E/S digitales.
movlw b"00111111" ;Valor a cargar W para configurar la
movwf TRISA ;Puerta A como entradas.
Espero que te sirva un saludo Fermín
-
Azpi tu programa no está malito, creo que está perfectamente bien, tendrás que buscar el error en otra parte, quizá en la programación de los fuses en el ICPROG. ¿Como los programas?
Fer_TACA el primer bit se puede programar como 0 o como 1, por lo tanto igual está bien un 6 que un 7.
Un saludo