Microcontroladores y sistemas embebidos
Unidad 2: Programación
Ing. Oscar Alonso Rosete Beas
Semana 14 Marzo Rev:3 ciclo 2023-1
oscarrosete.com
oscarrosete.com
Agenda
2.1. Introducción a los lenguajes de programación en microcontroladores
2.2. Arquitectura y lenguaje de programación Ensamblador
2.3. Modos de direccionamiento
2.4. Memoria RAM
2.5. Lenguaje C
Unidad 2: Programación
oscarrosete.com
Unidad 2 (PIC)
oscarrosete.com
Unidad 2 (ATMega)
oscarrosete.com
oscarrosete.com
oscarrosete.com
Agenda
1.1. Introducción a los sistemas embebidos
1.2. Conceptos básicos de arquitectura de computadoras
1.3. Procesador
1.4. Memoria
1.5. Periféricos de entrada Salida
1.6. Arquitectura de microcontroladores
Unidad I: Arquitectura de computadoras
Text
Text
oscarrosete.com
oscarrosete.com
2.1. Introducción a los lenguajes de programación en microcontroladores
2.2. Arquitectura y lenguaje de programación Ensamblador
2.3. Modos de direccionamiento
2.4. Memoria RAM
2.5. Lenguaje C
Repaso el viernes 7 de febrero
Lunes 10 de febrero examen
Unidad 2. Programación
Agenda
oscarrosete.com
oscarrosete.com
Trabajo de clase individual
Para Lunes junto con cuadro sinóptico/mental
Generales: Generar un documento Word o Powerpoint
-
Investigación individual con cuadro comparativo:
-
RISC
-
CISC
-
-
Clasificación de los siguientes microcontroladores acuerdo al arbol visto en clase (Agregar referencias):
-
Pic16f84a, pic16f18877
-
Atmega328p
-
PICAXE 08M2
-
oscarrosete.com
oscarrosete.com
Trabajo de clase individual
-
Requerimientos para programar un microcontrolador pic16f84a
- Tarea conseguir los materiales para realizarlo
-
Requerimientos para simular un microcontrolador PIC16F84a utilizando lenguaje ensamblador y lenguaje C
-
Realizar una simulación del encendido de un LED utilizando el PIC16F84a en cualquier lenguaje.
-
-
Requerimientos para ejecutar un programa en lenguaje C
- Ejecutar "hello world" en su laptop
- Instalar MPLAB X IDE y Compiler XC8 (8 bits)
- Crear cuenta en TinkerCAD
oscarrosete.com
oscarrosete.com
MPLAB X IDE and assembly source code
mplab assembler input output
page 52,53
oscarrosete.com
oscarrosete.com
MPLAB® XC8 Compiler v2.10
oscarrosete.com
oscarrosete.com
MPLAB® XC8 Compiler v2.10
oscarrosete.com
oscarrosete.com
MPLAB® XC8 Compiler v2.10
oscarrosete.com
oscarrosete.com
MPLAB® XC8 Compiler v2.10
309c23fe3a02
oscarrosete.com
oscarrosete.com
Initial Setup
oscarrosete.com
oscarrosete.com
Initial Setup
oscarrosete.com
oscarrosete.com
Initial Setup
oscarrosete.com
oscarrosete.com
Initial Setup
oscarrosete.com
oscarrosete.com
Initial Setup
oscarrosete.com
oscarrosete.com
Debug main project
Click on debug
oscarrosete.com
oscarrosete.com
Debug main project
oscarrosete.com
oscarrosete.com
Debug main project
oscarrosete.com
oscarrosete.com
Debug main project
Cursor on status
oscarrosete.com
oscarrosete.com
Customize project config
oscarrosete.com
oscarrosete.com
Customize project config
oscarrosete.com
oscarrosete.com
Video repaso Procesador
oscarrosete.com
oscarrosete.com
PIC16F84A
Imagen de componentes
leer pg 3
O 30 LIBRO
pg. 5
oscarrosete.com
oscarrosete.com
Memoria PIC
Program memory
Data memory
Flash program memory
1 K words =1024 instructions
14 bit-program
memory word
Special Function Registers (SFR)
General Purpose Registers (GPR)
8-bits wide
oscarrosete.com
oscarrosete.com
Memoria del programa
El vector "RESET" se encuentra en la dirección 00h ()
El vector "interrupt" se encuentra en la dirección 0004h()
La memoria de programa abarca 1K x 14 bits (0000h-03FFh)
3ff=1023 de 0 a 1023(1024 lineas)
wraparound:
20h, 420h son la misma ubicación
32 y 1056. Diferencia son 1024
oscarrosete.com
oscarrosete.com
Program counter
El contador de programa (PC: Program Counter) es el registro del microcontrolador cuya función es direccionar la memoria de programa.
EL PC almacena direcciones de instrucciones; esta la dirección de la siguiente instrucción que hay que ejecutar.
es de 13 bits (8 a 12 bits PCLATH, bits 0-7 PCL)
Durante la ejecución de un programa, el PC se incrementa en 1 con cada instrucción que se ejecute.
oscarrosete.com
oscarrosete.com
Data Memory
Portions of data memory are banked. This is for both the SFR area and the GPR area.
Data memory is partitioned into two banks which contain the general purpose registers and the special function registers. Bank 0 is selected by clearing the RP0 bit (STATUS<5>). Setting the RP0 bit selects Bank 1.
oscarrosete.com
oscarrosete.com
Banked Memory
oscarrosete.com
oscarrosete.com
Data memory in MPLab
File register
SFRs
oscarrosete.com
oscarrosete.com
Special function register summary (SFR)
Page 7
oscarrosete.com
oscarrosete.com
I/O
-
El microcontrolador se comunica con el mundo exterior a través de los puertos.
-
Estos están constituidos por líneas digitales de entrada/salida que trabajan entre 0 y 5 V. los puertos se pueden configurar como entradas para recibir datos o como salidas para gobernar dispositivos externos
-
El Puerto A con 5 líneas, pines RA0 a RA4.
-
El puerto B con 8 líneas, pines RB0 a RB7.
Cada línea puede ser configurada como entrada o como salida, independientemente unas de otras, según se programe.
oscarrosete.com
oscarrosete.com
Grabación de microcontrolador
La información contenida en estas memorias, que es el programa que lo controla y que consiste de una serie de números hexadecimales (ejemplo:1683 0186 30FF 0085 1283 0805 0086 2805), debe ser grabada previamente mediante un equipo físico denominado programador o grabador. Este equipo se conecta al ordenador y mediante un software se controla la grabación de la memoria del programa del microcontrolador (grabar o programar el microcontrolador)
oscarrosete.com
oscarrosete.com
Grabación de microcontrolador
oscarrosete.com
oscarrosete.com
Ejercicio introductorio ensamblador
Realiza un programa que activa los pines 1,3,5 con un valor lógico de 1 de tu puerto B
- A traves de registro W
- A traves de bcf, bsf
oscarrosete.com
oscarrosete.com
EXPRESIONES, OPERACIONES Y OPERADORES
Las expresiones son combinaciones de constantes y símbolos mezclados con operadores aritméticos y lógicos. Se permite usar paréntesis, se pueden utilizar en el campo de los operandos.
Los operadores son los símbolos que denotan las operaciones aritméticas y lógicas definidas en el lenguaje ensamblador.
oscarrosete.com
oscarrosete.com
Operadores
Se clasifican en
-
Dirección
-
Asignación
-
Operan directamente con bits
-
Lógicos y de relación
-
Aritméticos
oscarrosete.com
oscarrosete.com
Operadores aritméticos
oscarrosete.com
oscarrosete.com
Operadores lógicos
Verdadero si su valor numérico es diferente de 0
oscarrosete.com
oscarrosete.com
Operadores con bits
Bitwise operations, operaciones bit a bit
oscarrosete.com
oscarrosete.com
Ejercicio 1-bitwise
oscarrosete.com
oscarrosete.com
Ejercicio 2-lógicos
oscarrosete.com
oscarrosete.com
Símbolos
- símbolo equ expresión (define constante)
- símbolo set expresión (define una variable)
equ no puede ser modificado posteriormente, se utiliza comúnmente para registros de funciones especiales y sus direcciones en memoria de datos.
oscarrosete.com
oscarrosete.com
Símbolos- Ejemplo
DATO1 equ .18
DATO2 equ .7
movlw DATO1 %DATO2
; Al dividir 18/7 el residuo es 4
DATO=.10 (operador de asignación)
oscarrosete.com
oscarrosete.com
Ejercicio introductorio ensamblador
Realiza un programa que activa los pines 1,3,5 con un valor lógico de 1 de tu puerto B
- A traves de registro W
- A traves de bcf, bsf
oscarrosete.com
oscarrosete.com
Ejercicios
Repaso PORTB, TRISB
- Asignar a un símbolo el valor 10, asignar a otro símbolo el valor 20, mover el valor del primer símbolo a la ubicación 2. Posteriormente incrementar en 5 el primer símbolo y en 1 el segundo símbolo y realizar el mismo proceso.
- Cargar 3f en memoria 0eh , cargar f3 en memoria 0fh e intercambiarlos.
Text
Text
oscarrosete.com
oscarrosete.com
2.1. Introducción a los lenguajes de programación en microcontroladores
2.2. Arquitectura y lenguaje de programación Ensamblador
2.3. Modos de direccionamiento
2.4. Memoria RAM
2.5. Lenguaje C
Repaso el viernes 7 de febrero
Lunes 10 de febrero examen
Unidad 2. Programación
Agenda
oscarrosete.com
oscarrosete.com
Brazo robotico controlado por guante inalámbrico
Microcontrolador atmel
Aplicaciones
oscarrosete.com
oscarrosete.com
Examen 1 marzo
Procesador y sus componentes:
- ALU, Registros (tipos de registros), CU y buses internos de CPU
Computadora y sus componentes:
- Bus del sistema, Microprocesador, Memoria, Entradas y salidas
Arquitectura de Von Newmann y la Harvard
Microcontrolador
RISC y CISC
Pic16f84a, ensamblador básico
oscarrosete.com
oscarrosete.com
Ejercicios individuales
Repaso PORTB, TRISB
- Asignar a un símbolo el valor 10, asignar a otro símbolo el valor 20, mover el valor del primer símbolo a la ubicación 2. Posteriormente incrementar en 5 el primer símbolo y en 1 el segundo símbolo y realizar el mismo proceso.
- Cargar 3f en memoria 0eh , cargar f3 en memoria 0fh e intercambiarlos.
oscarrosete.com
oscarrosete.com
Ejercicios individuales
2.- Cargar 3f en memoria 0eh , cargar f3 en memoria 0fh e intercambiarlos.
3.- Lograr W sea igual a un símbolo con el valor 13 decimal.
Efectuar las siguientes operaciones:
- Incrementar W en 1
- Decrementar W en 1
- Agregarle el número 20h
- Realizar una negación lógica de W
- Guardar el resultado en el registro con dirección 1A.
oscarrosete.com
oscarrosete.com
Práctica 1
Las últimas 2 horas de los días Miércoles estarán designadas a trabajo en práctica de laboratorio.
Entrega: 17/03/21
Text
oscarrosete.com
oscarrosete.com
2.1. Introducción a los lenguajes de programación en microcontroladores
2.2. Arquitectura y lenguaje de programación Ensamblador
2.3. Modos de direccionamiento
2.4. Memoria RAM
2.5. Lenguaje C
Unidad 2. Programación
Agenda
oscarrosete.com
oscarrosete.com
Analogía al switch-case
En los lenguajes de programación, un switch case o switch statement, declaración de cambiador o declaración de interruptor.
El valor de la expresión entregada como parámetro es comparada con las constantes asociadas a los casos, en caso de no haber coincidencia ejecuta operación predeterminada.
oscarrosete.com
oscarrosete.com
Propuesta
Se envia al registro w lo que se quiera comparar
movfw PORTA
Se llama a una subrutina
call compara
Al registro PCL se le asigna PCL+W
compara addwf PCL,F
Las combinaciones requeridas se ponen en orden dentro de la subrutina
oscarrosete.com
oscarrosete.com
Propuesta
¿Qué pasa cuando F tiene un valor de D'20'?
oscarrosete.com
oscarrosete.com
Ejercicios ensamblador 2
1. Una serie de interruptores conectados al Puerto B efectúan las siguientes operaciones:
- Si Puerto B ==0: Sumará el contenido del registro 1 y 2 y lo asignará al registro 3.
- Si puerto B==1: Restará el contenido del registro 1 al 2 y lo asignará al registro 3.
- Si puerto B==2: Intercambiará sus valores.
- Si puerto B==3: Activará los bits 1,3 en el Puerto A.
Asegurarse que solo realice la comparación si el puerto B tiene un valor <=3.
Nota: La ubicación de los registros y sus contenidos serán seleccionados de manera arbitraria por los estudiantes.
El contenido no puede ser 0.
Realizar el programa y simulación que cumpla con lo siguiente:
2. Interruptor conectado al puerto B bit 3 inicia la siguiente secuencia:
Se simulará el funcionamiento de un semáforo, en el puerto A bit 0 permanecerá 5 segundos encendidos, después hará un parpadeo de 0.5s se desactivará y activará el bit 1, el cual permanecerá 2 segundos encendido hará un parpadeo de 0.5s se desactivará y activará el bit 2 , el cual permanecerá 5 segundos encendido hará un parpadeo de 0.5s y repetirá la secuencia.
oscarrosete.com
Ejercicios ensamblador 2
oscarrosete.com
Referencias
Diagrama de flujo
Prender un LED
Documentar el codigo, decirle al software que usamos un pic16f84a e Incluir archivo de símbolos
;autor,fecha,descripción
list p=16F84a
#include "p16f84a.inc"
Definir que sucede al hacer reset al pic
org 0
goto init
Definir configuration bits
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF
Evitar vector de interrupción y acceder a banco 1 de memoria de datos
org 5
init bsf STATUS,RP0
Definir que es salida a traves de TRISB
bcf TRISB,0
regresamos al banco 0 e ir al inicio de mi ciclo principal
bcf STATUS,RP0
goto start
En ciclo principal cambiar a 1 el bit 0 de Puerto B
start bsf PORTB,0
goto start
Finalizar
END
oscarrosete.com
oscarrosete.com
Ejemplo Prender un LED
Presiona un botón y enciende un led
Evitar vector de interrupción y acceder a banco 1 de memoria de datos
org 5
init bsf STATUS,RP0
Definir que el bit 0 de Puerto B es salida y el bit 0 del puerto A es entrada
bcf TRISB,0
bsf TRISA,0
Regresamos al banco 0 e ir al inicio de mi ciclo principal
bcf STATUS,RP0
goto start
bit 0 del puerto A==0?
start btfsc PORTA,0
Cambiar a 1 el bit 0 de Puerto B
bsf PORTB,0
Si
No
goto start
oscarrosete.com
Presiona un botón y enciende un led
oscarrosete.com
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
The instruction cycle (also known as the fetch–decode–execute cycle or simply the fetch-execute cycle) is the cycle which the central processing unit (CPU) follows from boot-up until the computer has shut down in order to process instructions
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
pg. 22
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
pg. 23
Capacitor selection for crystal oscillator
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
pg. 57
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
Si el reloj principal es de 4 MHz y queremos saber cuanto tiempo emplea en procesarse la instrucción nop, la cual sólo emplea un ciclo de máquina, se emplearía la siguiente expresión matemática:
pg. 36
TCY= 4*( 1/Fosc )*Cycles=
4*( 1/( 4*10^6 ) )*1 =
1*10^6 s =
1μs
¿Cómo se realiza un retardo de tiempo?
oscarrosete.com
Retardo de 20 µs
GOTO?
CICLOS?
Retardo de 20 µs
oscarrosete.com
Llamada subrutina (2)
Primera vuelta (3+2)
3 vueltas intermedias (3)
Última vuelta s(2)
Retorno subrutina (2)
Alternativa 100 ms
oscarrosete.com
Comparación de mas de 1 bit
oscarrosete.com
oscarrosete.com
Realizar el programa y simulación que cumpla con lo siguiente:
- Desarrollar una subrutina o función que permita realizar un retardo de 1 segundo.
Ejercicios ensamblador 3
Ejercicios ensamblador 3
oscarrosete.com
Realizar el programa y simulación que cumpla con lo siguiente:
2. Con interruptores conectados a las terminales RB0 y RB1 activar los LEDs conectados a las terminales RA0 y RA1 de acuerdo a la Tabla 1.
RB0 | RB1 | RA1 | RA0 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 |
Tabla 1
Si PUERTOB==0000 0010:
Puerto A = 0000 0001
oscarrosete.com
Referencias
Text
oscarrosete.com
oscarrosete.com
2.1. Introducción a los lenguajes de programación en microcontroladores
2.2. Arquitectura y lenguaje de programación Ensamblador
2.3. Modos de direccionamiento
2.4. Memoria RAM
2.5. Lenguaje C
Unidad 2. Programación
Agenda
oscarrosete.com
oscarrosete.com
Código en C
Online
https://repl.it/languages/c
Se realizará una calculadora que reciba 2 números y realice la suma, resta, multiplicación y división evitando el error por división/0.
Dar click para abrir Referencia
oscarrosete.com
oscarrosete.com
Ejemplo calculadora
oscarrosete.com
oscarrosete.com
Ejercicio a resolver por alumno 1
Subir archivo(s) en c actividad de blackboard.
15%
25%
oscarrosete.com
oscarrosete.com
Ejercicio a resolver por alumno 2
Subir archivo(s) en c actividad de blackboard.
oscarrosete.com
oscarrosete.com
Ejercicio a resolver por alumno 3
Subir archivo(s) en c actividad de blackboard.
oscarrosete.com
oscarrosete.com
Programacion en C del PIC
Setup básico
oscarrosete.com
oscarrosete.com
Ejemplo If
oscarrosete.com
oscarrosete.com
Ejemplo switch
oscarrosete.com
oscarrosete.com
Ejercicios PIC C 1
Subir archivo(s) en c y archivo de multisim/proteus a actividad de blackboard.
1.- Diseñar y simular un circuito que mediante tres interruptores muestre con dos displays de 7 segmentos su fecha de nacimiento.
- Al presionar el primer botón desplegara el dia de nacimiento(2 digitos)
- Al presionar el segundo boton desplegara el mes de nacimiento(2 digitos)
- Al presionar el tercer botón desplegara los ultimos 2 digitos del año de nacimiento.
Se puede utilizar 74LS47 (BCD to 7-Segment Display Decoders)
Realizar un programa que simule el funcionamiento de un semáforo (mplab y multisim):
Un interruptor conectado al puerto B bit 3 inicia la siguiente secuencia
1. En el puerto A, activar el bit 0 por 5 segundos
2. Hacer un parpadeo (off-on) de 0.5s, despúes desactivar bit 0.
3. En el puerto A, activar el bit 1 por 2 segundos.
4. Hacer un parpadeo (off-on) de 0.5s, despúes desactivar bit 1 .
5. En el puerto A, activar el bit 2 por 5 segundos,
6. Hacer un parpadeo (off-on) de 0.5s, despúes desactivar bit 2 y repertir la secuencia
oscarrosete.com
Ejercicios PIC C 1
oscarrosete.com
oscarrosete.com
Práctica 2
La práctica 2 consiste en la entrega de los mismos 3 circuitos funcionando con lenguaje C.
Entrega: 28/03/23
Diseñe un control de nivel para un tanque. Al pulsar "arranque", se activa la bomba hidráulica B1. La bomba permanece activa hasta alcanzar el nivel máximo, momento en el cual se apaga. Se deberá abrir la válvula de vaciado y se activara nuevamente de forma automática al alcanzar el nivel mínimo, procediendo a cerrar la válvula hasta que alcance el nivel máximo. Repetirá el ciclo de forma automática sin tener que volver a presionar arranque.
Deberá seleccionar y proponer los componentes a utilizar considerando como base el microcontrolador pic16f84A
Deberá simular el circuito comprobando su funcionamiento
Deberá cargarlo a la actividad correspondientede blackboard
oscarrosete.com
PIC/Multisim Challenge
oscarrosete.com
oscarrosete.com
Ejercicios PIC C 1
Subir archivo(s) en c actividad de blackboard.
1.- Cargar 3f en memoria 0eh , cargar f3 en memoria 0fh e intercambiarlos. (recomendación __asm() )
2.- Diseñar y simular un circuito que mediante tres interruptores muestre con dos displays de 7 segmentos su fecha de nacimiento.
- Al presionar el primer botón desplegara el dia de nacimiento(2 digitos)
- Al presionar el segundo boton desplegara el mes de nacimiento(2 digitos)
- Al presionar el tercer botón desplegara los ultimos 2 digitos del año de nacimiento.
oscarrosete.com
oscarrosete.com
Referencia
PIC/Multisim Challenges
Diseñar y simular un circuito que mediante tres interruptores muestre con dos displays de 7 segmentos su fecha de nacimiento.
- Al presionar el primer botón desplegara el dia de nacimiento(2 digitos)
- Al presionar el segundo boton desplegara el mes de nacimiento(2 digitos)
- Al presionar el tercer botón desplegara los ultimos 2 digitos del año de nacimiento.
Deberá seleccionar y proponer los componentes a utilizar considerando como base el microcontrolador pic16f84A
Deberá simular el circuito comprobando su funcionamiento
Deberá cargarlo a la actividad correspondientede blackboard
oscarrosete.com
Microcontroladores Unidad 2
By Oscar Rosete
Microcontroladores Unidad 2
- 250