You are on page 1of 117

UNIDAD 1.

Microcontroladores
Programables

SISTEMAS EMBEBIDOS Y CONTROL

POR: M.C. ANDRS GERARDO FUENTES COVARRUBIAS

QUE ES UN PROCESADOR?
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
2
1.1. Conceptos bsicos sobre
microcontroladores
DONDE ESTN LOS PROCESADORES?
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
3
QUE ES UN MICROCONTROLADOR?
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
4
MICROPROCESADORES VS
MICROCONTROLADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
5
HARDWARE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
6
APLICACIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
7
REPERTORIO DE INSTRUCCIN
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
8
HARDWARE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
9
HARDWARE DE UN MICROCONTROLADOR
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
10
UNIDAD CENTRAL DE PROCESO
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
11
CPU (ESQUEMA)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
12
TAREAS DE UN CPU
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
13
TAREAS DEL CPU CONT
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
14
TAREAS DE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
15
TIPOS DE CPU
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
16
SISTEMA DE MEMORIA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
17
SISTEMA DE MEMORIA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
18
LOS MICROCONTROLADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
19
APLICACIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
20
MICROCONTROLADORES COMUNES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
21
1.2. Los microcontroladores PIC y Atmel
ESCALABILIDAD EN MICROCHIP
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
22
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
23
Concepto
Circuito integrado que
incluye en su interior
las tres unidades
funcionales de un
ordenador: CPU,
Memoria y Unidades
de E/S, es decir, se
trata de un
computador completo
en un solo circuito
integrado.
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
24
Ciclo de vida de un software embebido
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
25
Tcnica de desarrollo del software
embebido
Modelo de programacin del uC PIC18F4550
Modelado de programas en Mplab
Simulacin de programas en Proteus VSM

1.3. EL ENTORNO DE DESARROLLO PARA
MICROCHIP
MODELO DE PROGRAMACIN CON EL PIC18F4550
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
27
El PIC18F4550, pertenece a los microcontroladores PIC18 de gama alta. Posee una
arquitectura RISC (reduced instruction set computer) de 16 bits longitud de instrucciones y
8 bits de datos. La tabla muestra en resumen las caractersticas fundamentales de este
microcontrolador y de sus antecesores los PIC18F2455/2550/4455.
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
28
ORGANIZACIN DE LA MEMORIA
EL UC PIC18F4550 DISPONE DE LAS SIGUIENTES MEMORIAS:

M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
29
Memoria de programa: memoria flash interna de 32.768 bytes. Almacena instrucciones
y constantes/datos. Puede ser escrita/leda mediante un programador externo o durante
la ejecucin programa mediante unos punteros.

Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la que estn
incluidos los registros de funcin especial. Almacena datos de forma temporal durante la
ejecucin del programa Puede ser escrita/leda en tiempo de ejecucin mediante
diversas instrucciones.

Memoria EEPROM de datos: memoria no voltil de 256 bytes. Almacena datos que se
deben conservar aun en ausencia de tensin de alimentacin Puede ser escrita/leda en
tiempo de ejecucin a travs de registros.

Pila: bloque de 31 palabras de 21 bits. Almacena la direccin de la instruccin que debe
ser ejecutada despus de una interrupcin o subrutina.
ORGANIZACIN DE LA MEMORIA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
30
Memoria de configuracin: memoria en la que se incluyen los bits de configuracin (12 bytes
de memoria flash) y los registros de identificacin (2 bytes de memoria de solo lectura). Se
trata de un bloque de memoria situado a partir de la posicin 30000H de memoria de programa
(ms all de la zona de memoria de programa de usuario). En esta memoria de configuracin
se incluyen:

Bits de configuracin: contenidos en 12 bytes de memoria flash permiten la configuracin de
algunas opciones del uC como:

- Opciones del oscilador.
- Opciones de reset.
- Opciones del watchdog.
- Opciones de la circuitera de depuracin y programacin.
- Opciones de proteccin contra lectura de memoria de
programa y memoria EEPROM de datos.

Estos bits se configuran generalmente durante la programacin del uC, aunque tambin
pueden ser ledos y modificados durante la ejecucin del programa.

Registros de identificacin: se trata de dos registros situados en las direcciones 3FFFFEH y
3FFFFFH que contienen informacin del modelo y revisin del dispositivo. Son registros de
solo lectura y no pueden ser modificados por el usuario.
MAPA DE MEMORIA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
31
ARQUITECTURA HARVARD
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
32
El uC PIC18F4550 dispone buses diferentes para el acceso a memoria de programa y
memoria de datos (arquitectura Harvard):

Bus de la memoria de programa:
- 21 lneas de direccin
- 16/8 lneas de datos (16 lneas para instrucciones/8 lneas para datos)

Bus de la memoria de datos:
- 12 lneas de direccin
- 8 lneas de datos
Esto permite acceder simultneamente a la memoria de programa y a la memoria de datos. Es decir se puede
ejecutar una instruccin (lo que por lo general requiere acceso a memoria de datos) mientras se lee de la
memoria de programa la siguiente instruccin (proceso pipeline).
Por tanto la ejecucin completa de 1 instruccin (lectura instruccin +ejecucin) se hace en un 1
ciclo de instruccin (4 Tosc). EXCEPCIN: las instrucciones que modifican el contenido del PC
requieren 2 ciclos de instruccin.
MODELADO DE PROGRAMAS EN
MPLAB
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
33
Microchip provee una buena herramienta para el desarrollo de aplicaciones con
microcontroladores PIC, esta es el MPLAB
Con MPLAB se puede:
Editar programas
Ensamblarlos si estan escritos en ensablador
Compilarlos si estan escritos en un lenguaje de alto nivel
Depurarlos con el MPLAB Sim
SIMULACIN DE PROGRAMAS CON
PROTEUS VSM
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
34
Como una
funcionalidad
adicional, MPLAB
permite invocar al
Proteus desde el
entorno de desarrollo
para efectuar la
depuracin
directamente en el
esquemtico de la
aplicacin Hardware.
Repertorio de instrucciones
Temporizadores, Puertos de E/S y manejo de datos
Interrupciones
1.4. DISEO DE APLICACIONES CON PIC
FORMATO DE UN PROGRAMA EN
ENSAMBLADOR PIC18F4550(1)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
36
LIST P=18F4550 ;Directiva para definir el procesador
#include "P18F4550.INC"

;******** Bits de configuracion **********
CONFIG PWRT = ON ;PWRT habilitado
CONFIG WDT = OFF ;Watchdog deshabilitado
CONFIG MCLRE = ON ;MCLR como entrada
CONFIG PBADEN = OFF ;Todos los pines del puerto B como entradas analogicas
CONFIG DEBUG = OFF ;Deshabilitar modo DEBUG
CONFIG LVP = OFF ;Deshabilitacion del modo programacion de bajo nivel
CONFIG FOSC = HSPLL_HS ;Oscilador de alta velocidad con PLL habilitado
;********* Bits de proteccion ******************
CONFIG CP0 = OFF ;los bloques del codigo de programa
CONFIG CP1 = OFF ;no estan protegidos
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF ;Sector Boot no esta protegido
CONFIG CPD = OFF ;La EEPROM no esta protegida
FORMATO DE UN PROGRAMA PIC18F4550(2)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
37

CBLOCK 0x000 ;Variables en la ACCESS RAM (Banco 0) max 96 bytes
;Aqui va la declaracion de variables
ENDC

ORG 0xf00000 ;Area de definicion de variables de la EEPROM
;DE "Test Data",0,1,2,3,4,5

ORG 0x0000 ;vector de interrupcion del reset
goto main

ORG 0X0008 ;vector de interrupcion de baja prioridad
goto main

ORG 0X0018 ;vector de interrupcion de alta prioridad
goto main

main: ;Programa principal

fin: goto fin
end
REPERTORIO DE INSTRUCCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
38
El juego de instrucciones es altamente ortogonal y esta dividido en 4 grupos:

Operaciones orientadas al Byte
Operaciones orientadas al Bit
Operaciones con literales
Operaciones de control
OPERACIONES ORIENTADAS AL BYTE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
39
OPERACIONES ORIENTADAS AL BIT
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
40
OPERACIONES DE CONTROL
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
41
OPERACIONES CON LITERALES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
42
TEMPORIZADORES, PUERTOS DE
ENTRADA/SALIDA Y MANEJO DE DATOS
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
43
El uC PIC18F4550 dispone 5 puertos de E/S que incluyen un total de 35 lneas digitales de
E/S:
Todas las lneas digitales de E/S disponen de al menos una funcin alternativa
asociada a alguna circuitera especifica del uC. Cuando una lnea trabaja en el
modo alternativo no puede ser utilizada como lnea digital de E/S estndar.
PUERTOS DE ENTRADA/SALIDA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
44
REGISTROS DE UN PUERTO DE E/S: Cada puerto de E/S
tiene asociado 3 registros:

Registro TRIS: mediante este registro se configuran cada una
de las lneas de E/S del puerto como ENTRADA (bit
correspondiente a '1') o como SALIDA (bit correspondiente a
'0').
Registro PORT: mediante este registro se puede leer el nivel
de pin de E/S y se puede establecer el valor del latch de salida.
Registro LAT: mediante este registro se puede leer o
establecer el valor del latch de salida.
PUERTOS DE ENTRADA/SALIDA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
45
PUERTO A
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
46
Dispone de 7 lneas de E/S. Las funciones alternativas son:

RAO: entrada analgica (ANO)/ entrada de comparacin (C1IN-)
RA: entrada analgica (AN1)/ entrada de comparacin (C2IN-)
RA2: entrada analgica (AN2)/ entrada de comparacin (C2IN+)
RA3: entrada analgica (AN3)/ entrada de comparacin (C1IN+)
RA4: entrada de reloj del Temporizador 0 (TOCKI)/salida de comparacin (C1OUT)

RA5: entrada analgica (AN4)/ salida de comparacin (C2OUT)/HLVDIN entrada de deteccin
de tensin alta/baja

RA6: entrada del oscilador principal (OSC2)/salida de seal de reloj (CLKO)

En el reset las lneas RAO, RA, RA2, RA3 y RA5 se configuran como lneas de entrada
analgicas. Para poder utilizarlas como lneas digitales de E/S hay que desactivar la funcin
analgica:

MOVLW 0FH ; Se desactiva la funcin de entrada analgica
MOVWF ADCON1 ; para las lneas RAO, RA1, RA2, RA3 y RA4
MOVLW 07H ; Configura los comparadores para entrada digital.
MOVWF CMCON ;para las lneas RAO, RA1, RA2 y RA3
MOVLW 3CH ; Se configuran RA5, RA4, RA3 y RA2 como entradas
MOVWF TRISA ; y RA1 y RAO como salidas
REGISTRO ADCON1
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
47
VCFG1: Bit de configuracin de la tensin de referencia VREF-:
VCFG1=0: VREF- se conecta a VSS
VCFG1=1: VREF- se conecta a la lnea fsica RA2

VCFG0: Bit de configuracin de la tensin de referencia VREF+:
VCFG1=0: VREF+ se conecta a VDD
VCFG1=1: VREF+ se conecta a la lnea fsica RA2

PCFG3..PCFG0: Bits configuracin de los puertos de conversin
A/D. Mediante estos bits se establecen que
lneas fsicas (RA5..RA0, RB4..RB0, RE1 y RE0) van a
trabajar como entradas del convertidor A/D (Ver Tabla de
configuracin de lneas de conversin A/D).
REGISTRO ADCON1
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
48
PUERTO B
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
49
Dispone de 8 lneas de E/S. Las funciones alternativas son:

RBO: entrada analgica (AN12)/ interrupcin externa 0 (INTO)/entrada de fallo del ECCP
(FLTO)/entrada de datos del SPI (SDI)/lnea de datos del PC (SDA)
RB1: entrada analgica (AN10)/ interrupcin externa 1 (INTl)/lnea de reloj del SPI
(SDI)/lnea de reloj del PC (SDA)
RB2: entrada analgica (AN8)/ interrupcin externa 2 (INT2)/salida de datos del USB
(VCMO)
RB3: entrada analgica (AN9)/ lnea de E/S del CCP2 (CCP2)/salida de datos del USB
(VPO)
RB4: entrada analgica (AN11)/ interrupcin por cambio en pin (KBIO)/ salida de CS del
SSP (CSSP)
RB5: interrupcin por cambio en pin (KBI1)/ lnea de programacin (PGM)
RB6: interrupcin por cambio en pin (KBI2)/ lnea de programacin (PGC)
RB7: interrupcin por cambio en pin (KBI3)/ lnea de programacin (PGD)

PUERTO B
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
50
Resistencias de pull.up: Todas las lneas del puerto B disponen de resistencias de pull-
up internas que pueden ser activadas poniendo el bit RBPU del registro INTCON2 a '0'
(RPBU=T despus de un reset). Si una lnea del puerto B se configura como salida la
resistencia de pull-up correspondiente se desactiva automticamente.

Por defecto, en el reset las lneas RB4..RB0 estn programadas como entradas
analgicas. Existen dos formas de configurar RB4..RB0 como lneas de E/S digitales:

Poniendo a '0' el bit PBADEN del registro de configuracin CONFIG3H=> en el reset
RB4..RB0 se configuran como lneas de E/S digitales

Si PBADEN='l' (valor por defecto) se pueden configurar RB4..RB0 como lneas el E/S
digitales desactivando la funcin analgica:

MOVLW 0x07 ; Se desactiva la funcin de entrada analgica
MOVWF ADCON1 ; para las lneas RBO, RB1, RB2, RB3 y RB4
MOVLW 0xF0 ; Se configuran RB7, RB6, RB5 y RB4 como entradas
MOVWF TRISB ; y RB3, RB2, RB1 y RBO como salidas
PUERTO C
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
51
Dispone de 5 lneas de E/S (RCO, RCl, RC2, RC6 y RC7) y 2 lneas de solo entrada (RC4 y
RC5). Las funciones alternativas son:

RCO: salida del oscilador del Temp. 1 (T1OSO)/ entrada de contador de los
temporizadores 1 y 3 (T13CKI)
RCl: entrada del oscilador del Temporizador 1 (TIOSI)/ lnea de E/S del CCP2 (CCP2)/
salida OE del transceiver del USB (UOE)
RC2: lnea de E/S del CCP1 (CCP1)/ salida PWM del ECCP1 (PA)
RC4: lnea menos del bus USB (D-) / lnea de entrada del USB (VM)
RC5: lnea ms del bus USB (D-) / lnea de entrada del USB (VP)
RC6: salida de transmisin del EUSART (TX)/ lnea de reloj del EUSART (CK)
RC7: entrada de recepcin del EUSART (RX)/ lnea de datos sncrona del EUSART (DT)/
salida de datos del SPI (SDO)

En el reset todas las lneas del puerto C quedan configuradas como entradas digitales
PUERTO D
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
52
Dispone de 8 lneas de E/S. Las funciones alternativas son:

RDO: lnea de datos del SPP (SPPO)
RD1: lnea de datos del SPP (SPP1)
RD2: lnea de datos del SPP (SPP2)
RD3: lnea de datos del SPP (SPP3)
RD4: lnea de datos del SPP (SPP4)
RD5: lnea de datos del SPP (SPP5) / salida PWM del ECCP1 (P1B)
RD6: lnea de datos del SPP (SPP6) / salida PWM del ECCP1 (P1C)
RD7: lnea de datos del SPP (SPP7) / salida PWM del ECCP1 (P1D)

Resistencias de pull.up: Todas las lneas del puerto D disponen de resistencias de pull-up
internas que pueden ser activadas poniendo el bit RDPU del registro PORTE a T (RPDU='O'
despus de un reset). Si una lnea del puerto D se configura como salida la resistencia de pull-up
correspondiente se desactiva automticamente.

PUERTO E
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
53
Dispone de 3 lneas de E/S (REO, RE1 y RE2) y 1 lnea de solo entrada (RE3). Las funciones
alternativas son:

REO: entrada analgica (AN5)/ salida de reloj 1 del SPP (CK1SPP)
RE1: entrada analgica (AN6)/ salida de reloj 2 del SPP (CK2SPP)
RE2: entrada analgica (AN7)/ salida de habilitacin del SPP (OESPP)
RE3: Lnea de reset externo (MCLR) / lnea de programacin (VPP)
En el reset todas las lneas RE2..RE0 se configuran como entradas analgicas. Para poder
utilizarlas como lneas digitales de E/S hay que desactivar la funcin analgica:

MOVLW 0FH ; Se desactiva la funcin de entrada analgica
MOVWF ADCON1 ; para las lneas REO, RE1 y RE2
MOVLW 06H ; Se configuran RE2 y RE1 como entradas
MOVWF TRISE ; y RE0 como salida

La lnea RE3 por defecto tiene la funcin de Reset del uC. Si se desea desactivar la funcin de
Reset y utilizar RE3 como lnea de entrada digital hay que poner a '0' el bit MCLRE del registro de
configuracin CONFIG3H.
OSCILADOR
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
54
El PIC18F4550, tiene un oscilador interno
de 32 KHZ. Este PIC ejecuta una
instruccin en un ciclo de mquina (4
periodos de reloj).

Cuando se requiere aumentar la
velocidad de procesamiento se debe
conectar un oscilador externo con
frecuencias de osciladores de 8, 10, 12,
16, 20, 32, 40 y 48 MHz.

Los capacitores cermicos entre 15 a 33
pF.
RESET
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
55
Es la accin con la cual inicia el
trabajo del uC.

Existe el pin 1 MCLR (masterclear)
que puede ser configurado como
RESET.

Cuando se conecta a un nivel bajo
este pin, en el uC se produce un
reset. Para operacin normal este
pin debe encontrarse a un nivel
alto.
ARMADO DEL SISTEMA MNIMO
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
56
QU ES UN BOOTLOADER?
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
57
El termino bootloader hace referencia a un pequeo programa
que se realiza para determinado microcontrolador, ya sea PIC,
Freescale, Atmel, etc. Este cdigo lo que hace es tomar los
datos que se le enviaran por puerto serial (UART), USB,
Ethernet, el que sea que pueda enviar una cadena de Bytes al
microcontrolador. El microcontrolador va tomando esos datos
que le van llegando y los va "Programando" en su propia
memoria Flash.

QU ES UN BOOTLOADER?
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
58
Es necesario tener un programador para usarlo solo una vez y as grabarle el
programa residente en memoria FLASH. Ya despus de esto se usa el
Bootloader para grabar la flash del micro.

El programa residente ocupa memoria flash y por ende tienes un poco menos
de memoria para la aplicacin real del micro. No es mucha la que quita, pero
hay que tener eso claro.

Por ningn motivo se puede sobrescribir las posiciones de memoria FLASH en
la que se encentra el programa residente Bootloader. Si se borra por algn
error, pierdes el bootloader y toca nuevamente programarlo con un grabador
externo.

No todos los micros pueden soportar Bootloder, esto se limita a aquellos que
tienen la capacidad de autograbar su memoria FlLASH. Por ejemplo el 16F84
no lo permite, por eso sacaron la versin PIC16F628A que si lo deja y adems
tiene mejores prestaciones.

CONFIGURACIN DEL HIDBOOTLOADER
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
59
Microchip provee un Bootloader para agilizar el tiempo
de desarrollo de aplicaciones para Pic que cuentan con
interfaz USB
Tan solo es necesario cargar el microcontrolador con el
firmware y proteger el rea de booteo
Adicionar los fuses convenientes en el cdigo
Relocalizar los vectores de interrupcin para que no
toquen los vectores originales.
HIDBOOTLOADER
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
60
El diagrama del sistema mnimo incluye la circuitera para sostener
el HIDBootloader

Para entrar en modo Bootloader, se debe presionar el botn
conectado en RB4, mantenindolo presionado, despus se debe
dar RESET al pic con otro pulsador en el pin MCLR. Al resetear el
PIC, lo primero que hace el PIC es preguntar por el estado del PIN
RB4 donde esta el pulsador. De estar presionado este botn, el
PIC entra en modo Bootloader y si no ejecuta el cdigo normal
que le grabamos al PIC.

El led conectado en el puerto RD1 se enciende y apaga cuando
entra en modo Bootloader.
HIDBOOTLOADER SOFTWARE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
61
FORMATO DE LOS FUSES EN ENSAMBLADOR
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
62
;--------------------------------------------------------------------------------------
;Bits de configuracin
;----------------------------
CONFIG PWRT = ON ;PWRT habilitado
CONFIG WDT = OFF ;Watchdog deshabilitado
CONFIG MCLRE = ON ;MCLR como entrada
CONFIG PBADEN = OFF ;Todos los pines del puerto B como entradas
;analogicas
CONFIG DEBUG = OFF ;Deshabilitar modo DEBUG
CONFIG LVP = OFF ;Deshabilitacion del modo programacion de bajo nivel
CONFIG FOSC = HSPLL_HS ;Oscilador de alta velocidad con PLL habilitado
CONFIG BOR = OFF
CONFIG USBDIV = 1
CONFIG PLLDIV = 5
CONFIG CPUDIV = OSC1_PLL2
CONFIG VREGEN = ON
;********* Bits de proteccin ******************
CONFIG WRTB = ON ;bit de proteccion del area de booteo
CONFIG CP0 = OFF ;los bloques del codigo de programa
CONFIG CP1 = OFF ;no estan protegidos
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = ON ;Sector Boot esta protegido
CONFIG CPD = ON ;La EEPROM esta protegida
FORMATO DE LLAMADAS EN ENSAMBLADOR
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
63
;------------------------------------------------------------------------------------
;vector de interrupcion del reset
;--------------------------------
ORG 0x1000
goto main

;-----------------------------------------------------------------------------------
;vector de interrupcion de alta prioridad
;----------------------------------------
ORG 0X1008
goto main

;-----------------------------------------------------------------------------------
;vector de interrupcion de baja prioridad
;----------------------------------------
ORG 0X1018
goto main
EL LENGUAJE DE PROGRAMACIN C PARA
MICROCONTROLADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
64
Repertorio de instrucciones
Diseo de aplicaciones bsicas en lenguaje C
Puertos de E/S, temporizadores y manejo de datos
Interrupciones
EL COMPILADOR MC18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
65
Si queremos realizar la programacin de los microcontroladores
PIC en un lenguaje como el C, es preciso utilizar un compilador
de C.
Dicho compilador nos genera ficheros en formato Intel -
hexadedimal, que es el necesario para
programar (utilizando un programador de PIC) un
microcontrolador de 6, 8, 18 40 patillas.
EL COMPILADOR MC18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
66
Mas productividad
Permite codificado en lnea de ASM
Soporta compilado en lnea con MPLAB
Portabilidad de cdigo en lenguaje C
Soporta recursividad de funciones
Amplia gama de microcontroladores
Capacidad de relocalizacin de cdigo y vectores de interrupcin
FORMATO DE PROGRAMA (1)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
67
#include <p18f4550.h>
#include <delays.h>

//Bits de configuracion
//--------------------------------------------------------------------
#pragma config PWRT = ON //PWRT habilitado
#pragma config WDT = OFF //Watchdog deshabilitado
#pragma config MCLRE = ON //MCLR como entrada
#pragma config PBADEN = OFF //Todos los pines del puerto B como entradas digitales
#pragma config DEBUG = OFF //Deshabilitar modo DEBUG
#pragma config LVP = OFF //Deshabilitacion del modo programacion de bajo nivel
#pragma config FOSC = HSPLL_HS //Oscilador de alta velocidad con PLL habilitado
#pragma config BOR = OFF //Brown out Voltage desactivado
#pragma config USBDIV = 1 //Divisor de FOSC para el puerto USB activado
#pragma config PLLDIV = 5 //Factor de division para el generador de seal de reloj (cristal de
20Mhz)
#pragma config CPUDIV = OSC1_PLL2
#pragma config VREGEN = ON

//Bits de proteccion
//-------------------------------------------------------------------
#pragma config WRTB = ON //bit de proteccion del area de booteo
#pragma config CP0 = OFF //los bloques del codigo de programa
#pragma config CP1 = OFF //no estan protegidos
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = ON //Sector Boot esta protegido
#pragma config CPD = ON //La EEPROM esta protegida

FORMATO DE PROGRAMA (2)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
68

//Definicion de simbolos

//Area de definicion de variables globales
int contador;

//Definicion de funciones prototipo

//Programa principal
void main(void)
{
contador=1;
TRISB=0;
while(contador<=15)
{
PORTB=contador;
contador++;
}

}

OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
69
Asignacin:
OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
70
Aritmticos
OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
71
Relacionales
OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
72
Lgicos
De manejo de bits
OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
73
Incremento, decremento y desplazamiento de bits
OPERADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
74
Direccin e Indireccin
Ejemplos:

p = &contador; /* p apunta a la direccin de contador */

El operador de indireccin *, nos da el valor o contenido de la variable cuya direccin est
apuntada por el puntero.

p = &contador; /* p apunta a la direccin de contador */
a = *p; /* guarda en a el contenido de la var. apuntada por p */
EXPRESIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
75
MANEJO DE DATOS
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
76
Tipos: El lenguaje C proporciona cinco
tipos bsico de datos, con cuatro
modificadores posibles. Podemos utilizar
variables de cualquiera de esos tipos.

La tabla siguiente muestra los tipos
disponibles:

C18 permite una "forma corta" para
escribir algunos de los tipos.
Concretamente, podemos utilizar
unsigned, short, o long en lugar de
unsigned int, short int, o long int.
Las variables deben ser
declaradas antes de ser
utilizadas en el programa. El
proceso de declaracin de
variables le dice a C18 de que
tipo son y como se llaman. Al
igual que las dems
instrucciones de C18, deben
terminar con ;.

La forma en que se declara una
variable es la siguiente:
tipo nombre_de_la_variable;
Donde:
tipo es alguno de los enumerados en la
tabla anterior.
Unos ejemplo son:
int temperatura;
int a = 0;
signed long a = 125, b, c = -10;
char nombre = 'juan perez';

DECLARACIN DE VARIABLES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
77
C18 nos permite mezclar
diferentes tipos de variables
dentro de una misma expresin. Y
existen un conjunto de reglas que
nos permiten saber de que tipo
ser el resultado de la misma.

El C18 convertir a int cualquier
expresin que contenga variables
char, short o int. Esta conversin
solo tiene efecto mientras se
realizan los clculos. Las
variables en s mismas no
cambian su tipo.
Las reglas de conversin de tipos
hacen que el resultado de una
operacin sea siempre el mismo que
el de la variable ms larga que
intervenga en ella. Sin embargo,
podemos forzar a que el resultado
sea de un tipo en particular, de la
siguiente forma:

(tipo) valor

donde tipo es el tipo al que queremos que
pertenezca valor. El siguiente ejemplo nos
aclarar todo esto:

int a = 250, b = 10;
long c;
c = a * b;
CONVERSIONES ENTRE TIPOS
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
78
EJEMPLO 1
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
79
Hola Mundo con un simple led
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
80
PODEMOS DEFINIR UN PUERTO EN C18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
81
1. Por medio de una referencia simblica
2. Por medio de comandos del C18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
82
MAPA DE E/S
DEL
PIC18F4550
POR MEDIO DE UNA REFERENCIA SIMBLICA
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
83
Siempre puede definirse un bit:
#define <simbolo> <PORT>bits.#pin
Ejemplo: #define Led PORTBbits.PORTB0

Despus ponerlo a un nivel:
<simbolo>=[0|1]
Ejemplo: Led=0;

Obtener el nivel:
<simbolo>)==[1|0]
If(Led==0)

Nunca olvidar definir como va a usarse cada bit:
TRIS<port>(<estado de los bits>);
POR MEDIO DE COMANDOS C18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
84
Configuracin de los pines de E/S
Cada puerto tiene vinculados determinados pines agrupados en forma
de un Puerto, los pines deben configurarse individualmente, los registros de
configuracin siguen el estandar del Ensamblador.

TRIS<puerto> configura los bits vinculados con un puerto en particular
un bit en [1] define una entrada
un bit en [0] define una salida
PROGRAMAS EJEMPLO:
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
85
Programa hola mundo
Corrimientos a la derecha y a la izquierda
Rotacin de bits a la derecha y a la izquierda
Contador binario de 8 bits(0-255)
Pausas en milisegundos
Deteccin de nivel con pushboton
TEMPORIZADORES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
86
Los temporizadores son contadores que al activarlos empiezan
una cuenta y cuando esta cuenta se acaba se activa el flanco
de interrupcin por el temporizador, entrando el micro en la
rutina de interrupcin del temporizador.

El PIC18F4550 tiene 4 temporizadores, de los cuales 1 de ellos
es de 8 bits y el resto de una precisin de 16 bits.
TIMER 0
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
87
Existe la posibilidad de activar un preescaler en los temporizadores de forma
que se pueda alargar la duracin del temporizador, dependiendo del
temporizador puede ser de 2,4,8 e incluso 16.
TIMER 1
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
88
Resolucin de los temporizadores:
Timer0 -> Temporizador configurable de 8 16 bits.
Timer1 -> Temporizador de 16 bits.
Timer2 -> Temporizador de 8 bits.
Timer3 -> Temporizador de 16 bits.
INTERRUPCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
89
Las interrupciones son tareas programas que el micro
realiza cuando el flanco de interrupcin se activa, con
lo que el micro deja el programa principal y accede a
una parte reservada de la memoria que se llama rutina
de interrupcin, donde una vez acabada la rutina de
interrupcin, se baja el flanco de interrupcin que lo ha
provocado y el micro continua el programa principal
donde lo haba dejado antes de ir a la rutina de
interrupcin.
INTERRUPCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
90
Las interrupciones en el micro pueden darse de varios
tipos:

Interrupciones externas.
Interrupciones por desbordamiento del contador.
Interrupciones de EUSART.
Interrupciones USB.
Interrupciones del ADC.
Interrupciones por perifricos externos.
INTERRUPCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
91
El micro puede tener varias interrupciones programadas a
la vez, pero hay que tener en cuenta que una vez que el
cdigo entra en una rutina de interrupcin, el micro no
puede acceder a otra interrupcin hasta que la rutina de
interrupcin que se est ejecutando finalice.

En el caso de que saltasen a la vez 2 o ms interrupciones,
el micro accedera aleatoriamente a una de ellas, es por
ello que suele darse prioridad a las interrupciones si
tenemos alguna rutina de interrupcin ms importantes que
otras.
INTERRUPCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
92
El Pic18F4550 cuenta con tres vectores de interrupcion, mismo que apuntan a las rutinas
de servicio correspondientes:

Reset (0000h)
Usuario alta prioridad (0008h)
Usuario baja prioridad (0018h)
INTERRUPCIONES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
93
Como se codifican las interrupciones?
;--------------------------------------------------------------------------
;vector de interrupcin del reset
;--------------------------------
ORG 0x0000
goto main ;Etiqueta donde inicia la ISR

;--------------------------------------------------------------------------
;vector de interrupcin de alta prioridad
;----------------------------------------
ORG 0X0008
goto main ;Etiqueta donde inicia la ISR

;--------------------------------------------------------------------------
;vector de interrupcin de baja prioridad
;----------------------------------------
ORG 0X0018
goto main ;Etiqueta donde inicia la ISR
Las instrucciones GOTO <label>,
transfieren el control a una parte
de nuestro programa donde reside
la ISR

ISR significa Interrupt Service
Routine, es decir rutina de
servicio a interrupcin y en pocas
palabras y lenguaje coloquial no
es otra cosa que el cdigo que
deber ejecutar el
microcontrolador cuando ocurra
el estmulo hardware que
desencadena la interrupcin, por
ejemplo presionar el botn de
RESET.
EJEMPLO 2
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
94
Hola mundo con LCD 16x2 alfanumrico
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
95
INICIALIZACIN DEL LCD
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
96
El comando init_lcd() ejecuta el proceso de inicializacin del LCD
La instruccin lcd_putc() enva datos hacia el LCD
Se puede redirigir la salida de consola por medio de printf reenviandola al LCD mediante
printf(lcd_putc,)
CONVERTIDOR ANALGICO-DIGITAL
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
97
Microchip PIC18F4550 contiene 13 convertidores analgicos digitales, los cuales pueden
ser seleccionados en modos de resolucin de 8 10 bits, para ello antes habr que
configurar las entradas en modo ADC.
CONVERTIDOR ANALGICO-DIGITAL
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
98
CONVERTIDOR ANALGICO-DIGITAL
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
99
Otra de sus caractersticas es que tiene dos patillas de
referencia donde podemos dar la tensin de referencia
para todas o algunas de las entradas del CAD.
Otra posibilidad es configurar el tiempo de adquisicin
de datos, pues tiene un registro habilitado
especialmente pare ello ya que en algunas ocasiones
hay que esperar al interruptor de muestreo que se
cierre y que el condensador (Chold) se descargue para
poder hacer otra adquisicin.
CONVERTIDOR ANALGICO-DIGITAL
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
100
Se recomienda que la mxima resistencia de entrada (Rs) sea de
2.5K, pues sino la conversin no sera del todo fiable, por lo que
habra que hacer una adaptacin de impedancias entre las partes.
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
101
#include <18f4550.h>
#include <adc.h>
//Inicializacion de la USART, (9600,8,N,1)
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE &
USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, 77);

//Initializar ADC con los siguientes parametros:
//----------------------------------------------
// FOSC/2 como reloj de conversion (ADC_FOSC_2)
// Resultado justificado a la derecha del registro de conversion (ADC_RIGHT_JUST)
// Tiempo de adquisicion de 2 Tad (ADC_2_TAD)
// Muestreo en el Canal 1 (ADC_CH0)
// Interrupciones del ADC habilitadas (ADC_INT_ON)
// Voltaje de referencia del ADC desde VDD a VSS (ADC_REF_VDD_VSS)

config1 = ADC_FOSC_2 | ADC_RIGHT_JUST | ADC_2_TAD ;
config2 = ADC_CH0 | ADC_INT_ON | ADC_REF_VDD_VSS ;
portconfig = ADC_0ANA ;
OpenADC(config1,config2,portconfig);


M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
102

// Habilitamos el ADC
ADC_INT_ENABLE();

for(;;)
{
// Toma una muestra y la convierte a voltaje
ConvertADC();
while(BusyADC());
ADCResult = (unsigned int) ReadADC();

//volts = (ADCResult*5.0)/1024.0; // convierte el valor del ADC a
su equivalente en voltaje

printf("Dato=%u \r\n",ADCResult); //Lo despliega en la consola
Delay10KTCYx(retraso1s);
}
}
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
103
COMUNICACIONES SERIALES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
104
Estn reguladas por la USART del PIC
Se utilizan pines particulares del PIC
Pueden elegirse tres tipos de interfaz, a saber:
SPI (Asncrona), SCI (Sincrona), I2C (Sincrona)

Este modulo de librera para perifrico contiene:
Soporta transmisin/recepcin de bytes
Incorpora funciones para transmisin/recepcin multi BYTE
Provee funciones para manejo de buffers
Provee macros para habilitar/deshabilitar interrupciones
INTERFAZ
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
105
INSTRUCCIONES DEL C18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
106
FUNCIONES

OPENUSART()
WRITEUSART()
baudUSART()
getsUSART()
putrsUSART()
putsUSART()
ReadUSART()
MACROS

DataRdyUSART
CloseUSART
BusyUSART
putcUSART
getcUSART
INICIALIZACIN DE LA USART
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
107
FUNCIONES

OPENUSART(),
sintaxis: OPENUSART(unsigned char config, unsigned int spbrg);
Parmetros bsicos:
USART_TX_INT_OFF :Interrupcin por transmisin=OFF
USART_RX_INT_OFF :Interrupcin por recepcin=OFF
USART_ASYNCH_MODE :Modo asncrono tpico de RS232C
USART_EIGHT_BIT :Modo datos=8 bits
USART_CONT_RX :Modo recepcin continua de datos
USART_BRGH_LOW :Palabra de configuracin para velocidad baja

Seleccin de velocidad de transmisin, velocidad baja: spbrg=X
X=(Fosc/velocidad_transmision)/64)-1 Para 9600 X=77
TRANSMISIN DE CARACTERES
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
108
Para la transmisin de caracteres se puede usar una funcin dedicada, o bien la
funcin de consola printf() con las opciones de formateo de salida:
Ejemplo: printf(Contador=%u %u,contador1, contador2);

RECEPCIN DE CARACTERES (POLLING)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
109
Para la recepcin de caracteres se puede usar una funcin dedicada, o bien las
funciones de consola con las opciones de formateo:
Ejemplo: getcUSART()
Es necesario escanear el valor de la bandera RCIF para saber en que momento la
EUSART ha recibido un dato por el puerto serial si se trabaja en modo de polling de
la interfaz serial, el cdigo resultante es como el siguiente:

dato=0;
while(dato!=13) //Recibimos datos hasta que se reciba un \r
{
while(PIR1bits.RCIF==0); //Ciclar mientras no haya dato
dato=getcUSART(); //Leer dato recibido en el buffer
printf("%c",dato); //Retrasmitimos para depurar
}
RECEPCIN DE CARACTERES (INTERRUPCIN)
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
110
Para la recepcin de caracteres mediante el mtodo de interrupciones es
necesario definir en ON la bandera de configuracin correspondiente al
momento de configurar la EUSART mediante la funcin OpenUSART():
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_LOW, 77);
Siguiendo la metodologa de definicin de interrupciones, asignar una funcin
de servicio a la interrupcin en el vector de interrupcin bajo 0008H.

M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
111
Siguiendo la metodologa de definicin de interrupciones, asignar una funcin de
servicio a la interrupcin en el vector de interrupcin bajo 0008H.


//** Seccion de interrupciones **************************
void ISRRecepcion (void); //Funcion prototipo para la interrupcion del RCIF
volatile char dato, kbHit; //Variables utilizadas en el control de la interrupcion

#pragma code Interrupcion = 0x0008
void VectorInterrupcion (void)
{
_asm goto ISRRecepcion _endasm
}
#pragma code //Se cierra seccion

//Rutina de servicio a la interrupcion de recepcion serial
#pragma interrupt ISRRecepcion
void ISRRecepcion (void)
{
if (PIR1bits.RCIF==1)
{
dato=getcUSART(); //Se lee dato recibido
kbHit=1; //Indica que se ha recibido un dato
PIR1bits.RCIF=0; //Borramos bandera de interrupcion
}
}
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
112
Finalmente, inicializar las interrupciones por perifricos en el programa principal y atrapar la bandera de
recepcin:
void main(void)
{
TRISB=0;
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_LOW, 77);

RCONbits.IPEN =0;
//Deshabilitamos prioridades
INTCONbits.PEIE =1;
//Habilitamos la interrupcion de perifericos
INTCONbits.GIE =1;
//Habilitamos interrupcion global
kbHit =0;
//Inicializamos la bandera de recepcion de caracter
for(;;)
{
if(kbHit==1)
{
printf("%c",dato);
kbHit=0;
}
}
}
I2C
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
113
Define un estandar de comunicacin serial maestro/esclavo para
interconexin de dispositivos a un microcontrolador, esta enfocado
a las conexiones multipunto.

Maneja un bus de 3 seales, 2 de control y 1 de conformidad de
niveles (tierra)

Es independiente del hardware de control, es decir no es
dependiente de la plataforma o microcontrolador

Infinidad de sensores, memorias o IC manejan i2c para la
implementacin de su bus de datos
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
114
I2C EN C18
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
115
La librera I2C contiene funciones para implementar un bus I2C. La directiva
#USE I2C permanece efectiva para las funciones I2C_START, I2C_STOP,
I2C_READ, I2C_WRITE e I2C_POLL hasta que se encuentre otra directiva
#USE I2C.

Se generan las funciones software a menos que se especifique la opcin
NOFORCE_SW. El modo SLAVE slo debe usarse con las funciones SSP. Las
opciones son:
EJEMPLOS:
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
116
Definicin:
#define rtcSDA PIN_B0
#define rtcSCL PIN_B1

#use i2c(MULTI_MASTER, sda=rtcSDA, scl=rtcSCL)


PATILLAJE
M.C. ANDRS GERARDO FUENTES
COVARRUBIAS
117

You might also like