You are on page 1of 47

CIDIACCTEC

CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y


CAPACITACION EN CIENCIA Y TECNOLOGIA

INTRODUCCION A LOS MICROCONTROLADORES

1. INTRODUCCION
Muchos de nosotros sabemos que apariencia tiene una computadora.
Usualmente tiene teclado, monitor, CPU (Unidad Central de Procesamiento),
impresora y mouse. Este tipo de computadoras son diseadas principalmente
para comunicarse con humanos.
Manejo de base de datos, anlisis financieros o incluso procesadores de texto se
encuentran dentro de la gran caja, que contiene CPU, la memoria, el disco
rgido, etc. El verdadero computo, sin embargo tiene lugar dentro de la CPU.
Si piensa sobre esto, el nico propsito del monitor, teclado, mouse e incluso la
impresora, es conectar el CPU con el mundo exterior.
PERO UD. SABIA QUE HAY COMPUTAORAS ALREDEDOR DE
NOSOTROS, CORRIENDO PROGRAMAS Y HACIENDO CALCULOS
SILENCIOSAMENTE SIN INTERACTUAR CON NINGUN HUMANO?
Estas computadoras estn en su auto, en un juguete e incluso en el horno
microondas.
Llamamos a estos dispositivos microcontroladores. Micro porque son
pequeos, y controladores, porque controlan maquinas o incluso otros
controladores. Los microcontroladores, por definicin entonces, son diseados a
para ser conectados ms a maquinas que a personas. Son muy tiles porque
Ud. Puede construir una maquina o un artefacto, escribir programas para
controlarlo, y luego dejarlo trabajar para usted automticamente.
1.1 QUE ES UN MICROCONTROLADOR?
Un microcontrolador es un circuito integrado programable (PIC) que
contiene todos los componentes y dispositivos necesarios para controlar
el funcionamiento de una tarea
determinada, adems un
microcontrolador posee en su interior toda la arquitectura de un
computador, esto es: CPU, memoria RAM, EEPROM y puertos de
entrada y salida.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

CONSTITUCION INTERNA DE UN MICROCONTROLADOR EN GENERAL

CONSTITUCION EXTERNA DE UN MICROCONTROLADOR

1.2 QUE NO HACE UN MICROCONTROLADOR?


Las aplicaciones de un microcontrolador
son tan inmensas que el lmite es
la propia imaginacin del usuario. Estos microcontroladores estn en el auto, en el
televisor, en el telfono, en una impresora, en un horno de microondas, en un
transbordador espacial, en un juguete, etc. Alguna fuentes estiman que en una casa
tpica de E.U se tiene alrededor de 250 microcontroladores.

Los siguientes son algunos campos en los que los microcontroladores tienen gran uso:

En la industria del automvil: Control de motor, alarmas, regulador del


servofreno, dosificador, etc.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

En la industria de los electrodomsticos: control de calefacciones, lavadoras,


cocinas elctricas, etc.
En informtica: como controlador de perifricos. Por ejemplo para
controlar impresoras, plotters, cmaras, scanners terminales, unidades de
disco, teclados, comunicaciones (modems), etc.
En la industria de imagen y sonido: tratamiento de la imagen y sonido, control
de los motores de arrastre del giradiscos, magnetfono, video, etc.

En la industria, en general se utilizan en:

Regulacin: todas las familias de microcontroladores incorporan en


alguna de sus versiones conversores A/D y D/A, para la regulacin de la
velocidad de las mquinas, de niveles, de temperatura, etc.
Automatismos: La enorme cantidad de lneas de entrada y salidas, y su
inmunidad al ruido le hacen muy valioso para el control secuencial de procesos.
Por ejemplo control de mquinas, herramientas, apertura y cierre automtico
de puertas segn condiciones, plantas empaquetadoras, aparatos de maniobra
de ascensores, etc.
Robtica: para control de los motores y captura de seales de los diferentes
sensores, fabricacin de controladores robticos para sistemas automticos,
etc.
1.3 ARQUITECTURA DE UN MICROCONTROLADOR

Segn la arquitectura
interna de la memoria de un microcontrolador se
puede clasificar considerando como el CPU accede a los datos e instrucciones, en 2
tipos:

1.3.1 Arquitectura Von Neumann


Fue desarrollada por Jon Von Neumann, se caracteriza por tener una sola
memoria principal donde se almacenan datos e instrucciones de forma
indistinta. La CPU se conecta a travs de un sistema de buses (direcciones,
datos y control). Esta arquitectura es limitada cuando se demanda rapidez.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

1.3.2

Arquitectura Harvard

Fue desarrollado en Harvard, por Howard Aiken, esta arquitectura se caracteriza por
tener 2 memorias independientes una que contiene slo instrucciones y otra, que
contiene slo datos. Ambas, disponen de sus respectivos sistemas de buses para el
acceso y es posible realizar operaciones de acceso simultneamente en ambas
memorias.
Existe una variante de esta arquitectura que permite el acceso a la tabla de datos desde
la memoria de programas es la Arquitectura de Harvard Modificada. Esta ltima
arquitectura es la dominante en los microcontroladores actuales ya que la memoria de
programas es usualmente ROM, OTP, EPROM o FLASH, mientras que la memoria de
datos es usualmente RAM. Por ejemplo las tablas de datos pueden estar en la memoria
de programa sin que sean perdidas cada vez que el sistema es apagado.

1.4 TIPOS DE MEMORIA

MEMORIA RAM
(Random Access Memory) Memoria de Acceso Aleatorio) en esta memoria se
guarda los datos que se est utilizando en el momento presente. El
almacenamiento es considerado temporal por que los datos permanecen
en ella mientras la memoria tiene una fuente de alimentacin.
La memoria de programas o de instrucciones contiene una serie de diferentes
tipos de memoria:

MEMORIA ROM

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Es de solo lectura, cuyo contenido se graba durante la fabricacin del chip. Es


aconsejable cuando se precisan cantidades superiores a varios miles de
unidades.

MEMORIA OTP
One Line Programmable) es no volatile y de solo lectura y programmable
una sola vez por el usuario. La grabacin se realiza mediante un sencillo
grabador controlado por una PC.

MEMORIA EPROM
(Erasable Programmable Read Only Memory), pueden borrarse y grabarse
muchas veces. La grabacin se realiza, como en el caso de la memoria OTP. Si,
posteriormente, se desea borrar el contenido, disponen de una ventana de
cristal en su superficie por la que se somete a le EPROM a rayos
ultravioleta por algunos minutos.

MEMORIA EEPROM
(Electrical EPROM) es de slo lectura, programable y borrable elctricamente.
Tanto la programacin como el borrado, se realizan elctricamente desde el
propio grabador y bajo el control programado de un PC, y puede hacerse con el
microcontrolador instalado en el circuito. Es muy cmoda y rpida la operacin
de grabado y la de borrado.

MEMORIA FLASH
La memoria Flash es no voltil, de bajo consumo y puede grabarse y borrarse
elctricamente. Funciona como una ROM y una RAM pero consume menos
energa y es ms pequea. La memoria Flash tambin puede programarse
en circuito, es decir, sin tener que sacar el circuito integrado de la tarjeta.
adems, es ms rpida, tiene mayor densidad y tolera ms ciclos de
escritura/borrado que la EEPROM
1.5 CARACTERISTICAS GENERALES DEL PIC 16F877A

Velocidad de operacin hasta 20Mhz.


Procesador con arquitectura Harvard
35 instrucciones para su programacin
Instrucciones de 1 ciclo excepto los saltos( 200ns a 20Mhz)
Resistencias PULL-UP programable en el puerto b
Rango de operaciones desde 2v, hasta 5.5v
Memoria de Programa tipo Flash 8Kx14
Memoria Datos 368 bytes
33 pines de Entrada/Salida (PUERTO A,B,C,D,E)
Temporizador Perro Guardin WDT independiente del Oscilador
Chip Programable con bajo voltaje LPV (5v)
2 circuitos comparadores anlogos con entradas multiplexadas
3 timers, TIMER0 a 8bits, TIMER1 a 16 bits TIMER2 a 8 bits.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Mdulos CCP , captura compara 16 bits, y pwm, modulacin de ancho de


pulso 10 bits
14 fuentes de interrupcin.
Mdulo de comunicacin USART/SCI
Capacidad de corriente (25mA I/O) por cada pin.

1.6 PUERTOS
El PIC16F877A dispone de cinco puertos A, B, C, D y E. Las lneas de estos puertos se
pueden programar individualmente como entradas o como salidas y se utilizan casi de
la misma forma.

1.6.1 DESCRIPCION DE LOS PINES


NOMBRE DEL PIN

PIN

TIPO

DESCRIPCIN

OSC1/CLKIN

13

Entrada del oscilador de cristal / Entrada de seal de reloj


externa

OSC2/CLKOUT

14

Salida del oscilador de cristal

MCLR/Vpp/THV

I/P

Entrada del Master clear (Reset) o entrada de voltaje


de programacin o modo de control high voltaje test

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

PORTA es un puerto I/O bidireccional


RA0/AN0

RA1/AN1

RA2/AN2/ Vref-

RA3/AN3/Vref+

RA4/T0CKI

RA5/SS/AN4

I/O
I/O
I/O
I/O

RAO: puede ser salida analgica 0


RA1: puede ser salida analgica 1
RA2: puede ser salida analgica 2 o referencia negativa de
voltaje

I/O

RA3: puede ser salida analgica 3 o referencia positiva de


voltaje

I/O

RA4: puede ser entrada de reloj el timer0.


RA5: puede ser salida analgica 4 o el esclavo seleccionado por
el puerto serial sncrono.

RBO/INT

33

I/O

RB1

34

I/O

RB2

35

I/O

RB3/PGM

36

I/O

RB4

37

I/O

RB5

38

I/O

RB6/PGC

39

I/O

RB7/PGD

40

I/O

PORTB es un puerto I/O bidireccional. Puede ser programado


todo como entradas
RB0 pude ser pin de interrupcin externo.
RB3: puede ser la entada de programacin de bajo voltaje
Pin de interrupcin
Pin de interrupcin
Pin de interrupcin. Reloj de programacin serial
PORTC es un puerto I/O bidireccional

RCO/T1OSO/T1CK
I
RC1/T1OS1/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SD1/SDA
RC5/SD0
RC6/Tx/CK
RC7/RX/DT

15

I/O

RCO puede ser la salida del oscilador timer1 o la entrada de


reloj del timer1

16

I/O

RC1 puede ser la entrada del oscilador timer1 o salida PMW 2

17

I/O

18

I/O

RC2 puede ser una entrada de captura y comparacin o salida


PWN

23

I/O

RC3 puede ser la entrada o salida serial de reloj sncrono para


modos SPI e I2C

24

I/O

RC4 puede ser la entrada de datos SPI y modo I2C

25

I/O

RC5 puede ser la salida de datos SPI

26

I/O

RC6 puede ser el transmisor asncrono USART o el reloj


sncrono.
RC7 puede ser el receptor asncrono USART o datos sncronos

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

RD0/PSP0

19

I/O

RD1/PSP1

20

I/O

RD2/PSP2

21

I/O

RD3/PSP3

22

I/O

RD4/PSP4

27

I/O

RD5/PSP5

28

I/O

RD6/PSP6

29

I/O

RD7/PSP7

30

I/O

PORTD es un puerto bidireccional paralelo

PORTE es un puerto I/O bidireccional


REO/RD/AN5

I/O

RE1/WR/AN

I/O

RE2/CS/AN7

10

I/O

REO: puede ser control de lectura para el puerto esclavo


paralelo o entrada analgica 5
RE1: puede ser escritura de control para el puerto paralelo
esclavo o entrada analgica 6
RE2: puede ser el selector de control para el puerto
paralelo esclavo o la entrada analgica 7.

Vss

12.3
1

Referencia de tierra para los pines lgicos y de I/O

Vdd

11.3
2

Fuente positiva para los pines lgicos y de I/O

1.7 CONEXIN BSICA


Para que un microcontrolador funcione apropiadamente es necesario
proporcionar lo siguiente:

Alimentacin;
Seal de reinicio; y
Seal de reloj.

ALIMENTACIN

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Aunque el PIC16F887 es capaz de funcionar a diferentes voltajes de


alimentacin. Lo ms adecuado es proporcionar un voltaje de alimentacin de
5V DC. Este circuito, mostrado en la pgina anterior, utiliza un regulador de
voltaje positivo de tres terminales LM7805. Es un regulador integrado y barato
que proporciona una estabilidad de voltaje de alta calidad y suficiente corriente
para habilitar el funcionamiento apropiado del controlador y de los perifricos
(aqu suficiente significa una corriente de 1A).
SEAL DE REINICIO
Para que un microcontrolador pueda funcionar apropiadamente, un uno lgico
(VCC) se debe colocar en el pin de reinicio. El botn de presin que conecta el
pin MCLR a GND no es necesario. Sin embargo, este botn casi siempre est
proporcionado ya que habilita al microcontrolador volver al modo normal de
funcionamiento en caso de que algo salga mal. Al pulsar sobre el botn RESET,
el pin MCLR se lleva un voltaje de 0V, el microcontrolador se reinicia y la
ejecucin de programa comienza desde el principio. Una resistencia de 10k se
utiliza para impedir un corto circuito a tierra al presionar este botn.
SEAL DE RELOJ
A pesar de tener un oscilador incorporado, el microcontrolador no puede
funcionar sin componentes externos que estabilizan su funcionamiento y
determinan su frecuencia (velocidad de operacin del microcontrolador).
Dependiendo de los elementos utilizados as como de las frecuencias el
oscilador puede funcionar en cuatro modos diferentes:

LP - Cristal de bajo consumo;


XT - Cristal / Resonador;
HS - Cristal/Resonador de alta velocidad; y
RC - Resistencia / Condensador.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Cristal de cuarzo
Al utilizar el cristal de cuarzo para estabilizar la frecuencia, un oscilador incorporado
funciona a una frecuencia determinada, y no es afectada por los cambios de
temperatura y de voltaje de alimentacin. Esta frecuencia se etiqueta normalmente en
el encapsulado del cristal. Aparte del cristal, los condensadores C1 y C2 deben estar
conectados como se muestra en el siguiente esquema. Su capacitancia no es de gran
importancia. Por eso, los valores proporcionados en la siguiente tabla se deben tomar
como recomendacin y no como regla estricta.

Resonador cermico
Un resonador cermico es ms barato y muy similar a un cuarzo por la funcin y el
modo de funcionamiento. Por esto, los esquemas que muestran su conexin al
microcontrolador son idnticos. No obstante, los valores de los condensadores difieren
un poco debido a las diferentes caractersticas elctricas. Refirase a la tabla que est
a continuacin. Estos resonadores se conectan normalmente a los osciladores en caso
de que no sea necesario proporcionar una frecuencia extremadamente precisa.

Oscilador RC
Si la frecuencia de operacin no es de importancia, entonces no es necesario utilizar
los componentes caros y adicionales para la estabilizacin. En vez de eso, basta con
utilizar una simple red RC, mostrada en la siguiente figura. Como aqu es utilizada slo
la entrada del oscilador local, la seal de reloj con la frecuencia Fosc/4 aparecer en

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

el pin OSC2. sta es la frecuencia de operacin del microcontrolador, o sea la


velocidad de ejecucin de instrucciones.

Oscilador externo
Si se requiere sincronizar el funcionamiento de varios microcontroladores o si por
alguna razn no es posible utilizar ninguno de los esquemas anteriores, una seal de
reloj se puede generar por un oscilador externo. Refirase a la siguiente figura.

Apesar del hecho de que el microcontrolador es un producto de la tecnologa moderna,


no es tan til sin estar conectado a los componentes adicionales. Dicho de otra manera,
el voltaje llevado a los pines del microcontrolador no sirve para nada si no se utiliza
para llevar a cabo ciertas operaciones como son encender/apagar, desplazar, visualizar
etc.

TERMINOLOGIA
Comencemos con la terminologa bsica empleada en este contexto.

Microcontrolador Es un circuito integrado programable que contiene todos


los componentes necesarios para controlar el funcionamiento de una tarea
determinada. El Microcontrolador empleado en este libro es el PIC16F84A de
Microchip (Fig. 1).

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

I/O Pin de conexin con el mundo exterior que puede ser configurado como
entrada o salida. I/O es necesario en la mayora de los casos para
permitirle al Microcontrolador comunicarse, controlar y leer informacin.

Software La informacin que el Microcontrolador necesita para operar o


correr. Este tiene que estar libre errores para una aplicacin exitosa. Puede ser
escrito en una variedad de lenguajes como C, Pascal o Assembler.

Hardware El Microcontrolador, memorias, perifricos, fuentes de voltaje, y


todos los dems componentes conectados a este para hacer que trabaje y
se comunique con el mundo exterior.

Simulador Aplicacin en la que puede probar y depurar sus diseos de


manera interactiva y rpida evitando la programacin del dispositivo real,
ejemplo: ISIS PROTEUS .

Programador Unidad que permite al programa ser cargado dentro de la


memoria del Microcontrolador. Estos vienen en diferentes formas, protocolos de
comunicacin y precios, ejemplos: PICSTART PLUS, PICKIT de Microchip.

Archivo Fuente Programa escrito en un lenguaje como Assembler o C


que usted puede entender. Este archivo tiene que procesarse antes de que el
Microcontrolador lo reciba.

Compilador Paquete software que convierte al archivo fuente en


un archivo objeto. El compilador C que se utiliza en este material es PIC C
Compiler de CCS.

Archivo Objeto Archivo que se produce despus de compilar el archivo


fuente. La extensin es .OBJ o .HEX, y es el archivo que necesita el Simulador
y el Microcontrolador para funcionar

CAPITULO 2
2. COMPILADOR CCS
2.1.

INTRODUCCION:

El Compilador C de CCS ha sido desarrollado especficamente para PIC MCU,


obteniendo la mxima optimizacin del compilador con estos dispositivos. Dispone de

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

una amplia librera de funciones predefinidas, comandos de pre procesados y ejemplos.


Adems, suministra los controladores (drivers) para diversos dispositivos como LCD,
convertidores AD, relojes en tiempo real, EEPROM serie, etc.
Muchos se preguntaran Qu es una Compilador?- La respuesta es simple, Un
compilador es aquel que convierte el lenguaje de alto nivel a instrucciones en Cdigo
maquina; `tambin quiero agregar lo que es un Cross Compiler, simplemente es un
compilador que funciona en un procesador (normalmente en un PC) diferente al
procesador objeto por tanto queda claro que el Compilador CCS C es un Cross
Compiler. Los programas son editados y compilados a instrucciones mquina en el
entorno de trabajo del PC, el cdigo mquina puede ser cargado del PC al sistema PIC
mediante el ICD2 (o mediante cualquier programador) y puede ser depurado (puntos
de ruptura, paso a paso, etc.) desde el entorno de trabajo del PC.
El CCS C es C estndar y, adems de las directivas estndar (#include, etc.),
suministra unas directivas especificas para PIC (#device, etc.); adems incluye
funciones especficas (bit_set(), etc.). Se suministra con un editor que permite controlar
la sintaxis del programa.

2.2.

Lenguaje C:

Es un tipo de lenguaje de alto nivel utilizado para hacer programas informticos como
tambin usado para programas microcontroladores por su fcil comprensin y manejo.
Aqu algunos de los compiladores en C:

PCWH Compiler

CC18

2.3.

DEFINICIONES PREVIAS

Lenguaje de Programacin: Se entiende como un juego de reglas y rdenes segn que


nosotros escribimos el programa y por consiguiente distinguimos los varios lenguajes
de programacin como el BASIC, C, PASCAL, etc.
Programa: Consiste en la secuencia de comandos del lenguaje que nuestro
microcontrolador ejecuta uno a tras de otro. La estructura del lenguaje BASIC esta
explicado en detalle ms adelante.
Creando nuestro primer programa:
1 Ir a la ventana PROYECT seleccionar NEW y luego seleccionar en PROYECT
WIZARD
2 Nos aparecer una ventana donde le daremos un nombre al proyecto y
posteriormente guardarlo.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

3 Aparecer la siguiente ventana, le

daremos

la

configuracin

mostrada.

4 En la opcin de comunicaciones configuramos segn la imagen

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

5 En la opcin general vamos a la pestaa CODE, y podremos ver la configuracin


general de nuestro programa en cdigo C, luego damos ok

Finalmente tendremos listo nuestro programa para empezar a programar

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

DIGITAR LAS SIGUIENTES INSTRUCCIONES:

Compilacin del programa

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

La compilacin o ejecucin del programa en el C CCS est dada para poder generar
acabo el archivo .hex la cual tendremos que grabar al micontrolador este archivo es el
llamado lenguaje maquina con la cual el pic ser grabado.

CREACION DE PROYECTOSCOMO HOJA SIMPLE


Al realizar un proyecto como hoja simple, a diferencia de los pasos anterioers aqu
tenemos que escribir los archivos de cabecera como son :

DIGITAR EL SIGUIENTE CODIGO

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

2.4.

SIMULACION CON PROTEUS


Una vez que tengamos nuestro primer cdigo ya compilado, el siguiente paso es
poder hacerlo funcionar y verificar si est correcto, por lo cual existen hay 2
caminos: uno programar un microcontrolador mediante un programador y el otro

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

mtodo es simularlo en un software, la segunda opcin es una de las ms factibles y


rpidas en estos tiempos, ya que no hace uso de muchas herramientas fsicas para
probar si nuestro cdigo funciona correctamente.
El software que utilizaremos se llama PROTEUS, el cual es un entorno integrado
diseado para la realizacin completa de proyectos de construccin de equipos
electrnicos en todas sus etapas: diseo, simulacin, depuracin y construccin.
Pasos:
1 una vez armado el diseo damos doble clic sobre el microcontrolador

2 Dar 1 clic en el dibujo de la carpeta en la opcin Program File, luego


seleccionar el archivo con extencion.exe y dar abrir

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

3 Dar clic
en el botn
ok

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

4 Dar clic en el botn Play

2.3 GESTION DE PUERTOS: entrada y salida:


Los Microcontroladores PIC tienen terminales de entrada/salida divididos en puertos,
que se encuentran nombrados alfabticamente A, B, C,D, etc. Cada puerto puede tener
hasta 8 terminales que, de forma bsica, se comportan como una entrada/salida digital.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Segn las caractersticas del PIC, cada puerto puede tener, adems, asignado un
bloque funcional: convertidor AD, USART, I2C, etc.
2.4 GESTION DE PUERTOS A TRAVS DE LA RAM:
Se definen los registros PORTx y TRIS x como bytes y se sitan en la posicin
correspondiente de la memoria RAM. La directiva utilizada de C es #BYTE:
#BYTE variable = constante;
Una vez definidas estas variables se pueden configurar y controlar los puertos a travs
de los comandos de asignacin.
#BYTE TRISA = 0XFF;

// 8 Terminales de entrada.

#BYTE TRISB = 0x00;

// 8 Terminales de salida.

#BYTE TRISC = 0x0F;

// 4 Terminales de mayor peso de salida, 4 Terminales


de // menor peso de entrada.

Existen unas funciones de C que permiten trabajar bit a bit con los registros o variables
definidas previamente. Estas funciones son las siguientes:
bit_clear (var,bit);

//Pone a 0 el bit especifico (0 a 7) de la variable.

bit_set (var,bit);

//Pone a 1 el bit especifico (0 a 7) de la variable.

bit_test (var,bit);

//Muestra el bit especifico (0 a 7) de la variable.

bit_set (PORTC , 4);

// saca un 1 por el terminal RC4.

If (bit_test (PORTB,0)==1) bit_clear(PORTB,1);

// si RB0 es 1 borra RB1

Se puede declarer un bit de un registro con una variable mediante la directive #BIT, lo
que permite trabajar directamente con el temrinal:
#BIT nombre = posicin.bit
#BIT RB4 = 0x06.4 // PORTA = 0x06
RB4 = 0;

2.5 GESTION DE PUERTOS A TRAVS DE LAS DIRECTIVAS:


El compilador ofrece funciones predefinidas para trabajar con los puertos. Estas
funciones son:

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Output_X (valor);

//Por el puerto correspondiente saca el valor (0 255).

Input_X ( );

//Se obtiene el valor en el puerto correspondiente.

Set_tris_X (valor);

//Carga el registro TRISx CON EL VALOR (0 255).

Port_b_pullups (valor);

//Mediante valor = TRUE o valor = FALSE habilita o


//Deshabilita las resistencias de pull-up en PORTB.

Get_trisX( );

//Devuelve el valor del registro TRIS x


Donde la X es la inicial del puerto correspondiente (A. B, C,).

Output_A (0xFF);

//saca por el puerto A el valor 11111

Valor = Input_B ( );

//Lee el valor del puerto B

Set_tris_C (0x0F);

//configura el puerto C: C0-C3 entradas, C4-C7 salidas

Existen una serie de funciones asociadas a un terminal o pin*. El parmetro pin* se


define en un fichero include (por ejemplo, 16F876.h) con un formato del tipo PIN_Xn,
donde X es el puerto y n es el nmero de pin.
#define PIN_A0 40
#define PIN_A1 41
Las funciones son:
Output_low (pin*);

//pin a 0.

Output_high (pin*);

//pin a 1.

Output_bit (pin*,valor);

//pin al valor especificado.

Output_toggle (pin*);

// complementa el valor del pin.

Output_float (pin*);

//pin de entrada, quedando a tensin flotante


(simula salida en drenador abierto).

Input_state (pin*);

//lee el valor del pin sin cambiar el sentido del


terminal.

Input (pin*);

//lee el valor del pin.

Las funciones output_x( ) e input_x( ) dependen de la directiva tipo #USE*_IO que est
activa. Directivas:
#USE FAST_IO (PUERTO) [PUERTO: A]

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Con la funcin output_x( ) se saca el valor al puerto y con la funcin input_x( ) se lee el
puerto. La directiva no modifica previamente el registro TRIS correspondiente.
Hay que asegurarse de que los registros TRIS estn correctamente definidos.
#USE STANDARD_IO (PUERTO) [PUERTO: A]
Con la funcin output_x( ) el compilador se asegura de que el terminal, o Terminales
correspondientes, sean de salida mediante la modificacin del TRIS correspondiente.
Con la funcin input_x( ) ocurre lo mismo pero asegurando el terminal(terminales)
como entrada. Es la directiva por defecto.
#USE STANDARD_IO (PUERTO) [PUERTO: A]
El compilador se encarga de generar el cdigo para definir los puertos de acuerdo con
la informacin que indica la directiva (donde slo se indican los terminales de salida),
sin tener en cuenta si la operacin es de entrada o de salida.

2.6 TIPOS DE DATOS:


CCS C acepta los siguientes tipos de datos:
Tipo
Int1
Short
Int
Int8
Int16
Long
Int32

Tamao

Rango

Descripcin

1 bit

0a1

Entero de 1 bit

8 BIT

0 A 255

Entero

16 bit

0 a 65 535

Entero de 16 bit

32 bit

0 a 4 294 967 295

Entero de 32 bit

Float

32 bit

+

+38
+ a 3.402 x 10

38
1.175 x 10

Char
Void
Signed Int8
Signed
Int16

8 bit
8 bit

0 a 255
-128 a +127

16 bit

-32 768 a +32 767

Signed
Int32

32 bit

31

2
a +( 311)

Coma flotante

Carcter
Sin Valor
Entero con Signo
Entero largo con
Signo
Entero 32 bit con
Signo

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

2.7 CONSTANTES:
Las constantes se pueden se pueden especificar en Decimal, octal, hexadecimal
o en binario.
123
0123
0 x 123
0b010010
`x`
`\010`
`\xA5`

Decimal
Octal(0)
Hexadecimal(0x)
Binario(0b)
Carcter
Carcter Octal
Carcter Hexadecimal

Adems, se pueden definir constantes con un sufijo:


Int8
Long
Signed INT16
Float
Char

127U
80UL
80L
3.14F
Con comillas simples `C`

Tambin se definen caracteres especiales, algunos como:


\n
\r
\t
\b

Cambio de lnea
Retorno de carro
Tabulacin
Backspace

2.8 VARIABLES
Las variables se utilizan para nombrar posiciones de memoria RAM; se deben declarar,
obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de
dato que se manejar. Se definen de la siguiente forma:
TIPO NOMBRE_VARIABLE [=VALOR INICIAL]
Las variables definidas en un programa pueden ser de tipo LOCAL o GLOBAL. Las
variables locales slo se utilizan en la funcin donde se encuentran declaradas; las
variables globales slo se utilizan en la funcin donde se encuentran declaradas; las
variables globales se pueden utilizar en todas las funciones del programa. Ambas
deben declararse antes de ser utilizadas y las globales deben declararse antes de
cualquier funcin y fuera de ellas. Las variables globales son puestas a cero cuando se
inicia la funcin principal main ( ).

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

#include <16f876.h>
#USE DELAY (CLOCK = 4000000)
int16 counter; // Variable global
void FUNCION (void)
{
Char k, kant =`0`; //Variables locales
}
Void main ( )
{
Int8 temp;

//Variable local

}
Las variables pueden ser definidas con:

AUTO: (usada por defecto, no hace falta que se indique) donde la variable
existe mientras la funcin esta activa. Estas variables no se inicializan a cero.
Su valor se pierde cuando se sale de la funcin.

STATIC: Una variable local se activa como global, se inicializa a cero y


mantiene su valor al entrar y salir de la funcin.

EXTERN: Permite el uso de variables en compilaciones mltiples.

2.9 OPERADORES
2.9.1
+=
-=
*=
/=
%=
<<=
>>=
&=

ASIGNACION:

Asignacin de suma (x+= y es lo mismo que x = x + y)


Asignacin de resta (x-= y es lo mismo que x = x - y)
Asignacin de multiplicacin (x*= y es lo mismo que x = x * y)
Asignacin de divisin (x/= y es lo mismo que x = x / y)
Asignacin del resto de la divisin (x/%= y es lo mismo que x = x % y)
Asignacin de desplazamiento a la izquierda (x<<= y es lo mismo que x =
x << y)
Asignacin de desplazamiento a la derecha (x>>= y es lo mismo que x = x
>> y)
Asignacin AND de bits (x&= y es lo mismo que x = x & y)

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

|=
^=

Asignacin OR de bits (x|= y es lo mismo que x = x | y)


Asignacin OR EXCLUSIVA de bits (x^= y es lo mismo que x = x ^ y)
2.9.2

ARITMETICOS:
+
*
/
%
-++
Sizeof

Suma
Resta
Multiplicacin
Divisin
Mdulo, resto de una divisin entera
Incremento
Decremento
Determina el tamao, en bytes, de un operando

En las operaciones de decremento e incremento, en funcin de la posicin del operador,


se consigue un pre incremento (++A) O UN POSTINCREMENTO(A++).
A=3;
B=4*a++;

//b=4 y a=4;

a=3
b=4*++3;
2.9.3

b=16 y a=4;
RELACIONALES
<
>
>
=
<
=
=
=
!=
?:

2.9.4

Menor que
Mayor que
Mayor o igual que
Menor igual que
Igual
Distinto
Expresin Condicional

LOGICOS
!
&&
||

2.9.5

NOT
AND
OR

PUNTEROS
&
*

Direccion
Indireccion

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA
->

2.9.6

~
&
^
|
>>
<<

2.10

Puntero a estructura

BITS
Complemento a 1
AND
OR EXCLUSIVA
OR
Desplazamiento a derechas
Desplazamiento a izquierdas

FUNCIONES:

Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar
dentro de las funciones. Al igual que las variables, las funciones deben definirse
antes de utilizarse.
Una funcin puede ser invocada desde una sentencia de otra funcin. Una funcin
puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica
en la definicin de la funcin; en el caso de no indicarse nada se entiende que es un
int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La
funcin, adems de devolver un valor, puede recibir parmetros o argumentos.
La estructura de una funcin es:
Tipo_Dato

Nombre_Funcion (tipo param1, param2, .)

{
(Sentencias);
}

Float trunca (float a)


{
Float b;
b=floor (a)
a=a-b;
a=a*100;
a=floor (a);
a=a*0.01;

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

a=b+a;
return (a);
}

La forma de devolver un valor es mediante la sentencia RETURN:


return (expresin);
return expresin;
Donde expresin debe manejar el mismo tipo de dato que el indicado en la
definicin de la funcin. En el caso de no devolver nada se finaliza con RETURN,
al encontrar esta sentencia el compilador vuelve a la ejecucin de la sentencia de
llamada. Tambin se puede finalizar la funcin sin RETURN, tan slo con la llave
de cierre }.
Las funciones pueden agruparse en ficheros de libreras
pueden utilizar mediante la directiva #include <fichero.h>.

2.11

<fichero.h>, que se

DECLARACIONES DE CONTROL:

Las declaraciones son usadas para controlar el proceso de ejecucin del programa.
Las que admite CCS son:

If Else.
Switch Case.
For.
While.
Do While.
Return
Break, Continue y Goto.
2.11.1 IF ELSE:

Con la ayuda de IF ELSE se pueden tomar decisiones.


If (expresion)
Sentencia_1;
[
else

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Sentencia_2;
]
Nota: Los elementos que se encuentran entre corchetes [ ] son opcionales.

Primero se evala la EXPRESION y si es cierta (TRUE o 1) ejecuta la


SENTENCIA_1, en el caso contrario (FALSE o 0) ejecuta la SENTENCIA_2.
Pueden anidarse los IF ELSE dando lugar a los ELSE IF; esto permite tomar
decisiones mltiples.
If (expresin_1)
Sentencia_1;
[
else if (expresin_2)
Sentencia_2;
]
[
Else
Sentencia_3;
]
2.11.2 SWITCH:
Switch es un caso particular de una decisin mltiple
Switch (expresion)
{
Case constante 1:
Sentencias;
Break;
Case constante 2:
Sentencias;
Break;

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

]
Default:
Sentencias;
]
}
Evala la expresin y en orden a la CONSTANTE adecuada realiza las sentencias
asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta
DEFAULT (este comando es opcional).
El comando BREAK provoca la salida de SWITCH, de lo contrario se ejecuta el
siguiente CASE.
No est de ms hacer presente que no pueden existir dos CASE con la misma
CONSTANTE.

2.11.3 FOR:
Se usa para repetir sentencias.
for (inicializacin; condicin de finalizacin; incremento)
{
Sentencias;
}

En las expresiones del FOR la inicializacin es una variable a la cual se le asigna


un valor inicial con el que controlar el bucle. La condicin de finalizacin sirve
para evaluar ANTES de ejecutar las sentencias si es cierta o no, en el caso de ser
cierta se ejecutan las sentencias y en caso contrario se sale del FOR. Por ltimo, la
expresin de incremento o decremento modifica la variable de control DESPUES de
ejecutar el bucle.
Se pueden anidar bucles FOR utilizando distintas variables de control.
Si se ejecuta la siguiente expresin se consigne un BUCLE SIN FIN:

For (; ;)
{
Sentencias;

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

2.11.4 WHILE / DO WHILE:


While se utiliza para repetir sentencias.
While (expresin)
{
Sentencias;
}
La expresin se evala y la sentencia se ejecuta mientras la expresin es verdadera,
cuando es falsa se sale del WHILE
DO WHILE se diferencia del WHILE y del FOR en la condicin de finalizacin,
la cual se evala al final de bucle, por lo que las sentencias se ejecutan al menos
una vez.
Do
{
Sentencias;
}
While(expresin);
Si se ejecutan las siguientes expresiones se consigue un BUCLE SIN FIN:
While(1)
{
Sentencias;
}

Do
{
Sentencias;

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

}
While(1)

2.11.5 RETURN:
Se emplea para devolver datos en las funciones.
2.11.6 BREAK:
Permite salir de un bucle, se utiliza para while, for, do y switch.
2.11.7 GOTO:
Provoca un salto incondicional.
2.11.8 COMENTARIOS:
Los comentarios en el programa facilitan la comprensin de las distintas
expresiones tanto para el programador como para quien tiene que interpretar dicho
programa. No afectan a la compilacin por lo que pueden ser tan extensos como el
programador quiera. Se pueden colocar en cualquier parte del programa y con dos
formatos:
Utilizando //. Al colocar estos dos signos se comienza el comentario y finaliza en el
final de la lnea.
// Comentario que terminar al final de esta lnea.
Utilizando /* y */. Se debe utilizar al inicio y al final del comentario, pero no
pueden repetirse dentro del mismo comentario.
/* Este comentario no finaliza al final de esta lnea
Finaliza cuando se cierre el comentario */

2.12

DIRECTIVAS:

Las directivas de pre procesado comienzan con el smbolo y continan con un


comando especfico. La sintaxis depende del comando. Algunos comandos no
permiten otros elementos sintcticos en la misma expresin. Muchas de las
directivas utilizadas por CCS son extensiones del C estndar

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Adems de estas directivas existen otras ms que irn viendo en su mbito de


aplicacin particular.
Como ejemplo se puede comentar:
#DEVICE chip, permite definir el PIC con el que se realizar la compilacin.
#device PIC16F628A

#FUSES options, la cual permite definir la palabra de configuracin para


programar un PIC. Por ejemplo, en el PIC16F628A las opciones posibles son:
LP, XT, HS, RC, NOWDT, WDT, NOPUT, PUT, PROTECT, NOPROTECT.
#device PIC16F628A
#fuses xt, nowdt, put, noprotect
#include filename, permite incluir fichero en el programa.
#device <16F628A.h>
#fuses xt, nowdt, put, noprotect

#USE DELAY(CLOCK = SPEED), permite definir las frecuencias del oscilador


del PIC, el compilador lo utiliza para realizar clculos de tiempo. Se puede utilizar
M, MHZ, K y KHZ para definir la frecuencia.
#INCLUDE <16F628A.h>
#use delay (clock = 4000000)
#ASM y ENDASM, permiten utilizar cdigo ensamblador en el programa en C. Se
utilizan al inicio y al final del bloque ensamblador.
#asm
Bsf TATUS, RP0
Movlw 0 x 8
Movwf PORTB
Bcf STATUS, RP0
#endasm

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

CAPITULO 3
Manejo de interrupciones en los pic Y timer 0
3. MANEJO DE INTERRUPCIONES EN LOS PIC:
Al producirse una interrupcin, el PIC salta automticamente a la direccin del
vector de interrupcin de la memoria de programa y ejecuta la porcin de
programa, correspondiente a la atencin de la interrupcin, hasta encontrar la
instruccin RETFIE. Al encontrar dicha instruccin, abandona la interrupcin y
retorna a la posicin de memoria del programa principal desde la que salt al
producirse la interrupcin.
Las fuentes de interrupcin dependen del PIC utilizado. Por ejemplo, el PIC16F84
tiene 4 fuentes de interrupcin y la familia PIC16F87X tiene entre 13 y 14.
Los PIC de gama baja y media tienen un nico vector de interrupcin situado en la
direccin 04h de programa, mientras que los de gama alta tienen dos vectores de
interrupcin de distinta prioridad, alta y baja, situados en la posicin 08h y 18h de
la memoria de programa.
3.1.

INTERRUPCIONES EN C:
En el compilador C, la directiva habitual en el manejo de las interrupciones es
#INT_xxxx. Especifica que la funcin que le sigue es una funcin de interrupcin;
adems, no necesita ms parmetros.
INTERRUPCIONES
#INT_AD
#INT_CANRX0
#INT_CANRX1
#INT_CANTX0
#INT_CANTX1
#INT_CANTX2
#INT_CCP1
#INT_CCP2
#INT_COMP
#INT_COMP1

DESCRIPCIN
Conversin AD completa
Bus CAN recibe un nuevo mensaje en buffer 0
Bus CAN recibe un nuevo mensaje en buffer 1
Bus CAN transmisin completa en buffer 0
Bus CAN transmisin completa en buffer 1
Bus CAN transmisin completa en buffer 2
Unidad 1 de captura, comparacin y PWM.
Unidad 2 de captura, comparacin y PWM.
Comparador.
Comparador1

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA
#INT_EEPROM
#INT_EXT
#INT_I2C
#INT_LCD
#INT_LOWVOLT
#INT_OSCF
#INT_IC3
#INT_PWMTB
#INT_RB
#INT_RDA
#INT_RDA0
#INT_RTCC
#INT_PSP
#INT_SPP
#INT_SPP2
#INT_TBE
#INT_TBE0
#INT_TBE1
#INT_TBE2
#INT_TIMER0
#INT_TIMER1
#INT_TIMER2

3.2.

Escritura EEPROM finalizada


Interrupcion externa(RB0).
Interrupcion I2C(14 000).
Actividad LCD
Detectado bajo voltaje
Detectado bajo voltaje
Dato de entrada en puerto paralelo.
Base de tiempo PWM.
Cambio de estado en B4 B7
RS232 dato recibido
RS232 dato recibido en buffer 0.
Desbordamiento del Timer 0 (RTCC)
Escritura/lectura del puerto paralelo.
Actividad en SPI o I2C.
Actividad en SPI o I2C port 2.
RS232 buffer de transmisin vacio.
RS232 buffer 0 de transmisin vacio.
RS232 buffer 1 de transmisin vacio.
RS232 buffer 2 de transmisin vacio.
Desbordamiento del Timer 0 (RTCC).
Desbordamiento del Timer 1
Desbordamiento del Timer 2

TIMER 0:
El bloque funcional TIMER0/WHATCHDOG es un contador (registro) de 8 bits,
incrementado por hardware y programable. La cuenta mxima es de 255(el
incremento es constante e independiente).

Contador: Cuenta los eventos externos(a travs del pin RA4/TOCK1).


Temporizador: Cuenta los pulsos internos de reloj.

Se puede insertar un prescaler, es decir, un divisor de frecuencia programable que


puede dividir por 2, 4,8, 16, 32, 64, 128 o 256. La frecuencia de conteo es una
cuarta parte de la frecuencia de reloj (fosc/4). Posteriormente con el uso del
prescaler se puede dividir la frecuencia.
El bloque del TIMER0 puede funcionar como WATCHDOG, lo que permite que
durante el funcionamiento normal del microcontrolador, un desbordamiento(o time
- out) del watchdog provoque un reset (watchdog Timer Reset). Para evitar el
desbordamiento se debe, cada cierto tiempo y antes de que llegue al lmite, ejecutar
una instruccin CLRWDT que borra el watchdog y que hace comenzar un nuevo
conteo desde cero. Se basa en un oscilador RC interno, independiente del oscilador
del microcontrolador y que no requiere ningn componente externo. El watchdog
cuenta incluso si el reloj conectado a OSC1/CLKI y/o OSC2/CLK0 est parado, por
ejemplo.
Por la ejecucin de una instruccin SLEEP o por un defecto del cristal oscilador.
Los registros implicados en la configuracin del TIMER 0/ WDT son los siguientes:

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

3.3.

OPTION_REG: Configura el hardware del TIMER0/WDT.


INTCON: Permite trabajar con la interrupcin del TIMER0/WDT.
TRIS A: Habilita la patilla RA4

TIMER0 EN C:

La funcin para configurar el TIMER 0 es:


Setup_timer_0 (modo);
Donde modo est definido en el fichero de cabecera (afecta a los bits 5:0 del
OPTION_REG):
Setup_Timer_0(modo);
RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_L_TO_L
RTCC_DIV_1
RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128
RTCC_DIV_256

OPTION_REG(81h/181h)
00000000
00h
00100000
20h
00110000
30h
00001000
08h
00000000
00h
00000001
01h
00000010
02h
00000011
03h
00000100
04h
00000101
05h
00000110
06h
00000111
07h

Los distintos modos se pueden agrupar mediante el empleo de smbolo |.


Setup_timer_0 (RTCC_DIV_2 | RTCC_EXT_L_TO_H);
La funcion para configurar el WDT es:
Setup_wdt (modo);
Donde modo est definido en el fichero d cabecera (afecta a los bits 3:0 del
OPTION_REG):

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Setup_Timer_0(modo);
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS

OPTION_REG(81h/181h)
00001000
08h
00001001
09h
00001010
0Ah
00001011
0Bh
00001100
0Ch
00001101
0Dh
00001110
0Eh
00001111
0Fh

Para activar el Watchdog se deben utilizar los bits de configuracin mediante la


directiva #FUSES:

#fuses WDT

Activado.

#fuses NOWDT

Desactivado.

El compilador C suministra una serie de funciones para leer o escribir en el


TIMER0/WDT. Para escribir un valor en el registro:
Set_timer0 (valor);
Valor: entero de 8 bits.

Para leer el valor actual del registro:


Valor = get_timer0 ( );
Valor: entero de 8 bits.

Tambin permite realizar la puesta a cero del watchdog (como CLRWDT):


Restart_wdt ( );

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

CAPITULO 4
FUNCIONES DE Manejo PARA TECLADOS MATRICILES Y
PANTALLAS GRFICAS LCD

4. FUNCIONES DE MANEJO PARA:


4.1.

TECLADOS MATRICIALES

Las entradas a travs de un pulsador son muy habituales en los sistemas con
microcontroladores para trabajar con una mayor informacin o informacin
alfanumrica. Por ejemplo se usan los teclados matriciales de 1x4, 3x4 4x4.
Los teclados matriciales son muy utilizados pues permiten mayor cantidad de teclas
con menos lneas de control, pero requiere un proceso de bsqueda y traduccin de
tecla. El arreglo matricial permite T teclas segn T = L x C donde L es el nmero de
lneas y C el nmero de columnas, la cantidad de pines utilizados son L + C.

El valor generado por una tecla presionada, se obtiene de la combinacin de la lectura


de las filas y las columnas.
El compilador posee dentro de sus libreras una dedicada al manejo de Teclados
matriciales, dicho archivo lleva el nombre de KBD.C alguna de sus caractersticas son:

Permite manejar un teclado de 3x3


Puede trabajar con los puertos B y D.

Dado que el circuito propuesto se tiene un teclado de 4x4, se tuvo que realizar ciertas
modificaciones al archivo original KBD.C para su correcto funcionamiento.

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

El archivo nuevo posee el nombre de Tec4x4.c esto para evitar posibles confusiones o
reemplazos con el original.
El compilador de C incluye el driver KBD.C para manejar el teclado (3x4). Las
funciones que incorporan son las siguientes:
kbd_init ();
Debe llamarse antes que ninguna otra funcin del fichero Tec4x4.c.
kbd_getc();
Funcin que retorna el valor presionado en el Teclado, este puede guardado en una
variable de tipo char.

A travs de la modificacin d esta tabla podemos adecuar el resultado del programa a


las distintas cartulas del teclado.
El archivo KBD.C est pensado para trabajar con el PORTB o el PORTD. Activando o
no la lnea #define use_portb_lcd TRUE podemos seleccionar el PORTB
Ejm: Tecla=kbd_getc();
Por defecto, este driver usa el puerto D para establecer a comunicacin entre el
Teclado y el microcontrolador.
Pines utilizados para el Teclado:
B0 D0 -> Columna 1
B1 D1 -> Columna 2
B2 D2 -> Columna 3
B3 D3 -> Columna 4
B4 D4 -> Fila 1
B5 D5 -> Fila 2
B6 D6 -> Fila 3

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

B7 D7 -> Fila 4
4.2.

PANTALLAS GRAFICAS

4.2.1. PANTALLA LCD:


Se acostumbran ha utilizar LCD del tipo HD44780, con un nmero de lneas variable y
un numero de caracteres por lnea tambin variable (por ejemplo, con 2x16 se trabaja
con dos lneas de 16 caracteres cada una)

1.2.-

Vcc(alimentacin de 2.7v a 5.5v)


3.- Ajuste de contraste (de 0 a 5.5v)
4.- RS (seleccin de registro)
5.- R/W (lectura/escritura)
6.- E (enable)
7.- D0 (dato LSB)
8.- D1
9.- D2
10.- D3
11.- D4
12.- D5
13.- D6
14.- D7 (dato MSB).
15.-BLACKLITE (GROUND)
16.- BLCKLITE (VCC)
Lcd_init ( );

Vss(masa)

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Es la primera funcin que debe ser llamada.


Borra el LCD y lo configura en el formato de 4 bits, con dos lneas y con caracteres de
5 x 8 puntos, en modo encendido, cursor apagado y sin parpadeo.
Configura el LCD con un autoincremento del puntero de direcciones y sin
desplazamiento del display real.
Lcd_gotoxy (byte x, byte y);
Indica la posicion de acceso al LCD. Por ejemplo, (1,1) indica la primera posicin de
la primera lnea y (1,2) indica la primera posicin de la segunda lnea.
Lcd_getc (byte x, byte y);
Lee el carcter de la posicin (x,y).
Lcd_putc (char s);
S es una variable de tipo char. Esta funcin escribe la variable en la posicin
correspondiente. Si, adems, se indica:
\f se limpia el LCD.
\n el cursor va a la posicin (1,2).
\b el cursor retrocede una posicin.
El compilador de C ofrece una funcin ms verstil para trabajar con el LCD:
Printf (string)
Printf (string, values)
Printf (fname, string, values)
String es una cadena o un array de caracteres, vales es una lista de variables
separadas por comas y fname es una funcin.
El formato es %nt, DONDE N ES OPCIONAL Y PUEDE SER:
1 9: para especificar cuantos caracteres se deben especificar.
01 09: para indicar la cantidad de ceros a la izquierda.
1.1-9.9: para coma flotante.

t puede indicar:
c

Carcter

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Cadena o carcter.

Entero sin signo.

Entero con signo.

Lu

Entero largo sin signo.

Ld

Entero largo con signo.

Entero Hexadecimal (minsculas).

Entero Hexadecimal (mayusculas).

Lx

Entero Largo Hexadecimal (minsculas).

LX

Entero Largo Hexadecimal (mayusculas).

Flotante con truncado.

Flotante con redondeo.

Flotante en formato exponencial.

w
Entero sin signo con decimales insertados. La 1 cifra indica el total, la 2 el
nmero de decimales.
A continuacion, mostramos unos ejemplos de los distintos formatos:
Formato
%03u
%u
%2u
%5
%d
%x
%X
%4X
%3.1w

Valor = 0 x 12
018
18
18
18
18
12
12
0012
1.8

Valor = 0 x FE
254
254
*
254
-2
Fe
FE
00FE
25.4

Ahora, mostramos una serie de ejemplos de aplicacin:


Byte x, y, z;

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Printf (hola);
Printf (valor=>%2x\n\r,get_rtcc( ));
Printf (%2u %X %4X\n\r,x, y, z);
Printf (LCD_PUTC, n = %u ,n);
El driver LCD.C est pensado para trabajar con el PORTD o el PORTB. Por defecto,
utiliza el PORTD a menos que le indiquemos lo contrario mediante:
#define use_portb_lcd TRUE, se comenta o des comenta tal como se indica en la fig. 2
Por defecto, este driver usa siete terminales para la comunicacin entre el LCD y el
PIC. En la fig 2 se observa parte del fichero LCD.C donde se encuentran definidas las
conexiones utilizadas y la posibilidad de cambiar de puerto.

4.2.2. PANTALLA GLCD:

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Se puede utilizar un LCD grfico con una controladora KS0108 (como el de la figura
3), por ejemplo la ASI-A-1286AS-LJ-EWS/W de la casa ALL SHORE INDUSTRIES.

La distribucin de patillas es la siguiente:


VSS:
masa
VDD:
Alimentacion
Vo:
Tensin de contraste.
D/I:
entrada de datos/entrada de cdigos de instrumentacin.
R/W:
Lectura/escritura.
E:
enable
DB0 DB7: datos de entrada.
CS1 CS2: chip select.
RST:
reset.
El compilador C suministra varios drivers para este tipo de LCD grficos, el GLCD.C,
GRAPHICS.C o, el ms especifico, HDM64GS12.C.
La conexin definida en estos ficheros es la siguiente:
LCD Pin conexiones de pin: (se pueden realizar los cambios necesarios en la siguiente
definicin).
VSS est conectado a GND
Vo lcd voltaje de funcionamiento (ajuste contra posicion)
D/I Los Datos o la instruccin estn conectados a B2
R/W Lectura o escritura a B4
Enable - esta conectado a B5
Data Bus 0 a 7 esta conectado a port d
Chip Select 1 esta conectado a B0

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA

Chip Select 2 esta conectado a B1


Reset esta conectado a C0
Voltaje Negativo tambin esta conectada a 20k Ohm POT
Voltaje Positivo para LED back light (retro iluminacin) esta conectado a GND
Las funciones definidas son:
Glcd_init (mode)
Debe ser la primera funcin en invocarse. Enciende el LCD.
Glcd_pixel (x,y,color)
Establece el color del pixel. Puede activarse o desactivarse.
Glcd_fillScreen (color)
Rellena el LCD de un color determinado. Puede activarse o desactivar.
Glcd_update ( )
Escribe en la RAM del LCD; slo es posible si est definido FAST_GLCD.
Glcd_line (x1,y1,x2,y2,color)
Dibuja una lnea desde el primer punto al segundo asignando color, el cual, a su vez,
puede activarse o desactivarse.
Glcd_rect (x1,y1,x2,y2,fill,color)
Dibuja un rectngulo con un vrtice en (x1,y1) y el otro en (x,y2). Puede ser rellenado o
no y puede activarse un color o no.
Glcd_bar (x1,y1,x2,y2,width,color)
Dibuja una barra desde el primer punto al segundo; se puede definir el nmero del
rango de pixeles y puede activarse un color o no.
Glcd_circle (x,y,radius,fill,color)
Dibuja un circulo con centro en (x,y) y con el radio especificado; puede rellenarse o no
y puede activarse el color o no.
Glcd_text57 (x,y,textptr,size,color)
Escribe el texto empezando en (x,y); los caracteres son de 5 x 7 pixeles; se puede scalar
el tamao y puede activarse el color o no. Esta funcin enva los caracteres a la lnea
siguiente(se debe usar #define GLCD_WIDTH para definir el ancho de visualizacin).

WEBGRFIA

CIDIACCTEC
CENTRO DE INVESTIGACION DESARROLLO INNOVACION ASCESORIA Y
CAPACITACION EN CIENCIA Y TECNOLOGIA
http://www.mikroe.com/eng/chapters/view/82/capitulo-4-ejemplos/
http://html.rincondelvago.com/microcontroladores_2.html
http://r-luis.xbot.es/pic1/pic02.html
http://perso.wanadoo.es/pictob/microprg.htm
http://www.bairesrobotics.com.ar/data/pic16f877-guia%20detallada
%20parte2.pdf
http://robotsperu.org/foros/pic16f877a-vt35.html
http://www.monografias.com/trabajos18/descripcion-pic/descripcionpic.shtml
http://picmicrocontroller877.blogspot.com/2007/08/caracteristicas-del16f877.html
http://perso.wanadoo.es/pictob/micropic.htm
http://dspace.ups.edu.ec/bitstream/123456789/35/7/Capitulo1.pdf

You might also like