Programación PIC16F84A en Ensamblador: Proyectos de Control y Visualización

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 9,15 KB

Proyecto 1: Contador y Control de LED con PIC16F84A

Descripción General del Programa

Este código en ensamblador para el PIC16F84A realiza las siguientes funciones:

  1. Configura los puertos:
    • El PORTB se configura como salida para visualizar un valor binario.
    • El PORTA se utiliza como salida para controlar un LED.
  2. Realiza un conteo de 0 a 255, mostrando el valor actual en el PORTB.
  3. Activa un LED conectado a RA0 si el valor del contador es igual o superior a 120.
  4. Desactiva el LED en RA0 cuando el contador alcanza el valor de 200.
  5. Al llegar a 255, el contador se reinicia a 0, comenzando un nuevo ciclo.

1. Configuración Inicial del Procesador y Registros

Aquí se establecen los nombres de los registros y variables, lo que facilita la legibilidad y el mantenimiento del código.

2. Configuración de Puertos de E/S

  • Se accede al Banco 1 para configurar los registros de dirección de los puertos.
  • Se limpian (mediante la instrucción clrf) los registros TRISB y TRISA para configurar PORTB y PORTA como puertos de salida.
  • Posteriormente, se retorna al Banco 0 para operar con los datos de los puertos.

3. Inicialización de Variables y Periféricos

  • CONTADOR se inicializa en 0.
  • Se garantiza que el LED conectado a RA0 se encuentre inicialmente apagado.

4. Bucle Principal: Conteo y Control del LED

El valor actual de CONTADOR se transfiere al registro de trabajo W y, posteriormente, a PORTB, permitiendo la visualización del conteo en los pines de salida.

5. Lógica de Encendido del LED (Contador >= 120)

  • Se compara CONTADOR con 120.
  • Si CONTADOR es menor que 120, el programa continúa sin activar el LED.
  • Si CONTADOR es mayor o igual a 120, se procede a encender el LED conectado a RA0.

6. Lógica de Apagado del LED (Contador >= 200)

  • Cuando el CONTADOR alcanza el valor de 200, el LED en RA0 se desactiva.
  • Posteriormente, si el contador continúa incrementándose hasta 255, se procede a su reinicio.

7. Continuación del Conteo y Retardo

  • Se invoca la subrutina de retardo para introducir una pausa.
  • Se incrementa el valor de CONTADOR (CONTADOR = CONTADOR + 1).
  • El flujo del programa retorna a la etiqueta INICIO para proseguir con el bucle principal.

8. Reinicio del Contador

Cuando el contador alcanza su valor máximo (255), se reinicia a 0 para comenzar un nuevo ciclo de conteo.

9. Subrutina de Retardo (Delay)

Esta subrutina genera una breve pausa, asegurando que el conteo no se ejecute a una velocidad excesiva y sea perceptible.

Resumen del Funcionamiento del Contador

  1. Se configuran PORTA y PORTB como puertos de salida.
  2. El contador se inicializa en 0 y su valor se visualiza a través de los LEDs conectados a PORTB.
  3. Si el contador es igual o superior a 120, el LED en RA0 se activa.
  4. Si el contador es igual o superior a 200, el LED en RA0 se desactiva.
  5. Al alcanzar el contador el valor de 255, se reinicia a 0 para iniciar un nuevo ciclo.

Proyecto 2: Interfaz de Pantalla LCD con PIC16F84A

1. Definición de Registros y Variables

En esta sección se declaran los registros y variables a utilizar. PORTA y PORTB corresponden a los puertos de entrada/salida del PIC, STATUS es un registro de estado crucial, y cont se emplea como un contador o índice.

Adicionalmente, se definen los pines de control RS (Register Select) y E (Enable) del LCD, que están conectados al PORTA.

2. Configuración Inicial del Microcontrolador PIC

Explicación Detallada de la Configuración:

  1. bsf status,5: Establece el bit RP0 del registro STATUS para cambiar al Banco 1, donde se encuentran los registros de configuración de los puertos (TRIS).
  2. clrf trisa: Limpia el registro TRISA para configurar todos los pines de PORTA como salidas.
  3. clrf trisb: Limpia el registro TRISB para configurar todos los pines de PORTB como salidas.
  4. bcf status,5: Borra el bit RP0 del registro STATUS para regresar al Banco 0, donde se accede directamente a los puertos de E/S.
  5. clrf portA y clrf portB: Limpia los registros PORTA y PORTB para asegurar que sus valores iniciales sean 0 y evitar datos residuales.

3. Inicialización de la Pantalla LCD

En esta fase, se envían una serie de comandos específicos a la pantalla LCD para su correcta inicialización y configuración.
Cada instrucción movlw carga un comando en el registro de trabajo, el cual es posteriormente enviado al LCD mediante la subrutina call control.

  • h'38': Configura el LCD para operar en modo de 8 bits, con 2 líneas y fuente de 5x8 puntos.
  • h'0C': Enciende la pantalla LCD y desactiva la visualización del cursor.
  • h'01': Borra todo el contenido de la pantalla y posiciona el cursor en la primera posición (home).
  • h'06': Configura el modo de entrada para que el cursor se incremente automáticamente después de cada carácter escrito.

4. Escritura de Texto en la Pantalla LCD

Este bucle principal se encarga de escribir el texto deseado en la pantalla LCD, carácter por carácter.

  1. movf cont, W: Carga el valor del índice actual (cont) en el registro de trabajo W.
  2. call tabla: Llama a la subrutina tabla para obtener el carácter correspondiente al índice actual desde la tabla de caracteres.
  3. movwf portB: Mueve el carácter obtenido al PORTB, que está conectado a los pines de datos del LCD.
  4. call caracter: Invoca la subrutina caracter para enviar el dato como un carácter a la pantalla LCD.
  5. incf cont, F: Incrementa el contador cont para apuntar al siguiente carácter en la secuencia.

5. Salto de Línea en el LCD

Una vez que el contador alcanza el valor de 8 (lo que ocurre después de escribir el texto "REYNHOLD"), se envía el comando h'C0' al LCD, el cual posiciona el cursor al inicio de la segunda línea de la pantalla.

6. Tabla de Caracteres (Mensajes)

Esta sección contiene la definición de los textos y caracteres que serán visualizados en la pantalla LCD.

7. Subrutina de Envío de Comandos y Caracteres al LCD

Esta subrutina es fundamental para distinguir y procesar el tipo de dato que se envía al LCD, ya sea un comando de control o un carácter a mostrar:

  • Si el dato es un carácter, se activa el bit RS (bsf RS) para indicar al LCD que se está enviando un dato.
  • Si el dato es un comando, se desactiva el bit RS (bcf RS) para indicar al LCD que se está enviando una instrucción de control.
  • Posteriormente, se pulsa el pin E (Enable) para que el LCD capture y procese los datos o comandos enviados.

8. Subrutina de Retardo (Delay)

Esta subrutina es crucial para proporcionar el tiempo necesario a la pantalla LCD para que pueda procesar correctamente los datos y comandos recibidos.
Su funcionamiento se basa en el uso de tres contadores anidados (r1, r2, r3) que, al decrementarse, generan el retardo temporal requerido.

Resumen del Funcionamiento de la Interfaz LCD

  1. Se configura el microcontrolador PIC, estableciendo sus puertos como salidas.
  2. Se inicializa la pantalla LCD enviando una secuencia de comandos de configuración.
  3. El texto se carga desde la subrutina tabla y se visualiza en la pantalla.
  4. Al alcanzar la posición 8 del texto, el cursor se mueve automáticamente a la segunda línea del LCD.
  5. Se introduce un retardo para asegurar que el LCD tenga tiempo suficiente para procesar cada operación.

Entradas relacionadas: