Práctica No 2 PROGRAMACION DE MICROCONTROLADORES EN LENGUAJES DE ALTO NIVEL Objetivo: Programar un PIC 16F84A en lenguaje de Alto Nivel, empleando el software Mikro C, para realizar un Contador Programable de 2 dígitos. Material: 1 Computadora Personal con Software instalado Mikro C y Master-Prog+ 1 Programador de PIC’s 1 Fuente de Poder 1 Protoboard 1 PIC 16F84A 7 Resistencias de 150Ω 2 Resistencias de 2.2kΩ 2 Transistores BC-547A (NPN) 3 Resistencias de 10kΩ 1 Switch deslizable de 4 posiciones DIP-4P (Steren) 2 Capacitores de 22 pf 1 Cristal de 4 MHz 2 Displays de Siete Segmentos de Cátodo Común. Marco teórico: Investigar los siguientes temas de lenguaje C: Proposición if – else Ciclo for Ciclo do - while Desarrollo: En la presente práctica se empleará el Software de Programación Mikro C. El docente le proporcionará una carpeta en USB que contiene un proyecto desarrollado en Mikro C, el cual se titula ”CONTADOR”. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 1 1. Navegar en la carpeta CONTADOR y dar click en el archivo del Proyecto llamado “CONTADOR.ppc”. A continuación se abrirá el entorno de programación del software Mikro C. 2. El proyecto ya contiene la declaración del cuerpo principal del programa, la declaración de la variable (i), inicialización y configuración de la PUERTA A y PUERTA B, y finalmente la declaración y el cuerpo de las funciones: decodif() y mostrar_en_display(). Identificar el código para cada una de estas acciones. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 2 3. Previamente por equipos se les asigno un modo de conteo: Ascendente, Descendente, Ascendente números pares, Descendente números pares, Ascendente números impares o Descendente números impares. El docente explico la manera de programar por ejemplo para el modo Ascendente. Recordar que se debe utilizar un ciclo for con el valor de inicialización de la variable, la condición para ejecutar el ciclo y el incremento. En la siguiente imagen se muestra el código que se debe escribir para programar un conteo Ascendente de uno en uno: Observar que se debe inicializar la variable mediante la instrucción: i=0; Observar la inicialización de la variable en el ciclo for ( i=0 ), la condición en este caso es ( i<= 99), es decir debe contar desde 0 mientras la variable i sea menor o igual a 99. Por último se observa el campo de incremento, como en este ejemplo se trata de un conteo ascendente de uno en uno, el incremento debe ser i++. En caso que el conteo sea de números pares o impares ascendente, el incremento debe ser i+=2, lo que equivale a i = i + 2; en caso de que sea conteo de números pares o impares descendente, el decremento debe ser i-=2 (i= i – 2). Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 3 4. Por equipos proceder a programar el conteo asignado. En el entorno de programación escribir las instrucciones para programar su conteo. En el siguiente espacio por favor anote las instrucciones que ocupo para realizar el conteo asignado: 5. Una vez que ya ha escrito las instrucciones, dar click en el icono de disquetes para proceder a Guardar los cambios realizados. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 4 6. A continuación se procede a construir (compilar) el Proyecto. Abrir la pestaña Project y dar click en la opción “Build” El software Mikro C procede a compilar el proyecto y generar los archivos necesarios. En este punto es en donde se pueden detectar errores en la programación en C. En caso que haya algún error le aparecerá en la Ventana messages una descripción de los errores encontrados para proceder a corregirlos. Si el proceso de compilación fue Exitoso (Success) le aparecerán los siguientes mensajes: 7. Navegar en la carpeta del Proyecto CONTADOR, identificar el archivo generado con extensión .HEX. Este archivo es la traducción de nuestro programa (lenguaje de Alto Nivel C) a un lenguaje máquina (bits) representado en un formato Hexadecimal. Pueden abrir este archivo en el Bloc de notas (Notepad) y verificar su contenido, observarán caracteres hexadecimales. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 5 8. El siguiente paso es “bajar” este archivo con el código máquina a la memoria de programa (memoria FLASH) del microcontrolador PIC16F84A. 9. Conectar el kit Programador de PIC’s al puerto USB de la computadora. Insertar el PIC16F84A en el zócalo de programación. 10. Abrir el software MASTER-PROG+, aparecerá la siguiente ventana indicando que se ha detectado el kit Programador de PIC’s y al PIC16F84A insertado. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 6 11. Proceder a borrar el contenido del PIC16F84A. Dar click en el botón “BORRAR”. El software inicia el proceso de borrado, al final deberá aparecer el siguiente mensaje: “Borrando Dispositivo…Listo!” 12. Posteriormente debemos abrir el archivo Hexadecimal generado en el proceso de compilación del proyecto. Dar click en la pestaña “Archivo”, seleccionar la opción “Abrir HEX”. Navegar en los directorios hasta ubicar el archivo Hexadecimal, seleccionarlo y dar click en “Abrir”. Aparecerá el mensaje “Archivo HEX Cargado Correctamente”. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 7 13. Programar el código maquina (archivo hexadecimal) en la memoria del PIC16F84A. Dar click en el botón “ESCRIBIR”, se iniciará el proceso de Programación y verificación apareciendo varios mensajes en el software, al final aparecerá el mensaje “Programación Correcta!”. El microcontrolador PIC16F84A ya ha quedado programado correctamente. 14. Retirar el PIC16F84A del Programador de PIC’s e insertarlo en el circuito CONTADOR previamente armado en un Protoboard. Observar el proceso de conteo y verificar que funcione de acuerdo a lo asignado para cada equipo. Si existiera alguna falla en la programación habrá que corregirla en la programación en C del proyecto en Mikro C y realizar los pasos indicados previamente hasta que el circuito de conteo funcione correctamente. Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 8 15. Anote sus observaciones de manera individual: 16. Anote sus conclusiones de la presente práctica: Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 9 ANEXOS CODIGO FUENTE EN LENGUAJE DE ALTO NIVEL C (IMPORTANTE: ESTE CODIGO ES EL DEL EJEMPLO DEL DOCENTE, FAVOR DE SUSTITUIRLO POR EL CODIGO ESCRITO POR CADA EQUIPO) void decodif(int dato_bcd); /*Función decodificación*/ void mostrar_en_display (int cuenta); /*Función Mostrar en Display*/ unsigned short i; main() { PORTA = PORTB = TRISA = TRISB = 0; 0; 0b00000011; /* RA1-RA0 ENTRADAS VELOCIDAD RA2-RA3 SALIDAS DE CONTROL TRANSISTORES*/ 0; /* SALIDAS */ do{ /* DO-WHILE */ i=0; for (i=0; i<=99 ; i++){ mostrar_en_display(i); } } while(1); /* DO-WHILE */ Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 10 return 0; } /* MAIN */ void mostrar_en_display (int cuenta) { int bcd_alto, bcd_bajo, i, retardo; if (PORTA.F1 == 0 retardo = 50; else if (PORTA.F1 retardo = 25; else if (PORTA.F1 retardo = 10; else if (PORTA.F1 retardo = 5; && PORTA.F0 == 0) /* == 0 && PORTA.F0 == 1) /* == 1 && PORTA.F0 == 0) /* == 1 && PORTA.F0 == 1) /* bcd_bajo = cuenta % 10; bcd_alto = cuenta / 10; for (i=1; i<=retardo; i++) { decodif(bcd_alto); PORTA.F2 = 1; /* delay_ms(10); PORTA.F2 = 0; /* decodif(bcd_bajo); PORTA.F3 = 1; /* delay_ms(10); PORTA.F3 = 0; /* } /* Ciclo FOR */ } /* FUNCTION mostrar_en_display */ UN SEGUNDO APROX */ MEDIO SEGUNDO APROX */ 200 MILISEFUNDOS */ 100 MILISEGUNDOS */ HABILITA DISPLAY DECENAS */ DESHABILITA DISPLAY DECENAS */ HABILITA DISPLAY UNIDADES */ DESHABILITA DISPLAY UNIDADES */ void decodif(int dato_bcd) { switch (dato_bcd) { case 0: Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 11 PORTB = 0b0111111; break; case 1: PORTB = 0b0000110; break; case 2: PORTB = 0b1011011; break; case 3: PORTB = 0b1001111; break; case 4: PORTB = 0b1100110; break; case 5: PORTB = 0b1101101; break; case 6: PORTB = 0b1111100; break; case 7: PORTB = 0b0000111; break; case 8: PORTB = 0b1111111; break; case 9: PORTB = 0b1100111; break; default: PORTB = 0b0000000; break; } /* SWITCH */ } /* FUNCTION decodif */ Instalación de Sistemas Microprocesados Docente: M. en C. Baldemar Irineo Carrasco 12 DIAGRAMA DEL CIRCUITO CONTADOR PROGRAMABLE DE DOS DIGITOS +5 V +5 V 14 10KΩ 10KΩ 4 MCLR 18 RA1 17 RA0 10KΩ RB1 RB0 RB5 RB6 RB4 RB3 RB2 DIP-4P 7 6 11 12 b a f g 10 9 8 e d c PIC 16F84A CONTROL VELOCIDAD 22pF 16 RA2 1 RA3 2 OSC1 4 MHz 22pF 15 150Ω 150Ω 150Ω 150Ω 150Ω 150Ω 150Ω Displays Cátodo Común 2.2kΩ 2.2kΩ OSC2 5 BC-547A VELOCIDAD DE CONTEO PROGRAMABLE A TRAVES DEL SWITCH DESLIZABLE: “00” “01” “10” “11” BC-547A 1 SEGUNDO 0.5 SEGUNDOS 0.2 SEGUNDOS 0.1 SEGUNDOS 13