Laboratorio N°3 Microprocesadores
Laboratorio N°3 Microprocesadores
Laboratorio N°3 Microprocesadores
ADC, EEPROM,
INTERRUPCIONES PIC 16F877a
Experiencia de Laboratorio N°3
MICROPROCESADOES
(Julio de 2021)
José Miguel Aramburú Hernández, Ismael Roberto Acevedo Pavez
Características del PIC16F877a Figura 1 ilustra las formas en las que puede venir empaquetado el
PIC16F877a.
PERIFERICOS
• 3 TIMERS (Timer0,1,2)
• Timer0: 8 bit temporizador/contador con 8 bit
prescaler.
• Timer1: 16 bit temporizador/contador con prescaler
puede ser incrementado durante Sleep con clock
externo.
• Timer2: 8 bit temporizador/contador con 8 bit registro
de periodo prescaler y postscaler.
• 2 CCP (Capture/compare/PWM)
• Captura es de 16bit, máxima resolución es de 12.5ns
• Compare es de 16bit, máxima resolución es de 200ns
Figura 2 ilustra el PIC16F877a con sus pines.
• PWM con máxima resolución de 10 bit
• SSP (Sinchronous Serial Port)
Arquitectura Interna
• SPI (Modo Maestro), I2C (Modos: Maestro/Esclavo)
• USART/SCI (Universal Synchronous Asynchronous
El PIC16F877a es un procesador tipo RICS que es un
Receiver) con 9 bit de detección de dirección.
procesador de instrucciones reducidas, por su pequeño número
• PSP Puerto Paralelo Esclavo (Parallel Slave Port) de 8
bit con controles RD, WR y CS (40/44 pin). de instrucciones, además casi todas se realiza en la misma
cantidad de tiempo, posee unidades que trabajan en paralelo
• CAD (Conversor Análogo a Digital) de 10 bit, hasta 8
canales. conectadas por pipes o tuberías. Este procesador emplea una
arquitectura Harvard lo que significa que trabaja las zonas de
Módulo de Comparadores Análogos memoria de programa y datos en forma separada. [4]
• 2 comparadores análogos.
• Basado arquitectura Harvard.
• Programable Modulo de voltaje de referencia (Vref)
• 8 formas de configuración con entradas, salidas y
referencia.
3
Puertos y Periféricos
De forma general, el PIC16F877a es una pastilla integrada de Existe el Program Counter o contador de programa este
40 pines, de los cuales 33 pines conforman los cinco puertos registro indica la dirección de la instrucción a ejecutar. El
bidireccionales, mientras que los siete restantes se emplean en registro en cuestión no es necesariamente secuencial, esto es no
el circuito oscilador (2), alimentación (4) y el circuito de reset. se incrementa necesariamente de uno en uno ya que puede darse
[1] el caso en el que salte dependiendo si hay una instrucción de
bifurcación de por medio o puede haber alguna instrucción de
Diagrama de Bloques llamada a función y/o procedimiento. También tenemos el
bloque de la pila, cuya función es ser un buffer temporal en el
que se guarda el contador de programa cada vez que se suscita
una llamada a un procedimiento y/o función (incluyendo
interrupciones). Por tanto, el nivel de anidamiento es de hasta 8
llamadas. [4]
Organización de Memoria
Memoria de Programa
Es una memoria de datos de usuario que tiene la particularidad El contador de programa PC de 13 bits, con 8192 posiciones
de no borrarse si falta la alimentación de voltaje. Por tanto, es (213 ) puede recorrer todo el mapa de memoria del programa,
muy útil en el momento de realizar tablas de datos que se van Cada posición puede alojar una instrucción, perteneciente a un
construyendo a medida que el programa va generando estos programa. El ancho de cada instrucción se denomina palabra
datos, de tal manera que se puedan guardar como parámetros de (word) que para este MCU es de 14 bits. [5]
calibración o funcionamiento del dispositivo. Los 8K de memoria de programa disponible están divididos en
No es posible acceder a estos datos mediante un 4 páginas de 2K cada una (0h–7FFh, 800h-FFFh, 1000h17FFh
direccionamiento, ya que están ubicados más allá de lo y 1800h-1FFFh). Esto es debido a que las instrucciones de salto
permitido, para acceder a ellos es necesario realizar un y llamada a subprograma permiten cargar sólo 11 bits en el PC
procedimiento. [5] (desplazamiento en 211 = 2K). Si se están ejecutando
instrucciones secuencialmente, el contador de programa pasará
de una página a otra sin necesidad de intervención por parte del
usuario o programador.
Para saltar entre páginas de la memoria de programa los 2 bits
más altos del PC deben modificarse. Esto se realiza escribiendo
en el registro PCLATH (es un registro situado en la memoria
de datos). [6]
El LCD
Una LCD es una pantalla delgada y plana formada por un
5
𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟+ − 𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟−
𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝐴𝐴𝐴𝐴𝐴𝐴 = El registro ADCON1 configura las funciones de los pines de
2𝑛𝑛 − 1 entrada al módulo. Como se aprecia en la figura anterior, se
puede configurar los pines del puerto A como entradas
También se tiene que:
analógicas inclusive la línea RA3 puede funcionar como el
(2𝑛𝑛 − 1) ∙ 𝑉𝑉𝑖𝑖𝑖𝑖 voltaje de referencia.
𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 = Los registros ADRESH: ADRESL contienen el resultado de la
𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟+ conversión (10 bits). Cuando se ha completado una conversión
Descripción
7
salida del pin. La operación de conversión del A/D es III. DESARROLLO EXPERIMENTAL
independiente del estado de los bits CHS2:CHS0 y de los bits
Se presentan una serie de desafíos de programación en
de los registros TRIS. assembler (ensamblador), se solicita desarrollar distintas
aplicaciones utilizando una interfaz hombre-maquina (HMI)
Sobre la conversión análogo digital y el GO/-DONE implementándolo en el PIC16F877a.
Experiencia N°1
Figura 18 ilustra el código para leer los datos almacenados en En este bucle, se llamó a la subrutina “menu2, la cual pertenece
la EEPROM. a la librería “Menú”, donde se encuentra el menú de selección
de señal a tratar, carácter por carácter, “SELECCIÓN”
Para seleccionar la señal analógica de entrada, se trabaja con un 1.SENAL AN0”, “2.SENAL AN1.
menú ocupado en experiencias y evaluaciones anteriores, la
máscara permite discernir mediante comparadores si el valor
ingresado corresponde a los disponibles en el menú de selección
de señal a tratar; cuando se ejecuta la simulación, llama a la
subrutina “bienvenido” perteneciente a la librería mensajes, la
cual contiene los caracteres del mensaje, los que se mostraran
en el display.
10
Figura 21 ilustra el código de la librería Menú con el mensaje Figura 23 ilustra el código para la subrutina “Ingreso_limini”.
de la selección de señales.
Finaliza con el llamado a la subrutina “PRES_ENT” la cual
Al seleccionar una de las opciones, por ejemplo, la opción 1, permite, mediante comparadores, revisar si efectivamente se
salta a la subrutina “convADC_portAN0”, en la cual presionó la letra E, cerrar esa rutina y entrar a la de ingreso de
inmediatamente llama a la subrutina “Digitos1”, perteneciente limite superior, siendo esta, análoga a la primera.
a la librería “Mensajes”, ésta subrutina contiene los caracteres Luego de digitar y almacenar los limites superior e inferior
para “LIMITE INFERIOR”, mensaje que se muestra en el LCD. (LIMSUP, LIMINF), estos se almacenan en “DLIM”, para
luego, volver a llamar a “PRES_ENT”.
Experiencia N°2
𝑡𝑡 ∙ 𝑓𝑓
Figura 31 ilustra el código para la subrutina “et1”. 𝑇𝑇𝑇𝑇𝑇𝑇0 = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 −
4 ∙ 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝
En caso contrario, salta a la bandera “et2”, donde se compara
con el 0x40 ya que, si es mayor, se cumple la última condición, Reemplazando los valores se obtiene:
luego de esto salta a las interrupciones. 𝑇𝑇𝑇𝑇𝑇𝑇0 = 60.68 ≈ 61 = 3𝐷𝐷ℎ
Simulación Experiencia 1
Figura 34 ilustra el código para la subrutina “Retardo50ms” y Selección de señal AN0 y escalamiento.
“comprobar”.
Simulación Experiencia 2
PLICACIONES
V. REFERENCIAS
ANEXO
Diagramas de Flujo
16
Diagrama 1
17
Diagrama 2
Diagrama 2.1
Librería Teclado4por4
Diagrama 3
20