29/03/2023
Microcontroladores
Laboratorio Semana 2
Semestre: 2023-1
Profesor: Kalun José Lau Gan
Preguntas previas:
• ¿Por qué estudiamos Assembler?
• Manipulamos directamente los recursos disponibles en el microcontrolador
• Mejora la eficiencia en diferentes aspectos: velocidad, consumo energético, disipación
de calor, costos reducidos, tamaño final del PCB
• ¿Cuál es el lenguaje mas usado en microcontroladores?
• El lenguaje C y variantes
• Había leído el capítulo 8 del datasheet sobre el Data EEPROM. ¿Qué es y como
se usa?
• Es una memoria no-volátil que es considerado como un periférico en la arquitectura del
microcontrolador PIC18F45K50. No esta mapeado su contenido en la memoria de datos
• Para acceder a dicha memoria se emplean cuatro registros SFR según se detalla en la
hoja técnica:
1
29/03/2023
Preguntas previas:
• Me vino con una placa verde el Pickit3. ¿Vamos a emplearlo?
• No va a ser necesario emplearlo puesto a que vamos a colocar de manera permanente
el microcontrolador en el breadboard y la conexión con el pickit3 va a ser de manera
directa.
• El osciloscopio solicitado opcionalmente en la lista de materiales
aproximadamente en que semana lo vamos a emplear?
• Desde la cuarta o quinta semana
• No pude conseguir el cable telefónico AWG22 pero he conseguido UTP Cat6,
habrá algún problema?
• No hay problema alguno salvo lo trenzado que están los pares, que se tendrá que
“enderezar” para poder usarlos en el breadboard.
Preguntas previas:
• ¿Cuáles pueden ser las consecuencias “negativas” en cambiar de frecuencia de
trabajo de 4MHz a 48MHz?
• Mayor consumo de energía
• En el caso de leer el estado de un pulsador, será mas sensible a los rebotes
• Al trabajar a mayor frecuencia se debe de tener mayor cuidado en el diseño del PCB
• Ground planes, short paths, etc
• ¿Cómo es lo de soldar las conexiones en el LCD?
2
29/03/2023
Preguntas previas:
• ¿Cómo compruebo si mi LCD esta funcionando?
• Energizamos el display conectando: pin1-GND, pin2-VCC, pin3-GND, pin15-VCC,pin16-
GND.
• He conseguido el PCKIT3.5+✌. Habrá algún problema?
• No hay problema alguno siempre y cuando el MPLAB X lo reconozca correctamente y
pueda grabar el microcontrolador.
Preguntas previas:
• ¿El bit PBADEN para qué sirve?
• Es el habilitador para que los pines 4 al 0 del puerto B funcionen como E/S digitales
(OFF) o como entradas analógicas para el conversor A/D (ON).
• Con el programador viene un CD. ¿És necesario instalarlo?
• No, el MPLABX se encarga de todo.
3
29/03/2023
Agenda
• El flujo de datos en el microcontrolador PIC18F45K50
• Instrucciones básicas en XC8 PIC Assembler
• Ejemplos básicos con el microcontrolador PIC18F45K50 en lenguaje
Assembler
• Nuestra primera implementación física de un circuito basado en el
microcontrolador PIC18F45K50
Aspectos relacionados con el MPASM y el XC8
PIC Assembler
• El año 2020 Microchip dejó de lado el MPASM para dar lugar al XC8 PIC
Assembler (PIC-AS)
• El XC8 Assembler tiene bugs reportados por lo que indicaremos en los
ejemplos el cómo solucionarlos (EDIT 28/03/2022 ya fue solucionado en las
versiones de MPLABX 6.00 y XC8 2.36)
• XC8 Assembler es un lenguaje de bajo nivel (orientado a la máquina),
nosotros debemos de conocer primero cómo funciona la máquina para
luego hacer que funcione mediante la codificación de un programa en
Assembler y dar solución al problema planteado
4
29/03/2023
El flujo de datos en el microcontrolador PIC18F45K50
MPASM vs XC8 PIC Assembler: Partes de un programa
MPASM: XC8 PIC ASM:
Nota: Los bits de configuración se
alojaron en un archivo header llamado
“[Link]”
5
29/03/2023
Instrucciones básicas en XC8 ASM
• Instrucciones de movimiento de datos
Instrucción movff [registro1], [registro2]
• Mueve el contenido de registro1 hacia registro2
• Ocupa el doble y demora el doble
6
29/03/2023
¿Instrucción movfw?
• ¡Instrucción no documentada en la hoja técnica!
• Esta no es una instrucción en sí, sino una “pseudo-instrucción” del
lenguaje assembler.
• Lo que hace es mover el contenido de un registro y lo coloca en el
Wreg.
Instrucciones básicas en XC8 ASM
• Instrucciones de manipulación de bits en un registro
7
29/03/2023
Ejemplo de uso de instrucciones de
manipulación de bits en un registro
Instrucciones básicas en XC8 ASM
8
29/03/2023
Instrucciones básicas en XC8 ASM
• Instrucción decf / incf
• Decremento (decf) o incremento (incf) de registro, ambos de uno en uno
Instrucciones básicas en XC8 ASM
9
29/03/2023
Instrucciones setf [registro] y clrf [registro]
• setf [registro] : Coloca todos los bits del registro indicado a uno lógico
• clrf [registro] : Coloca todos los bits del registro indicado a cero lógico
Tiempo de ejecución de las instrucciones en
XC8 PIC Assembler
• Se utiliza la siguiente fórmula:
• Hay instrucciones simples, dobles y especiales (revisar 26.0 de la
datasheet)
• Recordando la relación periodo vs frecuencia:
10
29/03/2023
Ejemplo: Escribir 0x5A en RD y 0xA5 en RB
usando el PIC18F4550
Análisis:
• El objetivo: Pines del RD como salidas
11
29/03/2023
Ejemplo: Enviar un dato 0x5A al puerto RD y un
dato 0xA5 al puerto RB usando el PIC18F4550
Ejemplo: Escribir 0x5A en RD y 0xA5 en RB
usando el PIC18F45K50
12
29/03/2023
Ejemplo: Enviar un dato 0x5A al puerto RD y un
dato 0xA5 al puerto RB usando el PIC18F45K50
Ejemplo: Implementar una XOR de un bit en el
PIC18F4550 empleando el XC8 Assembler
13
29/03/2023
Ejemplo: Implementar una XOR de un bit en el
PIC18F4550 empleando el XC8 Assembler
• Desarrollando mas a detalle el diagrama de flujo: Teniendo en cuenta que
se usará la instrucción “btfsc” para las preguntas a cada puerto de entrada
de la XOR
Ejemplo: Implementar una XOR de un bit en el
PIC18F4550 empleando el XC8 Assembler
• Tener en cuenta que en
[Link] se encuentra
los bits de configuración y
la llamada a la librería
general “[Link]”
14
29/03/2023
Implementación del circuito:
Implementación del circuito:
15
29/03/2023
Ejemplo: Implementar una XOR de un bit en el
PIC18F45K50 empleando el XC8 Assembler
Ejemplo: Implementar una XOR de un bit en el
PIC18F45K50 empleando el XC8 Assembler
• Código en XC8 PIC Assembler
16
29/03/2023
Ejemplos adicionales
• Tener en cuenta que los ejemplos siguientes:
• El microcontrolador es el PIC18F4550 por lo que se deberá de modificar los
bits de configuración, BSR y demás parámetros de acorde a lo explicado en
clase acerca del PIC18F45K50
• Estan desarrollados en MPASM por lo que se tendrán que migrar al nuevo XC8
PIC Assembler para que puedan compilarse correctamente.
Ejemplo: Recibir un dato en RB y replicarlo en
complemento a RD
Nota:
-Se ha seguido el ejemplo de un negador de un bit
pero replicándolo siete veces mas para para así
obtener un negador de 8 bits solicitado.
-El código resultante es extenso. Por lo que se evaluará
una major alternativa empleando la instrucción COMF
que se verá en la siguiente lámina
17
29/03/2023
Instrucción COMF [registro], d
• Aplica complemento al registro indicado y el resultado lo puede
almacenar en Wreg o en el mismo registro
Optimizando el ejemplo del negador de 8 bits
empleando instrucción comf:
Del código extenso visto anteriormente ahora se
reduce a pocas líneas gracias a comf
18
29/03/2023
Ejemplo: Titilar un LED conectado en RD2
Ejemplo: Titilar un LED conectado en RD2
• Debemos de crear un bucle de repetición para generar retardos mas
prolongados
19
29/03/2023
Propuesta de algoritmo con dos anillos de
repetición
Propuesta de algoritmo con tres anillos de
repetición
20
29/03/2023
Código del titilador de LED en MPASM:
Prototipo físico del circuito:
21
29/03/2023
Recomendaciones al momento de
implementar el circuito en físico:
• Verificar continuidad en los cables jumper utilizados en el circuito
• Verificar que la resistencia en pin MCLR hacia 5V sea de 10K
• Verificar que la PC haya detectado correctamente el PICKIT3
• Revisar siempre los mensajes en la ventana de “output” por posibles
fallos en el evento de compilación y evento de programación.
• Tener a la mano un multímetro para verificar voltajes y continuidad
en el prototipo.
Recomendaciones al momento de
implementar el circuito en físico:
• Si se esta empleando el PICKIT3 como programador y deseas que éste
administre el voltaje de alimentación al circuito de prueba:
22
29/03/2023
Modificar el titileo de LED para que se visualice un
contador autoincremental de 8 bits
Ejercicios adicionales:
Tener en cuenta que se debe de seguir el procedimiento visto en clase
(idea, desarrollo del circuito, diagrama de flujo, código en MPASM,
simulación, prototipo físico)
• Desarrollar un titilador de un LED conectado en RE0 en el cual su
periodo de parpadero dependerá del estado de un switch conectado
en RB0, si RB0=1 el periodo será de 500ms, si RB0=0 el periodo será
de 100ms.
• Desarrollar una señal de cruce de tren con entrada de activación.
• Desarrollar una “vela electrónica” con entrada de activación, dicha
entrada tendrá como sensor de luz a un L.D.R.
23
29/03/2023
Fin de la sesión!
24