INSTITUTO TECNOLÓGICO SUPERIOR
DE LA REGIÓN DE LOS LLANOS
INGENIERÍA MECATRÓNICA
MATERIA: Microcontroladores
PROFESOR: M.C. Jesús Manuel Blanco Berumen
Unidad: 4
REPORTE PRÁCTICA: Calculadora
Alumnos: No. de control:
Francisco Miguel Alvarado Contreras 16B100002
Fritzy Candelaria Domínguez Nava 16B100009
Guadalupe Victoria, Dgo., 10 – Junio– 2019
1
INTRODUCCIÓN:
En esta práctica utilizamos el pic 16F887 para realizar una calculadora capaz de
hacer 4 operaciones aritméticas por medio de un LCD y un módulo de bluetooth En
este caso comenzamos la programación del código configurando las diferentes
periferias del LCD de acuerdo al tipo de código C, luego definimos las constantes
que utilizaremos por medio de un char, las constantes a utilizar nos servirán para
identificar las operaciones que hará el PIC, así como los datos que mostrara el LCD.
Programándolo de tal manera que el alumno ponga en práctica sus conocimientos
adquiridos en programación, conexión de periféricos o componentes electrónicos
2
MARCO TEÓRICO:
Pic 16F887
El microcontrolador cuenta con solo 35 instrucciones diferentes
Todas las instrucciones son uni-ciclo excepto por las de ramificación
Frecuencia de operación 0-20 MHz
Oscilador interno de alta precisión
Calibrado de fábrica
Rango de frecuencia de 8MHz a 31KHz seleccionado por software
Voltaje de la fuente de alimentación de 2.0V a 5.5V
Consumo: 220uA (2.0V, 4MHz), 11uA (2.0 V, 32 KHz) 50nA (en modo de espera)
Ahorro de energía en el Modo de suspensión
Brown-out Reset (BOR) con opción para controlar por software
35 pines de entrada/salida
alta corriente de fuente y de drenador para manejo de LED
resistencias pull-up programables individualmente por software
interrupción al cambiar el estado del pin
memoria ROM de 8K con tecnología FLASH
El chip se puede re-programar hasta 100.000 veces
Opción de programación serial en el circuito
El chip se puede programar incluso incorporado en el dispositivo destino.
256 bytes de memoria EEPROM
Los datos se pueden grabar más de 1.000.000 veces
368 bytes de memoria RAM
Convertidor A/D:
14 canales
resolución de 10 bits
3 temporizadores/contadores independientes
Temporizador perro guardián
Módulo comparador analógico con
Dos comparadores analógicos
Referencia de voltaje fija (0.6V)
Referencia de voltaje programable en el chip
Módulo PWM incorporado
3
Módulo USART mejorado
Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0
Auto detección de baudios
Puerto Serie Síncrono Maestro (MSSP)
Soporta los modos SPI e I2C
Figura 2.1.- Pic16F887
Pickit 3:
Pickit es una familia de programadores para microcontroladores PIC fabricados por
Microchip Technology. Se utilizan para programar y depurar microcontroladores, así
como para programar EEPROM. Algunos modelos también cuentan con un
analizador lógico y una herramienta de comunicaciones seriales (UART).
Las personas que desarrollan software de código abierto para el PICkit usan una
lista de correo para la colaboración. El PICkit 1, introducido el 31 de marzo de 2003
por US, fue un programador USB rudimentario para microcontroladores PIC,
producido por Microchip Technology, el fabricante de la serie de microcontroladores
PIC. Se integró en una placa demostradora, con ocho LED, un interruptor y un
potenciómetro. Su programa predeterminado, explicado en la documentación, hace
girar los LED en serie. La dirección de la pantalla de luz y la velocidad de rotación
se pueden cambiar con el botón y el potenciómetro en el tablero PICkit.
4
El PICkit 2, introducido en mayo de 2005 , reemplazó al PICkit . La diferencia más
notable entre los dos es que el PICkit 2 tiene una unidad de programador / depurador
separada que se enchufa en la placa que lleva el chip a programar, mientras que
PICkit 1 era una sola unidad. Esto hace posible utilizar el programador con una placa
de circuito personalizada a través de un encabezado de programación en serie en
circuito (ICSP). Sin embargo, esta función no está destinada a para la llamada
programación de "producción".
El PICkit 2 utiliza un PIC18F2550 interno con FullSpeed USB. El último firmware de
PICkit 2 permite al usuario programar y depurar la mayoría de los miembros de
PICmicro y dsPIC de 8 y 16 bits de la línea de productos Microchip.
El PICkit 2 está abierto al público, incluido su esquema de hardware, código fuente
de firmware (en lenguaje C) y programas de aplicación (en lenguaje C #). Los
usuarios finales y terceros pueden modificar fácilmente tanto el hardware como el
software para características mejoradas. p.ej. Versión para Linux del software de
aplicación PICkit 2, soporte CMD estilo DOS, etc.
Figura 2.2.- Pickit
5
Código Fuente:
El código fuente está compuesto por una serie de líneas del programa. Todos los
ficheros fuente poseen una estructura similar independiente del procesador
utilizado. Cada línea del programa suele estar compuesta por 4 campos o columnas
separados por uno o más espacios o tabulares. Estos campos son:
1- Campo de etiqueta:
a. Son Expresiones alfanuméricas escogidas por el usuario, su principal función
es identificar a una determinada instrucción del programa, asignando a esta etiqueta
el valor de la dirección de memoria correspondiente a dicha instrucción.
2- Campo de código de operación
a. Especifica la tarea a realizar por el microcontrolador. Suele ser una
instrucción del microcontrolador que es directamente traducida a código maquina
por el ensamblador, por ejemplo, “sleep” que es traducida a código maquina como
“00 0000 0110 0011”.
3- Campo de operandos y datos
a. Contiene operandos para el campo de instrucciones. Por ejemplo “movwf”,
“PORTB”. Este campo puede contener uno o más operandos separados por comas.
Dependiendo de las instrucciones pueden ser números o etiquetas que representen
constantes o direcciones.
4- Campo de comentarios
a. Son elementos indispensables que ayudan al programador a documentar su
programa, aclarar el sentido de las instrucciones y, con el tiempo, facilita la
posibilidad de correcciones y modificaciones que lo mejoren. Además, estos pueden
extenderse durante varias líneas y todos ellos deben de comenzar siempre por
punto y coma (;).
6
Entorno mikroC PRO for PIC
Es una poderosa herramienta para microcontroladores PIC. Está diseñado para
proveer al programador con las soluciones más fáciles posibles para desarrollar
aplicaciones en sistemas embebidos, sin comprometer rendimiento o control.
PIC y C encajan juntos bien: PIC es el chip de 8 bits más popular en el mundo, es
usado en una amplia variedad de aplicaciones, y C, es usado por su eficiencia, es
la elección natural para desarrollar sistemas embebidos. MikroC PRO para PIC
provee un completo paquete de características para IDE avanzado, para
compiladores ANSI, conjuntos de librerías para Hardware, documentación
comprensible, y ejemplos listos para ser compilados y ejecutados.
Registros Especiales
1- STATUS
a. EL registro de estado o STATUS indica el estado de la última operación
aritmética o lógica realizada, la causa de reset y los bits de selección de banco para
memoria de datos. A los bits de registro de estado se les suele denominar flags o
banderas
i. RP0 (Register Bank Select bit).: Selecciona el banco para el direccionamiento
directo. Selecciona el banco de datos 0.
2- PORTA
7
a. Puerto de entrada/ salida de 5 bits. El puerto A puede leerse o escribirse
como si se tratara de un registro cualquiera. El registro que controla la entrada o
salida es el TRISA.
3- PORTB
a. Puerto de entrada/ salida de 8 bits. El puerto B puede leerse o escribirse
como si se tratara de un registro cualquiera. El registro que controla la entrada o
salida es el registro TRISB.
4- TRISA
a. Registro de configuración de líneas de puerto A. Es el registro de control del
puerto A.
5- TRISB
a. Registro de configuración de líneas del puerto B. Es el registro de control del
puerto A.
Proteus:
Es un software de automatización de diseño electrónico desarrollado por lab center
electronis que consta de los dos programas principales Ares e Isis, y los modulos
VSM y Electra.
El programa System (Sistema de Enrutado de Esquemas Inteligente) permite
diseñar el plano eléctrico del circuito que se desea realizar con componentes muy
variados, desde simples resistencias, hasta alguno que otro microprocesador o
microcontrolador, incluyendo fuentes de alimentación, generadores de señales y
muchos otros componentes con prestaciones diferentes. Los diseños realizados en
Isis pueden ser simulados en tiempo real, mediante el módulo VSM, asociado
directamente con ISIS.
El módulo VSM
8
Una de las prestaciones de Proteus, integrada con ISIS, es VSM, el Virtual System
Modeling (Sistema Virtual de Modelado), una extensión integrada con ISIS, con la
cual se puede simular, en tiempo real, con posibilidad de más rapidez; todas las
características de varias familias de microcontroladores, introduciendo nosotros
mismos el programa que controlará el microcontrolador y cada una de sus salidas,
y a la vez, simulando las tareas que queramos que lleve a cabo con el programa.
Se pueden simular circuitos con microcontroladores conectados a distintos
dispositivos, como motores eléctricos, pantallas de cristal líquido (LCD), teclados en
matriz, etc. Incluye, entre otras, las familias de microcontrolador PIC, tal como
PIC10, PIC12, PIC16, PIC18, PIC24 y dsPIC33. ISIS es el corazón del entorno
integrado Proteus. Combina un entorno de diseño de una potencia excepcional con
una enorme capacidad de controlar la apariencia final de los dibujos.
CODIGO.
Se configuró el programa para programar el Pic
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
9
#define Enter 'a'
#define Plus '+'
#define Minus '-'
#define Multiply '*'
#define Divide '/'
// Start of MAIN program
//
void main()
unsigned char MyKey, i,j,kbd[5],op[12], k;
unsigned long Calc, Op1, Op2,Key;
unsigned char msg1[] = "CALCULADORA";
unsigned char msg2[] = "Numero uno:";
unsigned char msg3[]= "Numero dos:";
unsigned char msg4[] = "Operacion:";
unsigned char msg5[] = "Resultado:";
ANSEL = 0;
ANSELH = 0;
//COnfiguracion de la LCD
LCD_Init();
//
// Configure the USART
//
UART1_Init(9600); // Baud=9600
Delay_ms(100);
//
10
// Program loop
//
for(;;) // Endless loop
LCD_Cmd(_LCD_CLEAR);
LCD_Cmd(_LCD_CURSOR_OFF);
MyKey = 0;
Op1 = 0;
Op2 = 0;
LCD_Out(1,3,msg1);
Delay_ms(2000);
LCD_Cmd(_LCD_CLEAR);
//
// Get the first number
//
LCD_Out(1,4,msg2); // Send TEXT to LCD
k = 0;
do // Get first number
if(UART1_Data_Ready()) // If a character ready
MyKey = UART1_Read(); // Get a character
if(MyKey == Enter)break; // If ENTER key
Key = MyKey - '0';
LCD_Chr(2,8+k,MyKey);
11
Op1 = 10 * Op1 + Key; // First number in Op1
//Delay_ms(1000);
k++;
}while(1);
//
// Get the second character
//
LCD_Cmd(_LCD_CLEAR);
LCD_Out(1,4,msg3); // Send TEXT to LCD
k = 0;
do // Get second number
if(UART1_Data_Ready())
MyKey = UART1_Read(); // Get a character
if(Mykey == Enter)break; // If ENTER key
Key = MyKey - '0';
LCD_Chr(2,8 + k,MyKey);
Op2 = 10 * Op2 + Key; // Second number in Op2
//Delay_ms(1000);
k++;
}while(1);
//
// Get the operation
12
//
LCD_Cmd(_LCD_CLEAR);
LCD_Out(1,4,msg4);
k = 0;
do
if(UART1_Data_Ready())
MyKey = UART1_Read(); // Get a character
if(MyKey == Enter)break; // If ENTER key
LCD_Chr(2,8 + k,MyKey);
Key = MyKey;
//Delay_ms(1000);
k++;
}while(1);
//
// Perform the operation
//
switch(Key) // Calculate
case Plus:
Calc = Op1 + Op2; // If ADD
break;
case Minus:
Calc = Op1 - Op2; // If Subtract
13
break;
case Multiply:
Calc = Op1 * Op2; // If Multiply
break;
case Divide:
Calc = Op1 / Op2; // If Divide
break;
LongToStr(Calc, op); // Convert to string
//
// Remove leading blanks
//
j=0;
for(i=0;i<=11;i++)
if(op[i] != ' ') // If a blank
kbd[j]=op[i];
j++;
LCD_Cmd(_LCD_CLEAR);
LCD_Out(1,4,msg5);
for(i=0; i<j;i++)LCD_Chr(2,8+i,kbd[i]); // Display result
Delay_ms(3000);
14
SIMULACION
Después de tener el código se procedió a simularlo en el software PROTEUS 8.5
para comprobar que nuestro código fuera correcto y nos arrojó lo siguiente:
Figura 4.1 simulación en el software Proteos
PROCEDIMIENTO (DESCRIPCIÓN)
EQUIPO NECESARIO y MATERIAL DE APOYO
Cantidad Descripción
1 PIC16F887
1 Fuente de voltaje 5V
1 Protoboart
1 Pulsador
1 Cristal 4MHZ
2 Capacitores Cerámicos 22pF
Cables varios
1 Led
15
3 Resistencia 330
1 LCD
1 Potenciómetro
1 Módulo Bluetooth
Pickit3 con cable USB
Diagrama
Computadora
Software Proteus, Micro C y Pickit 3
PRÁCTICA ARMADA FISICAMENTE
Se procedió a armar el circuito físicamente y a través de una
Figura 5.1 practica armada fisicamrente
16
RESULTADOS Y CONCLUSIONES
Después de la realización de esta práctica los resultados obtenidos fueron los
planteados al inicio, que fueron poner en práctica el uso de comparadores,
contadores, saltos y rotación de bits en el programa del microcontrolador
PIC16F887, así como implementarlo físicamente. Así como usar las librerías de
configuración del LCD e implementarlas con lo que queremos que muestre, en este
caso también la configuración del comando UART que nos permitirá comunicarnos
con una terminal externa para enviar los datos al PIC y este los muestre en el LCD.
REFERENCIAS BIBLIOGRAFICAS
Palacios, Remiro, López “microcontrolador PIC16F84 Desarrollo de
proyectos”; Alfa omega, 2da. Edición.
Datasheet PIC16F84A
Datasheet 74LS48
Datasheet DISPLAY 7 segmentos ánodo, y cátodo común respectivamente
USER GUIDE PICKIT 3
Reyes A. Carlos (2006) Microcontroladores PIC, programación en BASIC,
EDITORIAL Rispergraf, Segunda Edición
17