View
1.227
Download
67
Category
Preview:
DESCRIPTION
sumador de cuatro bits realizado en el PIC18F4550 haciendo uso de codigo ensamblador y la interfaz de MPLAB
Citation preview
Práctica 1
Microcontroladores y DSPs
Benemérita Universidad Autónoma de
Puebla
Facultad de ciencias de la electrónica
Licenciatura Ingeniería Mecatrónica
Práctica 1
Equipo 8
Microcontroladores PIC18
Profesor: M. C. Nicolás Quiroz Hernández
Materia: Microcontroladores y DSPs
Alumnos:
Celia Rosario Guerrero
Sergio Iván López Villegas
Dana Hernández de la Luz
Fitzgerald Odín Morales Vargas
Septiembre 2015
Práctica 1
Microcontroladores y DSPs
Objetivos
Identificar las características de los microcontroladores (uC) PIC de la familia
PIC18.
Identificar los pines del PIC18F4550.
Analizar el funcionamiento de los puertos, oscilador y reset.
Conectar el circuito de reset (MClr) del PIC.
Identificar el software MPLAB, para realizar un programa en lenguaje ensamblador.
Realizar un programa en lenguaje ensamblador para sumar dos datos de 4 bits
(Puerto B) y mostrar el resultado en 5 leds conectados en puerto D.
Realizar el algoritmo del punto anterior.
Realizar la simulación del código en ensamblador.
Simular en el software Proteus el circuito completo.
Programar el microcontrolador (Pickit2, ICD2, Master-Pro, etc.).
Probar el programa para obtener los resultados.
Introducción
Como primera práctica se dio la tarea de hacer un sumador de 4 bits, en un
microcontrolador, específicamente el PIC18F4550. Las entradas provienen de un Deep
switch, es decir los números a ser sumados y las salidas que representan la suma, serán
leds que encenderán cuando su valor sea uno y están apagadas en cero.
Por lo que lo primero que se tuvo que hacer fue conocer de forma general la estructura
interna del microcontrolador seleccionado, sus pines, osciladores y memoria.
Llevar a cabo el sumador será posible mediante el desarrollo de un código en lenguaje
ensamblador, desarrollado en el software MPLAB v8.92, el cual luego de comprobarlo en
el mismo programa, se obtendrá su archivo hexadecimal, para implementarlo en Proteus
para así tener una simulación más completa ya a nivel componentes, en cuestión de la
conexión del micro con los leds y sus resistencias y así poder llevarlo después al modelo
real. Ahí el PIC y el resto de los elementos serán conectados en una tablilla de
experimentos, para después pasar a probar cada uno de los casos posibles, es decir cada
suma de 4 bits, con dos entradas, sea posible. Una vez que obtuvimos los resultados que
de cada suma mediante el encendido y apagado de leds, el sumador estará listo.
Marco teórico
Código Ensamblador
Es un código mnemónico de fácil comprensión para representar las secuencias de 0 y 1.
Escribir un programa en mnemónicos es más sencillo, porque son una versión abreviada de
la operación que realiza una instrucción. Además de que es una alternativa de escribir
instrucciones en código binario también conocido como código máquina.
Práctica 1
Microcontroladores y DSPs
Microcontroladores
Un microcontrolador es aquel que integra en un chip de microprocesador con memoria,
interfaces de entrada/salida y otros dispositivos periféricos como temporizadores. Un
microcontrolador común tiene terminales para la conexión externa de entradas salidas,
alimentación eléctrica y señales de reloj y de control.
PIC18F4550
1. Características generales Características del puerto USB:
Modos de manejo de potencia:
• Corrientes modo inactivo Abajo para corriente típica de 5.8 uA
• Corrientes Modo Sleep hasta 0,1 uA Típica
• Timer1 Oscilador: 1.1 uA Típica, 32 kHz, 2V
• Temporizador de vigilancia: 2,1 uA Típica
• Dos velocidades Oscilador de puesta en marcha
Características generales del oscilador:
• Cuatro modos de cristal, incluyendo alta precisión PLL para USB
• Dos modos de reloj externos, de hasta 48 MHz
• Bloque Interno del Oscilador:
- 8 frecuencias seleccionables por el usuario, desde 31 kHz a 8 MHz
- Usuario-ajustable para compensar Frequency Drift
• Oscilador Secundario usando Timer1 a 32kHz
• Opciones de doble oscilador permiten microcontroladores y Módulo USB para funcionar
a diferentes velocidades de reloj
• Fail-Safe Monitor de reloj:
- Permite la parada segura si alguna reloj se detiene
Periféricos Destacados:
• De alta corriente para Lavabo / Fuente: 25 mA / 25 mA
• Tres interrupciones externas
•Cuatro módulos de tiempo(Timer 0 a Timer 3)
• Hasta 2 Capture/ Compare/ PWM módulos (CCP):
- Capture es de 16 bits, máx. Resolución 5.2 ns (TCY / 16)
- Compare es de 16 bits, máx. Resolución 83.3 ns (TCY)
- Salida PWM: resolución PWM es de 1 a 10 bits
• Mejorada Capture / Compare / PWM (PECC) módulos:
Práctica 1
Microcontroladores y DSPs
- Múltiples modos de salida
- Polaridad seleccionable
- Deadtime programable
- Auto-apagado y reinicio automático
- Soporte de bus LIN
• Módulo Master Synchronous Serial Port (MSSP)
Apoyado a 3 hilos SPI (los 4 modos) y I2C ™
Modos: maestro y esclavo
• 10 bits, hasta 13 canales de analógico a digital
(A / D) módulos con programable tiempo de adquisición
• Comparadores analógicos duales con multiplexación de entrada.
Características especiales del microcontrolador:
• C Arquitectura de Compilador Optimizada con opcional Set de instrucción extendida
• 100.000 Borrar / Ciclo Enhanced Write flash
Memoria de programa típico
• 1.000.000 Borrar / escritura de EEPROM Ciclo de Datos de memoria típica
• Flash / Datos EEPROM de retención:> 40 años
• Auto-programable bajo control de software
• Los niveles de prioridad para Interrupciones
• 8 x 8Single-Ciclo Hardware Multiplicador
• Extended Watchdog Timer (WDT):
- Período programable de 41 ms a 131s
• Programable Protección Código
• Single-Supply 5V en circuito de serie
Programación ™ (ICSP ™) a través de dos pines
• Rango de voltaje de funcionamiento ancha (2.0V a 5.5V)
Múltiples opciones de oscilador y características
Todos los dispositivos en la familia PIC18 F2455/2550/4455/4550 ofrece doce opciones de
oscilador diferentes, lo que permite a los usuarios tener una amplia gama de opciones en el
desarrollo de aplicaciones de hardware. Éstas incluyen:
•Cuatro modos de Cristal utilizando cristales o resonadores de cerámica.
• Cuatro modos de reloj externos, ofreciendo la opción de usar dos pasadores (entrada del
oscilador y un divisor por 4, salida de reloj) o un pin (entrada del oscilador, con el segundo
pasador reasignado como general de E / S).
• Un bloque oscilador interno que proporciona un reloj de 8 MHz (± 2% de precisión) y una
INTRC fuente (aproximadamente 31 kHz, estable a temperatura y VDD), así como una
gama de 6 frecuencias de reloj seleccionables por el usuario, entre 125 kHz a 4 MHz, para
un total de 8
Práctica 1
Microcontroladores y DSPs
Frecuencias de reloj. Esta opción libera un pasador de oscilador para utilizar como un
propósito general adicional de E / S.
• Fase Lock Loop (PLL) multiplicador de frecuencia, disponible tanto a la alta velocidad de
Cristal y modos de oscilador externo, lo que permite una amplia gama de velocidades de
reloj de 4 MHz a 48 MHz.
• La operación asíncrona reloj dual, permite que el módulo USB se ejecute desde una alta
frecuencia del oscilador mientras que el resto del microcontrolador tiene una velocidad de
reloj de un oscilador de baja potencia interna. Además de su disponibilidad como fuente de
reloj, el bloque interno de oscilador proporciona una fuente de referencia estable que da
características de la familia adicionales para operaciones pesadas:
• Fail-Safe Monitor de reloj: Esta opción constantemente supervisa la principal fuente de
reloj contra una señal de referencia proporcionada por el interior oscilador. Si se produce
un error de reloj, el controlador es conmutado al bloque oscilador interno, lo que permite
para la operación de baja velocidad continua o una caja fuerte apagado de la aplicación.
• Dos velocidades de puesta en marcha: Esta opción permite al oscilador interno servir
como fuente de reloj de Power-on Reset, o activar del modo Sleep, hasta que la fuente de
reloj primaria esté disponible.
Tabla 1.1 Características de los dispositivos de la familia F18
Práctica 1
Microcontroladores y DSPs
Figura 1.1 Diagrama a bloques del PIC18F4550 de 40 pines
Práctica 1
Microcontroladores y DSPs
Nombre del Pin
Número de Pin Tipo de Pin
Tipo de Buffer
Descripción
PDIP QFN TQFP
MCLR/VPP/RE3 MCLR VPP RE3
1
18
18
I P I
ST ST
Borrado (entrada) o tensión de programación (entrada). Borrado (Reinicio) de entrada. Este pin es un activo de baja Restablecer el dispositivo. Entrada de tensión de programación. entrada digital
OSC1/CLKI OSC1 CLKI
13
32
30
I I
Analógico Analógico
Oscilador de cristal o de entrada de reloj externo. Oscilador de entrada de cristal o de entrada de la fuente de reloj externa. Entrada de la fuente de reloj externa. Siempre asociado con Función OSC1 pin. (Ver pin OSC2 / CLKO.)
OSC2/CLKO/RA6 OSC2 CLKO RA6
14 33 31 O O I/O
TTL
Oscilador de cristal o de salida de reloj. Salida de oscilador de cristal. Se conecta a cristal o resonador en modo oscilador de cristal. En el modo RC, el pin OSC2 salidas CLKO que tiene un cuarto la frecuencia de OSC1 y denota la instrucción tasa de ciclo. Propósito general de I / O pin.
Tabla 1.2 Descripción de los pines I/O del PIC18F4550 de 40 pines
Práctica 1
Microcontroladores y DSPs
Nombre del Pin Número de Pin Tipo de Pin
Tipo de Buffer
Descripción
PDIP QFN TQFP
RA0/AN0 RA0 AN0 RA1/AN1 RA1 AN1 RA2/AN2/VREF-/ CVREF RA2 AN2 VREF- CVREF RA3/AN3/VREF+ RA3 AN3 VREF+ RA4/T0CKI/C1OUT/ RCV RA4 T0CKI C1OUT RCV RA5/AN4/SS/ HLVDIN/C2OUT RA5 AN4 SS HLVDIN C2OUT RA6
2 3 4 5 6 —
19 20 21 22 23 —
19 20 21 22 23 —
I/O I I/O I I/O I I O I/O I I I/O I O I I/O I I I O
TTL Analógico TTL Analógico TTL Analógico Analógico Analógico TTL Analógico Analógico ST ST — TTL TTL Analógico TTL Analógico — —
El Puerto A es bidireccional I/O Digital I/O Entrada Analógica 0 Digital I/O Entrada Analógica 1 I/ O digital. Entrada analógica 2. Una referencia de tensión / D (bajo) de entrada. Salida de referencia comparador analógico EI/O digital. Entrada analógica 3. Una referencia de tensión / D (alto) de entrada I / O digital. Timer0 entrada de reloj externo. Comparador 1 salida. Entrada VN transceptor USB externa. I/O digital. Entrada analógica 4. SPI esclavo de selección de entrada. Alta / baja tensión Detección de entrada. Comparador 2 de salida. Ver el OSC2 / CLKO / pin RA6
Tabla 1.2 Descripción de los pines I/O del PIC18F4550 de 40 pines (continuación)
Práctica 1
Microcontroladores y DSPs
Nombre del Pin Número de Pin Tipo de Pin
Tipo de Buffer
Descripción
PDIP QFN TQFP
RB0/AN12/INT0/ FLT0/SDI/SDA RB0 AN12 INT0 FLT0 SDI SDA RB1/AN10/INT1/SCK/ SCL RB1 AN10 INT1 SCK SCL RB2/AN8/INT2/VMO RB2 AN8 INT2 VMO RB3/AN9/CCP2/VPO RB3 AN9 CCP2(1) VPO RB4/AN11/KBI0/CSSPP RB4 AN11 KBI0 CSSPP RB5/KBI1/PGM RB5 KBI1
33 3 34 35 36 37 38
9 20 10 11 12 14 15
8 20 9 10 11 14 15
I/O I I I I I/O I/O I I I/O I/O I/O I I O I/O I I/O O I/O I I O I/O I
TTL Analógico ST ST ST ST TTL Analógico ST ST ST TTL Analógico ST — TTL Analógico TTL — TTL Analógico TTL — TTL TTL
PORT B es un puerto I / O bidireccional. I/O digital. Entrada analógica 12. Interrupción externa 0. Entrada mejorada PWM Falla (módulo ECCP1). Datos SPI en. I ,Datos I 2C ™ / S. I/O digital. Entrada analógica 10. Interrupción externa 1. Entrada síncrona en serie de reloj / salida para el modo SPI/salida para el modo I2C. I/O digital. Entrada analógica 8. Interrupción externa 2. Salida VMO transceptor USB externa. I/O digital. Entrada analógica 9. Captura 2 de entrada / salida de comparación 2 / salida PWM2. Salida de VPO transceptor USB externa I/O digital. Entrada analógica 11. Interrumpir-al-cambiar pin. SPP selección de chip de salida de control. I/Odigital. Interrumpir-al-cambiar pin.
Tabla 1.2 Descripción de los pines I/O del PIC18F4550 de 40 pines (continuación)
Práctica 1
Microcontroladores y DSPs
PGM RB6/KBI2/PGC RB6 KBI2 PGC RB7/KBI3/PGD RB7 KBI3 PGD RC0/T1OSO/T13CKI RC0 T1OSO T13CKI RC1/T1OSI/CCP2/ UOE RC1 T1OSI CCP2(2) UOE RC2/CCP1/P1A RC2 CCP1 P1A RC4/D-/VM RC4 D- VM RC5/D+/VP RC5 D+ VP
39 40 15 16 17 23 24
16 17 34 35 36 42 43
16 17 32 35 36 42 43
I/O I/O I I/O I/O I I/O I/O O I I/O I I/O O I/O I/O O I I/O I I I/O I
ST TTL TTL ST TTL TTL ST ST — ST ST CMOS ST — ST ST TTL TTL — TTL TTL — TTL
Baja tensión ICSP ™ I/O digital. Interrumpir-al-cambiar pin. Depurador en circuito y programación ICSP pin de reloj EI/O digital. Interrumpir-al-cambiar pin. Depurador en circuito y el pin de datos de programación ICSP PORTC es un puerto I / O bidireccional. I/O digital. Salida del oscilador Timer1. Timer1 / Temporizador 3 entrada de reloj externo. I/O digital. Entrada del oscilador Timer1. Captura 2 de entrada / salida de comparación 2 / salida PWM2. Salida OE transceptor USB externa I/O digital. Captura 1 entrada / 1 salida de comparación / salida PWM1. Salida PWM CCP1, canal A. Entrada digital. Línea diferencial negativo USB (entrada / salida). Transmisor-receptor USB externo de entrada VM. Entrada digital. Diferencial USB plus línea (entrada / salida). Entrada VP transceptor USB externa.
Práctica 1
Microcontroladores y DSPs
RC6/TX/CK RC6 TX CK RC7/RX/DT/SDO RC7 RX DT SDO RD0/SPP0 RD0 SPP0 RD1/SPP1 RD1 SPP1 RD2/SPP2 RD2 SPP2 RD3/SPP3 RD3 SPP3 RD4/SPP4 RD4 SPP4 RD5/SPP5/P1B RD5 SPP5 P1B
25 26 19 20 21 22 27 28 29
44 1 38 39 40 41 2 3 4
44 1 38 39 40 41 2 3 4
I/O O I/O I/O I I/O O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O O
ST — ST ST ST ST — ST TTL ST TTL ST TTL ST TTL ST TTL ST TTL —
I/O digital. EUSART de transmisión asíncrona. EUSART reloj síncrono (ver RX / DT). I/O digital. Asíncrono EUSART reciben. EUSART datos síncronos (ver TX / CK). Datos de salida SPI . PORTD es un puerto bidireccional Puerto Paralelo (SPP). Estos pines tienen buffers de entrada TTL cuando se habilita el módulo de SPP. I/O digital. Streaming datos del puerto paralelo I/O digital. Streaming datos del puerto paralelo I/O digital. Streaming datos del puerto paralelo I/O digital. Streaming datos del puerto paralelo I/O digital. Streaming datos del puerto paralelo I/O digital. Streaming datos del puerto paralelo. Salida PWM CCP1 mejorado, el canal B.
Práctica 1
Microcontroladores y DSPs
RD6/SPP6/P1C RD6 SPP6 P1C RD7/SPP7/P17 RD7 SPP7 P1D
30
5
5
I/O I/O O I/O I/O O
ST TTL — ST TTL —
I/O digital. Streaming datos del puerto paralelo. Salida PWM CCP1 mejorado, el canal C. I/O digital. Streaming datos del puerto paralelo. Salida PWM CCP1 mejorado, el canal C.
TTL = entrada compatibles
TTL CMOS = CMOS De entrada o salida:
ST = Schmitt Trigger con niveles CMOS
I = entrada
O = Salida P = Potencia
Nota 1: Asignación alternativo para CCP2 cuando se borra poco Configuración CCP2MX.
2: Asignación por defecto para CCP2 cuando se establece bits de configuración CCP2MX.
3: Estos pines son No Conectar a menos que se establece el bit de configuración ICPRT.
Para NC / ICPORTS, el pasador es n
Conecte menos ICPRT se establece y el bit de configuración DEBUG se borra.
Práctica 1
Microcontroladores y DSPs
Nombre del Pin Número de Pin Tipo de Pin
Tipo de Buffer
Descripción
PDIP QFN TQFP
RE0/AN5/CK1SPP RE0 AN5 CK1SPP RE1/AN6/CK2SPP RE1 AN6 CK2SPP RE2/AN7/OESPP RE2 AN7 OESPP
8 9 10
25 26 27
25 26 27
I/O I O I/O I O I/O I O
ST Analógico — ST Analógico — ST Analógico RE3
PORTE es un puerto bidireccional, de entrada/salida. I/O digital. Entrada analógica 5. SPP reloj 1 salida. I/O digital. Entrada analógica 6. SPP reloj 2 salida. I/O digital. Entrada analógica . Salida SPP salida de habilitación
RE3 —
—
— —
—
Ver el pin MCLR/VPP/RE3
VSS 12,31 6,30, 31
5,29 P —
Referencia de tierra para la lógica y pines I / O.
VDD 11, 32 7,8, 28, 29
7, 28 P —
Alimentación positiva para la lógica y pines I / O.
VUSB 18 37 37 P — 3.3V salida del regulador de tensión USB interna y positiva de suministro para el transceptor USB
NC/ICCK/ICPGC(3) ICCK ICPGC
— 12 12 I/O I/O
ST ST
Sin conexión o dedicada CIE / Reloj puerto ICSP ™. Depurador en circuito reloj. Reloj programador ICSP
NC/ICDT/ICPGD(3) ICDT ICPGD
— — 13 I/O I/O
ST ST
Sin conexión o dedicada reloj puerto CIE / ICSP. In-Circuit datos depurador. Datos de programación ICSP.
NC/ICRST/ICVPP(3) ICRST ICVPP
— — 33 I P
— —
Sin conexíon o dedicada puerto Restablecer CIE / ICSP. Borrado (Reinicio) de entrada. Entrada de tensión de programación.
NC/ICPORTS(3) ICPORTS
—
—
34
P
—
Sin Connect o emulación de dispositivos de 28 pines. Activar emulación de dispositivos
Tabla 1.2 Descripción de los pines I/O del PIC18F4550 de 40 pines (continuación)
Práctica 1
Microcontroladores y DSPs
de 28 pines cuando se conecta a VSS.
NC — 13 — — — No conectado
TTL = entrada compatibles
TTL CMOS = CMOS De entrada o salida:
ST = Schmitt Trigger con niveles CMOS
I = entrada
O = Salida P = Potencia
Nota 1: Asignación alternativo para CCP2 cuando se borra poco Configuración CCP2MX.
2: Asignación por defecto para CCP2 cuando se establece bits de configuración CCP2MX.
3: Estos pines son No Conectar a menos que se establece el bit de configuración ICPRT.
Para NC / ICPORTS, el pasador es n
Conecte menos ICPRT se establece y el bit de configuración DEBUG se borra.
1.2 Oscilador Control del oscilador
El funcionamiento del oscilador en el PIC18F4550 que se controla a través de dos registros
de configuración y dos registros de control. Los registros de configuración, CONFIG1L y
CONFIG1H, selecciona el modo de oscilador y opciones prescaler / postscaler USB.
Como los bits de configuración, éstos se establecen cuando el dispositivo está programado
y se deja en esa configuración hasta que el dispositivo se reprograma.
El registro OSCCON (Registro 2-2) selecciona el Modo Activo del reloj; que se utiliza
principalmente en el control de reloj, el cambio en los modos logra potencia.
El registro OSCTUNE (Register 2-1) se utiliza para recortar la fuente de frecuencia
INTRC, así como seleccionar el fuente de reloj de baja frecuencia que impulsa varias
características especiales.
Tipos de oscilador
El PIC18F455 ofrece doce modos de oscilador distintos. Cuatro de ellos implican el uso de
dos tipos de oscilador a la vez.
Los usuarios pueden programar el FOSC3: Configuración FOSC0
bits para seleccionar uno de estos modos:
1. XT Crystal / Resonador
2. HS de alta velocidad Crystal / Resonador
3. HSPLL alta velocidad Crystal / Resonador con PLL Activado
4. CE reloj externo con FOSC / 4 de salida
5. ECIO reloj externo con E / S en RA6
6. ECPLL reloj externo con PLL Activado y FOSC / 4 de salida en RA6
7. ECPIO reloj externo con PLL Habilitado,
E / S en RA6
Práctica 1
Microcontroladores y DSPs
8. INTHS oscilador interno utilizado como fuente de reloj, SA Oscilador utilizado como
Fuente de Reloj USB
9. intio oscilador interno utilizado como fuente de reloj, EC Oscilador utilizado como USB
fuente de reloj, E / S digital en RA6
10. INTCKO oscilador interno utilizado como fuente de reloj, EC Oscilador utilizado como
USB fuente de reloj, FOSC / 4 de salida en RA6.
Figura 1.1.1 Diagrama del Clock
Práctica 1
Microcontroladores y DSPs
1.3 Organización de la memoria
Figura 1.3.1 Mapa de la memoria
Práctica 1
Microcontroladores y DSPs
Access Bank
Un Banco de Access, permite a los usuarios acceder a un bloque de memoria asignado sin
especificar un BSR. El Banco de acceso consta de los primeros 96 bytes de memoria (00h-
5Fh) en el banco 0 y los últimos 160 bytes de memoria (60h-FFh) en el Bloque 15. La
mitad inferior es conocida como la "memoria RAM de acceso" y se compone de GPRS. El
medio superior es donde se asignan SFRs del dispositivo. Estas dos áreas se asignan de
forma contigua en el Banco del acceso y se puede abordar de forma lineal por una dirección
de 8 bits (Figura 5-5). El Banco de acceso es utilizado por instrucciones PIC18 centrales
que incluyen el bit de acceso RAM (la 'a' parámetro la instrucción). Cuando 'a' es igual a '1',
la instrucción utiliza el BSR y la dirección de 8 bits incluido en el código de operación para
la dirección de memoria de datos. Cuando 'a' es '0', Sin embargo, la instrucción se ve
obligada a utilizar el mapa de direcciones del Banco de Acceso; el valor actual de la BSR
es ignorado por completo. Para las direcciones de 8 bits de 60h y anteriormente, esto
significa que los usuarios pueden evaluar y operar en SFRs más eficiente. La memoria
RAM de acceso a continuación 60h es un buen lugar para los valores de datos que pueda
necesitar el usuario para acceder rápidamente, como computacional inmediata resultados o
variables del programa comunes. Acceso RAM también permite contexto eficiente código
más rápido y más el ahorro y el cambio de variables. El mapeo del Banco El acceso es
ligeramente diferente cuando el conjunto de instrucciones extendido esté activado (XINST
Bit de configuración = 1). Esto se discute en más detalle en la Sección 5.6.3 "Mapeando el
Banco de acceso en Indexado Literal modo Offset.
Figura 1.3.2 Uso del registro del banco de memoria (direccionamiento
directo)
Práctica 1
Microcontroladores y DSPs
1.4 Resumen de operaciones El PIC18F4550 incorpora un conjunto estándar de 75 instrucciones básicas PIC18, así
como un conjunto extendido de ocho nuevas instrucciones para el optimización de código
que es recursivo o que utiliza una pila de software.
Tabla 1.4.1 Set de Operaciones
Práctica 1
Microcontroladores y DSPs
2. Manejo de MPLAB
Barra de Herramientas y Menús:
MPLAB contiene 4 barras de herramientas personalizables según la tarea que se está
realizando. La primera es la barra USER, que por defecto es la única que utilizo, bueno tu
elegirás la que más te agrade. La segunda es la barra EDIT, todo lo relacionado a la Edición
de texto. La tercera es la barra DEBUG, con todo lo necesario para simular nuestro
programa, depurarlo, etc. Finalmente la barra PROJECT, todo lo referido al proyecto que
estás realizando.
Menú de Archivo (file menú):
NEW: Crea un nuevo archivo con extensión .asm
OPEN: Abre un archivo que puede ser .asm/.obj/.c/.err/.h/.lkr/.map/.hex/.lst
VIEW: Abre un archivo en modo solo lectura. y lo más común.
SAVE (Guardar), SAVE AS (guardar como), SAVE ALL (guardar todo).
CLOSE (cerrar un proyecto), CLOSE ALL (cerrar todos los proyectos abiertos).
PRINT (Imprime), y PRINT SETUP te permite configurar el modo de
impresión, EXIT cierra MPLAB, y finalmente los 5 últimos archivos utilizados.
Menú del Proyecto (Project Menú):
Como MPLAB te permite trabajar con varios archivos y todos los elementos y herramientas
a la vez es bueno crear un proyecto y tener en él todo lo necesario para realizar tu tarea,
como ser; codificar, ensamblar, simular, etc. Este menú contiene
NEW PROJECT: Abre un cuadro de diálogo para crear un nuevo proyecto y en él
todo lo que necesites para tenerlo más a tu alcance.
OPEN PROJECT: Abrir un proyecto
CLOSE PROJECT: Cerrar un proyecto
SAVE PROYECT: Guardar Proyecto
EDIT PROJECT: Similar a New Project, pero referido a un proyecto ya abierto, al
que se le puede agregar nodos, librerías y la forma en que desarrollaras el proyecto
en cuestión.
MAKE PROJECT: Ensambla; crea archivo .HEX la cual compara con el archivo
.asm del que ensamblo. Si este tiene una fecha más reciente que el archivo .HEX
asociado, debido digamos a una actualización del código, entonces ensamblará
nuevamente el proyecto. En caso de que la fecha sea anterior al archivo .HEX
Práctica 1
Microcontroladores y DSPs
generado (es decir, archivo .ASM más viejo que el .HEX) este no hará
nada.(extraído textualmente de no recuerdo donde, pero igual, yo jamás lo utilicé)
BUILD ALL: Le importa nada la fecha y ensambla todo.
BUIL NODE: Ensamblar un nodo que hayamos asociado al proyecto.
INSTALL LANGUAGE TOOL: Es para configurar el lenguaje a utilizar, que en
nuestro caso es el ASM de Microchip.
Menú de edición (Menú Edit):
UNDO: Deshacer, y en ese orden Cortar, Copiar y Pegar
SELECT ALL: Seleccionar todo SELECT WORD: Selecciona la palabra sobre la
que está el cursor.
DELETE LINE: Borra la línea sobre la que está el cursor.
DELETE EOL: Borra desde donde está el cursor hasta el final de la línea.
GOTO LINE: Abre un cuadro de diálogo para saltar a una determinada línea (Line
to go to), te indica además la cantidad total de líneas (Last Line) y la línea en que
tienes el cursor (Current Line), es algo así como el "Ir a" de Word.
FIND: Es para buscar algún texto dentro de nuestro código.
REPLACE: Es para reemplazar un texto o una pequeña frase.
REPEAT FIND: Es para repetir la búsqueda si es que hay otra palabra o frase
igual. REPEAT REPLACE: Es para repetir el reemplazo.
TEMPLATE: Pues como todos los templates, para crear unos archivos
personalizados o plantillas, y así no estas reescribiendo todo un código nuevamente.
TEXT: También tiene sus opciones; Transpose intercambia los caracteres que
están a ambos lados del cursor; Upper case cambiar a mayúsculas; Lower case
cambiar a minúsculas; Indent mantiene la tabulación de la línea anterior; Un-
Indent lo opuesto.
Menú de depuración (Menú Debug):
RUN: Inicia la simulación. Verás la parte inferior de la ventana toda pintada de
amarillo (señal de que la simulación está en proceso). Útil cuando colocas algunos
puntos de ruptura (breakpoints) para detener la ejecución y así no estar esperando
que se ejecute todo aquello que sabes que está correcto.
RESET: Resetea el micro y te ubica en la primer línea donde comenzará la
simulación (en ese caso verás toda la línea pintada de negro y las letras blancas)
"listo para comenzar la simulación"
HALT: Detiene la ejecución.
HALT TRACE: Detiene un traceo que se esté haciendo.
Práctica 1
Microcontroladores y DSPs
ANIMATE: Es igual que RUN pero lo hace más lento, para que vayas siguiendo la
ejecución, mostrándote línea por línea todo lo que se está ejecutando.
STEP: Paso, es decir, un paso por cada vez que lo presionas (en la barra de
herramientas verás dos huellas de zapato, pues es eso, paso a paso). Simplemente
ejecuta una a una cada línea de código por cada vez que lo presionas.
STEP OVER: Igual que el anterior pero con un pequeño detalle, cada vez que se
encuentre con un call lo ejecuta de modo tan rápido que ni tú te enteras de que ya
pasó, es decir, utilízalo si no quieres perder tiempo con el call.
UPDATE ALL REGISTER: Actualiza el valor de todos los registros.
CHANGE PROGRAM COUNTER: Cambia el valor del PC y te ubica en la
etiqueta del código a la que quieres ir.
EXECUTE AN OPCODE: Te permite ejecutar un código cualquiera desde
cualquier sitio en el que te encuentras, por ejemplo ingresas un goto inicio y hacia
allí irá. independiente a la secuencia del programa.
CONDITIONAL BREAK: Para ejecutar un breakpoint en forma condicional, Por
ejemplo por que cambió el valor de un registro, o porque quieres ver que paso hasta
ese punto.
SIMULATOR STIMULUS: Desde aquí se puede simular que le envías señales al micro
por uno de sus pines, este submenú tiene 4 opciones
ASYNCHRONOUS STIMULUS: Te abrirá un pequeño diálogo con 12 botones
como el que se muestra en la imagen, vendrían a ser como interruptores, nota que al
primero le asigné el pin RA0 (pin 17) y entre paréntesis una T (de TOGGLE).
Imagen 1.1 Ventana Estímulos Asincronos
Si presionas con el botón derecho del mouse en uno de esos botones veras las opciones de
configuración de estos estímulos desde donde los puedes configurar.
Práctica 1
Microcontroladores y DSPs
Imagen 2.2 Ventana de configuración de los estímulos asíncronos
o ASSIGN PIN: Muestra los pines del puerto para que selecciones aquel que
llevará un estímulo.
o PULSE: un pulso
o LOW: Le asigna un nivel bajo permanente
o HIGH: Lo contrario, nivel alto permanente
o TOGGLE: Cada vez que lo pulses cambiará de nivel de alto a bajo o de bajo
a alto.
PIN STIMULUS: Es para cuando creas un archivo de texto con extensión .sti,
desde aquí lo cargas o lo quitas, se trata de utilizar un archivo que creaste con esta
extensión y que contiene los estímulos ya asignados para cada uno de los pines.
CLOCK STIMULUS: Desde aquí puedes enviarle pulsos de reloj a un
determinado pin, indicando el tiempo que se mantendrá en nivel alto y el tiempo en
nivel bajo, tipo (timer).
Imagen 2.2 Ventana de estímulos registrados
Tiene un par de opciones como ser; Guardarlo como un archivo .sti, Abrir alguno si es que
ya lo tienes creado, Aplicar los cambios, agregarle más impulsos a otros pines, y el help
(por supuesto, la ayuda).
Práctica 1
Microcontroladores y DSPs
REGISTER STIMULUS: Es exactamente lo mismo que con los pines, solo que
lleva la extensión .reg y sirve para que en una determinada posición del programa se
cargue un registro con el valor que tú le quieras dar.
CENTER DEBUG LOCATION: Te ubica en la posición en la cual el programa se está
ejecutando, se suele utilizar cuando detienes la ejecución, empiezas a husmear por otro lado
y luego no sabes dónde andabas, pues bueno ahí te lo acercas.
BREAK SETTINGS: Te muestra un diálogo para que le des nombre a los breakpoints y
luego desde aquí los habilitas, los quitas, los guardas etc.
TRIGGER IN/OUT SETTINGS: Son para los emuladores MPLABICE y PICMASTER,
aquellos que dijimos no tener.
CLEAR ALL POINT: Limpia todos los breakpoints y los tracepoints que pusiste a lo
largo del programa.
CLEAR PROGRAM MEMORY: Borra la memoria de programa
SYSTEM RESET: Eso mismo, Resetea el sistema.
POWER ON RESET: Para el caso en que se podría producir un reset en el micro, y así
saber que ocurre o que es lo que hace el micro si esto llegara a ocurrir.
Imagen 2.3 Ventana del power on reset
Sólo le das a Power On Reset y habrás ocasionado un reset en el pin4 del micro (MCLR),
luego le das a "cancel" y continuas con la ejecución para saber qué hace el PIC, y así
asegurarte de que todo está en orden.
Opciones del Menú:
Práctica 1
Microcontroladores y DSPs
DEVELOPMENT MODE: Es donde hacemos las configuraciones del proyecto.
WINDOW SETUP: Puedes personalizar totalmente la forma en que vas a trabajar, tus
preferencias, luego Guardarlas (Save Setup), Cargarlas (Load Setup) si es que ya las tienes
guardadas, o utilizar una por defecto (Default Configuration).
CURRENT EDITOR MODES: Es para que personalices el modo de edición.
Imagen 2.4 Ventana de modos de edición actuales
RESET EDITOR MODES: Elimina los cambios que hiciste anteriormente
ENVIRONMENT SETUP: Para una personalización completa.
PROGRAMMER OPTIONS: Son las opciones para configurar el programador que
utilizarás con MPLAB.
Vista del Menú:
El más importante de todos, ya que desde aquí nos veremos cara a cara con cada uno de los
bits de los registros del micro, el estado que tienen y como se modifican, claro que lo verás
cuando lo ejecutes en modo "step" (paso a paso) o "Animate" (de forma animada)...
PROGRAM MEMORY: Verás la memoria de programa, y así sabes cuánto
espacio te queda disponible.
STACK: La pila.
Práctica 1
Microcontroladores y DSPs
Imagen 2.5: Ventana de la pila.
FILE REGISTER: Para que veas como se modifican los registros mientras el
programa se está ejecutando, solo en modo "Step" o "Animate".
Imagen 2.6: Ventana de registros de programa.
SPECIAL FUNCTION REGISTER: Los Registros de funciones especiales con
nombre y todo, trisa/b, porta/b, status, w, se puede ver como se modifican los bits
de entrada y salida de los puertos. Sólo los verás cuando lo ejecutas en modo "Step"
o "Animate".
Práctica 1
Microcontroladores y DSPs
Imagen 2.7: Ventana de funciones especiales de registro
SHOW SIMBOL LIST: Todos los símbolos utilizados y su respectiva ubicación
(dirección de registro), aquello que definimos al iniciar nuestro código, como
"status equ 0x03".
Imagen 2.8: Ventana de símbolos
STOPWATCH: Para ver el tiempo en milisegundos, consumidos por el micro que
cuenta con un XT de 4 MHz.
Imagen 2.9: Ventana del cronógrafo
PROJECT: Los datos del proyecto que se está realizando
WATCH WINDOW: Para crear una ventana de registros.
MODIFY: Para modificar los valores de algún registro determinado.
Práctica 1
Microcontroladores y DSPs
Uso del simulador en MPLAB IDE
El software MPLAB IDE incluye un programa simulador, que es una herramienta de
desarrollo sumamente útil, no solamente para localizar errores (bugs) en un programa, sino
también como auxiliar didáctico.
El usuario puede seguir paso por paso cada instrucción del programa, insertar breakpoints,
generar entradas digitales en cualquier bit de los puertos y observar el contenido de
cualquier registro interno del microcontrolador, así como de las localidades de la memoria
de datos y de código, la EEPROM y el Stack.
El simulador cuenta también con la opción de una función “Stopwatch” para medir
tiempos de ejecución.
Para saber más sobre cómo realizar la simulación consulte el video tutorial disponible en
https://youtu.be/VkH4344lgIE
3. Procedimiento y desarrollo de la práctica
Cálculos, diseño y codificación del algoritmo La tarea primordial de esta práctica es realizar un programa en lenguaje ensamblador para
sumar dos datos de 4 bits (Puerto B) y mostrar el resultado en 5 leds conectados en puerto
D.
Después de analizar los requerimientos del problema, se elaboró el diagrama de flujo de
este algoritmo el cual se muestra en la siguiente figura:
Algoritmo 1. Inicio
2. Determinar el PIC con el que se trabaja
3. Configurarlo
4. Utilizar un oscilador externo de 4 MHz
5. Establecer los puertos de E/S
6. Definir las variables (operandos)
7. Leer los datos de entrada (Puerto B)
8. Asignar los datos de entrada a las variables
9. Sumar los datos
10. Mostrarlos a través del puerto D
11. Volver a leer datos en B y repetir el ciclo completo
12. Fin
Práctica 1
Microcontroladores y DSPs
Imagen 3.1 Diagrama de flujo y algoritmo asociados al problema
Este algoritmo se codificó en el software MPLAB; dicho código se muestra a continuación.
Los cuadros en naranja son la descripción genera de cada parte del código. A manera de
comentarios dentro del mismo código se explican el porqué de cada línea en el código.
Práctica 1
Microcontroladores y DSPs
Práctica 1
Microcontroladores y DSPs
Ensamble y simulación en MPLAB IDE 8.92 Una vez codificado el algoritmo en MPLAB IDE se ensambló para obtener el archivo
.HEX que es el que se carga al PIC.
Se selecciona Make en el menú proyect
Práctica 1
Microcontroladores y DSPs
Imagen 3.2 Ensamble del código
Si el código no tiene errores de sintaxis aparece la siguiente ventana donde nos dice
que se ha ensamblado correctamente; esto no necesariamente significa que el
programa realizará lo que queremos pero nos indica que a menos está bien escrito.
Imagen 3.3 Ensamble exitoso
Automáticamente en la carpeta donde esté guardado el proyecto aparecerá el
archivo .HEX
Práctica 1
Microcontroladores y DSPs
Imagen 3.4 Creación automática del archivo .HEX
Luego se simula el código en el mismo software. Esta simulación nos sirve para probar el
manejo de puertos.
En el menú VIEW habilitamos la vista de File registers, Special function registers
y Program memory que mientras se ejecuta el programa nos permitirán ver cómo
se modifican los registros, como se modifican los bits de entrada y salida de los
puertos saber cuánto espacio te queda disponible en la memoria.
Práctica 1
Microcontroladores y DSPs
Imagen 3.5 Prerrequisitos para la simulación 1
En el menú Debugger se habilita la vista de Stopwatch que, como vimos en el
marco teórico, nos permite visualizar el tiempo en milisegundo consumidos por el
micro que cuenta con un XT de 4 MHz.
Práctica 1
Microcontroladores y DSPs
Imagen 3.6 Prerrequisitos para la simulación 2
En ese mismo menú seleccionar ANIMATE QUE empieza a correr el programa
Imagen3.7 Ventana para iniciar animación
Las siguientes imágenes muestran parte de la simulación realizada. El archivo completo
para realizar y visualizar la simulación se encuentra en la carpeta de archivos de código.
Práctica 1
Microcontroladores y DSPs
Imagen 3.8.1 Animación del programa. Imagen 1
Práctica 1
Microcontroladores y DSPs
Imagen 3.8.2 Animación del programa
Práctica 1
Microcontroladores y DSPs
Imagen 3.9 Animación del programa
Práctica 1
Microcontroladores y DSPs
Simulación en Proteus 8.0 La simulación del circuito completo se realizó en el software Proteus 8.0. Professional Para
esta primera práctica, el circuito para simular en Proteus y armar físicamente en la tablilla
de experimentos no se diseñó por el equipo sino que fue proporcionado por el profesor.
Implementación Una vez simulado el código en ensamblador se prosiguió a armar el circuito físicamente en
la placa de experimentos a fin de comprobar la operación del microcontrolador y
experimentar las diferencias contra los resultados obtenidos por el software de simulación.
Los dispositivos deberán de conectarse como se muestra en la figura siguiente
Imagen 3.10 Circuito con PIC18F4550
Imagen 3.11 Pines del microcontrolador PIC18F4550
Posteriormente agregamos el archivo .HEX al microcontrolador
Práctica 1
Microcontroladores y DSPs
Imagen 3.12 Ventana para agregar archivo .HEX
La ventana que mostramos aparece al realizar doble clic sobre el microcontrolador buscar y
elegir nuestro archivo .HEX. Finalmente hacemos clic en OK, que nos regresa a la pantalla
donde tenemos el circuito electrónico.
Imagen 3.13 Barra de herramienta de simulación
Práctica 1
Microcontroladores y DSPs
Una vez cargado el archivo .HEX en la barra de herramienta de simulación (Ilustración 2)
hacemos clic en el botón de PLAY para que empiece la simulación. Y nos aparecerá el
circuito como se muestra a continuación
Imagen 3.14 Circuito en simulación
Cabe mencionar que tanto en el circuito conectado en la protoboard como el realizado en la
simulación tuvieron algunos detalles. Es decir los leds se activaban en cero y se apagaban
en uno.
A continuación se muestra el circuito ya armado en la tablilla de experimentos.
Imagen 3.15 Circuito con PIC18F4550 armado en tablilla de experimentos.
Resultados
Pasos previos. Una vez que ya se ha verificado el funcionamiento y lógica del circuito por medio de la
simulación se procedió al armado y experimentación del circuito en la tablilla de
experimentos.
Práctica 1
Microcontroladores y DSPs
- Como primer paso para llegar a los resultados deseados se procedió a programar el
PIC con ayuda de un programador proporcionado por el maestro. La programación
se realizó a través del programa MPLAB.
- Una vez programado el PIC, se realizó el armado del circuito ya mencionado, el
circuito se armó en una tablilla de experimentos que fue alimentada con una fuente
de alimentación regulada proporcionada por el laboratorio.
Imagen 3.16 Circuito armado en la tablilla de experimentos.
Pruebas y errores. Para explicar la fase de pruebas debemos aclarar el orden del circuito:
Imagen 3.17 Asignación del bit menos significativo. E/S
Algunos problemas que surgieron al probar el circuito fueron solo técnicos, ya que el
dipswitch dio problemas por falso contacto, pero eso se arregló buscando un dipswitch
apropiado.
Ahora, se hicieron pruebas con diferentes combinaciones entre la suma de 1 y 15:
Tabla 3.1 Suma, ilustración de los resultados obtenidos en la tablilla de experimentos y esquema en Proteus
Suma Resultado
1+0
Hacia arriba es 0 y
hacia abajo es 1
Bit menos significativo
Práctica 1
Microcontroladores y DSPs
1+1
3+1
Práctica 1
Microcontroladores y DSPs
3+2
3+3
3+4
Práctica 1
Microcontroladores y DSPs
4+4
5+4
Práctica 1
Microcontroladores y DSPs
5+5
6+5
6+6
Práctica 1
Microcontroladores y DSPs
7+6
7+7
Práctica 1
Microcontroladores y DSPs
7+8
Como se puede apreciar, los resultados experimentales concuerdan con los de la simulación
perfectamente, en ninguna combinación hubo discrepancias ni ninguna desviación
importante, además como extra también se probó la combinación de 8+8 y probamos que
solo prende el bit de acarreo como indicaba la simulación. Imagen 3.18 a) y b)
Imagen 3.18 a) Resultado de la suma de 8+8 en la tablilla de experimentos.
Práctica 1
Microcontroladores y DSPs
Imagen 3.18 b) Resultado de la suma de 8+8 en la simulación
4. Conclusiones Guiados por el profesor, se llevó a cabo el código en lenguaje ensamblador de un
sumador de cuatro bits donde tuvimos que identificar los pines del microcontrolador
involucrado, así como en algunos casos su correspondiente configuración , para así
poder mandar a llamarlos y llevar las entradas a la memoria, por ejemplo. Por lo que
tuvimos que elegir que oscilador utilizar según nuestras necesidades, ya que el PIC nos
permite escoger uno de sus osciladores internos o también alguno externo. Para poder
llevar acabo el código empleamos el software MPLAB, el cual no todos estábamos
familiarizados con él, lo que nos permitió no solo conocerlo sino comenzar a manejarlo.
En adición, contamos con la ayuda del profesor al mostrarnos las herramientas y el
proceso para simular nuestro contador, ya con el código elaborado, en el programa
Proteus, lo cual nos permitió no solo saber en primera instancia mediante la
compilación exitosa del MPLAB que nuestro código funcionaba, sino también mediante
la simulación, vista con los componentes del circuito, en la que veríamos si funcionaba
como queríamos.
Una vez hecho esto, mediante un archivo .HEX fue programado el PIC18F4550 y dado
que el codigo fue proporcionado por el profesor y fue verificado, no hubo problemas
para después solo mandarlo a programar, finalmente se armó el circuito implementando
el PIC y los resultados fueron completamente exitosos. Esta práctica cumplió con su
objetivo que era enseñarnos lo básico para programar un PIC, desarrollando su código
para después pasarlo a lenguaje ensamblador e implementarlo en un software de
simulación, una vez obtenidos los resultados esperados, poder llevarlo al físico.
Práctica 1
Microcontroladores y DSPs
5. Bibliografía y referencias
[1] Simulación en MPLAB. Disponible en
https://www.youtube.com/watch?v=VkH4344lgIE. Consultado el 19 de septiembre de
2015
[2]MANUAL PIC 18F4550. Disponible en
http://rapidshare.com/files/268879576/PIC18F4550.pdf
Universidad de Valencia. Consultado el 10 de septiembre de 2015
[3]MPLAB IDE Quick Start Guide - Microchip
Disponible en http://ww1.microchip.com/downloads/en/DeviceDoc/51281d.pdf
Consultado el 19 de septiembre de 2015
[4] William Bolton. (2012.) Mecatrónica. (4a edición).México D.F: Alfaomega.
Recommended