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

  1. 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.
  2. 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

  1. 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.
  2. 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:

  1. 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