Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
Prácticas 2-3
Interrupciones en Microcontrolador,
Uso de pantalla LCD utilizando teclado
matricial
PIC16F877-A
Asignatura
Microcontroladores.
Profesora
Johanna V. Alvarado Neira.
Integrantes
Rafael Rodríguez
Javier Silva
imagen 1 ............................................................................................................................ 4
imagen 2 ............................................................................................................................ 5
imagen 3 ............................................................................................................................ 6
imagen 4 ............................................................................................................................ 6
imagen 5 ............................................................................................................................ 7
imagen 6 ............................................................................................................................ 8
imagen 7 ............................................................................................................................ 9
imagen 8 .......................................................................................................................... 10
imagen 9 .......................................................................................................................... 11
imagen 10 ........................................................................................................................ 12
imagen 11 ........................................................................................................................ 13
imagen 12 ........................................................................................................................ 13
imagen 13 ........................................................................................................................ 14
imagen 14 ........................................................................................................................ 15
imagen 15 ........................................................................................................................ 16
2
Introduccion
En este informe se pondrán en práctica los ejemplos vistos en clase sobre el PIC 16F877A,
específicamente interrupciones, timers, LCD y teclado matricial. Se mostrará una simulación
en proteus 8 professional y luego se examinará a fondo el código de cada simulación. se debe
tener conocimiento previo de los tipos de interrupciones que posee el microcontrolador a
utilizar, y el uso de librerías que requiere el uso de la pantalla LCD y el teclado.
Objetivos generales
Estudiar de forma práctica los conceptos vistos en clase sobre el PIC 16F877A en 3 circuitos
los cuales están orientados en la aplicación de los timers, interrupciones, LCD y teclado
matricial.
Objetivos específicos
• Identificar componentes a utilizar en la simulación del proyecto.
• Programar el proyecto en el programa CCS C Compiler.
• Identificar el archivo compilado .hex el cual será el que se grabará en el PIC.
• Simular en Proteus 8 Professional para verificar su funcionamiento.
• Realizar el proyecto en la protoboar
Marco teorico
PIC 16F877A
El Datasheet del PIC, indica el voltaje de alimentación necesario para el correcto
funcionamiento de este (5V DC) y los pines correspondientes, además se utilizará el
encapsulado 40-Pin PDIP, el cual posee 40 pines.
3
imagen 1
Se debe tener en cuenta los puertos que posee, este PIC tiene 5, y cada uno tiene
características especiales o cierta cantidad de pines como se detallan en el Datasheet; puerto
A (PORTA) 6 pines de conexión, puerto B (PORTB) 8 pines de conexión, puerto C (PORTC)
8 pines de conexión, puerto D (PORTD) 8 pines de conexión, puerto E (PORTE) 3 pines de
conexión.
4
Interrupciones
Las interrupciones se utilizan para interrumpir la ejecución del programa ya sea de forma
interna o externa la cual puede ser ejecutada mediante periféricos o vía software. Si la
interrupción es ejecutada a través de pines específicos se dice que es una interrupción
externa, por otra parte, si la interrupción es ejecutada por un periférico interno o está
ejecutada en el programa se denomina interrupción interna.
Cuando ejecutamos una interrupción, el PIC salta automáticamente y ejecuta la porción de
programa que corresponde a la atención de la interrupción hasta llegar a la instrucción
RETFIE. Al encontrar dicha instrucción, abandona la interrupción y retorna a la posición de
memoria del programa principal desde la que saltó al producirse la interrupción.
Las fuentes de interrupción dependen del PIC utilizado, la familia PIC16F87X tiene entre 13
y 14, algunas de ellas son:
• Interrupción por pin externo. El pin del puerto B: rb0 está multiplexado con la función
de interrupción externa.
• Por desbordamiento del TMR0 (TiMeR 0).
• Por cambio en los pines de puerto B (RB7 : RB4).
• Por cambio en el Módulo Comparador.
• Interrupciones varias USART (Universal Sincronous Asincronous Receiver Tx).
• Interrupción por el Conversor A/D.
Los PIC gama baja y media tienen un único vector de interrupción situado en la dirección
04h de la memoria del programa, mientras que los de gama alta tienen 2 interrupciones de
alta y baja prioridad situados en la dirección 08h y 18h respectivamente. Al tener un único
vector de interrupción, el PIC cuenta con unos registros de control, y mediante la utilización
de banderas o flags (El usuario puede determinar la causa de la interrupción). En estos
registros también se pueden habilitar o no las distintas fuentes de interrupción (máscaras de
interrupción). Y existe una habilitación general llamada INTCON.
Registro INTCON
INTCON permite la habilitación de las interrupciones y el manejo de los flags. La
habilitación general se activa mediante el bit GIE(INTCON), el cual cuando se responde a
una interrupción, GIE es inhabilitado para evitar interrupciones sucesivas. Los flags activos
deben ser borrados antes de abandonar la rutina de interrupción para evitar re-entradas
erróneas.
imagen 2
Existen 4 registros adicionales para gestión de interrupciones: PIR1, PIR2, PIE1 y PIE2.
5
Interrupciones en C
En el compilador C, la directiva que se utiliza para el manejo de interrupciones es
#INT_XXXX. Los posibles formatos son:
imagen 3
imagen 4
6
Temporizadores
Los microcontroladores poseen temporizadores integrados los cuales tienen la particularidad
de emplear el conteo de Ciclos de Máquina para generar demoras que son siempre múltiplos
de él. Otra posibilidad de algunos temporizadores integrados es la de ser utilizados como
contadores de eventos externos a través de un pin específico de algún puerto del
microcontrolador.
La cuenta máxima de un temporizador es de 255, el incremento es constante, ascendente e
independiente. Dentro de los temporizadores tenemos el contador, el cual cuenta los eventos
externos (a través del pin RA4/TOCK1), el temporizador, el cual cuenta los pulsos internos
del reloj. Se puede insertar un prescaler, es decir, un divisor de frecuencia programable que
se puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256. La frecuencia de conteo es una cuarta parte
de la frecuencia de reloj (fosc/4). Posteriormente, con el uso del prescaler se puede dividir la
frecuencia.
Los registros implicados en la configuración del TIMER0/WDT son los siguientes:
• OPTION_REG: configura el “hardware” del TIMER0/WDT.
• INTCON: permite trabajar con la interrupción del TIMER0/WDT.
• TRISA: habilita la línea de puerto RA4.
imagen 5
7
imagen 6
8
❖ \f Limpia el LCD
❖ \n El cursor va a la posición (1,2)
❖ \b El cursor retrocede una posición
imagen 7
El uso del LCD se debe complementar con una librería con los parámetros vistos en clases.
Como el “kbd_init();” para iniciar el teclado y el “kbd_getc();” que permite obtener el
carácter ingresado por el teclado.
En la práctica se utilizará por ejemplo la siguiente línea de instrucción “lcd_putc,”\ nTEMP=
%1.2fC"”, el cual está utilizando la función “\n” el cual indica que va a la posición 1,2 de la
pantalla, además del “%1.2fc”, que indica que se van a mostrar números con coma y un valor
flotante truncado con un carácter.
9
Simulación
Antes de comenzar con la simulación, se debe configurar el clock externo y su respectivo
reset. Para esto se necesita:
• 2 condensadores cerámicos con la misma capacitancia, que estén dentro del
rango de 15 a 33 pF.
• 1 cristal de 20 Mhz.
• 1 condensador electrolítico de 1 μF.
• 1 resistencia de 4.7 KΩ.
• 2 pulsadores.
• 3 resistencias de 220 Ω.
• 3 diodos leds.
• 1 PIC 16F877A.
• Proteus 8 Professional
imagen 8
10
Para la primera parte de la práctica se utilizará el mismo circuito para la interrupción de
pulsador y la interrupción de timer, donde se hará las conexiones correspondientes al
pulsador (RB0) y los leds con sus respectivas resistencias. Para el caso de la interrupción por
timer se ocupa el mismo esquema, pero solo se utilizarán los leds conectados a RA0 y RA1.
imagen 9
Luego, en el programa CCS C Compiler se deben escribir los codigos correspondientes a
cada simulación los cuales serán analizados al detalle a continuación, siendo el primer
código de la interrupción por pulsador y el segundo por Timmer.
11
imagen 10
12
Timer
imagen 11
Una vez escrito los codigos en el CCS C Compiler, se debe hacer click en la opción “compile”
(ver imagen 12) y se guardara el código en la carpeta que donde guardó el proyecto, donde
debemos identificar el archivo .hex el cual se debe grabar en el PIC.
imagen 12
Para grabar el código escrito en CCS C Compiler, en Proteus se hace doble click sobre el
microncontrolador y se desplegará el siguiente menú, donde se configurará el oscilador en
13
“Processor Clock Frequency” estableciéndolo en 20MHz, y para cargar el programa se debe
seleccionar en la opción “Program File” la pequeña imagen de una carpeta, en donde
aparecerá una ventana con los archivos del código anteriormente guardados en la carpeta de
destino que se le haya dado, y se procederá a seleccionar el archivo con la extensión “.hex”
imagen 13
14
LCD y teclado matricial
Para la segunda parte del proyecto el cual corresponde al teclado matricial y el LCD, se
utilizará el siguiente esquema de conexiones, donde se realizan las correspondientes
conexiones del teclado y el LCD siendo en el Puerto B y Puerto D respectivamente. Tal
como se muestra en la figura a continuación.
imagen 14
15
imagen 15
Codigos de programación
#include <16F877A.H>
#fuses HS
#use delay (clock=20000000)
#byte PORTA = 0x05
#byte TRISA = 0x85
#byte PORTB = 0X06
#byte TRISB = 0X86
#byte OPTION_REG = 0X81
#INT_EXT
void ext_isr(){
bit_clear(PORTA,1); //se limpia las salidas de RA1 y RA2
bit_clear(PORTA,2);
16
bit_clear(PORTA,0); //se tira un “0” lógico a la salida
RA0
//led parpadeante (inicia al presionar el
botón)
}
void main(){
OPTION_REG=0X00;
TRISA=0x00;
PORTA=0X00;
TRISB=0XFF;
PORTB=0X00;
while(true){
bit_set(PORTA,0);
bit_clear(PORTA,1);
bit_clear(PORTA,2);
delay_ms(1000);
bit_set(PORTA,1);
bit_clear(PORTA,0);
bit_clear(PORTA,2);
delay_ms(1000);
bit_set(PORTA,2);
bit_clear(PORTA,1);
bit_clear(PORTA,0);
delay_ms(1000);
//secuencial simulando semáforo simple
}
}
#include <16F877A.H>
#fuses HS
#use delay(clock=20000000)
#byte PORTA = 0X05
#byte TRISA = 0X85
17
#byte OPTION_REG=0x81
#INT_TIMER0
void timer0_isr(){
bit_set(PORTA,1);
delay_ms(3);
bit_clear(PORTA,1);
set_timer0(0x00);
}
void main (){
TRISA = 0X00;
PORTA = 0X00;
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_TIMER0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(0x00);
while (true){
bit_set(PORTA, 0);
}
}
#include <16f877A.h>
#fuses hs
#use delay(clock=20000000)
#define use_portb_kbd TRUE
#include <LCD.C>
#include "KBD1.C"
void main()
{
lcd_init();
kbd_init();
char k;
port_b_pullups(TRUE);
while(true)
{
k=kbd_getc();
if(k!=0)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"tecla:");
lcd_gotoxy(1,2);
printf(lcd_putc, " %c ",k);
}
}
}
18
Conclusión
La experiencia recientemente vista tiene como finalidad ayudar al lector a comprender y a
como utilizar el PIC 16F877A en proteus mediante la simulación para luego ser llevado a la
práctica, además de la implementación de otros componentes de la electrónica y periféricos
para el PIC.
Bibliografia
[1] Datasheet PIC16F87XA, Microchip Technology Inc. USA, 2003.
19