Hola compañero, recurro a ti con la esperanza de aprender a hacer funcionar al "enano" éste. El caso es que estoy intentado escribir un programa que (y para comenzar) haga parpadear un led (control de tiempos) conectado a la línea 2 del único puerto que tiene el 12f629 y no lo consigo. El problema es que no encuentro información didáctica y/o bibliografía adecuada para aprender a manejar este micro. Tampoco encuentro ejemplos de programas escritos en lenguaje ensamblador para este PIC, que me sirvan de referencia. Bibliografía para aprender a manejar el 16f84 hay para "parar un tren", pero para aprender sobre el "enano" en cuestión, no hay casi nada. Si me pudieras ilustrar con un ejemplo de programa en ensamblador para hacer parpadear un led o para controlar los tiempos controlando el TMR0 en este micro, te lo agradecería enormemente y si conoces de alguna publicación o bibliografía centrada en el manejo de este tipo de controladores PIC, también me sería de inestimable ayuda.
Esperando tu ayuda te doy las gracias por adelantado compañero. Un saludo.
1 Respuesta
Respuesta de muadib
1
1
muadib, IT en Electronica Industrial, IT en Sistemas de Telecomunicaciones
Mierda, he visto como queda el programa y no esta del todo mal, pero he visto así de primeras un par de fallos, el primer GOTO es con O no GOT0 con cero. Y he visto un ORG 004 q en tu caso debe ser ORG 003 yo utilizo el vector 4 por las características especiales de mi cacharro.
Lo primero que quiero hacerte saber es que no hay gran diferencia entre aprender tal o cual micro. En el fondo todos hacen lo mismo, todos funcionan más o menos igual. En cuanto tengas nociones básicas de un micro las puedes extrapolar a otro. Yo aprendí ensamblador con el pic16 pero pase enseguida a dar arquitectura con el 8051, luego pase a programar en c y en mi primer proyecto tuve que utilizar un motorola hcs12. Cada uno es totalmente diferente a los otros, pero son muy parecidos. Lo importante es tener una noción sobre su funcionamiento. Tu principal ayuda debe ser siempre el datasheet del micro y la información que te da el fabricante. En concreto microchip trabaja bastante bien, bajate la información de ese micro de www.microchip.com. Si lo que ocurre es que nunca has programado un micro, quizá el datasheet sea un poco "heavy". Trata de encontrar un tutorial para pic16 (los hay a patadas) e intenta "traducir" el ensamblador y los accesos a periféricos (timer, puertos, etc) de pic16 a pic12. Ya veras como no es muy diferente. No conozco el pic12 pero no creo que tenga un conjunto de instrucciones muy diferente al pic16, quizá un poco más reducido, quizá menos periféricos. Sobre libros no te puedo dar gran consejo, porque nunca los he usado, siempre me enseñaron con datasheet. Pero se que hay un par sobre pic de un tal angulo. No se como serán. Respecto de a lo del programa, es un problema clásico de micros, es siempre el primer programa que tienes que hacer. En foros especializados seguro que encuentras a alguno que te pueda hacer este programa con los ojos cerrados. Yo voy a intentar copiarte el programa para un pic16, no se como se vera en esta pantallita, y lo tendrás que traducir a pic12, espero que te sirva para algo: ;************************************************************************************* ;ejemplo3.asm ;LED intermitente en A0 (por interrupcion ) ;************************************************************************************* ;Registros y Constantes propios del micro INCLUDE "P16F74.INC" ;Fichero con los registros y constantes del micro ;************************************************************************************* ;Registros particulares del programa SAVEPCL EQU 20 SAVEFSR EQU 21 SAVEST EQU 22 SAVEW EQU 23 ;************************************************************************************* ;Asignacion de puertos P_LED EQU PORTA ;Puerto de LED b_LED EQU 0 ;Posicion del LED en el puerto ;************************************************************************************* ;Inicio de programa. Direccion de reset ;************************************************************************************* ORG 00 ;direccion de reset GOT0 PROGPAL ;salto al programa principal ;************************************************************************************* ;atencion a interrupciones.Direccion de interrupcion ORG 004 ;direccion de interrupcion INTERR: ;Salvado general de registros MOVWF SAVEW ;el registro w MOVF STATUS,W ;el status CLRF STATUS MOVWF SAVEST MOVF FSR, W ;el registro indirecto FSR MOVWF SAVEFSR MOVF PCLATH, W ;el registro PCLATH MOVWF SAVEPCL CLRF PCLATH ;se trabajaran las interrupciones en primnera página BTFSS INTCON, T0IF ;Comprueba si es interrupcion por TMR0 GOTO RETINT ;si no lo es, retorna recuperando registtros ;Caso que hay interrupción por TMR0 MOVLW -d'10' ;Se reinicializa contador TMR0 MOVWF TMR0 BCF INTCON, T0IF ;Se resetea interrupcion para prox. Vez BTFSS p_LED,b_LED ;¿esta encendido el LED? GOTO INT2 ;si, pasar a apagar BCF p_LED,b_LED ;no, encenderlo GOTO RETINT ;Retorna recuperando registros INT2: BSF p_LED,b_LED ;Apagar LED RERINT: ;Recuperación general de registros y retorno MOVF SAVEPCL, W ; el registro PCLATH MOVWF PCLATH MOVF SAVEFSR, W ;El registro indirecto FSR MOVWF FSR SWAPF SAVEW, F ;El registro W RETFIE ;********************************************************************************** ;Programa principal ;********************************************************************************** Programa principal ;*****************Inicializaciones CALL INITPA
Muchas gracias compañero, el tutorial del 16F84A ya lo tenía y lo tengo estudiado, de hecho tengo experiencia con este micro. He hecho lo que me has dicho y ya he conseguido programar un pic 12c675, mi problema ahora es que, sólo lo he conseguido grabar la primera vez, a partir de ahí ya me ha sido imposible repetir la experiencia, no entiendo qué es lo que pueda estar pasando. La placa grabadora PICBURNER la tengo conectada al puerto serie del PC y cuando intento grabar el PIC con el software