PIC16F84A
El pic 16F84A es uno de los más usados por todos los que se inician en el campo de la programación de microcontroladores, asi que el primer programa que haremos sera para este PIC. Antes de comenzar, debo mencionar que no presentare un tutorial de Assembler, pero les recomiendo este archivo para el PIC16F84A, donde están todas sus instrucciones y más.
Información recomendada
Programación PIC16F84A
Libro Microcontrolador PIC16F84 Desarrollo de proyectos
Más aún les brindare información sobre algunos puntos.
Toda esta información será suficiente para comenzar.
Programa
Este es el programa que recomiendo para comenzar.
Es el clásico “Hola mundo” de los programas en microcontroladores, el famoso “led intermitente” o led que parpadea o “Led Blink”.
Si bien otros programas iniciales son más sencillos que este, no son suficientes para asegurar que todo está bien.
Circuito
Aquí está el circuito para probar el programa en la práctica.
Trabajaremos con Proteus, por lo práctico de este programa en las simulaciones de microcontroladores. También nos ayudara para asegurar que nuestro programa funciona bien.
En el circuito no se ve pero tambien se tiene que conectar la fuente de alimentación, pin 5 - tierra y pin 14 - Vcc (5V)
Información del programa
Veamos un poco la estructura del programa:
Luego del “list” y el “include” que nos permiten añadir las instrucciones del Pic especificado pasamos a la palabra de configuración.
Aquí tenemos información de las palabras de configuración más importantes para el PIC16F84A.
PWRTE (power up timer: temporizador de encendido) provee un retardo fijo de 72ms en el encendido únicamente, diseñado para mantener el reset mientras la fuente se estabiliza. CP protección de código. WDT (watchdog: temporizador de perro guardián)reset cuando hay desbordamiento. Evita los posibles cuelgues de programa. Tipo de oscilador: RC: Formado por una resistencia y un condensador. No preciso. LP: Baja frecuencia. Entre 32K a 200KHz. XT: Oscilador a cristal de cuarzo. Genera entre 100k a 4MHz. HS: Para frecuencias entre 4M a 20MHz.Nuestra palabra de configuración:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Protección de codigo (CP) no es necesario por lo que la deshabilitamos (OFF).
WDT tampoco es necesario por lo que es un programa sencillo.
PWRTE siempre lo considero activado. Es muy importante.
XT es por que trabajo con un cristal de 4MHz.
Luego definimos las variables que utilizamos COUNT1 y COUNT2.
El banco de memorias comienza en la posición 0x0c.
Definimos el modo de operación de los puertos.
Por último la rutina principal de bucle infinito.
INICIO bsf PORTB,0 call DELAY ;llamo a la rutina de retardo bcf PORTB,0 call DELAY ;otra vez para notar el efecto del parpadeo goto INICIO
“bsf” pone a 1 lógico el Pin 0 del puerto B.
“bcf” pone a 0 lógico el Pin 0 del puerto B.
Así se logra prender y apagar el led conectado al Pin 0 pero este efecto no sería observable sin un retardo, ya que las instrucciones como había mencionado demoran 1us.
El retardo se da en:
call DELAY
Donde se salta a la rutina de retardo “DELAY”.
DELAY movlw 0xFF ; Subrutina de retardo movwf COUNT1 ; 256x256=65536 cuentas movwf COUNT2 LOOP decfsz COUNT1,1 ; Decrementa COUNT1 goto LOOP ; Salta si COUNT1=0 movlw 0xFF movwf COUNT1 ; COUNT1=FF decfsz COUNT2,1 ; Decrementa COUNT2 goto LOOP ; Salta si COUNT2=0 return ; Retorno de subrutina
Como había mencionado, con el StopWatch se puede calcular el tiempo que demora este retardo de forma exacta, obtuve 196ms o 200ms para redondear.
No hay comentarios :
Publicar un comentario