0% encontró este documento útil (0 votos)
8 vistas58 páginas

Ventajas y Funciones de Microcontroladores

Este documento describe los microcontroladores, sus características, arquitectura y aplicaciones. Explica ventajas de los microcontroladores como reducir tamaño y costo de circuitos. También describe la arquitectura interna de PIC16F84 incluyendo memoria de programa, datos y contador de programa.

Cargado por

CesarPerú
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas58 páginas

Ventajas y Funciones de Microcontroladores

Este documento describe los microcontroladores, sus características, arquitectura y aplicaciones. Explica ventajas de los microcontroladores como reducir tamaño y costo de circuitos. También describe la arquitectura interna de PIC16F84 incluyendo memoria de programa, datos y contador de programa.

Cargado por

CesarPerú
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Practicas con Microcontroladores Ponente: Aurelio Cadenas

1
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Ventajas de los Microcontroladores

• Reducen el tamaño y complejidad de los circuitos


• Permiten llevar un mantenimiento mas sencillo
• Reducen el costo del producto
• Su funcionamiento es flexible, ya que si los
requerimiento de diseño cambian es probable que
bastará con reprogramarlo, no siendo necesarios
cambios en el hardware.
2
Introducción CPR Gijón

1
Practicas con Microcontroladores Ponente: Aurelio Cadenas

¿Qué son los Microcontroladores?


Son circuitos integrados que incorporan todos los bloques funcionales de un
Sistema Microprocesador en un único encapsulado

3
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

• ¿Qué necesitan para funcionar?


Sólo una tensión continua estable (5V, 3.3V, 2.5V, 1.5V...) y un oscilador
• ¿Qué hacen?
Interpretan (decodifican) combinaciones de bits (instrucciones) y generan señales digitales
internas y/o externas
• ¿Para qué?
Para “ejecutar” de manera continua una secuencia de Instrucciones (programa) que
permita controlar un sistema o subsistema electrónico
• ¿Para qué sirve?
Para controlar dispositivos integrándose dentro de ellos. Ejemplos: teléfonos, tanto
móviles como fijos, el ratón del ordenador, la regulación del frenado en los vehículos y las
máquinas expendedoras, entre otros .
• ¿Qué son los PIC?
Son microcontroladores fabricados por la empresa Microchip, los cuales han logrado en
pocos años ocupar los puestos de cabeza del ranking mundial de ventas.

4
Introducción CPR Gijón

2
Practicas con Microcontroladores Ponente: Aurelio Cadenas

¿Por qué los Microcontroladores PIC de Microchip?

• Eficiencia del código: permiten una gran compactación de los programas


• Rapidez de ejecución: a frecuencia de 20MHz -> 5 millones de instr./seg.
• Seguridad en acceso por la separación de memoria de datos y de
programa
• Juego reducido de instrucciones y de fácil aprendizaje
• Compatibilidad de pines y código entre dispositivos de la misma familia
o incluso de familias distintas
• Gran variedad de versiones en distintos encapsulados (desde 8 hasta 84
pines) sin reducción de las prestaciones internas (muy versátiles)
• Posibilidad de protección del código muy fiable
• Herramientas de desarrollo software y hardware abundantes y de bajo
coste

5
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

ARQUITECTURA INTERNA

PIC16F84

6
Introducción CPR Gijón

3
Practicas con Microcontroladores Ponente: Aurelio Cadenas

ARQUITECTURA INTERNA DEL PIC16F84

El PIC16F84 consta de:

• Un procesador con una ALU y un Decodificador de Instrucciones

• Una memoria de programa tipo FLASH de 1 K palabras de 14 bits


cada una
• Una memoria de datos SRAM de 68 bytes.
– Los 22 primeros contienen los registros de configuración del PIC
– los restantes son posiciones de memoria de propósito general.

• Una memoria de datos EEPROM de 64 bytes.

• Dos puertas A y B de Entrada y Salida de información digital.


• También dispone de interrupciones, un Timer y un Perro Guardián

7
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

8
Introducción CPR Gijón

4
Practicas con Microcontroladores Ponente: Aurelio Cadenas

MEMORIA DE PROGRAMA

El Espacio de Memoria de Usuario es donde irá


almacenado el programa, desde la dirección 0000h
hasta la 03FFh, son 1024 direcciones, (1 Kbyte.)
Vector Reset está siempre en la posición 0000h
de la memoria de programa. Cualquier reseteo
(interno o externo) que se genere en el PIC hará
que su Contador de Programa pase a tener el
valor 0000h y por lo tanto se pase a ejecutar la
instrucción situada en dicha posición.
Vector Interrupción está siempre en la posición
0004h de la memoria de programa. Cualquier
interrupción que se fuerce al PIC hará que su
contador de programa pase a tener el valor 0004h y
por lo tanto pase a ejecutar la instrucción situada
en dicha posición.
PC (Contador de Programa) es un registro de 13
bits que apunta a la dirección de la memoria de
programa que contiene la instrucción a ejecutar.

9
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

MEMORIA DE PROGRAMA

• La información contenida en esta memoria se graba


previamente mediante un equipo físico denominado
programador o grabador.
• Es de tipo ROM Flash (no volátil) que admite unas
1000 grabaciones.
• Está organizada en palabras de 14 bits cada una.
• Todas las instrucciones ocupan una posición de
memoria de programa

10
Introducción CPR Gijón

5
Practicas con Microcontroladores Ponente: Aurelio Cadenas

CONTADOR DE PROGRAMA (PC)

El contador de programa (PC) es un registro de 13 bits que apunta a


la dirección de la memoria de programa que contiene la instrucción a
ejecutar. Se descompone en 2 registros:

El byte bajo PC<0:7> se denomina PCL y está disponible en la


memoria de datos. Es un registro que se puede leer y escribir
directamente desde programa.
El “cuasibyte” alto PC<12:8> se denomina PCH y NO se puede leer
ni escribir directamente, sino que debe realizarse usando el registro
PCLATH que esta accesible en la memoria de datos del PIC.

11
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

LA PILA (STACK) para almacenar el Contador de Programa

La pila permite almacenar las direcciones (contenido del PC) a


donde debe retornar el programa cuando se finaliza
– una llamada a una subrutina
– la ejecución de una rutina de interrupción.

Los PICs de la familia PIC16 tienen una pila de 8 niveles, por


tanto permiten concatenar como máximo 8 saltos a subrutinas
(CALLs) o ejecuciones de rutinas de interrupción (salto a 0004h).

El espacio de memoria para la pila es totalmente independiente a la


memoria de datos y de programa. El puntero de pila no se puede
leer ni escribir. La pila es gestionada por el hardware.

12
Introducción CPR Gijón

6
Practicas con Microcontroladores Ponente: Aurelio Cadenas

MEMORIA RAM DE DATOS

• Es una memoria de tipo RAM


• Está dividida en dos bancos: banco 0 y
banco 1. Para seleccionarlos se utiliza
el bit RP0 del registro de estado.
• Cada banco se divide en dos áreas:
– Área FSR (Registros de funciones
especiales): Almacenan los
registros para configurar y
controlar el PIC
– Área PGR (Registros de propósito
general) Almacenan las variables
que se utilizan en el programa

13
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

CONFIGURACIÓN DEL OSCILADOR


El PIC16F84 pueden funcionar de 4 modos distintos con el oscilador.
– LP Low Power Crystal (cristal de cuarzo ó resonador cerámico hasta 200KHz)
– XT Crystal/Resonator (cristal de cuarzo ó resonador cerámico hasta 4MHz)
– HS High Speed Crystal/Resonator (cristal de cuarzo entre 4MHz y 20MHz)
– RC Resistor/Capacitor (red RC externa hasta 4MHz)

Los valores de C1 y C2 deben ser


idénticos y comprendidos entre
15 y 33 pF. Para XTAL entre 2 y
10 MHz.
La configuración del oscilador se
realiza en dos bits FOSC1 y
FOSC2 de la memoria 0x2007
(Palabra Configuración del PIC)

14
Introducción CPR Gijón

7
Practicas con Microcontroladores Ponente: Aurelio Cadenas

CONFIGURACIÓN DEL OSCILADOR


En aplicaciones donde la precisión a la hora de medir tiempo o temporizar no tiene
porqué ser muy elevada, la opción RC es una solución válida y de bajo coste. En
este caso se conectan externamente una resistencia y un condensador tal y como se
indica en la figura adjunta.

La frecuencia de oscilación depende


de la tensión de alimentación VDD,
del valor de la resistencia REXT, del
valor del condensador CEXT y de la
temperatura de funcionamiento.
La frecuencia del oscilador dividida
por 4 se obtiene como salida en el pin
OSC2/CLKOUT.

En las características eléctricas de cada micro se dan gráficas que te permiten


escoger el valor de la resistencia para un valor del condensador, temperatura y
tensión de alimentación determinadas.
15
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

CONFIGURACIÓN DEL OSCILADOR

16
Introducción CPR Gijón

8
Practicas con Microcontroladores Ponente: Aurelio Cadenas

POWER-ON RESET (POR)


En el micro, se genera internamente un pulso de reset cada vez que
se alimenta el sistema. Este pulso se produce al subir la tensión en el
pin VDD y alcanzar éste un valor en el rango de 1,2V a 1,7V. Esta
característica permite eliminar el uso de redes RC externas al
microcontrolador para generar un RESET en la puesta bajo tensión.
Lo normal es unir la patilla MCLR a VDD a través de una
resistencia.
Existen parámetros relativos a las características que debe tener la
pendiente de subida de la tensión de alimentación para asegurar un
pulso de POR.

17
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

POWER-ON RESET (POR)


Si la pendiente de subida de la tensión VDD es excesivamente
lenta suele colocarse una red RC en la patilla MCLR para
asegurar un RESET correcto (el micro se mantiene en reset
más tiempo hasta que el nivel en el pin MCLR “sube”). El
diodo D únicamente ayuda a la descarga del condensador
cuando se apaga la alimentación. La R1 limita la corriente que
pudiera drenarse por el pin de entrada MCLR (suele tomar
entre 1K y 0.1K.

18
Introducción CPR Gijón

9
Practicas con Microcontroladores Ponente: Aurelio Cadenas

POWER-UP TIMER (PWRT)


De manera opcional (configurable), el temporizador de
Power-up puede proporcionar un retardo fijo de unos
72ms desde que se produce el pulso de POR. Mientras
que dura esta temporización el micro se mantiene en un
estado de RESET.
Este retardo PWRT permite a la tensión VDD crecer
hasta un valor aceptable de alimentación para el propio
micro y para el resto de circuitería que exista en la
tarjeta y que se alimenta desde la misma fuente de
alimentación.
Existe un bit de configuración (PWRTE) que permite
habilitar/deshabilitar esta temporización.

19
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PALABRA DE CONFIGURACION del PIC16F84A


• Todos los PIC tienen una posición de memoria denominada
palabra de configuración (posición 0x2007), en la que cada bit
tiene un significado y configura las características especiales.
• Los bits de configuración pueden ser programados con objeto
de seleccionar varias configuraciones del microcontrolador:
– tipo de oscilador,
– protección o no del programa,
– uso ó no del watchdog, etc.
• El valor no programado de la palabra de configuración es
0x3FFF (todo “1”)
• Al estar la posición de memoria 0x2007 fuera del espacio de
memoria de programa de usuario, es únicamente accesible
durante la programación del micro y no durante la ejecución
de un programa.
20
Introducción CPR Gijón

10
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PALABRA DE CONFIGURACION del PIC16F84A


Existen dos formas de programar los bits de configuración:
- mediante la directiva "__CONFIG"
- al programar el dispositivo

21
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIAGRAMA DE PINES DEL PIC 16F84

22
Introducción CPR Gijón

11
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMACION

PIC16F84

23
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

LENGUAJE ENSAMBLADOR

El único lenguaje que entienden los microcontroladores es


el lenguaje máquina formado por ceros y unos del sistema
binario.
El lenguaje ensamblador expresa las instrucciones de una
forma más natural al hombre a la vez que muy cercana al
microcontrolador, ya que cada una de sus instrucciones se
corresponde con otra en código máquina.

El lenguaje ensamblador trabaja con nemónicos, que son


grupos de caracteres alfanuméricos que simbolizan las
órdenes o tareas a realizar.

24
Introducción CPR Gijón

12
Practicas con Microcontroladores Ponente: Aurelio Cadenas

LENGUAJE ENSAMBLADOR
La traducción de los nemónicos a código máquina entendible
por el microcontrolador la lleva a cabo un programa
ensamblador.

25
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

El código fuente del lenguaje Ensamblador


Está compuesto por una sucesión de líneas de programa.
Cada línea de programa puede estar compuesta de hasta cuatro
campos o columnas separados por uno o más espacios o
tabulaciones entre sí.
¾ Campo de etiquetas. Expresiones alfanuméricas escogidas por el
usuario para identificar una determinada instrucción del programa.
Todas las etiquetas tienen asignado el valor de la posición de memoria
en la que se encuentra la instrucción a la que acompañan.
¾ Campo del código de operación. Corresponde al nemónico.
¾ Campo de operandos y datos. Contiene los operandos que precisa el
nemónico utilizado. Según la instrucción, puede haber dos, uno o
ningún operando.
¾ Campo de comentarios. Dentro de una línea, todo lo que se
encuentre a continuación de un punto y coma (;) será ignorado y
considerado como comentario.
26
Introducción CPR Gijón

13
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Ejemplo de un programa escrito en Lenguaje Ensamblador

;********* PROGRAMA PARA SUMAR DOS NUMEROS BINARIOS DE 8 BITS ************


;*********************************************************************************************************
;
List p=16F84 ;Indica el tipo de microcontrolador utilizado

DATO1 equ 0x0C ;Asigna la expresión DATO1 al símbolo 0x0C


DATO2 equ 0x0D
RESUL equ 0x0E
W equ 0
f equ 1

org 0x00 ;Sitúa el código a partir de la dirección 0x00


goto INICIO ;salta a la posición de memoria INICIO
org 0x05 ;Sitúa el código a partir de la dirección 0x05

INICIO movf DATO1,W ;mueve el DATO1 al registro de trabajo W


addwf DATO2,W ;suma el W (DATO1) con DATO2 y resultado en W
movwf RESUL ;mueve el W a la dirección de memoria RESUL

end ;directiva que indica el final del código fuente3

27
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Lenguaje Ensamblador: Campo de código


Puede corresponder ese código a:
• Instrucciones: son aquellos nemónicos que son
convertidos por el ensamblador en código máquina que
puede ejecutar el núcleo del microcontrolador. En la
gama media (PIC16xxx) cada nemónico se convierte en
una palabra en la memoria de programa
• Directivas. Pseudoinstrucciones que controlan el proceso
de ensamblado del programa, pero no son parte del
código. Son indicaciones al programa ensamblador de
cómo tiene que generar el código máquina.
• Macros: Secuencia de nemónicos que pueden insertarse
en el código fuente del ensamblador de una manera
abreviada mediante una simple llamada.

28
Introducción CPR Gijón

14
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Lenguaje Ensamblador: Sistemas de numeración


• El ensamblador MPASM (distribuido por Microchip) soporta los sistemas de
numeración decimal, hexadecimal, octal, binario y ASCII.
• Los nemónicos que tengan una constante como operando deberán incluirla
respetando la sintaxis que se indica a continuación.
• Las constantes hexadecimales que empiecen por una letra deben ir precedidas
de un cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h

29
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIRECTIVAS DEL ENSAMBLADOR MPASM


Controlan el proceso de ensamblado del programa. Son instrucciones que se dan
al ensamblador NO al microcontrolador. Hay más de 50 directivas reconocidas por
MPASM. A continuación se recogen las más habituales.

1.- Directivas para carga o reserva en la Memoria de Programa


DATA Inicializa una o más palabras de la ROM de programa con datos o tiras de caracteres
DATA 0x012, 0x1345
DATA “Prueba 1,2,3”
DB Reserva e inicializa bytes en la memoria de programa
DB ’T’, 0xF0, ‘S’
DW Reserva e inicializa palabras en la memoria de programa
DW 0x39, 0x45B
DT Genera una serie de instrucciones RETLW, una por cada expresión que acompaña a la
directiva
DT 1, 2, 3, 5, 7
_ _CONFIG Carga la palabra de configuración del microcontrolador, previamente se debe
haber declarado el microcontrolador
_ _CONFIG 0x3F43 o también __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC

30
Introducción CPR Gijón

15
Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIRECTIVAS DEL ENSAMBLADOR MPASM


2.- Directivas de Control
• CBLOCK - ENDC Se emplean para declarar inicio y final de un bloque de constantes. Se
asignan valores correlativos
CBLOCK 0x20
A, B, C, D ; se realiza la asignación A = 0x20, B=0x21, C=0x22, D=0x23
ENDC
• CONSTANT y EQU Las dos se emplean para asignar expresiones a símbolos y estos no
pueden luego cambiar de valor (son constantes). Sintaxis distinta, pero igual efecto
CONSTANT longitud=0x10
longitud EQU 0x10
• VARIABLE y SET Las dos se emplean para asignar expresiones a símbolos esos
símbolos pueden cambiar de valor (son variables). Sintaxis distinta, pero igual efecto
VARIABLE BUFFER=0x20
BUFFER SET 0x20
• #DEFINE Se emplea para definir una etiqueta para una tira de caracteres siempre que
aparezca la etiqueta, se sustituye directamente por la tira
#DEFINE bit_0 STATUS,RP0
#UNDEFINE Anula una asignación previa realizada con #DEFINE
#UNDEFINE bit_0
• ORG Sitúa el código que se vaya generando después a partir de la posición especificada
ORG 0x100

31
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIRECTIVAS DEL ENSAMBLADOR MPASM

2.- Directivas de Control (Continuación)


• END Final de código fuente
END
• INCLUDE Se incluye el fichero especificado, se inserta en la
posición y será ensamblado
INCLUDE “c:\mplab\[Link]”
INCLUDE <[Link]> ver fichero [Link]
Incluye en el programa un fichero donde se definen las etiquetas con las
que se nombra a los diferentes registros y sus bits. Este fichero se
encuentra en el directorio principal del programa ensamblador. Puede
usarse esta directiva para incluir cualquier otro fichero
(¡Ojo! El fichero de inclusión no puede terminar con una directiva END).
• RADIX Se especifica el RADIX que se está usando
RADIX dec ;pueden ser hex ú oct
• PROCESSOR Define el tipo de microcontrolador
PROCESSOR 16F877

32
Introducción CPR Gijón

16
Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIRECTIVAS DEL ENSAMBLADOR MPASM

Para controlar la generación del fichero de listado (.LST):

• TITLE Título en la cabecera de las páginas


• SUBTITLE Subtítulo (segunda línea) en cabecera
• SPACE Inserta líneas en blanco
• PAGE Inserta salto de página
• LIST Habilita listado y opciones del mismo
LIST P=16F84A
Indica el tipo de microcontrolador utilizado.

• NOLIST Deshabilita generación en fichero .LST

33
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

EL JUEGO DE INSTRUCCIONES

• Es un juego reducido de 35 instrucciones muy


simples. Procesador RISC.
• La mayoría de las instrucciones se ejecuta en 4
ciclos de reloj; los saltos y llamadas a
subprogramas se ejecutan en 8 (no se
aprovecha pipeline).
• Todas las instrucciones tienen la misma longitud
en la gama media: 14 bits.
• Por lo tanto el cálculo del tiempo de ejecución y
de lo que ocupa un programa resulta simple
34
Introducción CPR Gijón

17
Practicas con Microcontroladores Ponente: Aurelio Cadenas

FORMATO DE LAS INSTRUCCIONES


• Instrucción: 14 bits = código de operación + operando/s
– manejan bytes (los operandos son registros):

MOVF 0x27,0
ADDWF 0x2A,1

– manipulan bits:

BSF STATUS,5

– control y operandos inmediatos:

MOVLW 0x3A

– instrucciones “CALL” y “GOTO”:

GOTO 0x1A3

35
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

El juego de instrucciones

36
Introducción CPR Gijón

18
Practicas con Microcontroladores Ponente: Aurelio Cadenas

37
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

38
Introducción CPR Gijón

19
Practicas con Microcontroladores Ponente: Aurelio Cadenas

39
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

CICLO DE INSTRUCCION

• Un ciclo de instrucción es el tiempo que se tarda en ejecutar una


instrucción en el PIC (salvo las instrucción de salto que emplean dos
ciclos). En los PIC16, un ciclo de instrucción dura 4 ciclos de reloj.
Para una frecuencia de reloj del oscilador de 4 MHz, un ciclo de
instrucción dura 1 microsegundo.

• En una 1ª etapa, la instrucción es traída a la CPU. Esto lleva un ciclo


de instrucción TCY. En la 2ª etapa se ejecuta la instrucción. Esto
lleva otro TCY.

• No obstante, debido al solapamiento (pipelining ó entubado) de traer


la instrucción actual y ejecutar la instrucción previa, una instrucción
se trae y otra se ejecuta cada TCY.

• Vamos a verlo con un ejemplo

40
Introducción CPR Gijón

20
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

41
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

42
Introducción CPR Gijón

21
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

43
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

44
Introducción CPR Gijón

22
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

45
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

46
Introducción CPR Gijón

23
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

47
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Pipelining de Instrucciones

48
Introducción CPR Gijón

24
Practicas con Microcontroladores Ponente: Aurelio Cadenas

bit 7 y 6 NO implementados
bit 2 Z: flag de cero
Se mantienen a 0 1: El resultado de la última operación aritmética
Bit 5 RP0: Register Bank Select bits o lógica es cero
(used for direct addressing)
0: El resultado de la última operación es
01 = Bank 1 (80h - FFh) distinto de 0
00 = Bank 0 (00h - 7Fh)
bit 1 DC: flag de acarreo decimal.
bit 4 TO: flag Timer Out 1: Acarreo en la suma desde el 4º bit
1:Tras conectar VDD o ejecutar 0 : No acarreo en la suma. Desde el 4º bit
CLRWDT o SLEEP
En la resta es lo contrario
0 :Al desbordar el temporizador de WDT
bit 0 C : flag de acarreo en el octavo bit
bit 3 PD: flag Power Down
1: Acarreo en la suma y no en la resta
1: Tras conectar VDD o al ejecutar la
instrucción CLRWDT 0: Acarreo en la resta y no en la suma
0: Al ejecutar la instrucción SLEEP Se utiliza en las instrucciones de rotación

49
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

EJEMPLOS
DE
PROGRAMAS

APLICACIONES
ARITMETICAS

50
Introducción CPR Gijón

25
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 1: SUMA DOS NUMEROS BINARIOS DE 8 BITS SIN ACARREO

SUMA DOS NUMEROS BINARIOS DE 8 BITS


ALMACENADOS EN LA MEMORIA DE DATOS RAM,
0Ch, 0Dh Y DEPOSITA EL RESULTADO EN LA 0Eh

51
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 1

52
Introducción CPR Gijón

26
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 1

53
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 1: SUMA DOS NUMEROS BINARIOS DE 8 BITS SIN ACARREO

movf DATO1,W

addwf DATO2,W

movwf RESULTADO

PROGRAMA 1

54
Introducción CPR Gijón

27
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 2: SUMA DOS NUMEROS BINARIOS DE 8 BITS CON ACARREO

SUMA DOS NUMEROS BINARIOS DE 8 BITS


ALMACENADOS EN LA RAM, 0Ch, 0Dh Y
DEPOSITA EL RESULTADO TENIENDO EN
CUENTA EL ACARREO EN LAS
DIRECCIONES 0Eh y OFh

55
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 2

56
Introducción CPR Gijón

28
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 2

57
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 2: SUMA DOS NUMEROS BINARIOS DE 8 BITS CON ACARREO

clrf RES_ALTO

movf DATO1,W

addwf DATO2,W

btfsc ESTADO,0

incf RES_ALTO

movwf RES_BAJO

PROGRAMA 2
58
Introducción CPR Gijón

29
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 3: RESTA DOS NUMEROS BINARIOS DE 8 BITS

RESTA DOS NUMEROS BINARIOS DE 8


BITS ALMACENADOS EN LA RAM,
MINUENDO 0Ch, SUSTRAENDO 0Dh Y
DEPOSITA RESULTADO EN 0Eh

59
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 3

60
Introducción CPR Gijón

30
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 3: RESTA DOS NUMEROS BINARIOS DE 8 BITS

movf SUSTRA,W

subwf MINU,W

movwf RESULTADO

PROGRAMA 3

61
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 4: MULTIPLICACION DE DOS NUMEROS BINARIOS DE 8 BITS

MULTIPLICA DOS NUMEROS BINARIOS DE 8


BITS ALMACENADOS EN LA RAM,
MULTIPLICANDO 0Ch Y MULTIPLICADOR 0Dh
Y DEPOSITA EL PRODUCTO EN 0Eh

62
Introducción CPR Gijón

31
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 4

63
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 4: MULTIPLICACION DE DOS NUMEROS BINARIOS DE 8 BITS

movf MPDOR,W
btfsc ESTADO,2
goto FIN
movwf PRODUCTO

clrw

SIGUE addwf MULDO,W

decfsz PRODUCTO

goto SIGUE

FIN movwf PRODUCTO

PROGRAMA 4
64
Introducción CPR Gijón

32
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 5: DIVISION DE DOS NUMEROS BINARIOS DE 8 BITS

DIVIDE DOS NUMEROS BINARIOS DE 8 BITS


ALMACENADOS EN LA RAM, DIVIDENDO EN
0Ch Y DIVISOR EN 0Dh Y EL COCIENTE SE
DEPOSITA EN LA 0Eh Y EL RESTO EN 0Fh

65
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 5

66
Introducción CPR Gijón

33
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 5: DIVISION DE DOS NUMEROS BINARIOS DE 8 BITS

clrf COCIENTE

movf DDO,W

movwf RESTO

btfsc ESTADO,2
goto FIN
movf DSOR,W

CONTI subwf RESTO,f

btfss ESTADO,0
goto TERMI
incf COCIENTE
goto CONTI
TERMI addwf RESTO,f
FIN nop
PROGRAMA 5

67
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 6: CONVERSION DE BINARIO A BCD (I)

CONVIERTE UN NUMERO BINARIO DE 8 BITS A BCD


(DECIMAL CODIFICADO EN BINARIO) MAXIMO 99d. EL
NUMERO BINARIO ESTA ALMACENADO EN 0Ch EL
BCD SE ALMACENARA DESEMPAQUETADO EN 0Dh
(DECENAS) Y 0Eh (UNIDADES)

68
Introducción CPR Gijón

34
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 6: CONVERSION DE BINARIO A BCD (I)

clrf DECENAS

movf HEX,W

movwf UNIDADES

movlw 0x0A

SIGUE subwf UNIDADES,f

btfss ESTADO,0
goto NEGA
incf DECENAS
goto SIGUE
NEGA addwf UNIDADES,f

PROGRAMA 6
69
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 7: CONVERSION DE BINARIO A BCD (II)

CONVIERTE UN NUMERO BINARIO DE 8 BITS


A BCD (DECIMAL CODIFICADO EN BINARIO)
MAXIMO 99d. EL NUMERO BINARIO ESTA
ALMACENADO EN 0Ch Y EL BCD
EMPAQUETADO SE ALMACENARA EN 0Dh
(DECENAS y UNIDADES)

70
Introducción CPR Gijón

35
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 7

71
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 7: CONVERSION DE BINARIO A BCD (II)

clrf DECENAS
movf HEX,W
movwf BCD

movlw 0x0A

SIGUE subwf BCD,f

btfss ESTADO,0
goto NEGA
incf DECENAS
goto SIGUE
NEGA addwf BCD,W

swapf DECENAS

addwf DECENAS,w

movwf BCD

PROGRAMA 7
72
Introducción CPR Gijón

36
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 8: CONVERSION DE BINARIO A BCD (III)

CONVIERTE UN NUMERO BINARIO DE 8 BITS A


BCD (DECIMAL CODIFICADO EN BINARIO)
MAXIMO 255d. EL NUMERO BINARIO ESTA
ALMACENADO EN 0Ch Y EL BCD
EMPAQUETADO EN 0Dh (CENTENAS) Y 0Eh
(DECENAS y UNIDADES)

73
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 8: CONVERSION DE BINARIO A BCD (III)


clrf DECE_UNI
clrf CENTENAS
movf HEX,W
movwf REG
movlw 0x64

CENTE subwf REG,f

btfss ESTADO,0
goto NEGA1
incf CENTENAS
goto CENTE
NEGA1 addwf REG,f
movlw 0x0A

DECE subwf REG,f

btfss ESTADO,0
goto NEGA2
incf DECE_UNI
goto DECE
NEGA2 addwf REG,W

swapf DECE_UNI

addwf DECE_UNI,f
PROGRAMA 8

74
Introducción CPR Gijón

37
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Modos de Direccionamiento de datos


• Inmediato: dato manipulado por la instrucción se codifica junto
con ella. Dato k es un Literal, número entre 0 y 255.

Ej: movlw k

• Directo: El registro direccionado se encuentra en la instrucción


(7 bits de menos peso del código de operación). Previamente
se debe posicionar el banco (RP0 – Registro STATUS)

Ej: movwf f,d

Veamos un grafico este direccionamiento directo

75
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

movwf 0x4D,1
CODIGO OP INSTRUCCIÓN REGISTRO STATUS
13 7 6 0 7 0

movwf 1 1 0 01101
RP1 RP0

0 0

POSICION BANCO

BANCO 0 BANCO 1 BANCO 2 BANCO 3


00 01 10 11
00
. . .
. . .
. . .

4D NO USADOS

4F

76
Introducción CPR Gijón

38
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Modos de Direccionamiento de datos


• Indirecto: La posición de memoria direccionada viene definida por el contenido del
registro FSR (Posición 04h ó 84h), es decir, el registro FSR actúa como puntero de la
posición de memoria con la que se pretende operar. La dirección se obtiene
completando el contenido del registro FSR con el bit IRP del registro STATUS.
Ej: movwf INDF,d

INDF es el registro de la posición de


memoria 0x00 y por tanto al ser f = 0 se
trata de un direccionamiento indirecto.

77
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

DIRECCIONAMIENTO INDIRECTO

Sencillo ejemplo de direccionamiento indirecto donde se limpian las posiciones de


memoria de datos comprendidas entre la posición 20h y la 2Fh (ambas incluidas)

BCF STATUS, RP0 ; selecciona banco 0

MOVLW 0x20 ; Inicializa puntero a RAM

MOVWF FSR ;

NEXT CLRF INDF ; limpia el registro que apunta FSR

INCF FSR,F ; Incrementa el puntero

BTFSS FSR,6 ; Todo limpio?

GOTO NEXT ; NO, limpia siguiente

CONTINUE : ; SI, continua

78
Introducción CPR Gijón

39
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 9: DETECTA EL DATO MAYOR DE UNA TABLA

DETECTA EL DATO MAYOR DE UNA TABLA DE


7 ELEMENTOS DESDE LA RAM 20h A LA 26h
EL RESULTADO SE ALMACENA EN 0Ch

79
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 9: DETECTA EL DATO MAYOR DE UNA TABLA

clrf MAYOR

movlw 6
movwf CONTA
movlw 0x26
movwf FSR
SIGUE movf INDF,W

subwf MAYOR,W

btfsc ESTADO,0
goto SALTO
movf INDF,W
movwf MAYOR

SALTO decf FSR,f

decfsz CONTA

goto SIGUE

nop PROGRAMA 9

80
Introducción CPR Gijón

40
Practicas con Microcontroladores Ponente: Aurelio Cadenas

ARQUITECTURA INTERNA

PUERTOS DE ENTRADA-SALIDA

PIC16F84

81
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PUERTOS DE ENTRADA-SALIDA (I)


Un puerto (PORT) es una agrupación lógica de pines de E/S direccionado en la
memoria RAM de datos, el tamaño máximo de un puerto es de 8 bits (1 byte)
Se dispone de dos puertos: PORT A (5 líneas) y PORT B (8 líneas). Cada línea
programable individualmente como entrada o como salida.
Cada registro de puerto (PORTx), lleva asociado un registro de dirección de
datos (TRISx) que configura la dirección (entrada o salida) de cada uno de los
pines del puerto.
Nota: Una lectura obtiene el resultado de leer el estado de la línea de entrada. Una escritura
carga el latch de salida con el resultado de comparar el estado de la línea de salida con el nuevo
estado que se le desea dar. (Si la línea está configurada como entrada el resultado puede ser
imprevisible)

82
Introducción CPR Gijón

41
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Puertos de entrada-salida (II): Puerto A


El puerto A gobierna 5 líneas. RA4..RA0
• RA3..RA0: TTL en modo entrada y CMOS en modo salida
• RA4 : Schmit Trigger en modo y
Open Drain en modo salida

83
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Puertos de entrada-salida (III): Puerto A


Los pines de E/S tienen diodos de protección que permiten “enclavar” la
tensión de entrada en el caso de que dichos diodos entren en conducción

Caso de que Ue supere a Caso de que Ue sea negativa


Vdd en más de la tensión de y superior en módulo a la
codo del diodo (0,7 V aprox.) tensión de codo del diodo

84
Introducción CPR Gijón

42
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Puertos de entrada-salida (IV): Puerto B

En todas las líneas del PORTB, se tiene la


posibilidad de activar unas resistencias de
polarización (pull-up resistors) si los pines
están definidos como entradas y además el
bit OPTION_REG<7>= RBPU=0
En cuanto pasan a ser salidas se desactivan
las resistencias. El uso de esas resistencias
evita la conexión de otras externas.
Las resistencias son en realidad transistores
pMOS trabajando en su zona resistiva (20kΩ)
En ese caso, la salida de la puerta NAND
que controla el pMOS presenta un cero
y el transistor se sitúa en zona resistiva

El micro está hecho con tecnología CMOS, luego las entradas no pueden quedar
“al aire” ya que el nivel lógico estaría indefinido, son necesarias por tanto
resistencias internas o externas (ejemplo conexión pulsador)
85
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Puertos de entrada-salida (V): Etapa salida Puerto B

86
Introducción CPR Gijón

43
Practicas con Microcontroladores Ponente: Aurelio Cadenas

EJEMPLOS
DE
PROGRAMAS

APLICACIONES
CIRCUITOS LÓGICOS
COMBINACIONALES Y SECUENCIALES
(I)
87
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 10: CIRCUITO COMBINACIONAL


FUNCIONAMIENTO DE UN MONTACARGAS

Se desea realizar un circuito lógico que se encargue del control


de funcionamiento de un montacargas en el cual se han
instalado unos sensores (finales de carrera) que permiten saber
la carga que se ha colocado en la plataforma.
El sistema debe disponer de unas indicaciones luminosas para:
detectar una anomalía en los sensores (AVERIA), indicar que
puede funcionar (FUNCIONA) y de que hay sobrecarga en la
plataforma (SOBRECARGA). Las condiciones de
funcionamiento y el esquema del automatismo son:

88
Introducción CPR Gijón

44
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 10: CIRCUITO COMBINACIONAL


FUNCIONAMIENTO DE UN MONTACARGAS

89
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 10: CIRCUITO COMBINACIONAL


FUNCIONAMIENTO DE UN MONTACARGAS

Los finales de carrera se conectan


a la puerta A como se indica en
el esquema y la tabla de verdad
que cumple las especificaciones
del diseño será la indicada.

90
Introducción CPR Gijón

45
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 10

91
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 10

92
Introducción CPR Gijón

46
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 10: CIRCUITO COMBINACIONAL


FUNCIONAMIENTO DE UN MONTACARGAS
bsf STATUS,RP0
clrf TRISB
movlw b'00111111'
movwf TRISA
bcf STATUS,RP0
Loop movf PORTA,W
andlw b'00000111'
call Tabla
movwf PORTB

goto Loop

Tabla: addwf PCL,F


retlw 0
retlw 2
retlw 2
retlw 2
retlw 0
retlw 2
retlw 4
retlw 1
PROGRAMA 10

93
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 11: VISUALIZA NUMERO HEX EN DISPLAY 7 SEGMENTOS

Mediante los cuatro interruptores (RA0-RA3) se introduce un valor hexadecimal


de 4 bits que debe visualizarse sobre el display de 7 segmentos (RB0-RB7).

94
Introducción CPR Gijón

47
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 11: VISUALIZA NUMERO HEX EN


DISPLAY 7 SEGMENTOS
bsf STATUS,RP0
clrf TRISB
movlw b'00111111'
movwf TRISA
bcf STATUS,RP0
Loop movf PORTA,W
andlw b'00001111'
call Tabla
movwf PORTB

goto Loop

Tabla: addwf PCL,F


retlw b'00111111' ;Dígito 0
retlw b'00000110' ;Dígito 1
retlw b'01011011' ;Dígito 2
retlw b'01001111' ;Dígito 3
retlw b'01100110' ;Dígito 4
retlw b'01101101' ;Dígito 5
retlw b'01111101' ;Dígito 6
retlw b'00000111' ;Dígito 7
retlw b'01111111' ;Dígito 8
retlw b'01100111' ;Dígito 9
retlw b'01110111' ;Dígito A
retlw b'01111100' ;Dígito B
retlw b'00111001' ;Dígito C
retlw b'01011110' ;Dígito D

PROGRAMA 11 retlw
retlw
b'01111001'
b'01110001'
;Dígito E
;Dígito F

95
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

ARQUITECTURA INTERNA

TEMPORIZADOR TMR0

PIC16F84

96
Introducción CPR Gijón

48
Practicas con Microcontroladores Ponente: Aurelio Cadenas

TEMPORIZADOR TMR0

Un temporizador, en general, es un dispositivo que marca o indica el


transcurso de un tiempo determinado.

El PIC16F84 tienen 1 módulo temporizador denominado TIMER0


(TMR0), empleado para contabilizar intervalos de tiempo o para contar
flancos que aparecen en el pin externo del PIC, RA4/T0CKI.

Se basa en un contador ascendente de 8 bits al que se accede


mediante un registro en RAM denominado TMR0 (posición 01h).

Dicho registro se puede leer (p.e. movf TMR0,W) y se puede escribir


(movwf TMR0) desde la CPU del microconrtolador.

Puede utilizar un prescaler o divisor de frecuencia previo de 8 bits cuyo


valor de división es configurable por software.

97
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Temporizador TMR0

Se puede seleccionar como fuente de reloj: un reloj interno (fosc/4) como


temporizador o uno externo a través del pin RA4/T0CKI como Contador.

Permite solicitar interrupciones cuando se produce un desbordamiento


(overflow) del registro TMR0. O sea cuando pasa del valor 0xFF al 0x00.

Para el caso de cuenta de pulsos de un reloj externo, se puede seleccionar en qué


flanco (de subida o de bajada) se realiza la cuenta.

98
Introducción CPR Gijón

49
Practicas con Microcontroladores Ponente: Aurelio Cadenas

bit 3 PSA: Asignación del divisor de frecuencia bit 2-0 PS2:PS0: Prescaler Rate Select bits
1: El divisor de frecuencia se asigna al WDT Rango con el que actúa el Divisor de
0: El divisor de frecuencia se asigna al TMR0 frecuencia
bit 4 TOSE: Tipo de flanco en TOCK1
1: Incremento de TMR0 cada flanco descendente
0: Incremento de TMR0 cada flanco ascendente
bit 5 TOCS: Tipo de Reloj para TMR0
1: Pulsos introducidos a través de T0CK1
(Contador)
0: Pulsos de reloj interno Fosc/4 (Temporizador)
bit 6 INTEDG: Flanco activo control de interrup
1: Flanco Ascendente
0: Flanco Descendente
bit 7 BPRU : Resistencia Pull-up Puerto B
1: Desactivadas
0: Activadas

99
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

TEMPORIZADOR TMR0

• Cuando se carga un valor en el registro TMR0 (se escribe mediante una


instrucción), se produce un retardo de dos ciclos de instrucción durante
los cuales se inhibe tanto el prescaler como TMR0. Será necesario tener
en cuenta esa inhibición temporal a la hora de realizar una precarga
(compensar sumando los ciclos de instrucción que “se pierden”)
• Si se utiliza la opción del prescaler (PSA=0), el TMR0 solo se incrementa
cada “n” flancos de reloj (interno o externo). El valor del prescaler ”n”
viene definido por el valor de los bits PS2:PS0 (OPTION<2:0>)
• El pin RA4/T0CKI debe estar definido como entrada si se utiliza como
fuente de reloj para el TMR0, el reloj externo.
• Todas las instrucciones de escritura sobre el registro TMR0 (CLRF
TMR0, MOVWF TMR0, BSF TMR0,bitx, etc.) realizan una limpieza del
prescaler.

100
Introducción CPR Gijón

50
Practicas con Microcontroladores Ponente: Aurelio Cadenas

TEMPORIZADOR TMR0 - INTERRUPCIONES

• La interrupción del TMR0 se genera cuando en el registro se


produce un rebosamiento (overflow) pasando del valor 0xFF a
0x00.

• Este “overflow” pone a 1 el flag T0IF (INTCON<2>). Si el bit


de enmascaramiento particular T0IE (INTCON<5>) y la
máscara global de interrupciones GIE (INTCON<7>) están a
“1”, se produce el salto a la rutina de interrupción (posición
0x0004 de la memoria de programa).

• Antes de salir de la rutina de interrupción (RETFIE) del TMR0


debe limpiarse el flag T0IF (BCF INTCON,T0IF por ejemplo)
ya que en caso contrario se produciría una nueva entrada en la
misma.
101
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

bit 0 RBIF: flag de estado del Port B bit 4 INTE: Activación de la interrupción externa INT
1:Cuando cambia de estado cualquier línea de PB 1: Interrupción activada
(RB<7:4>). Se borra por software
0: Interrupción desactivada
0:Ninguna entrada de PB ha cambiado
bit 5 T0IE: Activación de la interrupción del TMR0
bit 1 INTF: flag de estado de la interrupción
externa INT 1: Interrupción activada
1:La entrada de la interrupción se ha activado. Se 0: Interrupción desactivada
borra por software bit 6 EEIE: Activación de la interrupción de la
0:No hay interrupción externa memoria EEPROM
bit 2 T0IF: flag (O) de rebosamiento del TMR0 1: Interrupción activada
1: El TMR0 se ha desbordado. Se borra por 0: Interrupción desactivada
software
0: El TMR0 no se ha desbordado bit 7 GIE: Activación Global de Interrupciones
bit 3 RBIE: Activación de la interrupción del 1: Concedido el permiso de interrupciones
Port B 0: No hay posibilidad de interrupciones
1: Interrupción activada
0: Interrupción desactivada

102
Introducción CPR Gijón

51
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Cálculo de la temporización en TMR0


• Se llama carga al valor que se asigna al registro TMR0
(01h) al comenzar la temporización.
• El valor del prescaler PS queda determinado por los tres
bits más bajos del registro OPTION_REG (81h). Si el
prescaler se le asigna al watchdog (bit PSA=1), se tiene
PS=1 para la siguiente expresión.

103
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Ejemplo de temporización en TMR0


• De acuerdo con la anterior fórmula, la temporización máxima que se podría
realizar con un oscilador de 4MHz sería:
Tmax = [(256-0)*256 + 2] * 4/4MHz = 65.538 µs = 65,538 ms < 500 ms

Por ejemplo, para realizar temporización de 50 ms, se debe cumplir:


50 ms = [(256-Precarga)*256+2] * 4/4MHz

y despejando, Precarga= 60,69 --> 60 (aprox. entera). El programa sería:


Ini bsf STATUS,RP0 ; Pone a 1 el bit 5 de STATUS. Acceso al Banco 1.
movlw 0x07 ; Prepara TMR0 para contar pulsos de oscilador y
movwf OPTION_REG ; le asigna un prescaler de 256.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.

movlw d'60' ; Carga el valor 60 en TMR0 (con este


movwf TMR0 ; valor se temporizan 50ms).
ESP btfss INTCON,T0IF ; Espera que termine la temporización, que se
; detecta cuando el flag T0IF se pone a 1.
goto ESP
bcf INTCON,T0IF ; Baja el flag.

104
Introducción CPR Gijón

52
Practicas con Microcontroladores Ponente: Aurelio Cadenas

EJEMPLOS
DE
PROGRAMAS

APLICACIONES
CIRCUITOS LÓGICOS
COMBINACIONALES Y SECUENCIALES
(II)
105
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 12: CONTROL ON-OFF CON UN PULSADOR

Mediante un pulsador (RA4) encendemos y apagamos una


lámpara (RB0)

106
Introducción CPR Gijón

53
Practicas con Microcontroladores Ponente: Aurelio Cadenas

Descripción de las instrucciones del Programa 10


Para invertir el estado de uno o mas bits de un registro se utiliza la función lógica
XOR, recordar

movf PORTB,W ;inverte el estado del bit 0 y 2 de PORTB


xorlw 0x05 ;la mascara es b’00000101’
movwf PORTB
107
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Problema de los rebotes en los pulsadores


Debido al efecto muelle del pulsador, se producen unas
oscilaciones en la señal tanto al pulsar como al soltar la
tecla.
Para solucionar el problema por software se espera un
tiempo suficiente antes de leer el estado del pulsador,
aproximadamente unos 10 ms

108
Introducción CPR Gijón

54
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 12: CONTROL ON-OFF CON UN PULSADOR


bsf STATUS,RP0
clrf TRISB
movlw b'00111111'
movwf TRISA
movlw b'00000111'
movwf OPTION_REG
bcf STATUS,RP0

bcf PORTB,0

SALTA_1 btfss PORTA,4


goto SALTA_1

call Delay_10_ms

movf PORTB,W
xorlw 0x01
movwf PORTB

SALTA_0 btfsc PORTA,4


goto SALTA_0

call Delay_10_ms

goto SALTA_1
109
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 12: CONTROL ON-OFF CON UN PULSADOR

Delay_10_ms: bcf INTCON,T0IF

movlw d'39'
movwf TMR0

Delay_10_ms_1 btfss INTCON,T0IF


goto Delay_10_ms_1
bcf INTCON,T0IF

return

PROGRAMA 12

110
Introducción CPR Gijón

55
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 13: CONTROL PARPADEO LED

El LED conectado a RB0 parpadea de modo que está 500ms encendido y otros
500ms apagado. Se controla por medio de un interruptor conectado en RA4. Se
usa el temporizador TMR0 para establecer la temporización.
(Se considera que el oscilador del PIC es de 4MHz).

111
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

Temporización con TMR0

La temporización se va a realizar mediante el temporizador TMR0. Debido


a que la temporización máxima que se podría realizar con un oscilador de
4MHz era:

Tmax = [(256-0)*256 + 2] * 4/4MHz = 65.538 µs = 65,538 ms < 500 ms

no permite alcanza el tiempo total a temporizar, por tal motivo se emplea


un contador que acumule temporizaciones menores hasta alcanzar los
500 ms, por ejemplo se pueden realizar temporizaciones de 50 ms y
contabilizar un total de 10. En ese caso, se debe cumplir:
50 ms = [(256-Precarga)*256+2] * 4/4MHz

y despejando la expresión: Precarga = 60,69 Æ 60 ([Link])

112
Introducción CPR Gijón

56
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 13: CONTROL PARPADEO LED


bsf STATUS,RP0
movlw 0x00
movwf TRISB
movlw 0x1F
movwf TRISA
movlw 0x07
movwf OPTION_REG
bcf STATUS,RP0
apagado clrf PORTB
call delay_50ms

control movlw 0x0A


movwf CONT

btfss PORTA,4
goto apagado

Principal call delay_50ms

decfsz CONT

goto Principal

movf PORTB,W
xorlw 0x01
movwf PORTB
PROGRAMA 13
goto control

113
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 14: Señalización de una curva peligrosa


Realizar un automatismo que active la señalización de una curva peligrosa mediante
8 luces encendidas secuencialmente permaneciendo cada una 0,25 seg encendidas.
Se dispone de dos sensores; uno para activar la señalización a la entrada de la curva
y otro para desactivarla a la salida.

114
Introducción CPR Gijón

57
Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 14: Señalización de una curva peligrosa


bsf STATUS,RP0
clrf TRISB
movlw b'00011111'
movwf TRISA
movlw b'00000111'
movwf OPTION_REG
bcf STATUS,RP0
principal clrf PORTB
entrada btfss PORTA,0
goto entrada
bsf STATUS,C

rota rlf PORTB,F

call Delay

salida btfss PORTA,1


goto rota
goto principal

115
Introducción CPR Gijón

Practicas con Microcontroladores Ponente: Aurelio Cadenas

PROGRAMA 14: Señalización de una curva peligrosa

Delay movlw .25


movwf Contador

Delay_0 bcf INTCON,T0IF

movlw .217
movwf TMR0

Delay_1 btfss INTCON,T0IF


goto Delay_1

decfsz Contador,F
goto Delay_0

return PROGRAMA 14

116
Introducción CPR Gijón

58

También podría gustarte