Sei sulla pagina 1di 63

Indice

UNIDAD 1 CONCEPTOS Y CARACTERISTICAS GENERALES DE LOS MICROCONTROLADORES .............. i


1.-1 El Microcontrolador ................................................................................................................. 2
1.1.1-Diferencias entre microprocesador y microcontrolador ................................................... 2
1.2.-Arquitectura Interna ................................................................................................................ 2
1.3.-Organizacin de la Memoria. ................................................................................................... 4
1.3.1.-Modelo de Programacin ................................................................................................. 7
1.3.2.- Grupo de Instrucciones .................................................................................................... 7
1.3.3.-Software de Desarrollo ..................................................................................................... 9
1.4.- MPLAB ..................................................................................................................................... 9
1.5.- Code Warrior ......................................................................................................................... 10
Ejemplo 1.1 Creacin de un proyecto con Code Warrior ............................................................. 10
1.6.- C/C+, ENSAMBLADOR Y ICPROG ........................................................................................... 10
Ejemplo 1.2.- ................................................................................................................................. 11
UNIDAD 2.- PLATAFORMA DE PROGRAMACIN EN C++ .................................................................. 12
2.0.-AMBIENTE INTEGRADO DE DESARROLLO .............................................................................. 13
2.1.-CREACION DE UN PROYECTO ................................................................................................. 13
Ejemplo 2.1 Creacin de un proyecto con el MPLAB X ................................................................. 13
2.2.-Editor...................................................................................................................................... 14
2.3.- Compilacin .......................................................................................................................... 15
2.4.-Simulador ............................................................................................................................... 15
2.5.-Opciones de Programacin .................................................................................................... 16
UNIDAD 3.-Estructura de programacin en C ................................................................................... 20
3.0.-Estructura general de programacin en C++ aplicada a los microcontroladores .................. 21
3.1.- Declaracion de Variables ....................................................................................................... 22
Ejemplo 3.1.-Declaracion de variables .......................................................................................... 22
3.2.- Operadores para posiciones de bits. .................................................................................... 24
3.3.-Operadores de asignacin ..................................................................................................... 25
3.4.-Operadores relacionales y lgicos ......................................................................................... 25
3.5 Funciones e Interrupciones ..................................................................................................... 26

i
3.6.- Macros .................................................................................................................................. 30
4.-Perifricos Analgicos ................................................................................................................... 30
4.1.-Introduccion a la conversin analgico digital ...................................................................... 30
4.1.1.- Inicializacin del convertidor A/D .................................................................................. 31
4.1.2.-Proceso de Conversin ................................................................................................... 32
4.1.3.-Asignacin de canal o mltiples canales de entrada ...................................................... 32
4.1.4.-Operacin en mltiples o un solo canal .......................................................................... 33
4.1.5.- Registros de Resultado ................................................................................................... 34
4.1.6.- Registros de estado y control......................................................................................... 35
4.2.- Puertos de el Microcontrolador ............................................................................................ 36
4.3.- Interfase de comunicacin serie sncrona y asncrona ......................................................... 38
4.3.1.- Formato de datos ........................................................................................................... 39
4.3.2.- Operacin de transmisin ............................................................................................. 40
4.3.3.- Operacin de recepcin ................................................................................................. 41
4.3.4.- Deteccin de errores...................................................................................................... 41
4.3.5.- Registros de Estado y de Control ................................................................................... 42
Ejemplo de transmisin..................................................................................................................... 42
Ejemplo de Recepcin ....................................................................................................................... 42
5.-Perifericos Digitales ...................................................................................................................... 43
5.1.-Introduccin ........................................................................................................................... 43
5.2.- Sistema Temporizador .......................................................................................................... 43
5.2.1- Estructura del Sistema Temporizador ............................................................................. 44
5.3.- Registros de control y de estado........................................................................................... 45
5.4.-Capturas de entrada .............................................................................................................. 45
5.4.1.- Comparaciones de salida ............................................................................................... 46
5.6.- Interrupcin en Tiempo Real ................................................................................................ 47
5.7.- Acumulador de Pulsos........................................................................................................... 47
5.8.- Generador de PWM .............................................................................................................. 48
6.- APLICACIN FINAL ....................................................................................................................... 50
6.0.- Descripcin de trabajo final. ................................................................................................. 50
6.1.-Diseo de la circuitera exterior. ............................................................................................ 50
6.2.- Programacin del microcontrolador. .................................................................................... 52
6.3.- Construccin y pruebas del trabajo final. ............................................................................. 56

ii
Bibliografa ........................................................................................................................................ 60

iii
UNIDAD 1 CONCEPTOS Y CARACTERISTICAS
GENERALES DE LOS MICROCONTROLADORES
Objetivo.

El alumno identificar diferentes tipos de dispositivos electrnicos programables y seleccionar un


microcontrolador para desarrollar aplicaciones

Objetivos especficos.

(a)Que el estudiante conozca los usos de los microcontroladores.

(b)Sepa las diferencias entre un microprocesador y un microcontrolador

(c) Que Conozca la arquitectura del microcontrolador que se utilizara en el curso.

1
1.-1 El Microcontrolador
Un microcontrolador es un solo circuito integrado que contiene: un ALU, alguna de las
siguientes memorias( RAM, ROM, FLASH, EEPROM),Terminales para entradas y salidas
paralelas o seriales y uno o ms de los siguientes perifricos(Convertidor Analgico Digital,
Convertidor Digital analgico, Relojes, sistemas de comunicacin serial [1]

1.1.1-Diferencias entre microprocesador y microcontrolador


Las diferencias entre un microprocesador y un microcontrolador son que el
microprocesador contiene solo el ALU(Unidad aritmtica Lgica) y en ocasiones alguna
memoria RAM y ROM, y los microcontroladores aparte tienen perifricos, como por
ejemplo convertidor analgico digital, relojes, puertos, comparadores analgicos. Ejemplos
de microprocesadores son los usados en las computadoras de escritorio y computadoras
personales. En la Figura 1 se muestra un sistema basado en microprocesador y en la figura
2 basado en Microcontrolador.

FIGURA 1 SISTEMA BASADO EN MICROPROCESADOR

FIGURA 2 SISTEMA BASADO EN MICROCONTROLADOR

1.2.-Arquitectura Interna
En la siguiente figura se muestra la arquitectura interna de un microcontrolador,
PIC16F1619 [2], que contiene; un CPU de 8 bits, 49 instrucciones en ensamblador, todas las
instrucciones se realizan atreves de un solo registro de trabajo llamado W, tiene 16 niveles
de pila(STACK). En la figura 3 se muestra el diagrama a bloques de la arquitectura interna

2
del PIC16F1619, algunos parmetros importantes: el tamao de palabra de programacin
es de 14 bits, el tamao de palabra en RAM es de 8 bits, La unidad aritmtica lgica tiene
un registro principal de 8 bits llamado registro W.

FIGURA 3 ARQUITECTURA DEL PIC16F1619.

Los Registros del ncleo, son los registros que directamente afectan la operacin bsica,
ocupan las primeras 12 localidades de cualquiera de los bancos de memoria de datos, estos
registros son listados en la siguiente figura.

FIGURA 4 REGISTROS DEL NCLEO.

STATUS.-Contiene Banderas sobre el estado de la ALU y del RESET. Por ejemplo bandera de
cero, acarreo, Habilitacin de interrupciones, etc.
3
INDF0, INDF1.FSR0L,FSR0H,FSR1L,FSR1H-Son registros para direccionamiento indirecto, es
decir mediante la direccin contenida en los registros FSR, se puede leer o escribir tanto
memoria de datos como memoria de programa. El dato quedara en el registro INDFx, y la
direccin en FSRx.
PC.-Contador de Programa, es el registro que tiene la direccin de la siguiente instruccin a
ejecutar. Tamao 15 bits, puede manejar 32k de direcciones, el tamao de palabra de
programa es de 14 bits. El byte bajo viene del registro PCL, el cual se puede leer o escribir,
la parte alta PC<14:8> no se puede leer directamente o escribir y viene del PCLATCH.
BSR.- Registro selector de Bancos Selecciona el banco activo.

1.3.-Organizacin de la Memoria.
Los Microcontroladores PIC utilizan una arquitectura llamada Harvard Modificada, este tipo
de arquitectura no es exclusiva de los microcontroladores de la compaa microchip, esta
arquitectura se caracteriza por que contiene buses de datos y de direcciones
independientes para memoria de datos y memoria de programa, se representan en la figura
5, permitiendo simultneamente el acceder a los datos y cdigo de programa. Se hace uso
de los perifricos como si fueran memoria de datos, microchip los llama SPECIAL FUNCTION
REGISTERS.

FIGURA 5 ARQUITECTURA HARVARD MODIFICAD

MEMORIA DE PROGRAMA.
Memoria de Programa Flash.-Es la memoria donde se almacenan las instrucciones a ser
ejecutadas, el PIC16F1619 tiene un contador de programa de 15 bits, capaz de direccionar

4
32k de localidades el ancho de la localidad es de 14 bits. En la figura siguiente se muestra la
organizacin de esta.

FIGURA 6 MEMORIA DE PROGRAMA Y PILA

Adems de la memoria donde se almacena las instrucciones se tienen las siguientes


memorias no voltiles con tecnologa FLASH:
Palabras de configuracin.- Permiten seleccionar diversas opciones del oscilador y opciones
de proteccin de la memoria.
Identificacin del Dispositivo.- Informacin para determinar el circuito integrado.
Identificacin del Usuario.-Espacio para grabar nmeros de identificacin del usuario.

MEMORIA DE DATOS
La memoria de datos esta dividida en 32 bancos, cada banco cuenta con 128 bytes, cada
banco consiste de 12 registros del ncleo, 20 registros especiales(SPR), hasta 20 bytes de
RAM de Propsito especial, 16 byte de RAM comn entre todos los bancos, es decir la

5
memoria comn es la misma no importando el banco en el que se encuentre. En la figura 7
se indica la forma en que se encuentra la memoria en los bancos.
En la figura 8 se muestran los bancos del 0 al 7 si se requiere ver la totalidad de los bancos
revisar [2].

FIGURA 7 DIVISIN INTERNA DEL BANCO DE MEMORIA

6
FIGURA 8 BANCO 0 AL 7 DE MEMORIA DE DATOS

1.3.1.-Modelo de Programacin

EL microcontrolador utiliza instrucciones con un ancho de 14 bits, en estos 14 bits estn


contenidos el cdigo de la instruccin y el operando, el cdigo de instruccin es el nmero
que le indica al ALU en concreto al decodificador de instrucciones cual es la instruccin a
ejecutar y el operando es el dato o indica donde esta el dato para que se ejecute la
instruccin, La operacin de la ALU se centra en un registro llamado registro de trabajo W
de tamao de 8 bits, un registro llamado STATUS donde se encuentran las banderas que
indican informacin de la ejecucin de las instrucciones. Hay instrucciones orientadas a
bytes, orientadas a bits y orientadas a manejo de constantes y control, todas las
instrucciones se ejecutan en 1 ciclo de reloj salvo las que involucran saltos las cuales pueden
tomar 2 o 3 ciclos.

1.3.2.- Grupo de Instrucciones


Orientadas a Byte, los datos son del tamao de byte, se muestran en la Figura 9.

7
FIGURA 9 INSTRUCCIONES ORIENTADAS A DATOS TIPO BYTE.
Las instrucciones tipo bit permiten hacer operaciones para modificar o probar bits, figura 10.

FIGURA 10 INSTRUCCIONES ORIENTADAS A MANEJO DE TIPO BIT.

8
De control y de Literal.-En estas instrucciones el dato esta en memoria de programa
dentro de la misma palabra que contiene la instruccin, se indican en la figura 11, estas
instrucciones son las que caracterizan a la arquitectura Harvard modificada.

FIGURA 11 INSTRUCCIONES DE CONTROL Y LITERAL

Optimizadas para el compilador .- Estas instrucciones se utilizan en los compiladores de


lenguaje C para que sean ms eficientes , son movimientos indirectos es decir con
apuntadores, se muestran en la figura 12.

FIGURA 12 INSTRUCCIONES OPTIMIZADAS PARA COMPILADOR EN C.

1.3.3.-Software de Desarrollo
Es el software que se utiliza para crear cualquier aplicacin o proyecto para
microcontroladores, cada fabricante tiene el propio, pero puede haber mas de un software
de desarrollo por fabricante, por ejemplo Freescale NXP tiene el (Code Warrior) pero otras
compaas como KELLY o IAR pueden tener software de desarrollo para microcontroladores
de Freescale NXP.

1.4.- MPLAB
EL MPLAB es el software de desarrollo de la compaa microchip hay versiones para los
sistemas operativos Windows o Linux, El MPLAB es un software de desarrollo, da en un
solo ambiente los programas para poder desarrollar una aplicacin de microcontroladores,
y controladores digitales de seales, la ltima serie de MPLAB se denomina MPLABX.

9
1.5.- Code Warrior
Es un software de desarrollo para los micros de las familias de Freescale NXP, esta basado
en plataforma eclipse, varios micros usan esta plataforma para sus ambientes integrados
de desarrollo.

Ejemplo 1.1 Creacin de un proyecto con Code Warrior


Los pasos para crear un proyecto son:
1.- Ejecute code warrior
2.-Seleccione la carpeta de trabajo llamada workspace (espacio de trabajo).

3.-File /new/Bareboard Project


4.-En la ventana MCU Bareboard Project dar el nombre del proyecto

5.-En la ventana seleccionar de devices seleccionar MCL25Z128

6.-En la ventana de conexiones seleccionar openSDA


7.-En la ventana de Languaje and Build Tools Options, seleccionar lenguaje C, utilizar
corriente Perspectiva y modo de proyecto StanAlone

Oprimir la tecla de finish


1.6.- C/C+, ENSAMBLADOR Y ICPROG
EL ICPROG es un software para programar alguno de los microcontroladores del fabricante
Microchip, no tiene costo su desventaja es que solo programa algunos de los PICS, y en las
referencias se encuentra la direccin de internet para descargar el software ICPROG,
adems de la informacin para construir el programador.

10
Ejemplo 1.2.-
Escriba un cdigo que realice un ciclo 99 veces, lleve la cuenta de el nmero de iteraciones
en una variable llamada i, escribir el programa en lenguaje C y utilizar las herramientas del
compilador para ver su equivalente a lenguaje C y en cdigo de maquina.
Respuesta.-Esto se realiza con la instruccin for(i=1;u<=100;i++){};En la figura 13 se muestra
el equivalente en ensamblador y cdigo de mquina dado por el MPLABX (ambiente de
desarrollo). En la carpeta de el proyecto buscar la siguiente carpeta
Dist/default/production/ archivo.lst, ; El archivo .lst contiene la informacin en cdigo de
mquina y ensamblador de las instrucciones en C

FIGURA 13 EJEMPLO DE CDIGO EN ENSAMBLADOR Y SU EQUIVALENTE EN C.

11
UNIDAD 2.- PLATAFORMA DE PROGRAMACIN EN C++
Objetivo.

El alumno emplear el compilador en C ++ para programar el microcontrolador seleccionado.

Objetivos especficos.

(a) Que el estudiante tenga la capacidad de crear un proyecto con el ambiente integrado de
desarrollo.
(b) Pueda usar el Editor, compilador, Simulador y programador en la creacin de proyectos.

12
Algunas de las ventajas de programar en C los microcontroladores es que el cdigo es
portable, esto quiere decir que el trasladar un cdigo escrito en C de un microcontrolador
de un fabricante a otro, es poco lo que hay que cambiar para que el cdigo se ejecute en
otro microcontrolador.
El lenguaje C es una herramienta rpida de programacin permite el escribir programas con
pocas lneas de cdigo. El lenguaje C permite la incorporacin de lneas de cdigo en
ensamblador, para partes de un programa que requieran alta rapidez de ejecucin se
pueden insertar lneas de cdigo en lenguaje ensamblador.
Ventajas de C sobre ensamblador [3]: Intuitivo, Tiempo de desarrollo mas rpido, el
compilador hace el trabajo laborioso y repetitivo (sucio), en la industria la mayora de los
diseos se realizan en lenguaje C.

2.0.-AMBIENTE INTEGRADO DE DESARROLLO


Un Ambiente integrado de desarrollo es un conjunto de programas para poder desarrollar
aplicaciones para microcontroladores, contienen por ejemplo un: Editor, Compilador,
Programador, Simulador. Hay algunas versiones que no contienen el Simulador.
El software Programador .- Es un Programa que controla la grabacin de cdigo de mquina
desde una computadora a un microcontrolador, se requiere hardware para grabar al
microcontrolador, el software programador entonces controla al hardware y a la
computadora para realizar este proceso.

2.1.-CREACION DE UN PROYECTO

Dependiendo del microcontrolador seleccionado, se selecciona el ambiente de trabajo


(Software) ,en general se tiene un manejador de proyectos llamado IDE (Integrete
Development Enviroment), el cual se encarga de administrar la edicin del cdigo, la
compilacin y la depuracin. [3]

Ejemplo 2.1 Creacin de un proyecto con el MPLAB X


Los pasos para crear un proyecto son:
1.-Comiense a ejecutar MPLABX dndole doble click al icono del MPLABX

2.-Dentro del Menu Principal seleccione File / New Project.

3.-Debajo de categoras seleccionar Microchip Embeded

13
4.-Debajo de Projects, seleccione StandAlone
5.-Oprima el botn Next

6.-En el Devices escriba PIC16F1619

7.-Oprima el botn next

Aparece Select Header


seleccione no header

9.-Con la Curiosity conectada seleccionarla

10.-Oprima el botn next

11.-Seleccionar el compilador XC8

12.- Oprima el botn next


13.-Oprimir Finish
Pasos para configurar el generador de cdigo (Code Configurator).
1.-Tools/Code Configurator.
2.-Seleccionar System.

3.- Seleccionar Low Voltaje Program Enable(Programacin en bajo voltaje), esta dentro de
el registro Config2.

4.-Oprimir el botn de Generar Cdigo.


5.-Aparece una ventana donde pregunta si genera el main.c , Presionar si (yes).

2.2.-Editor
Es un programa que nos sirve para escribir las instrucciones del programa, ejemplos de editores
son: Block de notas de Windows, Word pad.

14
2.3.- Compilacin
Compilador.- Es un programa que traslada un programa de computadora en otro lenguaje, algunas
veces es un lenguaje intermedio. En el MPLAB el compilador lo traslada a cdigo ensamblador, y
adems hay un programa llamado ensamblador que lo traslada a lenguaje de mquina, que es el
que finalmente lee el microcontrolador.

2.4.-Simulador
El simulador.- Es un programa que sin tener fsicamente al microcontrolador y usando la
computadora y por puro software se realiza la simulacin de la ejecucin de un programa
de el microcontrolador, pudiendo ver valores de registros y variables, en la computadora,
con la finalidad de poder encontrar errores en la programacin antes de grabar el programa
en un microcontrolador.
Para habilitar el simulador en el MPLAB X, se hace de la siguiente forma.

Seleccionar el proyecto y dar click derecho, hasta abajo dar click en propiedades.

Seleccionar Simulador, aplicar y aceptar.

15
FIGURA 14 CONFIGURACIN PARA SIMULAR EN LA FUNCIN MAIN.

Para poder depurar en el simulador desde el main, en el MPLAB X seleccionar:


tools/options/embedded/ en debug startup/Halt at main. Como se muestra en la
figura 14.
Los controles para el simulador se muestran en la siguiente figura: Terminar sesin, detener,
ejecutar, restablecer, ejecutar y detener en la posicin del cursor, correr a nivel
ensamblador, correr a nivel de lenguaje C.

FIGURA 15 CONTROLES PARA EL SIMULADOR Y DEPURADOR.

2.5.-Opciones de Programacin
Las opciones de programacin son almacenadas en registros de memoria Flash llamados
Config1, Config2, Config3 las opciones son las siguientes:

16
Tipo de oscilador:
ECL.- Reloj externo modo de baja potencia (0 a 0.5MHz)
ECM.- Reloj externo modo de media potencia (0.5MHz a 4MHz)
ECH.- Reloj externo de alta potencia (4-32MHZ).
LP.- 32KHZ cristal de baja potencia.
XT.- Cristal de media potencia o modo de resonador cermico arriba de 4 MHz.
HS.- Cristal de alta ganancia o resonador cermico. (4 a 20MHz).-
RC.- Capacitor y resistor externos.
INTOSC.- Oscilador interno de 32KHz a 32MHz.
POWER up TIMER.-Cuando esta habilitado inserta un retardo de 64 milisegundos despus
de un power on reset o un Brown out reset, el retardo es insertado antes de ejecutar
instrucciones.
MCLR.- Es el pin de restablecimiento, cuando esta habilitado genera un reinicio al detectar
un nivel lgico de cero lgico.
CP.-Proteccin de lectura de flash, si esta habilitado no permite el leer la flash.
BOREN.- braun out reset enable.- reinicia la ejecucin de el programa de el
microcontrolador cuando el voltaje de vdd es debajo de cierto nivel de voltaje, este nivel de
voltaje es seleccionable. en la figura siguiente se muestran algunas situaciones que originan
reset por variacin de voltaje.

FIGURA 16 CONDICIONES DE RESTABLECIMIENTO POR VARIACIONES DE VOLTAJE(BROUN OUT RESET).

CLKOUTEN.- Habilitacin de salida de Reloj. Si esta deshabilitado se puede usar el pin


como entrada o salida digital.
IESO.- Dos velocidades de startup habilitadas. Start up.- es el inicio despus de un
restablecimiento.

17
FCMEN.- Habilitacin de falla segura del monitor de reloj.
WRT.- Proteccin segura de escritura en Memoria Flash. Sirve para evitar escritura en
flash no deseada, como por ejemplo ante un transitorio de voltaje, que por error
modificara la memoria de programa.

PPS1WAY.-PPS lock es un modo en el cual todas las selecciones de entradas y salidas no se


les permite cambiar, para prevenir cambios inadvertidos. Cuando este bit es activo solo se
permite quitar la proteccin o activarla una sola vez despus de reset.
ZDC.-Detecta cuando una seal de corriente alterna pasa por el potencial de tierra,
timpicamente 0.75 volts de tierra, este bit controla la habilitacin de el sistema de deteccin
de cruce por cero.
PLLN.-Habilitacion de 4 xPLL, multiplica la velocidad del cristal por 4 para alcanzar mayor
frecuencias internamente en la ejecucin de las instrucciones.
STVREN.-Habilitacin de Reset encaso de desbordamiento hacia arriba o hacia debajo de
el stack (la pila).
BORV.-Seleccin del voltaje de Brown out alto o bajo.
LPBOR.-Habilitacin de Broun out reset, cuando se esta en bajo consumo de energa.
LVP.-Habilitacin de programacin con bajo voltaje. En el caso de usar la tarjeta curiosity
es necesario el tener habilitada la programacin en bajo voltaje.
WDTCPS.- Seleccin del periodo de wath dog timer (Perro Guardian). El Watch dog timer
resetea al microcontrolador en caso de que se quede el programa en un ciclo infinito no
deseado, depende de un reloj diferente al principal. En caso de que no se pase por cierto
lugar de verificacin para limpiar el reloj del watch dog timer, este se desborda causando
un restablecimiento al microcontrolador.
WDTE.- Habilitacin del Wath dog timer, si no se implementa bien la limpieza del reloj del
timer pudiera ser que se tuvieran restablecimientos no deseados.
WDTCWS.-Seleccin de la ventana del Watch dog timer, se tiene diversos tamaos de
tiempo, desde 1ms hasta 2 segundos.
WDTCCS.-Selecciona la fuente de reloj, para el watch dog timer.
Verificar el manual para descripcin completa de las opciones de programacin [2].
Resumen de las opciones de Programacin

18
FIGURA 17 RESUMEN DE OPCIONES DE PROGRAMACIN

19
UNIDAD 3.-Estructura de programacin en C
Objetivo. El alumno programar en lenguaje C ++ sistemas embebidos.
(a) Aplicara la estructura general de un programa en C++, a los microcontroladores.
(b) Declarara las variables segn el tamao requerido para optimizar el uso de la memoria del
microcontrolador.
(c) Utilizar los operadores para manejo de bits.

20
3.0.-Estructura general de programacin en C++ aplicada a los
microcontroladores
La estructura es la siguiente:
#include <htc.h>
//Registros del PIC
#define _XTAL_FREQ 500000 //Usada por XC8 delay_ms(x) macro
// va hasta arriba de los includes y de la funcin Prototipo.
/*funcion prototipo*/
void LcdInit(void);
void SendCmd(char);

//define la velocidad del oscilador interno


//Bits de configuracin the PIC16F1719
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF &
CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & LVP_OFF);
//Opciones de programacin
/* -------------------LATC-----------------
* Bit#: -7---6---5---4---3---2---1---0---
* LED: ---------------|DS4|DS3|DS2|DS1|-
*-----------------------------------------
*/
void main(void)
{
unsigned int delay //crea una variable de 16 bits
OSCCON = 0b00111000;//500KHz velocidad del oscilador
while (1)
{//ciclo infinito
}
}//fin de main
//Funciones
LcdInit(void)
{

` }
void main(void)
{
LcdInit();
}
void Lcd_Init()
{char datlcd;
SendCmd(datlcd);
}
Void SendCmd(char x)
{
++x;
}

21
3.1.- Declaracion de Variables
En la figura siguiente se muestran los tipos de variables soportadas por el compilador XC8 [4].

FIGURA 18 TIPOS DE VARIABLES PARA EL COMPILADOR XC8

Todos los valores enteros son representados en formato Little indian , lo que significa que
el valor menos significativo esta en la direccin menor. Si no se especifica el tipo por default
ser variable signada, excepto para el tipo char el cual siempre ser no signado, el tipo bit
es siempre no signado.
Persistent.- se usa para variables que no sern inicializadas en el RESET, por default todas
las varibles son inicializadas a cero en el reset en las rutinas del START UP, son las rutinas
que se ejecutan despus de reset.
Variables locales.- Estn definidas dentro de una funcin, su clase de almacenamiento es
automtica. Solo existen mientras mientras la funcin se ejecuta, no son inicializadas al
crearse. usualmente creadas en el stack.
VARIABLES ESTATICAS Son variables que mantendrn su valor durante sucesivas llamadas
a la funcin que la contenga.

Ejemplo 3.1.-Declaracion de variables


//Ejemplo de variable local.- Se manda llamar la funcin Retardo, adentro de esta la variable local.

while (1)
{
// Add your application code
Retardo();
}
}
void Retardo(void)
{unsigned long long Cuentas=4294967295;//La variable Local cuenta solo esta definida

22
// en la funcin retardo.
while(Cuentas>0)
{Cuentas--;
}
}
//Ejemplo de variable estatica local
int funcion(void)
{
static int keep=1;
Keep=keep+1;
}

La primera vez que se ejecuta la funcin keep se coloca 1,en las sucesivas ejecuciones,
keep mantendr el valor de la ultima vez que fue ejecutada la funcin.

FIGURA 19 VALORES MNIMOS Y MXIMOS PARA LAS VARIABLES DEL COMPILADOR XC8 [4]

FIGURA 20 RANGO DE LOS TIPOS FLOTANTES.

23
3.2.- Operadores para posiciones de bits.
& (AND) i
| O INCLUSIVA
^ O ESCLUSIVA
>> CORRIMIENTO A LA DERECHA
<< CORRIMIENTO A LA IZQUIERDA
~ COMPLEMENTO A UNO
Ejemplo considere el valor de r=b10101010 y diga el valor despus de ejecutar la
operacin r=r&~7;

unsigned char r=b10101010;


7 0000 0111
~7 11111000
r 10101010
_______________
r&~7 10101000
U1
11111000
10101000
10101010 AND2
Los tres bits menos significativos son forzados a cero.

Ejemplo considere r=0b10101010; diga el valor de r despus de ejecutar r=r|0x0c;

r=10101110, observe los bits 2 y 3 son puestos a 1 dejando los dems bits de r con su valor
anterior.
Ejemplo considere LATA=0b10101010 cual ser el valor de a despus de ejecutar la
operacin?
LATA=LATA^1;

r=10101011, esto resulta de aplicar la (o exclusiva) bit por bit a LATA.

24
Ejemplo. Considere x=00000001; Cul ser el valor de x despus de ejecutar x=x<<2;
x=00000100
3.3.-Operadores de asignacin

Toda expresin de asignacin tiene un valor y un efecto secundario, por ejemplo


Delta=2*12;//Tiene el valor 24 y el efecto secundario guardar este valor en Delta.

3.4.-Operadores relacionales y lgicos

1. En C, el operador igual que (=) se escribe con los caracteres igual-igual (==).
2. En C, el operador distinto que (<>) se escribe con los caracteres admiracin-igual (!=).

OPERADORES LGICOS
&& i Lgica
|| o Lgica
! Negacin
Ejemplo de operadores lgicos A=0b10101010; B=0b10101010;
If (A && B)
printf(se ejecuta verdadero);
else

25
La evaluacin de el anterior if es: A es verdadera y B es verdadera, y al evaluar el i (and)
verdadero con verdadero da verdadero.
Ejemplo A=0b10101010; B=0b01010101;
If(A & B)
{printf(no se ejecuta);}
else {printf(Se ejecuta el else por ser falsa la evaluacion);}
U1
10101010
00000000
01010101 AND2

Se realiza la operacin bit a bit y da de resultado 00000000 el cual es falso al evaluar.

3.5 Funciones e Interrupciones


Las funciones en lenguaje C son subrutinas en lenguaje ensamblador, son grupo de
sentencias que realizan una actividad.
Una funcin puede tener varios parmetros de entrada o ninguno y regresar un parmetro
o ninguno.
Todo programa en C tiene que tener una funcin llamada main, despus de Reset, se
ejecuta la funcin main, dentro de main se mandan llamar otras funciones.
El uso de una funcin requiere el uso de una declaracin llamada funcin prototipo. Cuando
se pasan argumentos, en realidad se pasan copias de estos argumentos, usando el Stack. El
dato regresado por una funcin siempre ser convertido al tipo correcto antes de ser
regresado. Si se quiere cambiar el tipo de regreso se utiliza el operador cast. Si no se escribe
la palabra return en la funcin la funcin prototipo correspondiente debe de identificarla
como tipo void.

Ejemplo.- El siguiente programa declara dos funciones prototipo LcdInit y SendCmd, en la


funcin main se manda llamar a LcdInit que a su vez llama a SendCmd
/*funcion prototipo*/
Void LcdInit(void);
Void SendCmd(char);

void main(void)
{LcdInit();
26
}
void Lcd_Init()
{char datlcd
SendCmd(datlcd);
While(1)
{
}
}
Void SendCmd(char x)
{++x;
}
Una Interrupcin proporciona un camino para ejecutar una secuencias de instrucciones
ante un requerimiento de un perifrico, a diferencia de una subrutina en el cual depende
de en donde se coloque el llamado a la funcin, en la interrupcin el salto se hace cuando
el perifrico coloca la bandera en 1.
Requisitos bsicos para una interrupcin son:
Bandera correspondiente del perifrico en cero.
Habilitacin de interrupcin del perifrico en uno.
Habilitacin Global de interrupciones en uno.
En la figura siguiente se muestra la lgica de las banderas y habilitaciones para interrumpir
al CPU.

FIGURA 21 LGICA DE BANDERAS Y HABILITACIN DE INTERRUPCIN.

27
Ejemplo.- El siguiente programa muestra el programa para hacer que un led prenda y
apague utilizando interrupciones.
U1
V1 VDD VSS
5V CCP2/P2A/T1CKI/SD02/T1OSI/OSC1/CLKIN/RA5 RA0/AN0/CPS0/C1IN+/VREF-/DACOUT/ICSPDAT/ICDDAT
T1G/P2B/CLKR/T1OSO/CLKOUT/OSC2/CPS3/AN3/RA4/SS2 RA1/AN1/CPS1/C12IN0-/VREF+/SRI/ICSPCLK/ICDCLK
VPP/T1G/RA3/MCLR RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0
MDCIN2/DT/RX/P1A/CCP1/RC5 RC0/AN4/CPS4/C2IN+/P1D/SS2
MDOUT/CK/TX/P1B/SRNQ/C2OUT/RC4 RC1/AN5/CPS5/C12IN1-/P1C/SDO2
MDMIN/P2A/CCP2/P1C/C12IN3-/CPS7/AN7/RC3 RC2/AN6/CPS6/C12IN2-/P1D/P2B/MDCIN1
CCP4/CPS8/AN8/RC6/SS1 RB4/AN10/CPS10/SDA1/SDI1
SDO/CPS9/AN9/RC7 RB5/AN11/CPS11/RX/DT/SDA2/SDI2 LED4
SCK2/SCL2/CK/TX/RB7 RB6/SCL1/SCK1
APHHS1005CGCK
PIC16F1829-E/P

R1
470,5%

FIGURA 22 DIAGRAMA DEL EJEMPLO PARA PRENDER UN LED CON INTERRUPCIN, UTILIZAR PIC16F1619.
#include "mcc_generated_files/mcc.h"

void main(void) {
SYSTEM_Initialize();
TMR0_Initialize();
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
while (1)
{
}
}
/*Fin de archivo
Archivo donde esta la interrupcin (Interrupt_Manager)
void interrupt INTERRUPT_InterruptManager(void) {
Manejador de interrupcin*/
if (INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
{
TMR0_ISR();
LATCbits.LATC0 ^= 1;
}
else {
/*si entro al vector de interrupcin pero no fueron las banderas ni la habilitacin de TMR0
la que la activo.*/
}
}//Fin de archivo INTERRUPT_InterruptManager(void)
//archivo tmr0.c

void TMR0_Initialize(void) {
// Selecciona las opciones del TMR0

// Prescalador 1:256; TMRSE Incrementa_hi_lo; mask the nWPUEN and INTEDG bits
OPTION_REG = (OPTION_REG & 0xC0) | 0xD7 & 0x3F;

28
// TMR0 12;
TMR0 = 0x0C;

// Carga TMR con el valor de recarga


timer0ReloadVal = 12;

// Limpia la bandera de interrupcin


INTCONbits.TMR0IF = 0;

// Habilitacin de la interrupcin de TMR0


INTCONbits.TMR0IE = 1;
}
//Funcin para leer el TMR0
uint8_t TMR0_ReadTimer(void) {
uint8_t readVal;

readVal = TMR0;

return readVal;
}

void TMR0_WriteTimer(uint8_t timerVal) {


// Write to the Timer0 register
TMR0 = timerVal;
}

void TMR0_Reload(void) {
// Write to the Timer0 register
TMR0 = timer0ReloadVal;
}
//La funcin siguiente se conoce como servicio de interrupcin, es ah donde se coloca lo que se
desea que realice la interrupcin
void TMR0_ISR(void) {

// Limpia la bandera de interrupcin TMR0


INTCONbits.TMR0IF = 0;

TMR0 = timer0ReloadVal;//Recarga el valor para la siguiente interrupcin

// Agregue aqu su propio cdigo para ser ejecutado en la interrupcin.


}

/**
Fin de Archivo
*/

29
3.6.- Macros
Una Macro es una expansin de caracteres.

#define nombre codigo

Ejemplo

#define cuadrado(t)*(t)

Printf(\t%d\t%f\t%f\n,I,c,cuadrado(c));

//En este caso square(c)=c*c

//Ejemplo.- El siguiente macro calcula el valor absoluto.


#define abs(t) (((t)>=0) ? (t): -(t))
do {
}
while(abs(c) >=0.001);//realizara el Do mientras valor absoluto sea mayor de 0.001

Cuando se escriba una definicin de macro, rodee todos los argumento y funciones con parntesis,
de lo contrario podra pasar lo que a continuacin se muestra. #define cuadrado(t) t*t suponga que
la macros se usa de la siguiente manera x=cuadrado(y+3). La expansin de caracteres resultara en
x=y+3*y+3 /*ya que dara (y) mas tres multiplicado por (y) mas 3, que no es el cuadrado de (y+3)*/

4.-Perifricos Analgicos
4.1.-Introduccion a la conversin analgico digital
El convertidor analgico digital convierte las seales analgicas en Digitales. La figura
siguiente muestra una seal de la cual se toman muestras cada cierto intervalo de tiempo
y luego se reconstruye.
La mayora de los microcontroladores tienen un convertidor analgico digital y un selector
asociado a varios pines, pero hay que tomar en cuenta que se realiza una sola conversin a
la vez, usando el selector de pines se pueden convertir varios canales dando la impresin
que es simultaneo el proceso de conversin de varios canales, el tiempo de conversin
usualmente es del orden de microsegundos.

30
FIGURA 23.- SEAL ANALGICA Y DIGITAL.

4.1.1.- Inicializacin del convertidor A/D


La funcin (ADC_Initialize ) que se muestra a continuacin, muestra los pasos para inicializar
el convertidor analgico digital.
void ADC_Initialize(void)
{
ADCON0 = 0x01;

//Se selecciona canal 0, DONE =0 y se prende el ad,ADON=1.


// ADPREF VDD; ADNREF VSS; ADFM right; ADCS FOSC/16;

//Justificado a la derecha(0),Fosc/16(101),-,ADREF+=pin VDD


ADRESL = 0x00;
ADRESH = 0x00;
}
Configuracin de los pines analgicos
Para configurar los pines analgicos, se configura el pin como entrada en el registro
correspondiente TRIS, y en el registro ANSEL se indica que sera entrada analgica.
LATA = 0x00;
TRISA = 0x3F;//0b00111111
ANSELA = 0x17; //0b00010111 Con uno se configura entrada analgica.

31
4.1.2.-Proceso de Conversin
//Pot_AN3 = 0x03, que significa canal AN3, RA3
adc_result_t ADC_GetConversion(adc_channel_t channel) {
// Selecciona el canal A/D
ADCON0bits.CHS = channel;//cannel =0x03

// Prende el ADC module


ADCON0bits.ADON = 1;
// Retardo para adquisicin
__delay_us(ACQ_US_DELAY);
// Inicia la conversin
ADCON0bits.GO_nDONE = 1;

// Espera el termino de la conversin


while (ADCON0bits.GO_nDONE) {
}

// Regresa el resultado
return ((ADRESH << 8) + ADRESL);
}
4.1.3.-Asignacin de canal o mltiples canales de entrada
En la figura siguiente se muestra el selector de canales de acurdo al valor que tiene el
CHS4:CHS0 se selecciona el pin o canal analgico a convertir, pero solo uno a la vez si se
quieren varios canales se requiere volver a realizar el procedimiento de conversin como si
fuera un solo canal pero cambiando el canal seleccionado.

FIGURA 24 SELECCIN DEL CANAL

32
4.1.4.-Operacin en mltiples o un solo canal

Para realizar el proceso de leer varios canales. En la funcin ADC_GetConversion


(channel_AN4), colocar el canal que corresponda, en este caso el canal AN4
//Ejemplo de lectura de mltiples canales(2)
ADC_Initialize();//Inicializacin del A.D. dos entradas analgicas.
while (1)
{
RESAD=ADC_GetConversion(channel_AN4);//Lectura del el primer canal
BintoBCDCInt(RESAD);//Conversin de Binario a Decimal
EUSART_Write(Tenk);//Transmisin serial del resultado
EUSART_Write('.');
EUSART_Write(Thou);
EUSART_Write(Hund);
EUSART_Write(Tens);
EUSART_Write(Ones);
EUSART_Write(' ');//Espacio para separar dos resultados
//Lectura de el segundo canal
RESAD=ADC_GetConversion(channel_AN5);//Lectura del segundo canal
BintoBCDCInt(RESAD); //Conversin de Binario a Decimal
EUSART_Write(Tenk);//Transmisin del Segundo resultado.
EUSART_Write('.');
EUSART_Write(Thou);
EUSART_Write(Hund);
EUSART_Write(Tens);
EUSART_Write(Ones);
EUSART_Write(' ');//Espacio
EUSART_Write('\r');//Retorno de carro
EUSART_Write('\n);//Nueva linea
}

FIGURA 25 CONFIGURACIN DE LAS TERMINALES EN EL CONFIGURADOR DE CDIGO PARA DOS CANALES


ANALGICOS.

En la figura anterior observar que las terminales analgicas estn configuradas como analgicas y
sin WPU.

33
4.1.5.- Registros de Resultado

Por ejemplo si el resultado es 1023=1111,1111,11


Justificado a la Izquierda
ADRESH:ADRESL

MSB LSB
11111111 11000000

34
Justificado a la Derecha 1023
ADRESH:ADRESL

MSB LSB
00000011 11111111

FIGURA 26 CONVERTIDOR A/D JUSTIFICADO A LA DERECHA Y A LA IZQUIERDA.

4.1.6.- Registros de estado y control


ADCON0
---
<CHS4:CHS0> GO/GONE ADON

-- No implementado

CHS4:CHS0.- Seleccin de canales analgicos

GO/DONE.- Bit de status de la conversin A/D


1=Conversin en Proceso, se pone un uno en este bit para iniciar conversin
0=Conversin terminada.
ADCON1

ADFM=1.-Justificado a la derecha los mas significativos son rellenados con ceros.


ADFM=0.-Justificado a la izquierda los menos significativos son rellenados con ceros.
ADCS.-velocidad de conversin del convertidor A/D
000 = FOSC/2
001 = FOSC/8
010 = FOSC/32
011 = FRC (reloj alimentado de oscilador RC)
100 = FOSC/4
101 = FOSC/16

35
110 = FOSC/64
111 = FRC Reloj alimentado de oscilador RC).
ADNREF: A/D Bit de configuracin de el voltaje de referencia negativo.
0 = VREF- Es conectado a VSS
1 = VREF- Es conectado al pin de referencia VREF-.
ADPREF<1:0>: A/D Bit de configuracin de el voltaje de referencia positiva.
00 = VREF+ is connected to VDD
01 = Reserved
10 = VREF+ es conectado a VREF+ pin(1)
11 = VREF+ es conectado a la referencia de voltaje interna modulo (Fixed Voltage Reference FVR).

4.2.- Puertos de el Microcontrolador


EL modelo de entrada de un puerto de un microcontrolador Pic16F1619 es el mostrado en
la figura siguiente, la mayora de los PICS tiene este mismo modelo.

FIGURA 27 MODELO DE ENTRADA EN MICROCONTROLADOR PIC16F1619 [2]

Las siguientes consideraciones son importantes


Si se desea escribir en el Puerto escribir en el registro Latch, si se desea leer un puerto
leerlo en el registro correspondiente del puerto.
TRIS.- Habilita o deshabilita el Pin como salida, default es entrada, ceros son salidas unos
entradas.
LAT.-Latches de salida , dan la escritura a los registro(latch) de salida, se pueden leer si se
leen lo que se obtiene es el ultimo valor escrito en el registro (latch).
WPU.-Resistencia de Pull up dbiles, proporciona un pull up de baja corriente, para
ahorrar en resistencias externas, la mayora de los pines tienen esta caracterstica.
Slow Rate.- Para limitar la velocidad de cambio de un pin, para evitar radie altas
frecuencias ocasionando ruido. Esta limitacin esta solo disponible en ciertos pines.

36
Ejemplo.- Escribir un programa que cada vez que se oprima un botn prenda un led este
permanece encendido solo mientras esta oprimido el botn. Se considera el botn
conectado en RA2 y el led en RC0.

FIGURA 28 PROGRAMA PARA LEER UN BOTN Y SEGN SU ESTADO PRENDER UN LED.

Ejercicio parpadea un led cada x tiempo

FIGURA 29 PROGRAMA QUE HACE QUE PARPADE UN LED.

Nota .- al usar el PICKit3 con la tarjeta starter seleccionar en propiedades que el voltaje de
alimentacin lo tome del PICKIT3

37
FIGURA 30 CONFIGURACIN PARA ALIMENTAR DE EL PICKKIT3 A LA APLICACIN.

4.3.- Interfase de comunicacin serie sncrona y asncrona


La comunicacin serial sncrona o asncrona se puede implementar por software en
cualquier microcontrolador, en algunos de los microcontroladores se tiene un perifrico
especial dentro del microcontrolador que contiene generadores de reloj, registros de
corrimiento y buffers de datos, este es el perifrico contenido en el PI16F1619, se muestra
su diagrama a bloque en la fig. 30. Puede ser configurado como full dplex asncrono, o half
dplex sncrono, el sistema asncrono es til para comunicarse con computadoras y
terminales, existen varios protocolos por ejemplo RS422, RS485, dependiendo el integrado
externo al PIC, se puede cambiar de RS422 a RS485, o RS232. En el protocolo RS485 usando
dos hilos con protocolo diferencial se alcanza hasta un kilometro de distancia, con el
protocolo RS232 solo se puede alcanzar tpicamente entre 10 a 50 metros dependiendo de
la velocidad de transmisin y otras caractersticas.
Full Duplex.- Transmisin y recepcin simultanea.
Half Duplex.- Transmisin en ambos sentidos pero no simultanea. Sistema sncrono(SPI
Serial Periferal Interface). En este caso se transmite una seal de reloj, se envan en serie
los datos por un pin de salida, y se reciben los datos seriales en otro pin, por cada dispositivo
que se conecte se requiere de una lnea llamada selector de esclavo, el micricontrolador
que genera la seal de reloj se denomina Maestro, el que la recibe esclavo. Es til para
comunicarse con dispositivos perifricos como : circuitos integrados externos como
convertidores analgicos digital y digital analgico, EEPROM seriales se muestra un ejemplo
de comunicacin sncrona en la figura 31. El SPI es denominado por algunos fabricantes
Microwire plus.

FIGURA 31 PERIFRICO DE COMUNICACIN SERIAL CONTENIDO DENTRO DEL PIC16F1619.

38
FIGURA 32 EJEMPLO DE COMUNICACIN SERIAL SNCRONA.

4.3.1.- Formato de datos


El formato usado es no regreso a cero. En la comunicacin asncrona el formato no regreso
a cero.-Conocido en ingles por NZR significa que el voltaje no regresa a cero lgico entre
unos consecutivos. Esto se muestra en la figura siguiente.

FIGURA 33 EJEMPLO DE NO REGRESO A CERO.

FIGURA 34 FORMA DE ONDA EN TRANSMISIN ASNCRONA EN EL PIC.

Para conectar un microcontrolador con un puerto RS232 de una computadora se puede


utilizar el circuito integrado max232, esto es por que el RS232 maneja voltajes de mas 12 a
menos 12 y el microcontolador de 0 a 3v o a 5v, ademas se invierte la seal, esto se muestra
en las figura 35 y 36.

FIGURA 35 EL CTO. MAX232 RECIBE TTL Y SALE RS232.

39
FIGURA 36 SEAL DE ENTRADA Y SALIDA EN EL CIRCUITO. MAX232

FIGURA 37 PAQUETE DE TRANSMISIN DE DATOS COMUNICACIN ASNCRONA.

FIGURA 38 CONEXIN DEL MAX232.

4.3.2.- Operacin de transmisin


La siguiente funcin inicializa el transmisor y el receptor

void EUSART_Initialize(void) {
// Configura el EUSART.

40
BAUDCON = 0x48;// configura la velocidad de trasmisin. BAUD=Velocidad
TXSTA = 0x26;
// Baud Rate = 9600; SPBRGL 12=0x0c;
SPBRGL = 0x0C;
// Baud Rate = 9600; Conciderando una oscilador interno de 500KHZ y y PLL on;
SPBRGH = 0x00;
}

La siguiente rutina es para transmisin. Esta rutina verifica, antes de escribir en el puerto
serie, revisa que el registro de transmisin este vaco, si no est vaco espera hasta que este
vaco para transmitir el siguiente valor. El bit que indica si esta vacio es TXIF, que es la
bandera de transmicin.
void EUSART_Write(uint8_t txData)
{
while (0 == PIR1bits.TXIF) {}
}
4.3.3.- Operacin de recepcin
La siguiente funcin realiza la lectura de la comunicacin asncrona.
uint8_t EUSART_Read(void)
{
while (!PIR1bits.RCIF)
{//lee el registro de recepcin se queda esperando hasta que este lleno.
}
if (1 == RCSTAbits.OERR)
{//Pregunta si hubo algn error en la recepcin,
// EUSART error - restart
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1;
}
return RCREG;
}
4.3.4.- Deteccin de errores
La deteccin de errores se denomina error de Framing en el receptor. El error de framing
indica que el bit de parada no fue detectado. Este bit es llamado FERR y se encuentra en el
registro RCSTA. No es necesario el limpiar este bit [2], basta con leer un dato del buffer FIFO
y automticamente se limpia el bit. Si todos los datos que estn en el FIFO presentan error
de FRAME no se limpia el error aunque se lea el buffer.
FIFO.-De sus siglas en ingles primero en entrar primero en salir, es en este caso compuesto
por dos registros, es decir se pueden recibir dos caracteres sin vaciar los registros antes de
generar un error de Framing.
Otro tipo de error es llamado Error de OVERRUN. El bit de over run se llama OERR y esta en
el registro RCSTA. El buffer del FIFO contiene mximo dos caracteres, si un tercer carcter

41
carcter es transmitido antes completamente antes de que se accese al FIFO se genera error
de over run [2]. Los caracteres que estn en el FIFO se pueden leer pero no se aceptan
nuevos caracteres hasta que se limpie el error. El error puede ser limpiado colocando un
cero en el BIT CREN bit del registro RCSTA, o colocando un cero en el bit SPEN del registro
RCSTA.
4.3.5.- Registros de Estado y de Control
Los registros de estado y de control de la comunicacin serial son los siguientes:
TXSTA,RC1STA, BAUD1CON. El TXTA, es el registro de status y control, tiene bits que
controlan la transmisin, de los bits principales estn: TRMT.- Indica con uno que el registro
de corrimiento de transicin de salida esta vaco, en otras palabras si esta vaco se puede
escribir otro dato.

Ejemplo de transmisin
while (1)

{
EUSART_Write(0x30);
EUSART_Write(0x31);
EUSART_Write(0x32);
EUSART_Write(0x0a);
EUSART_Write(0x0d);
}
/ /El programa anterior imprime en la terminal (012) retorno de carro y nueva lnea.

Ejemplo de Recepcin
El programa siguiente lee el Puerto serial y dependiendo el dato recibido prende un led.
while (1)

Lectura=EUSART_Read();
if(Lectura==0x31)
{LATAbits.LATA1 = 1;// se puede escribir tambin IO_RA1_SetHigh()
LATAbits.LATA2 = 0;
LATCbits.LATC5 = 0;

42
}
else if (Lectura==0x32)
{LATAbits.LATA1 = 0;
LATAbits.LATA2 = 1;
LATCbits.LATC5 = 0;
}
else if (Lectura==0x33)
{ LATAbits.LATA1=0;
LATAbits.LATA2=0;
LATCbits.LATC5=1;
}
}

5.-Perifericos Digitales
5.1.-Introduccin
El sistema temporizador es un sistema de reloj que permite generar seales elctricas de
cierta duracin de tiempo o medir duracin de pulsos, los microcontroladores suelen tener
varios sistemas de reloj, se les conoce como timers y se numeran progresivamente,
usualmente un microcontrolador tiene varios de estos, en este caso describiremos el
sistema de reloj del TMR1 del PIC16F1619, sin embargo este sistema de reloj (TMR1) esta
presente en la mayora de los microcontroladores de la compaa Microchip.

5.2.- Sistema Temporizador


El sistema Temporizador TMR1 es un reloj de 16 bits con las siguientes caractersticas:
-Contador de 16 bits, fuente interna o externa para el reloj.
-Prescalador de 2 bits.
-Oscilador dedicado de 32KHZ.
-Salida de comparacin sincronizada.
-Habitacin del conteo inicializada por varias fuentes.
-Interrupcin en sobre flujo(over flow).
-Despertar por sobre flujo.
-Seleccin de la polaridad.

43
5.2.1- Estructura del Sistema Temporizador

FIGURA 39 DIAGRAMA A BLOQUES DE EL TMR1 [2]

En la figura anterior se muestra el sistema de reloj, el cual se basa en un contador de 16


bits el cual incrementa cuando le llegan los pulsos, existen varias opciones para seleccionar
que pulsos incrementaran al contador, tambin existen varias opciones de un prescalador
(divisor)seleccionable entre 1,2,4,8, se pueden seleccionar que pasen los pulsos directos o
que pasen por un circuito de sincronizacin, cuando ocurre un sobre flujo se coloca un bit
llamado TMR1O(Sobre flujo de el TMR1) opcionalmente este puede activar una
interrupcin.
Las entradas para el contador del timer1 se muestran en la figura anterior y pueden ser :
T1OSO, T1OSI,T1CKI, FOSCINT,FOSC/4, sensor capacitivo, TMR1ON permite o no que se
incremente TMR1.
T1OSO, T1OSI.- En estas terminales se conecta el cristal en caso requerido.
T1OSCEN.-Habilita oscilador por cristal o oscilador externo.
TMR1SC.- Selecciona la fuente de oscilador puedes ser interno.

44
5.3.- Registros de control y de estado

T1CON.-Registro de control del Timer 1.


TMR1CS.-Seleciona si es un reloj externo o cristal.
T1CKPS.-Selecciona el Prescalador
T1OSCEN.-Habilitacin de oscilador para usar cristal externo.
T1SYNC.- Sincronizacin de reloj externo con las seales de reloj interna FOSC.
TMR1ON.- Habilitacin del TIMER1.

TMR1GE.- Habilitacin del Gatillo del Timer1, si tiene un cero el TMR1 opera de manera
normal si tiene uno el TMR1 es controlador por el perifrico de disparo (gate).
T1GPOL.-Si T1GPOL=1 El Timer1 cuenta cuando el Gate es alto, si T1GPOL=0 cuenta
cuando el disparo es bajo.
T1GSPM.- T1GSPM=1 El disparo es en el modo de un solo pulso. T1GSPM=0 EL disparo es
en el modo de un solo pulso esta deshabilitado.
T1GGO/DONE.- T1GGO/DONE = 1 ,La adquisicin por el disparo de un solo pulso esta en
modo de espera. Si T1GGO/DONE = 0 La adquisicin por disparo de un solo pulso se ha
completado o no ha sido completado.
T1GVAL.-Indica el estado actual de el disparo del Timer1.
T1GSS.-Selecciona la fuente del disparo
00.-Disparo por timer1
01.-Sobreflujo del Timer1
10.-Comparador1 sincronizado
11.-Comparador2 sincronizado
5.4.-Capturas de entrada
Las capturas de entrada utilizan al TMR1, el cual se debe encontrar incrementndose,
cuando un evento ocurre en el pin CPPx, el registro de captura de 16 bits, guarda el valor
del registro de 16 bits del timer1, es como si se le tomara una fotografa al valor de TMR1
en el momento de el filo presente en el pin correspondiente y guardada esta en el registro
CCP, la deteccin del filo puede ser por: cada filo de subida, cada filo de bajada, cada cuatro
filos de subida o cada 16 filos de subida. Se puede generar una interrupcin al ocurrir la
captura. Para medir el periodo o ancho de pulso de una seal es necesario tener dos
capturas, pero solo se tiene un registro de captura, por lo que se debern ingresar las
instrucciones adecuadas para guardar en una variable creada por el usuario la captura
anterior. Las aplicaciones de una entrada por captura son:

45
Medir capacitancia.
Medir la velocidad de motores o bandas
Medir distancia usando sensores ultrasnicos. Se enva un Pulso y se mide el tiempo que
tarda en regresar el pulso.

FIGURA 40 DIAGRAMA A BLOQUES DE EL PERIFRICO DE ENTRADA POR CAPTURA.

FIGURA 41 MEDICIN DE PERIODO UTILIZANDO DOS EVENTOS CONSECUTIVOS DE CAPTURA.

En la figura anterior se observa una seal cuadrada, durante los filos de subida se copian los
valores que tiene en ese momento el Contador TMR1x a el Registro CCPx. Para poder medir
el periodo de una seal se requiere el tener por lo menos una variable auxiliar para tener el
periodo, la copia del CCPx a la variable auxiliar se realiza en el servicio de interrupcin.
El procedimiento dentro de la interrupcin es el siguiente.
New y Old son variables auxiliares
Old=New;//Se respalda New antes de ser Actualizada
New=CCPx;// EL new actualizado es el valor de la captura
Periodo=New-Old;
5.4.1.- Comparaciones de salida
Las comparaciones de salida permiten generar pulsos de diversa duracin utilizando relojes
internos del microcontrolador, en este caso el TMR1. El TMR1 y el registro CCPRxH:L(es un
registro de 16 bits) siempre se estn comparando bit a bit, por hardware interno del
microcontrolador como se muestra en la figura 42, y cuando existe una igualacin de ambos
(MATCH) se genera una salida la cual activa una bandera llamada CCPxIF=1, esto tambin
puede generar una interrupcin; dependiendo de la lgica de salida se permiten varias
acciones como por ejemplo poner un Pin a 1, ponerlo a cero, invertirlo (toggle), adems se
puede configurar que no se genere ningn cambio en el PIN.

46
FIGURA 42 DIAGRAMA A BLOQUES DE EL PERIFRICO SALIDA POR COMPARACIN.

5.6.- Interrupcin en Tiempo Real


Las interrupciones de tiempo real son interrupciones que se activaran cada tiempo
determinado, estas se pueden realizar usando los relojes como por ejemplo el timer 1
explicado anteriormente. El tiempo real en el lenguaje de la electrnica significa que el
proceso en el dispositivo se ejecuta lo suficientemente rpido para poder controlar el
sistema que se desea, por ejemplo si son seales de un invernadero los cambios de
temperatura y humedad son lentos del orden de minutos, por lo que la ejecucin de rutinas
de minutos daran un control en tiempo real, por el contrario si se desea controlar o medir
seales de la lnea de 60Hz ( la energa elctrica que tenemos en nuestras casas), rutinas en
el orden de segundos serian no satisfactorias, en este caso se requiere rutinas del orden de
un milisegundo o menos.
Las interrupciones de tiempo real en los microcontroladores PIC se pueden implementar
mediante el uso de los relojes como el TMR1 TMR0 , si se requieren relojes, de segundos
o mltiplos, o un reloj calendario, para tener la mejor cuenta de segundos se recomienda
el usar un cristal externo de 32.768KHZ, conectado al Timer1, para alcanzar mayor precisin
y exactitud. Un oscilador de bajo consumo de potencia esta construido en el PIC16F1619
entre los pines T1OSI y T1OSO, este oscilador es usado en conjunto con un cristal externo
que deber ser conectado en los pines antes mencionados. Se habilita una interrupcin y
cada vez que se ejecute esta, se incrementa un contador de segundos.
Cuando se requieren generar pulsos o retardo de tiempo pequeo del orden de
microsegundos es aconsejable usar funciones de retardo, las cuales tienen una variable la
cual se va decrementando o incrementando hasta llegar a cero y dependiendo cuanto
tiempo se tardan en llegar a cero es el tiempo de duracin de la funcin de retardo, mientras
se este ejecutando estas funciones la unidad aritmtica lgica no ejecuta otras instrucciones
a menos que estn habilitadas las interrupciones, es por eso que se aconseja no usar
retardos muy grandes si se usa la tcnica de decremento.
5.7.- Acumulador de Pulsos
Sirve para contar los pulsos que llegan a un Pin, para esto se pude usar varios de los relojes,
por ejemplo el TMR0, se puede configurar para que cada vez que llegue un filo de subida o
bajada, se incremente el valor del TMR0, si se tiene una base de tiempo por ejemplo de un
segundo, es decir se tiene una interrupcin que se activa cada segundo, cada vez que entre
la interrupcin de un segundo se ve en el registro del TMR0 cuantos pulsos llegaron, es decir
se cuenta en un segundo cuantos pulsos conto TMR0, se pasa esto a una variable auxiliar y

47
se limpia el TMR0, y se programa la siguiente interrupcin que ocurra en el siguiente
segundo, de esta manera se puede hacer un frecuencmetro, contando el nmero de pulsos
que llega en un segundo.
5.8.- Generador de PWM
La seal de PWM(Modulacin por ancho de pulso), es una seal cuadrada, como la que se
muestra en la figura siguiente: la seal cambia entre un valor alto y uno bajo, se puede
generar un PWM de una frecuencia dada, la frecuencia y por ende el periodo permanecen
constantes. Lo que se varia es la relacin entre el tiempo que esta en uno y el tiempo que
esta en cero la seal. Mientras mayor sea el tiempo que la seal este en uno respecto al
periodo de la seal, mayor ser el valor promedio de dicha seal, si esta seal se aplica a un
motor este girara mas rpido mientras mayor sea el tiempo que esta en uno. En la figura 43
se muestran diversas relaciones de ancho de pulso los cuales tendrn diferentes niveles de
voltaje promedio. En la Figura 45 se muestra el diagrama tpico para la conexin de un
motor de corriente directa, para variar por PWM su velocidad. El transistor a usar depende
de la corriente que consume el motor y la resistencia de base se debe calcular para que el
transistor quede saturado con el nivel alto de voltaje. Son ejemplos de aplicaciones:
Conversin Digital Analgica, Control de Motores Elctricos, Generacin de tonos,
Generacin de Ondas Senoidales. Es posible con un PWM tener un Convertidor de Digital a
Analgico, si se coloca un filtro pasa bajos que elimine la frecuencia fundamental de el
PWM, con lo que se tendr un nivel de tensin de directa como muestra la figura 43 en la
lnea promedio.

FIGURA 43 SEAL DE PWM.

48
FIGURA 44 SEAL PWM CON DISTINTOS CICLOS DE TRABAJO(DUTY CYCLE).

FIGURA 45 ESQUEMTICO DE CONTROL DE VELOCIDAD DE UN MOTOR DE C.D. CON PWM.

La tensin promedio=(Amplitud*Ton)/TPeriodo
El Periodo del PWM en el PIC, se calcula con la siguiente ecuacin
Internal clock=500KHz
TOSC=1/500000=2useg
PR2=255
PWM PERIODO = (PR2+1)*4*TOSC*(TMR2 PRESCALER)=256*4*2us*1=0.002048
FrecPWM=1/PWMperiodo=488.28Hz
El ciclo til es calculado
ANCHO DE PULSO = CCPR *TOSC * (PRESCALADOR)

EJEMPLO DE PROGRAMA PARA PWM.


El archivo main:

uint16_t dutycycle;
void main(void) {

49
SYSTEM_Initialize();
PWM3_Initialize();
while (1) {
dutycycle=500;
PWM3_LoadDutyValue(dutycycle);
}
}//Fin del main
// funciones de inicializacin del PWM

void PWM3_Initialize(void) {
PWM3EN Habilita; PWM3POL Polaridad en alta;
PWM3CON = 0x80;
//Carga el ciclo activo =0x7FC0
PWM3DCH = 0x7F;
PWM3DCL = 0xC0;
// Selecciona el Timer
CCPTMRSbits.P3TSEL = 0x0;
}
void PWM3_LoadDutyValue(uint16_t dutyValue) {
//Escribe los 8 bits mas significativos del duty en el registro PWMDCH
PWM3DCH = (dutyValue & 0x03FC) >> 2;
//Escribe los 8 bits menos significativos del duty en el registro PWMDCL
PWM3DCL = (dutyValue & 0x0003) << 6;
}
//////////queda
Xxxx,xxxx & 03 =0000,00xx, despus de correrlo 6 lugares a la izquierda
Xx00,0000;

6.- APLICACIN FINAL


6.0.- Descripcin de trabajo final.
Los microcontroladores, debido a ser dispositivos programables y con una gran cantidad
de perifricos y su relacin costo beneficio, se utilizan ampliamente en: Medicina,
Domtica, Alarmas, Seguridad, Instrumentacin, control, Industria en General y
Automotriz, electrodomsticos, ahorro de energa. Para esta gua de estudio se presenta
como ejemplo de una aplicacin, un medidor de distancia ultrasnico. La aplicacin aqu
presentada mide la distancia utilizando transductores ultrasnicos y muestra el resultado
de la medicin en 3 displays de 7 segmentos.
6.1.-Diseo de la circuitera exterior.
En la figura 46 se presenta el diagrama a bloques:
Desplegador 7 segmentos.- Tienen 3 displeys de 7 segmentos de nodo comn, estn
multiplexados todos los segmentos, mediante el nodo comn se selecciona cual prende.

50
Transistor.- En el segundo mdulo se tienen tres transistores uno por cada display de 7
segmentos, se usan transistores para poder manejar el nivel de corriente requerido para
cada nodo comn.
El bloque de PIC16F1619.- Es el microcontrolador usado en esta aplicacin.
El modulo de Tx y Rx, esta formado por un transductor ultrasnico, el cual enva rfagas
de sonido de 40Khz y mide cuanto tiempo tardan en regresar. Y enva el resultado de la
distancia del objeto como un pulso al microcontrolador.

FIGURA 46 DIAGRAMA A BLOQUES DE APLICACIN FINAL

51
FIGURA 47 DIAGRAMA ELECTRNICO

6.2.- Programacin del microcontrolador.

El programa esta dividida en dos partes: ciclo principal e interrupciones.

52
INTERRUPCIN

LATC=0xFF; LATBbits.LATB4=0;
APAGASEGMENTOS
LATBbits.LATB5=1;

LATBbits.LATB6=1;

LATC=TDig7s[RAMVi
deo(2)];

i=0 LATBbits.LATB4=1;

LATBbits.LATB5=0;
NO
LATBbits.LATB6=1;

i=1 LATC=TDig7s[RAMVi
deo(1)];

LATBbits.LATB4=1;
NO
LATBbits.LATB5=1;

i=2 LATBbits.LATB6=0;

LATC=TDig7s[RAMVi
NO deo(0)];
i=0xff;//
Inicializa el contador

i++;

Fin Interrupcin

FIGURA 48 DIAGRAMA DE FLUJO INTERRUPCIN TMR1

En la figura 48 se presenta el diagrama de flujo de la interrupcin, se utiliza una interrupcin


del timer 1 y se programa esta para interrumpir cada 1 milisegundo, colocar el dato
correspondiente en el display de 7 segmentos, como estn multiplexados todos reciben en
sus pines de segmentos el mismo dato pero solo a uno a la vez se le conecta el nodo a Vcc.
Se lee una tabla de en memoria ram de 3 bytes lo que este presente en esa tabla, es lo que
se muestra en los displays, se tiene un contador de iteraciones en la primer iteracin se
coloca lo que se quiera en el primer displey, en la segunda iteracin lo que se requiere en
el segundo displey, en la tercera lo que se requiere en el tercer displey, se reinicia el

53
contador de iteraciones a cero para que en la cuarta iteracin se regrese el contador a cero,
y asi se repite el ciclo. Aunque es cada un milisegundo el prender un displey, los humanos
percibimos como si estuvieran prendidos los 3 displays al mismo tiempo. El contador i se
utiliza para seleccionar cual displey se encender.
En la figura 49 se presenta el diagrama de flujo del programa principal. Dentro de la funcin
principal main se tiene un ciclo infinito, Dentro del ciclo infinito se realiza lo siguiente: en
esa parte se transmite un pulso de una duracin x milisegundos, como la seal se recibir
sobre el mismo pin se tiene que cambiar la direccin del pin y se mide la duracin del pulso
de llegada, una vez que se tiene esta duracin, se escala y posteriormente se convierte en
cdigo de siete segmentos y actualizar la tabla de despliegue de los displays de 7 segmentos.
Para medir el ancho de pulso que entrega el sensor ultrasnico se utiliza el perifrico
Timer0, sin interrupciones, se esta verificando el nivel de el pin RA2, cuando se detecta un
cambio de nivel cero a uno se considera el inicio de el pulso que se quiere medir, se coloca
por lo tanto 00 en TMR0, este se estar incrementando, por verificacin se lee el pin RA2 y
cuando regrese a cero significa que el pulso termino, el valor al que haya llegado el Timer0
es el valor de el ancho de pulso expresado en cuentas de tiemer0, el valor en submltiplos
de segundo depende de el prescalador y reloj que se estn utilizando. Tambin se verifica
si el timer no esta cerca del sobre flujo lo cual indica que el objeto a medir esta fuera de
rengo del sensor ultrasnico. Al terminar el ciclo se repite el ciclo para iniciarlo nuevamente
hay que volver a configurar el pin como salida, y enviar el pulso de inicio.
Para el TMR1 su configuracin se requiere saber los siguientes parmetros.
Tiempo mximo de el sensor18.ms
Tiempo minimo de el sensor 115useg.

54
Inicializacion Alpha
Timer0=ON

Beta

Salida RA2 AUXTMR0=TMR0


RA2=1

AUXDESP=K*AUXTMR0
Delay(); BintoBCDInt
//Retardo (AUXTMR0);

Deshabilita interrupciones
RA2=0 RAMVideo(2)=Centenas
RAMVideo(1)=Decenas
RAMVideo(0)=Unidades
Habilita Interrupciones

Entrada RA2
Beta

Si
RA2=0

No

TMR0=0;

Desplegar Error

Pulso Demasiado Largo


Si
RA2=TMR0>0xFA

No

Si
RA2=1; TMR0=apagado ALPHA

FIGURA 49 DIAGRAMA DE FLUJO PRINCIPAL

55
6.3.- Construccin y pruebas del trabajo final.
Se describe las pruebas realizadas al trabajo final.
Se armara en una tarjeta de pruebas el cto. de la figura 47. El microcontrolador se grabara
con alguna herramienta como por ejemplo la Curiosity o el Pick kit 3. Se compara la
distancia medida del prototipo contra la medida por una cinta mtrica, los resultados se
muestran en la siguiente tabla.

FIGURA 50 TARJETA CURIOSITY DE MICROCHIP, USADA PARA GRABAR AL MICROCONTROLADOR.

56
FIGURA 51 MEDIDOR ARMADO EN TARJETA DE PRUEBAS
Distancia medida con regla Disatancia Medida con el Error cm.
cm. proyecto cm.
10 10 0
20 21 1
30 30 0
40 39 -1
50 49 -1
60 61 1
70 71 1
80 82 2

57
Figura 1 Sistema basado en Microprocesador .................................................................................... 2
Figura 2 Sistema basado en Microcontrolador ................................................................................... 2
Figura 3 Arquitectura del PIC16F1619. ............................................................................................... 3
Figura 4 Registros del ncleo. ............................................................................................................. 3
Figura 5 Arquitectura Harvard Modificad ........................................................................................... 4
Figura 6 Memoria de Programa y Pila ................................................................................................. 5
Figura 7 Divisin interna del banco de Memoria ................................................................................ 6
Figura 8 Banco 0 al 7 de memoria de datos ........................................................................................ 7
Figura 9 Instrucciones Orientadas a datos tipo Byte. ......................................................................... 8
Figura 10 Instrucciones orientadas a manejo de tipo bit. ................................................................... 8
Figura 11 Instrucciones de Control y literal ........................................................................................ 9
Figura 12 Instrucciones optimizadas para compilador en C. .............................................................. 9
Figura 13 ejemplo de cdigo en ensamblador y su equivalente en C............................................... 11
Figura 14 Configuracin para simular en la funcin main. ............................................................... 16
Figura 15 Controles para el simulador y depurador. ........................................................................ 16
Figura 16 Condiciones de restablecimiento por variaciones de voltaje(Broun out Reset). .............. 17
Figura 17 Resumen de opciones de Programacin ........................................................................... 19
Figura 18 Tipos de variables para el compilador XC8 ....................................................................... 22
Figura 19 Valores mnimos y mximos para las variables del compilador XC8 [4] .......................... 23
Figura 20 Rango de los tipos flotantes. ............................................................................................. 23
Figura 21 Lgica de banderas y habilitacin de interrupcin. .......................................................... 27
Figura 22 Diagrama del ejemplo para prender un led con interrupcin, utilizar PIC16F1619. ........ 28
Figura 23.- Seal analgica y Digital. ................................................................................................. 31
Figura 24 Seleccin del Canal ............................................................................................................ 32
Figura 25 Configuracin de las terminales en el configurador de cdigo para dos canales
analgicos.......................................................................................................................................... 33
Figura 26 Convertidor A/D justificado a la derecha y a la izquierda. ................................................ 35
Figura 27 Modelo de entrada en microcontrolador PIC16F1619 [2] ................................................ 36
Figura 28 Programa para leer un botn y segn su estado prender un led. .................................... 37
Figura 29 Programa que hace que parpade un led. .......................................................................... 37
Figura 30 Configuracin para alimentar de el PickKit3 a la aplicacin. ............................................ 38
Figura 31 Perifrico de comunicacin Serial contenido dentro del PIC16F1619. ............................. 38
Figura 32 Ejemplo de comunicacin serial sncrona. ....................................................................... 39
Figura 33 Ejemplo de no regreso a cero............................................................................................ 39
Figura 34 Forma de onda en transmisin asncrona en el PIC. ......................................................... 39
Figura 35 El Cto. Max232 recibe TTL y sale RS232. ........................................................................... 39
Figura 36 Seal de entrada y salida en el circuito. Max232 .............................................................. 40
Figura 37 Paquete de transmisin de datos comunicacin asncrona. ............................................. 40
Figura 38 Conexin del Max232. ....................................................................................................... 40
Figura 39 Diagrama a bloques de el TMR1 [2] .................................................................................. 44
Figura 40 Diagrama a bloques de el perifrico de entrada por captura. .......................................... 46

58
Figura 41 Medicin de periodo utilizando dos eventos consecutivos de captura. ........................... 46
Figura 42 Diagrama a bloques de el perifrico salida por comparacin. .......................................... 47
Figura 43 Seal de PWM. .................................................................................................................. 48
Figura 44 Seal PWM con distintos ciclos de trabajo(Duty cycle). ................................................... 49
Figura 45 Esquemtico de control de velocidad de un motor de C.D. con PWM. ............................ 49
Figura 46 Diagrama a bloques de aplicacin final ............................................................................. 51
Figura 47 Diagrama Electrnico ........................................................................................................ 52
Figura 48 Diagrama de Flujo Interrupcin TMR1 .............................................................................. 53
Figura 49 Diagrama de Flujo Principal............................................................................................... 55
Figura 50 Tarjeta Curiosity de Microchip, usada para grabar al microcontrolador. ......................... 56
Figura 51 Medidor armado en tarjeta de Pruebas ............................................................................ 57

59
Bibliografa

[1] C. v. Driscoll, DATA ADQUISITION AND PROCESS CONTROL WITH THE M6811, NEW YORK:
MERRIL, 1994.

[2] Microchip Technology Inc., PIC16(L)F1615/19 Data sheet, Phoenix: Microchip, 2014-2015.

[3] G. Galeano, Programacin de Sistemas Embebidos en C, Mxico: Alfaomega, 2009.

[4] MPLAB_XC8_C_Compiler_User_Guide, "MPLAB_XC8_C_Compiler_User_Guide," in


MPLAB_XC8_C_Compiler_User_Guide, Microchip, 2012-2016.

[5] "IC-Prog Prototype Programmer," 17 Abril 2017. [Online]. Available: http://www.ic-


prog.com/index1.htm.

60

Potrebbero piacerti anche