MICROPROCESADORES
Tema 6: Microcontroladores
Carlos Garre del Olmo
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
Microcontroladores
Contenidos
MICROPROCESADORES
Introduccin a los microcontroladores.
Principales familias y sus caractersticas.
La familia PIC16.
Programacin de microcontroladores.
Diseo de sistemas empotrados.
Introduccin a los DSP
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
Palabra de Configuracin
MICROPROCESADORES
Palabra de configuracin: Son 14 bits ubicados en la direccin 2007h
de la memoria de programa. Slo es accesible si la MCU est en modo
de programacin (mayor voltaje en Vdd).
CP (Code Protection): Si est a 0, toda la memoria de programa est
protegida.
PWRTE: Habilita el Power-up Timer.
WDTE: Habilita el Watchdog Timer.
FOSC1-FOSC0: Seleccionan la fuente de reloj:
00: LP (Low Power Crystal) Cristal externo con baja frecuencia y mnimo consumo.
01: XT (Crystal/Resonator) Cristal externo con frecuencia media (4MHz) y
consumo medio.
10: HS (High Speed Crystal/Resonator) Cristal externo con mximas frecuencia
(20MHz) y consumo.
11: RC (Resistor/Capacitor) Circuito RC interno. Depende de: Rext, Cext, Vdd, C...
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
Modo SLEEP
MICROPROCESADORES
SLEEP: Instruccin para entrar en modo SLEEP.
Para salir del modo SLEEP:
Interrupciones: RB0/INT, EEPROM write, PORTB change.
Reset externo en el pin MCLR.
Fin de cuenta del WDT no provoca reset.
La interrupcin TMR0 no se puede dar, porque se detiene toda la
temporizacin.
Los pines de salida se congelan y mantienen el ltimo valor.
Cuando entramos en SLEEP, el WDT se pone a 0 pero no se detiene
utiliza su propio oscilador RC.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
PIC16F87xA
MICROPROCESADORES
16F876A: 28 pines.
16F877A: Exactamente igual pero con 40 pines (3 ms analgicos, y 9
ms digitales). Comparten el mismo datasheet!
16F873A: Versin reducida del 16F876 (/2 las tres memorias).
16F874A: Versin reducida del 16F877 (/2 las tres memorias).
Nos centramos en el 16F876A:
Mismo juego de instrucciones que 16F84A.
143KB programa, 368B RAM, 256B EEPROM.
14 fuentes de interrupcin.
USART, SPI, I2C.
2x CCP.
2x Timers 8 bits + 1x 16 bits.
5 ADC de 10 bits.
Slo en los A: 2 comparadores analgicos.
Puertos E/S: A (6b), B (8b), C (8b) MUX...
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
Arquitectura PIC16F876A
MICROPROCESADORES
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
Memoria de datos del PIC16F876A
MICROPROCESADORES
Dividida en 4 bancos (RP1-RP0).
No slo cambian los SFR, sino
tambin los GPR.
Algunos SFR nuevos:
PORTC, TRISC.
PIR1, PIR2, INTCON, PIE1, PIE2:
interrupciones.
TMR1L, TMR1H, T1CON: Timer 16b.
TMR2, T2CON, PR2: Timer 8b.
SSPBUF, SSPCON, SSPCON2,
SSPADD, SSPSTAT, TXREG, RCREG,
RCSTA, TXSTA, SPBRG: puertos serie.
CCPR1L, CCPR1H, CCP1CON: Mdulo
CCP1 (igual para CCP2).
ADRESH, ADRESL, ADCON0, ADCON1:
Entradas A/D.
Memoria de programa paginada en 4
pginas.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
16F876A: Interrupciones
MICROPROCESADORES
ADIF: Conversin A/D terminada.
RCIF: Buffer de recepcin de la
USART lleno.
TXIF: Buffer de transmisin de la
USART lleno.
SSPIF: Fin de transmisin SPI I2C.
CCP1F: Capture en mdulo CCP1.
TMR2IF: Coinciden registros TMR2 y
PR2.
TMR1IF: Overflow en Timer 1.
CMIF: Ha cambiado la entrada del
comparador.
BCLIF: Colisin en el bus I2C.
CCP2IF: Capture/Compare en mdulo
CCP2.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
PIC16F876A: Conversin A/D
MICROPROCESADORES
ADRESH y ADRESL: Resultado de la conversin en 10 bits.
ADCON0: configuracin del mdulo A/D.
ADCS2-ADCS0: fuente de reloj (Ej: 001 = Fosc/8).
CHS2-CHS0: Seleccin de canal (hasta 100).
GO/DONE: Si lo pones a 1, empieza una conversin. Se pone a 0 por hardware.
ADON: Activa/desactiva el mdulo A/D.
ADCON1: configuracin de los pines E/S.
ADFM: 1 = Justificado a la derecha: (ADRESH = 000000xx; ADRESL = xxxxxxxx).
PCFG3-PCFG0: Configuracin de los pines (prxima transparencia...).
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
PIC16F876A: Pines A/D
MICROPROCESADORES
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
10
PIC16F876A: Conversin A/D
MICROPROCESADORES
1.
Configurar mdulo A/D: TRIS (=entradas), PCFG, ADFM (=1), ADCS (=001),
ADON (=1).
Configurar interrupciones: ADIF (=0), ADIE (=1), PEIE (=1), GIE (=1). PEIE
es la mscara para todas las interrupciones nuevas con respecto al 16F84
(llamadas interrupciones de perifricos).
Seleccionar un canal (CHS).
Activar el bit GO/DONE Momento en el que muestreamos.
Esperar fin de conversin:
2.
3.
4.
5.
6.
7.
Polling al bit GO/DONE.
Interrupcin ADIF.
El resultado est en ADRH-ADRL.
Limpiar bit ADIF (ADIF = 0).
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
11
Microcontroladores
Contenidos
MICROPROCESADORES
Introduccin a los microcontroladores.
Principales familias y sus caractersticas.
La familia PIC16.
Programacin de microcontroladores.
Diseo de sistemas empotrados.
Introduccin a los DSP
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
12
Entornos de Desarrollo
MICROPROCESADORES
Los fabricantes de MCUs proveen al usuario de entornos de desarrollo,
generalmente gratuitos. Estos entornos constan de varias herramientas:
Editor: editor de texto para escribir el cdigo fuente.
Compiladores y ensamblador: generacin de cdigo mquina partiendo de cdigo
ensamblador o de lenguajes de alto nivel (C, Basic, Pascal).
Simulador: ejecucin del cdigo generado sobre una MCU simulada en el propio PC.
Simulacin de perifricos, estmulos externos, ...
Depurador: puntos de ruptura, lectura de memoria, step into/over ...
Programador: conexin con tarjetas de programacin para transmitir el cdigo a la MCU.
Emulador: permite emular el sistema sobre el propio circuito.
Libreras: multitud de libreras para facilitar la programacin.
Entorno de desarrollo de Microchip: MPLAB MPLAB C Compiler, MPASM,
MPSIM, MPLAB REAL ICE, MPLAB PM3, ...
Manejo de MPLAB Enunciado de la prctica.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
13
PIC16 ASM: Operaciones de Byte
MICROPROCESADORES
ADDWF f,d:
Si d=0: W = W + f.
Si d=1: f = W + f
f es un registro de 0 a 127: direccionamiento directo o indirecto (INDF).
Modifica flags Z, C, DC.
CLRF f: f = 0.
CLRW: W = 0.
COMF f,d: W/f = NOT(f).
DECF f,d: W/f = f 1
DECFSZ f,d: SZ = Skip if Zero. Si el resultado del decremento es 0, entonces
convierte la prxima instruccin en un NOP.
MOVF f,d: W/f = f.
MOVWF f: f = W.
RLF f,d: Rotate Left through carry.
SUBWF f,d: W/f = f W
SWAPF f,d: d<7,4> = f<3:0>; d<3,0> = f<7,4>
ANDWF, INCF, INCFSZ, IORWF, NOP, RRF, XORWF.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
14
PIC16 ASM: Operaciones de Bit y de Control
MICROPROCESADORES
Operaciones de Bit:
BCF f,b: Pone a 0 el bit b del registro f.
BSF f,b: Pone a 1 el bit b del registro f.
BTFSC f,b: Si el bit b del registro f es 0, convertimos la siguiente instruccin en un
NOP.
BTFSS f,b: Si el bit b del registro f es 1, convertimos la siguiente instruccin en un
NOP.
Operaciones de Control:
CALL k:
PC se guarda en la pila.
PC<10:0> = k (k es de 11 bits).
PC<12:11> = PCLATH<4:3> (PCLATH se usa para cambiar de pgina).
Es una instruccin de 2 ciclos!
GOTO k: Salto incondicional. No se guarda PC. 2 ciclos!
RETFIE y RETURN: Retorno de interrupcin y de subrutina. 2 ciclos!
RETLW k: Retorno de subrutina, y W=k (8 bits). 2 ciclos! funciones.
CLRWDT, SLEEP.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
15
PIC16 ASM: Operaciones con Inmediatos
MICROPROCESADORES
ADDLW k: W = W + k (k es de 8 bits).
ANDLW k: W = W and k
processor
IORLW k: W = W or k
radix DEC
MOVLW k: W = k
PORTA
EQU
0x05
SUBLW k: W = k W
OPTION EQU
0x03
XORLW k: W = W xor k
TRISA
EQU
0x85
RP0
EQU
16F84A
GOTO main
main
BSF
CLRF
BCF
OPTION,RP0 ; Banco 1 (para usar TRISA)
TRISA
; Puerto A = salidas
OPTION,RP0 ; Banco 0 (para usar PORTA)
BCF
BSF
GOTO
PORTA,0
PORTA,0
loop
loop
; Apagamos led
; Encendemos led
; bucle infinito...
END
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
16
PIC16: Programacin en C
MICROPROCESADORES
#include <pic16f876a.h>
void main(void)
{
TRISA = 0; // Puerto A = salidas
// Bucle infinito...
while (1)
{
RA0 = 0; // Apagamos led
RA0 = 1; // Encendemos led
}
}
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
17
Proceso de Desarrollo
MICROPROCESADORES
1.
2.
3.
4.
5.
Escribir el cdigo en el editor de MPLAB.
Simular y depurar el cdigo.
Pinchar el PIC en el programador.
Conectar el programador al PC (USB, puerto paralelo, puerto serie...).
Enviar el programa desde el PC al programador:
MPLAB slo soporta algunos programadores.
En la mayora de los casos necesitaremos utilizar otro software para comunicarnos con
el programador, como IC-Prog:
1.
2.
3.
4.
5.
6.
7.
8.
Cargamos en IC-Prog el fichero hexadecimal con el cdigo mquina ya ensamblado.
Configuramos IC-Prog para nuestro programador.
Configuramos la MCU (code protection, fuente de reloj, WDT...).
Escribimos el cdigo.
Verificamos la escritura.
Desconectamos el programador del PC.
Despinchamos el PIC del programador.
Pinchamos el PIC en nuestro circuito.
ESCUELA TCNICA SUPERIOR DE
INGENIERA INFORMTICA
18