SoloCodigo
Programación Específica => Microcontroladores => Mensaje iniciado por: Azpicueta en Martes 24 de Febrero de 2004, 18:23
-
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
-
Suponiendo que utilizas un oscilador a cristal de cuarzo, prueba a poner la siguiente línea al principio del programa:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF
(El primer CONFIG lleva dos guiones bajos al principio, el resto solo uno).
De todas formas, si no sabes absolutamente nada de micros, creo que es mejor que hubieras empezado por el PIC16F84A que es mucho más sencillo.
Cuenta que tal te ha ido.
Saludos.
Setha.
-
Hola, por lo que vi te falto definir la direccion de los registros TRIS A y TRIS B que estan en la 0x85 y 0x86, en la parte del programa donde definis
TRISB EQU 0x86
movlw 0x00 ;Escribimos 00 en el registro TRISB
movwf TRISB ;para que PUERTO B sea SALIDA de datos
No se porque trabajas con el TIMER ?
Deshabilita las interrupciones, si no las utilizas, a veces es convenientes cuando no se trabaja con interrupciones.
Pone en el encabezado la instruccion INCLUDE P16F876.INC, con esto no tenes que declarar los registros como TRIS, PORT,etc
Te incluyo el P16f877.INC que el igual.
Suerte
Espero que te haya servido