Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(TUTORIAL)
2014-2
normapguarnizo@gmail.com
OBJETIVO GENERAL
normapguarnizo@gmail.com
OBJETIVOS ESPECÍFICOS:
normapguarnizo@gmail.com
Qué diferencia hay entre un microprocesador (µP) y
un microcontrolador (µC)?
Un microcontrolador (µC) = Un computador de bajo
costo.
normapguarnizo@gmail.com 4
Qué diferencia hay entre un microprocesador y un microcontrolador ?
Microprocesador Microcontrolador
normapguarnizo@gmail.com 5
Qué es un Microcontrolador (µC)?
normapguarnizo@gmail.com 6
Ventajas de un Microcontrolador (µC)?
• Disminución en el tamaño de los circuitos.
• Bajo costo.
• Disminución en el tiempo de desarrollo.
normapguarnizo@gmail.com 7
Arquitectura de los microcontroladores
normapguarnizo@gmail.com 8
Arquitectura de los microcontroladores
Arquitectura Harvard
normapguarnizo@gmail.com 9
PIC 16F887
• Características Generales
• Diferencia entre las referencias 16F87X y 16F88X
• Algoritmos de programación
• Principales partes de un µC
• Set de instrucciones
• Configuración 16F887 y 16F877A
normapguarnizo@gmail.com 10
Características generales
• CPU RISC de alto Rendeimiento:
• Solo 35 instrucciones de palabra simple para aprender
• Todas las instrucicones se ejecutan en un ciclo excepto
los saltos, los cuales llevan dos ciclos.
• Velocidad de Operación: clock de entrada de DC – 20
MHz. 200 ns ciclo por instrucción
• Hasta 8K x 14 words de Memoria Flash de Programa,
• Hasta 368 x 8 bytes de Memoria de datos(RAM),
• Hasta 256 x 8 bytes de Memoroa de Datos EEPROM
normapguarnizo@gmail.com 11
Características generales
• Características de los Periféricos:
• Timer0: 8-bit timer/countador con preescaler de 8 bits
• Timer1: 16-bit timer/contador con preescaler, puede ser incrementado durante el Sleep
via cristal/clock externo
• • Timer2: 8-bit timer/contador con registro de período de 8 bits, preescaler y postscaler
• Dos Módulos Captura, Comparación, PWM
• - Captura es de 16-bit,resolución max. es de 12.5 ns
• - Comparador es de 16-bit, resolución max. es 200 ns
• - PWM Resolución máxima es de 10-bit
• Port Serie Sincrónico (SSP) con SPI™
• (modo Master) y I2C™ (Master/Slave)
• Transmisor-Receptor Universal Sincrónico Asincrónco (USART/SCI)
• con detección de dirección de 9-bit
• Parallel Slave Port (PSP) – de 8 bits de ancho con lineas de control
• RD, WR y CS (solo para zócalos de 40/44-pines)
• Detección de Brown-out circuitería paraBrown-out Reset (BOR)
normapguarnizo@gmail.com 12
Diferencia entre referencias
16F87X
16F88X
normapguarnizo@gmail.com 13
Algoritmos de programación
(Diagramas de flujo)
INICIO Y FÍN DE PROGRAMA
normapguarnizo@gmail.com 14
16F887 y 16F877A
normapguarnizo@gmail.com 15
Principales partes de un µC?
1. El procesador (CPU)
2. Memoria de programa. no volátil (FLASH)
3. Memoria de datos. lectura, escritura y almacenamiento de los datos (RAM y EEPROM)
4. Circuito de reloj.
5. Líneas de Entrada/Salida para los controladores de periféricos:
a) Comunicación paralelo
b) Comunicación serie
c) Diversos puertos de comunicación (bus l2C, USB, USART, etc.)
6. Recursos auxiliares:
a) Circuito de reloj
b) Temporizadores
c) Perro Guardíán («watchdog»)
d) Conversores AD y DA
e) Comparadores analógicos
f) Protección ante fallos de la alimentación
g) Estado de reposo o de bajo consumo
normapguarnizo@gmail.com 16
Principales partes de un µC?
El procesador (CPU) se encarga de:
normapguarnizo@gmail.com 17
Principales partes de un µC?
Conjuntos de instrucciones según la arquitectura:
normapguarnizo@gmail.com 18
Memoria de programa FLASH
Es la memoria donde se almacena el programa que
el micro ejecutará. Es una memoria no volátil de
alta velocidad de transferencia de datos, alta
densidad y bajo consumo de corriente. Es
programable en circuito (in circuit), soporta
muchos ciclos de escritura/borrado.
normapguarnizo@gmail.com 19
Memoria de datos RAM
La memoria RAM se compone de 4 bancos (0,1,2 y
3), en los cuales se encuentran dos tipos de
registros:
• Registros de propósito especial: son los que ya
traen una dirección y un nombre en los bancos de
memoria RAM del micro.
• Registros de propósito general: son los que están
disponibles para el usuario a partir de la dirección
20h.
normapguarnizo@gmail.com 20
Bancos de memoria RAM
normapguarnizo@gmail.com 21
Circuito de reloj
Los micros disponen de circuitos osciladores que
generan señales cuadradas para sincronizar las
operaciones internas. Generalmente se
encuentra incorporado internamente y solo
requiere de algunos dispositivos externos, los
cuales pueden ser: cristales de cuarzo o una red
RC. Aumentar la frecuencia de reloj, disminuye el
tiempo de ejecución de una instrucción.
normapguarnizo@gmail.com 22
Circuito de reloj
- Definir el tiempo de instrucción (t. instrucción)
según la frecuencia de oscilación (Fosc).
t. instrucción = 4/Fosc
normapguarnizo@gmail.com 23
Registro W
Registro de trabajo. Es un registro temporal con el que se hacen
operaciones aritméticas y lógicas con registros (F) y con literales (L).
Instrucciones con el Registro W
normapguarnizo@gmail.com 24
Subrutinas
Son subprogramas que se ejecutan porque son llamados desde el programa principal. Una subrutina tiene un inicio, un conjunto de
instrucciones y un fin. Ejemplo:
Retardo xxxxxxxxxxxx
xxxxxxxxxxxx
inicioxxxxxxxxxxxx
return
Cuerpo de la subrutina (Conjunto de inst.)
Int_TMR0 xxxxxxxxxxxx Fin de la subrutina
xxxxxxxxxxxx
xxxxxxxxxxxx
retfie
El objetivo de una subrutina es realizar procesos que se repiten frecuentemente dentro de un programa, por ejemplo:
•Retardos
•Teclado
•Visualización
•Tablas de decodificación
normapguarnizo@gmail.com 25
Pila (Stack)
Cuando se ejecuta una subrutina por un llamado o porque se ha producido una interrupción, se
produce un almacenamiento temporal en la pila (STACK). La pila tiene 8 niveles de anidamiento
y sirve para almacenar la posición del contador de programa (PC) antes de ir a la etiqueta de la
subrutina llamada, o antes de atender una interrupción, así:
PC STACK
30H INICIO CLRF CONT
31H OTRA CALL RETAR CALL
CALL DELAY RETURN CALL TABLA
32H MOVF CONT,W RETAR
33H CALL TABLA
34H MOVWF PORTB 32H 3EH 32H 34H Nivel 1
35H INCF CONT,1 32H Nivel 2
36H MOVLW .10
37H XORWF CONT,0
38H BTFSS STATUS,Z
39H GOTO OTRA
3AH GOTO INICIO
normapguarnizo@gmail.com 26
Registro STATUS 03H (Bancos 0,1,2 y 3)
Registro de ESTADO que proporciona información sobre los resultados de operaciones aritméticas y lógicas a través de
los bits C,DC y Z. También sirve para pasarnos de Banco a través de los bits RP0 y RP1.
normapguarnizo@gmail.com 27
REGISTRO OPTION 81H (Banco 1)
Bits para
configurar el
preescaler a 128
normapguarnizo@gmail.com 28
INTCON 0BH (Banco 0,1,2,3)
Habilitador
global de
interrupciones
Habilitador de
interrupción por
TMR0
Bandera que se
activa cuando
ocurre una
interrupción por
el TMR0
normapguarnizo@gmail.com 29
Configuración interrupción por
tiempo con el TMR0 (Timer 0)
1. Definir el tiempo de interrupción que se requiere
(T.int) y otros parámetros como:
– Determinar el Preescaler con los bits <2:0> del
registro option. Según tabla:
normapguarnizo@gmail.com 30
Configuración interrupción por
tiempo con el TMR0 (Timer 0)
normapguarnizo@gmail.com 31
Configuración interrupción por
tiempo con el TMR0 (Timer 0)
normapguarnizo@gmail.com 32
Ejemplo configuración
interrupción por TMR0
El tiempo requerido es de 10mS, el preescaler seleccionado
(aleatorio) es de 128 y el t. instrucción = 1μS (Fosc=4MHz)
De la ecuación:
T. int= (256-TMR0)*Preescaler*t.instrucción
Despejar el TMR0 y reemplazar los valores seleccionados:
TMR0=256 – T.int/(Preescaler*t.instrucción)
TMR0=256 – 10exp-3seg/(128* 1μS) = 178
Nota: El valor calculado para el TMR0 debe ser positivo y estar entre
1 y 255. Si el valor no es entero, aproximarlo al valor mas cercano.
normapguarnizo@gmail.com 33
Estructura For (ejemplo 0-100)
Debido a que el tiempo de ejecución de las instrucciones son tan cortos, es indispensable trabajar con
retardos.
Retardo simple usando un registro:
INICIO
CONTADOR=0
CONTADOR=CONTADOR+1
CONTADOR NO
=100
SI
FIN
normapguarnizo@gmail.com 34
Tablas (I)
Las tablas son arreglos de datos que hacen las veces de decodificadores, cuyos datos almacenados
se van cargando en un registro conforme un contador, usualmente controlado por un ciclo FOR, se
va incrementando o decrementando. Se pueden usar en aplicaciones como:
• Conversión Binario a 7 segmentos
• Conversión Binario a ASCII
• Generación de secuencias de datos
• Decodificador de teclados
Ejemplo: Crear una tabla para convertir un dato binario a un código 7 segmentos para display de
cátodo común. El segmento a será controlado por el bit0, el segmento b por el bit1,…y el segmento
g por el bit6. Para activar cada segmento se debe poner un “1” en el bit correspondiente, por
ejemplo para visualizar el número “0” se debe poner “1” en todos los segmentos excepto en el
segmento g, por lo tanto el dato en la tabla será:
xgfedcba
RETLW B’1 0 1 1 1 1 1 1’
normapguarnizo@gmail.com 35
Primer programa (Circuito)
1 Microcontrolador 16F887
1 pulsador RB0
1 leds en RB1
normapguarnizo@gmail.com
Primer programa (Código)
/*Este es nuestro primer programa de micro, es un ejemplo y lo que hace encender un led ubicado en RB1, si RB0 está en "1", o
apagarlo, si RB0 está en "0"*/
#byte PORTA=0X05 //Declaración del PORTA como registro ubicado en la dirección 05 de la RAM
#BYTE PORTB=0X06
#BYTE PORTC=0X07
#BYTE TRISA=0X85
#BYTE TRISB=0X86
#BYTE TRISC=0X87
#BYTE OPTION_REG=0X81
normapguarnizo@gmail.com
Segundo y tercer programa (Circuito)
1 Microcontrolador 16F887
1 pulsador RB0
4 leds Cátodo común RC<3:0>
1 pulsador MCLR
normapguarnizo@gmail.com
Segundo programa (Código I)
#include <16F887.h> //DIRECTIVAS –Archivo de cabecera del Dispositivo
#fuses INTRC,NOWDT,MCLR //Fusibles de configuración: Oscilador RC interno
//Sin WDT y Master clear habilitado
#use delay(clock=4M) //Frecuencia del reloj= 4 MHZ
}
}
normapguarnizo@gmail.com
Segundo programa (Código II)
#include <16F887.h>
#fuses INTRC,NOWDT,MCLR
#use delay(clock=4M)
#BYTE PORTA=0X05
#BYTE PORTB=0X06
#BYTE PORTC=0X07
#BYTE TRISA=0X85
#BYTE TRISB=0X86
#BYTE TRISC=0X87
#BYTE OPTION_REG=0X81
int i;
void main()
{
TRISB=0B11111111;
TRISC=0B00000000;
OPTION_REG=0B01111111;
PORTC=0;
WHILE(1)
{
FOR (i=0;i<6;i++) {
PORTC=TABLA[i];
DELAY_MS(500);
}
}
}
normapguarnizo@gmail.com
Tercer programa (Código con dos tablas)
#include <16F887.h>
#fuses INTRC,NOWDT,MCLR
#use delay(clock=4M)
#BYTE PORTB=0X06
#BYTE PORTC=0X07
#BYTE TRISB=0X86
#BYTE TRISC=0X87
#BYTE OPTION_REG=0X81
#BIT PUL=PORTB.0
int i;
void main()
{
TRISB=0B11111111;
TRISC=0B00000000;
OPTION_REG=0B01111111;
PORTC=0;
WHILE(1)
{
IF (PUL==1){
FOR (i=0;i<6;i++) {
PORTC=TABLA1[i];
DELAY_MS(500); }
}ELSE{
FOR (i=0;i<10;i++) {
PORTC=TABLA2[i];
DELAY_MS(500); }
}
}
}
normapguarnizo@gmail.com