Está en la página 1de 29

pg.

1
NDICE
Contenido
CAPITULO 1 ..................................................................................................................................... 2
1.1.- CONTROLADORES Y MICROCONTROLADORES ......................................................... 2
1.2.-DIFERENCIA ENTRE MICROCONTROLADOR Y MICROPROCESADOR .................. 4
1.3.- ARQUITECTURA INTERNA DE UN MICROCONTROLADOR...................................... 5
1.4.- ARQUITECTURA HARVARD ................................................................................................ 6
1.6.- TIPOS DE BUSES ................................................................................................................ 8
1.7.- TIPOS DE MEMORIAS ........................................................................................................ 9
1.8.- TIPOS DE MICROCONTROLADORES .............................................................................. 9
CAPITULO 2 ................................................................................................................................... 10
2.1.- ARQUITECTURA INTERNA DEL MICROCONTROLADOR ......................................... 10
2.2.1.- CARACTERSTICAS IMPORTANTES PIC 16F877A .............................................. 12
2.2.2.- CONFIGURANDO EL HARDWARE ........................................................................... 12
2.2.2.1.- Puertos ..................................................................................................................... 13
2.2.2.2.- Puerto A ................................................................................................................... 14
2.2.2.3.- Puerto B ................................................................................................................... 14
2.2.2.4.- Puerto C ................................................................................................................... 15
2.2.2.5.- Puerto D ................................................................................................................... 15
2.2.2.6.- Puerto E ................................................................................................................... 15
CAPTULO 3 ................................................................................................................................... 16
3.1.- Compilador CCS y Declaraciones de control ................................................................ 16
3.2.- Variables ............................................................................................................................. 17
3.3.- Operadores ......................................................................................................................... 18
3.3.1.- Asignacin ................................................................................................................... 18
3.3.2.- Aritmticos ................................................................................................................... 18
3.3.3.- Relacionales................................................................................................................ 19
3.3.4.- Lgicos ......................................................................................................................... 19
3.3.5.- De bits .......................................................................................................................... 19
3.4.- Declaraciones de Control ................................................................................................. 20

pg. 2
3.4.1.- IF-ELSE ....................................................................................................................... 20
3.4.2.- WHILE .......................................................................................................................... 21
3.4.3.- DO-WHILE .................................................................................................................. 21
3.4.4.- FOR .............................................................................................................................. 22
3.4.5.- SWITCH-CASE .......................................................................................................... 22
3.4.6.- RETURN ...................................................................................................................... 23
3.4.7.- BREAK, CONTINUE, GOTO .................................................................................... 23
3.5.- Funciones incluidas en CCS ................................................................................................ 23
CAPITULO 4 ................................................................................................................................... 26
4.2.- Manejo de puertos ................................................................................................................. 26






CAPITULO 1
INTRODUCCIN
1.1.- CONTROLADORES Y MICROCONTROLADORES

Un controlador es un dispositivo electrnico encargado de valga la redundancia,
controlar uno o ms procesos. Por ejemplo, el controlador del aire acondicionado,
leer la informacin de los sensores de temperatura, la procesar y actuar en
consecuencia.

pg. 3
Al principio, los controladores estaban formados exclusivamente por componentes
discretos. Ms tarde, se emplearon procesadores rodeados de memorias, circuitos
de E/S, etc, sobre una placa de circuito impreso (PCB).
En la dcada de los 70s, los fabricantes de circuitos integrados iniciaron la
difusin de un nuevo circuito para control, medicin e instrumentacin al que
llamaron microcomputador en un slo chip o de manera ms exacta
microcontrolador.
Un microcontrolador es un circuito integrado programable que contiene todos los
componentes de un microprocesador aunque de limitadas prestaciones. Se
emplea para controlar el funcionamiento de una tarea determinada y, debido a su
reducido tamao, suele ir incorporado en el propio dispositivo al que gobierna.
Esta ltima caracterstica es la que le confiere la denominacin de controlador
incrustado (Embedded controller).
El microcontrolador es un dispositivo dedicado. En su memoria slo reside un
programa destinado a manipular una aplicacin determinada; sus lneas de
entrada/salida soportan el conexionado de sensores y actuadores del dispositivo a
controlar y todos los recursos complementarios disponibles tienen como nica
finalidad atender sus requerimientos. Una vez programado y configurado el
microcontrolador solamente sirve para efectuar la tarea asignada.
En la Figura 1.1 se puede observar el diminuto tamao de un microcontrolador
comparado con una aguja:


pg. 4

Figura 1.1.- Tamao de un microcontrolador
De todas las estadsticas asombrosas que se utilizan para describir el mundo del
microcontrolador, ninguna es ms extraordinaria que sta: el nmero total de
transistores que integran todos los circuitos integrados que se producirn en el
mundo este ao, es equivalente al nmero de gotas de lluvia que caern en
California durante ese mismo periodo.
El nmero de productos que funcionan en base a uno o varios microcontroladores
aumenta de forma exponencial
1.2.-DIFERENCIA ENTRE MICROCONTROLADOR Y
MICROPROCESADOR

Es muy habitual confundir los trminos de microcontrolador y microprocesador,
cayendo as en un error de cierta magnitud. Un microcontrolador es, como ya se
ha comentado previamente, un sistema completo, con unas prestaciones limitadas

pg. 5
que no pueden modificarse y que puede llevar a cabo las tareas para las que ha
sido programado de forma autnoma.
Un Microprocesador es un dispositivo integrado digital capaz de interpretar y
ejecutar un conjunto secuencial de instrucciones (programa). Bsicamente
contiene circuitos electrnicos que realizan operaciones aritmticas, lgicas y de
control. Se trata de un sistema muy complejo, por eso debe ir integrado en chips.
Debe quedar clara por tanto la diferencia entre microcontrolador y
microprocesador: a modo de resumen, el primero es un sistema autnomo e
independiente, mientras que el segundo es una parte, cabe decir que esencial,
que forma parte de un sistema mayor.

1.3.- ARQUITECTURA INTERNA DE UN MICROCONTROLADOR

Como ya se ha visto, un microcontrolador es un dispositivo complejo, formado por
otros ms sencillos.
Para que un microprocesador sea funcional requiere conectarse a una memoria y
a dispositivos de entrada y salida (E/S).
Para aclarar esto piensen en la tarjeta principal de su computadora personal,
adems de un buen microprocesador, requieren de memoria RAM y como ustedes
saben en la tarjeta principal (motherboard) tenemos un sper circuito integrado
llamado chipset que entre otras cosas se encarga de proporcionar las funciones
de entrada y salida, tales como el control de los puertos serial, paralelo, USB,
IEEE-1394, Ethernet y de las ranuras ISA, PCI, AGP y ms.
En cambio en un microcontrolador se tienen tanto las capacidades de
procesamiento, almacenamiento de datos e instrucciones (memoria) y de
comunicacin con el entorno (E/S) dentro de un slo chip No requiere de otros

pg. 6
componentes para funcionar! De hecho puede considerarse como una
microcomputadora en un slo chip!
Obviamente tanta belleza tiene algunas desventajas, sobre todo derivadas del
hecho de que se trata de un sistema cerrado, es decir, sus caractersticas ya no se
pueden cambiar. El microprocesador se considera un sistema abierto, es decir,
sus caractersticas pueden modificarse como la memoria RAM, agregarle mas
puertos de entrada/salida, etc.

Una diferencia notable es que los microcontroladores y microprocesadores, estn
basados en las arquitecturas Harvard y Von Neumann respectivamente. Esta
ltima se caracterizaba porque la CPU se conectaba con una memoria nica,
donde coexistan datos e instrucciones, a travs de un sistema de buses.
1.4.- ARQUITECTURA HARVARD

En esta arquitectura mostrada en la Figura 1.2, son independientes la memoria de
instrucciones y la memoria de datos y cada una dispone de su propio sistema de
buses para el acceso. Esta dualidad, adems de propiciar el paralelismo, permite
la adecuacin del tamao de las palabras y los buses a los requerimientos
especficos de las instrucciones y de los datos.

Figura 1.2.- Arquitectura Harvard, la memoria de datos e instrucciones son independientes

pg. 7
El procesador de los modernos microcontroladores responde a la arquitectura
RISC (Computadores de Juego de Instrucciones Reducido), que se identifica por
poseer un repertorio de instrucciones mquina pequeo y simple, de forma que la
mayor parte de las instrucciones se ejecutan en un ciclo de instruccin.
Otra aportacin frecuente que aumenta el rendimiento del computador es el
fomento del paralelismo implcito, que consiste en la segmentacin del procesador
(pipe-line), descomponindolo en etapas para poder procesar una instruccin
diferente en cada una de ellas y trabajar con varias a la vez.

1.5.- ARQUITECTURA VON NEUMANN
La arquitectura de von Neumann que se muestra en la Figura 1.3, es una familia
de arquitecturas de computadoras que utilizan el mismo dispositivo de
almacenamiento tanto para las instrucciones como para los datos (a diferencia de
la arquitectura Harvard). La mayora de las computadoras modernas estn
basadas en esta arquitectura, aunque pueden incluir otros dispositivos adicionales,
(por ejemplo, para gestionar las interrupciones de dispositivos externos como
ratn, teclado, etc).


Figura 1.3.- Arquitectura Von Newmann, las memorias de datos e instrucciones
comparten el mismo espacio


pg. 8
DIFERENCIAS:
La configuracin mnima bsica de un Microprocesador esta constituida por
un Integrado de 40 Pines, una memoria RAM de 28 Pines, una memoria
ROM de 28 Pines y un decodificador de direcciones de 18 Pines.
Microcontrolador incluye todos los elementos del Microprocesador en un
solo Circuito Integrado por lo que implica una gran ventaja en varios
factores: En el circuito impreso por su amplia simplificacin de circuitera.
El costo para un sistema basado en Microcontrolador es mucho menor,
mientras que para el Microprocesador, es muy alto en la actualidad.
Los Microprocesadores tradicionales se basan en la arquitectura de Von
Newmann, mientras que los microcontroladores trabajan con arquitectura
Harvard.
El tiempo de desarrollo de un proyecto electrnico es menor para los
Microcontroladores.

1.6.- TIPOS DE BUSES

Observando las Figuras 1.2 y 1.3, se detallan los llamados Buses, stos,
simplemente son los cables por donde viaja la informacin dentro de un
microprocesador y/o microcontrolador, existen 3 tipos y son:
a) Bus de Control: Es el que controla que no existan colisiones de datos
dentro del microcontrolador microprocesador, por ejemplo, cuando
mandas un dato al disco duro, estos no salen a la impresora. Se puede
decir que es el rbitro, ya que es el que determina que elemento puede
acceder al bus de datos y tambin cuando hacerlo.
b) Bus de Datos: Por estos cables buses, es por donde viajan los datos que
van hacia un integrado cualesquier perifrico.

pg. 9
c) Bus de direcciones: Mediante este bus se habilitan los diversos perifricos
para que stos puedan leer escribir informacin en el bus de datos.

1.7.- TIPOS DE MEMORIAS

Es aqu donde se almacenan los datos y/o programas que sern ejecutados por
un microcontrolador un microprocesador. Existen algunos tipos como:
a) ROM: Acrnimo de Read Only Memory, memoria de solo lectura, por
ejemplo el BIOS de tu PC . Se graba una sola vez de fabrica
b) RAM: Acrnimo de Random Access Memory, por ejemplo, donde se
guardan los datos
c) PROM: Acrnimo de Programmable Read Only Memory. Se permite su
grabado una sola vez, por un usuario
d) EPROM: Acrnimo de Ereasable Programmable Read Only Memory. Se
puede borrar y escribir datos en ella miles de veces, su borrado es
mediante rayos ultravioleta, y dura aproximadamente 10 minutos
e) EEPROM (E
2
PROM): Acrnimo de Electrically Ereasable Programmable
Read Only Memory. Se pueden borrar y escribir datos miles de veces, su
borrado se hace elctricamente.

1.8.- TIPOS DE MICROCONTROLADORES

Existen algunos fabricantes de microcontroladores que dependiendo del ancho del
nmero de bits del bus de datos, se les llama micros de 8 bits, 16 bits, etc.. Cada
fabricante se muestra en la Tabla 1.1.
Tabla1.1.- Ejemplos de Familias de Microcontroladores
Fabricante Microcontrolador # de bits
Altair Altair32, Altair 535A, Altair 537A 8
Intel 8031,8051,8052,8751,8752 8

pg. 10
Siemens SAB80C515(Compatible con los de
Intel)
8
Motorola 6801,6805,6809,68HC11 8
Microchip PIC12CXX,PIC16XX,PIC17XX,PIC18xx 8,16

En la Figura 1.4, se pueden observar algunas aplicaciones tpicas de los
microcontroladores.








Figura 1.4.- Algunas aplicaciones del microcontrolador
CAPITULO 2
2.1.- ARQUITECTURA INTERNA DEL MICROCONTROLADOR

Los microcontroladores PIC, son manufacturados por la empresa Microchip, en
Chandler, Arizona. Se abordar este microcontrolador, por estar considerado en la
familia de gama media, es decir presenta caractersticas estupendas en cuanto al
nmero de puertos de entrada/salida, cantidad de memoria, etc y sobre todo su
conjunto de instrucciones esta alcanzable (y entendible) para un curso de un
semestre.
En la Figura 2.1, se muestran las diferencias existentes entre las diversas familias
de PIC que maneja la empresa Microchip
Automotriz Industrial
Consumidor Automati-
zacin
Automatizacin en fbricas
Control de motores, humo
Seguridad, captura de datos
Mediciones de potencia
Equipos de prueba mdicos
Equipos de oficinas
Sistemas de seguridad
Control a distancia
Mquinas expendedoras
Sistemas de alarmas
Hogar (lavadoras,T.V
aspiradoras, lavaplatos,etc)
Sistemas de seguridad
Control remoto
Juguetes
Control del encendido
Control de transmisin
Control de la seguridad
Entretenimiento
Luces, llantas, ABS,
Fuel inyection


pg. 11

Figura 2.1.- Presentacin grfica de las cuatro familias de la serie PIC
El nombre PIC, viene del acrnimo: Programable Integrated Circuit, la parte
programable, significa que el integrado es capaz de modificar su comportamiento,
basndose en un programa almacenado en la memoria interna del mismo circuito
integrado.
En lo que respecta a la programacin del PIC, se vern el PICC y el ensamblador
para entender un poco ms la arquitectura del micro. Quizs se piense porque no
en ensamblador, ya que es mas eficiente respecto al alto nivel, tienen razn, pero
en ensamblador no es posible abarcar muchos temas debido a lo extenso del
cdigo, como por ejemplo, para efectuar un retardo de un segundo, en alto nivel
se resuelve en una sola lnea de cdigo, en ensamblador se requieren 5.
Algo muy importante es el datasheet que proporciona el fabricante, ya que es el
que conoce a la perfeccin su funcionamiento.
PIC18Cxxx
32 Niveles pila
4 Vectores interrupcin
77 Instrucciones
PIC17Cxxx
16Niveles de pila
4 Vectores de interrupcion
58 Instrucciones
PIC12C6xx,PIC16Cxx y PIC16F87x
8 Niveles de pila
1 Vector de interrupcin y
35 Instrucciones
PIC12C5xx y PIC16C5x
2 Niveles de pila
33 Instrucciones
Gama Mejorada
Gama Alta
Gama Media
Gama Bsica

pg. 12
2.2.1.- CARACTERSTICAS IMPORTANTES PIC 16F877A
Velocidad de operacin: Hasta 20MHz
Rango de operacin: 2.0 5.5 volts
Memoria de programa: instrucciones de 8k x 14
Memoria RAM de datos: 368 x 8 bytes
Memoria EEPROM de datos: 256 x 8 bytes
Manejo de interrupciones
POR (Power on-reset)
PWRT (Power up-timer)
OST (Oscillator start-up timer)
WDT (Watch dog timer)
Proteccin de cdigo
Modo SLEEP
ICSP (In circuit serial programming) mediante 2 pins
Corriente mxima de entrada/salida por puerto: 25 mA
3 Timers: timer0, timer1, timer2
2 mdulos PWM
Convertidor Anlogo/digital de 10 bits
Puerto serial sncrono (SSP)
Mdulo USART

2.2.2.- CONFIGURANDO EL HARDWARE

Es bsico conocer la distribucin de pines del microcontrolador as como su
conexin bsica sistema mnimo, el cual se muestra en la Figura 2.2.

pg. 13


Figura 2.2.- Esquemtico del PIC16f877A

2.2.2.1.- Puertos

Los puertos con los que se cuenta son PORTA, PORTB, PORTC, PORTD,
PORTE, estos se configuran como entradas o salidas en los registros TRISA,
TRISB, TRISC, TRISD, TRISE, que se encuentra ubicado en las direcciones 85H,
86H, 87H, 88H y 89H del banco 1. De fbrica los puertos estn configurados como
entradas.
Si al registro TRISA, se le carga el valor b00000000 (binario), el puertoA, se
configura como salida, es decir, nicamente podr sacar datos. Igualmente, si se
le carga el nmero binario b11111111 (255 en decimal), solamente podr leer
datos y no podr sacarlos. Lo mismo aplica para el resto de los puertos.

pg. 14
Para cargar los valores al registro TRISA, se requiere el uso del registro STATUS,
que se localiza en el banco 0 (adems en los bancos 1, 2, 3). Del registro
STATUS, se utilizan los bits 5 (RB1) y 6 (RB0) segn la Tabla 2.1.
Tabla 2.1.- Seleccin de los bancos en el registro STATUS
RP1:RP0 Banco
00 0
01 1
10 2
11 3

2.2.2.2.- Puerto A

Es de una longitud de 6 bits, bidireccional, y se puede configurar como analgico
digital, esta configuracin se efecta en el registro ADCON1 del Banco 1.
El pin 4 del puerto A, es decir, PA.4, requiere una resistencia pull-up, ya que es de
dren abierto.

2.2.2.3.- Puerto B

Completamente bidireccional de 8 bits, se puede configurar para que internamente
se activen las resistencias pull-up (todo el puerto B). Los pins PB.4 hasta PB.7, se
pueden configurar para que activen una interrupcin al PIC si se encuentran
configurados como entradas.
El PB.0, tiene la funcin de actuar como el pin que activa las interrupciones
externas, es decir, los sensores tendran que estar conectados fsicamente a ste
(pin 30).

pg. 15
2.2.2.4.- Puerto C

De 8 bits, bidireccional. Todo ste puerto tiene entradas del tipo buffer (Schmitt),
esto implica que son las ms inmunes al ruido.
2.2.2.5.- Puerto D

Puerto bidireccional de 8 bits, cuyas entradas son del tipo Schmitt, con lo que
presentan mayor inmunidad al ruido. Tiene la particularidad de poder configurarse
como si fuera del tipo TTL (bit 4 con el valor 1 del registro TRISE), hay que
recordar que el microcontrolador es CMOS.
2.2.2.6.- Puerto E

Bidireccional de 3 bits, asimismo posee entradas del tipo Schmitt.













pg. 16
CAPTULO 3

3.1.- Compilador CCS y Declaraciones de control

El compilador C de CCS ha sido desarrollado para PIC MCU, obteniendo la
mxima optimizacin del compilador con stos dispositivos. Dispone de una
amplia librera de funciones predefinidas, comandos de preprocesado. Asimismo,
suministra los drivers para dispositivos como LCD, convertidores A/D, relojes de
tiempo real, EEprom serie, etc. Las caractersticas generales de este compilador y
ms informacin adicional se pueden encontrar en la direccin
http://www.ccsinfo.com.
El CCS C es C estndar, adems de las directivas propias de C, suministra
especficas para PIC.
En la Tabla 3.1, se muestran los tipos de datos aceptados por el CCS C.
Tabla 3.1.- Tipos de datos
Tipo Tamao Rango Descripcin
Int1
short
1 bit 0 a 1 Entero de 1 bit
Int
Int8
8 bits 0 a 255 Entero de 8 bits
Int16
Long
16 bits 0 a 65,535 Entero de 16 bits
Int 32 32 bits 0 a 4,294,967,295 Entero de 32 bits
Float 32 bits 1,175x10
-38
a
3,402x10
+38
Coma flotante
Char 8 bits 0 a 255 Carcter
Void - - Sin valor
Signed Int8 8 bits -128 a +127 Entero con signo
Signed Int16 16 bits -32,768 a +32,767 Entero 16 bits con
signo
Signed Int32 32 bits -2
31
a +(2
31
-1) Entero 32 bits con
signo


pg. 17
En la Tabla 3.2, se muestran las constantes que pueden estar en decimal, octal,
hexadecimal o binario.
Tabla 3.2.- Constantes
123 Decimal
0123 Octal (0)
0x123 Hexadecimal (0x)
0b101011 Binario (0b)
x Carcter
\010 Carcter octal
\x3F Carcter hexadecimal
\n Cambio de lnea
\r Retorno de carro
\t Tabulacin
\b Backspace


3.2.- Variables

Las variables utilizadas, se deben declarar obligatoriamente antes de empezar a
utilizarlas, por lo que debern declararse el valor y su tipo, de acuerdo al siguiente
ejemplo:
Int temp_sup=50;
Las variables pueden ser declaradas como globales o locales, las locales solo
pueden ser vistas dentro de la funcin que se declar, mientras las globales
pueden ser observadas por todas las funciones como se ve en el siguiente
ejemplo:


pg. 18
#include <16f877A.h>
#USE DELAY (CLOCK=4000000)
INT16 COUNTER; /*Variable global, ya que esta fuera de la function ppal. main*/
VOID MAIN (VOID)
{
CHAR K, INICIAL=0 ; /* Variables locales*/
INT8 TEMP_SUP ; /* Variable local */
}

3.3.- Operadores

3.3.1.- Asignacin

Es la manera en que el compilador le asigna valores a las variables, stas se
muestran en la Tabla 3.3.
Tabla 3.3.- Operadores de asignacin
+= 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, equivale a
x=x<<y
>>= Asignacin de desplazamiento a la derecha (x>>=y, equivale a
x=x>>y
&= Asignacin AND de bits (x&=y, equivale a x=x&y)
|= Asignacin OR de bits (x|=y, equivale a x=x|y)
^= Asignacin OR EXCLUSIVE de bits (x^=y, equivale a x=x^y)

3.3.2.- Aritmticos

Son las operaciones aritmticas que se efectan entre operadores, stos se
muestran en la Tabla 3.4.



pg. 19
Tabla 3.4.- Operadores aritmticos
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Mdulo resto de una divisin entera
-- Decremento
++ Incremento
sizeof Determina el tamao en bytes de un operando

3.3.3.- Relacionales

Son las encargadas de obtener la relacin que existe entre operandos y se
muestran en la Tabla 3.5.
Tabla 3.5.- Operadores de relacin
< Menor que
> Mayor que
>= Mayor o igual que
<= Menor o igual que
== Igual que
!= Distinto de
?: Expresin condicional

3.3.4.- Lgicos
Operaciones que se hacen por Byte (8 bits) y se muestran en la Tabla 3.6
Tabla 3.6.- Operadores lgicos
! Not
&& And
|| Or

3.3.5.- De bits

Son aquellas operaciones que se efectan bit a bit, y se muestran en la Tabla 3.7

pg. 20
Tabla 3.7.- Operadores de bits
~ Complemento a 1
& AND
^ OR EXCLUSIVE
| OR
>> Desplazamiento a derechas
<< Desplazamiento a izquierdas

3.4.- Declaraciones de Control

Estas son usadas para controlar el proceso de ejecucin del programa. Sin
estructuras de control, los programas seran sucesiones de sentencias cuyo orden
quedara fijado en el momento de la compilacin. Las que admite CCS son:
3.4.1.- IF-ELSE

If-Else: Primero se evala la EXPRESION , si es cierta, se ejecuta la
sentencia_1, en caso contrario se ejecuta sentencia_2
If (expresin)
{
sentencia_1;
}
Else
{
sentencia_2;
}
Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF; permitiendo tomar
decisiones mltiples.
If (expresin_1)
{
sentencia_1;
}
Else if (expresin_2)
{
sentencia_2;
}
Else
sentencia_3;

pg. 21
En este caso las expresiones se evalan en orden, si alguna de ellas es
cierta, la sentencia asociada a ella se ejecutar y se termina la funcin. En
caso contrario se ejecuta la SENTENCIA del ELSE.
3.4.2.- WHILE

While: Este es usado para repetir sentencias
While (expresin)
{
sentencias;
}
La expresin se evala y la(s) sentencia(s) se ejecuta(n) mientras la
expresin es verdadera, cuando es falsa se sale del lazo while.
3.4.3.- DO-WHILE

Do-While: Se diferencia del WHILE y del FOR en la condicin de
finalizacin, la cul se evala al final del bucle, por lo que las sentencias se
ejecutan al menos una vez.
Do
{
sentencias;
}
While (expresin);

Nota: si se desean lazos infinitos con el Do-while y while se logran como:
Do
{
sentencias;
}
While (1);

While (1)
{
Sentencias;
}



pg. 22
3.4.4.- FOR

For: Se usa para repetir sentencias
For ( inicializacin ; condicin de finalizacin; incremento)
{
sentencias
}
La inicializacin es una variable a la cual se le asigna un valor inicial, la
condicin de finalizacin sirve para evaluar ANTES de ejecutarse las
sentencias si es cierta o no, si es cierta se ejecutan las sentencias, en caso
contrario se sale del lazo.

3.4.5.- SWITCH-CASE

Switch-Case
Es un caso particular de una decisin mltiple:
Switch (expresin)
{
case constante 1:
sentencias;
break;
case constante 2:
sentencias;
break;

[default:
Sentencias;]
}

pg. 23
Evala la expresin y en orden a la CONSTANTE adecuada, se ejecutan
las sentencias adecuadas. Si ninguno de los CASE corresponde a la
CONSTANTE, se ejecuta DEFAULT (este comando es opcional)
3.4.6.- RETURN

Return: Se emplea para devolver datos en las funciones
3.4.7.- BREAK, CONTINUE, GOTO

Break: Permite salir de un bucle, se usa con while, For, Do y Switch
Continue y Goto
3.5.- Funciones incluidas en CCS

El software CCS, posee funciones predefinidas para acceder y hacer uso de los
perifricos del PIC, sin la necesidad de conocer a profundidad la arquitectura del
PIC asociada a cada registro. En la Tabla 3.8 se muestran estas funciones,
clasificadas en bloques funcionales.
Tabla 3.8.- Funciones incluidas en CCSdd

E/S RS232
assert ( ) getch( ) putc( ) fgetc( ) getchar( ) putchar() fgets( )
gets( ) puts( ) fprintf( ) kbhit( ) setup_uart( ) fputc( ) perror( )
fputs( ) getc( ) printf( ) set_uart_speed( )

E/S BUS
setup_spi ( ) spi_data_is_in ( ) spi_write( )
SPI 2 HILOS
spi_xfer( ) spi_read( )

E/S DISCRETAS
get_tris_x( ) input_x( ) output_float( ) output_low( )
input( ) output_X( ) output_high( ) output_toggle( )
input_state( ) output_bit( ) output_drive( ) port_x_pullups( )
set_tris_x( ) input_change_x( )
Puerto paralelo
psp_input_full( ) psp_output_full( ) psp_overflow( )
setup_psp(option, address_mask)

E/S I
2
C
i2c_isr_state( ) i2c_slaveaddr( ) i2c_write( ) i2c_poll( ) i2c_start( )
i2c_speed( ) i2c_read( ) i2c_stop( )
Control de
Procesos
clear_interrupt( ) goto_address( ) reset_cpu( ) disable_interrupts( )
interrupt_active( ) restart_cause( ) enable_interrupts( ) jump_to_isr( )
setup_oscillator( ) ext_int_edge( ) label_address( ) sleep( )
getenv( ) read_bank( ) write_bank( ) brownout_enable( )
Manipulacion por
Byte/bit
bit_clear( ) make8( ) _mul( ) shift_left( )
bit_set( ) make16( ) rotate_left( ) shift_right( )
bit_test( ) make32( ) rotate_right( ) swap( )
Operaciones
abs( ) cos( ) frexp( ) pow( ) acos( ) cosh( )
labs( ) sin( ) asin( ) div( ) ldexp( ) sinh( )

pg. 24
matemticas de
C estandard
atan( ) exp( ) ldiv( ) sqrt( ) atan2( ) fabs( )
log( ) tan( ) atoe( ) floor( ) log10( ) tanh( )
ceil( ) fmod( ) modf( )
Voltajes de
referencia
setup_low_volt_detect( ) setup_vref( )
Conversin A/D
set_adc_channel( ) setup_adc_ports( ) setup_adc( ) read_adc( )
adc_done( )
Caracteres C
estandard
atof( ) isprint(x) strcpy( ) strrchr( ) atoi( ) ispunct(x)
strcspn( ) strspn( ) atol32( ) isspace(char) strerror( ) strstr( )
atol( ) isupper(char) stricmp( ) strtod( ) isalnum( ) isxdigit(char)
strlen( ) strtok( ) isalpha(char) itoa( ) strlwr( ) strtol( )
isamong( ) sprintf( ) strncat( ) strtoul( ) iscntrl(x) strcat( )
strncmp( ) strxfrm( ) isdigit(char) strchr( ) strncpy( ) tolower( )
isgraph(x) strcmp( ) strpbrk( ) toupper( ) islower(char) strcoll( )
strcopy( ) strcopy( )
Timers
get_timer_x( ) set_timerx( ) setup_timer_0( ) setup_timer_1( )
setup_timer_2( ) setup_timer_3( ) setup_timer_4( ) setup_timer_5( )
setup_counters( ) restart_wdt( ) setup_wdt( ) set_rtcc( )
set_ticks( ) get_ticks( ) setup_timer_A( ) setup_timer_B( )
set_timerA( ) set_timerB( ) get_timerA( ) get_timerB( )
Manejo memoria
C estandard
calloc( ) memcmp( ) offsetofbit( ) free( ) memcpy( )
realloc( ) longjmp( ) memmove( ) setjmp( )
malloc( ) memset( ) memchr( ) offsetof( )
I2C I/O

Tabla
Tabla 3.8continuacin funciones
Capture/Compare
PWM
set_power_pwm_override( ) setup _ccp2( ) set_power_pwmx_duty()
setup_ccp3( ) set_pwm1_duty( ) setup_ccp4( )
set_pwm2_duty( ) setup_ccp5( ) set_pwm3_duty( )
setup_ccp6( ) set_pwm4_duty( ) setup_power_pwm( )
set_pwm5_duty( ) setup_power_pwm_pins( ) setup_ccp1( )
Memoria no voltil
erase_eeprom( ) read_program_memory( ) erase_program_eeprom( )
setup_external_memory( ) read_calibration( ) write_configuration_memory( )
read_configuration_memory( ) write_eeprom( ) read_eeprom( )
write_external_memory( ) read_external_memory( ) write_program_eeprom( )
read_program_eeprom( ) write_program_memory( )
C estandar
especiales
bsearch( ) qsort( ) srand( ) va_end( ) nargs( ) rand( )
va_arg( ) va_start( )
Delays (retardos)
delay_cycles( ) delay_ms( ) delay_us( )
Comparador
analgico
setup_comparator( )
RTOS
rtos_await( ) rtos_msg_send( ) rtos_terminate( ) rtos_disable( )
rtos_overrun( ) rtos_wait( ) rtos_enable( ) rtos_run( )
rtos_yield( ) rtos_msg_poll( ) rtos_signal( ) rtos_msg_read( )
rtos_stats( )
LCD
lcd_contrast( ) lcd_load( ) lcd_symbol( ) setup_lcd( )
QEI
qei_get_count( ) qei_set_count( ) qei_status( ) setup_qei( )

Conversin
D/A
dac_write( ) setup_dac( )
Reloj de tiempo
real, calendario
rtc_read( ) setup_dac( ) rtc_alarm_read( ) rtc_alarm_write( )
setup_rtc( ) setup_rtc_alarm( )
Teclados
capacitivos
touchpad_getc( ) touchpad_hit( ) touchpad_state( )

pg. 25
Puerto paralelo
master
setup_pmp()
Miscelneos
setup_opamp1( ) setup_opamp2( ) sleep_ulpwu( )






















pg. 26
CAPITULO 4
PROGRAMACIN

4.1.- Programacin
El compilador, tiene diversos modos para iniciar a programar, uno de ellos es el
project Wizard, este se recomienda para cuando ya se tiene experiencia previa.
Estando en el entorno de trabajo de CCS, se utiliza la opcin NEW SOURCE
FILE, el programa pide el nombre del nuevo fichero y posteriormente se abre una
ventana en blanco donde se escribe el cdigo.
El cdigo deber iniciar como se muestra a continuacin:
# include <16f877.h> //microcontrolador que se est usando
#fuses XT,NOWDT // cristal y no perro guardin (watchdog timer)
#use delay (clock=4000000) //cristal de 4 MHz

4.2.- Manejo de puertos

Existen funciones de C que permiten trabajar con registros bit a bit, algunas
involucradas en el manejo de puertos son:
bit_clear (var,bit) /*borra determinado bit de la variable (var)
bit_set (var,bit) /*pone a unos en determinado bit de la variable (var)
input_x() /*introduce un dato por el puerto especificado x
output_x(valor) /*saca el dato valor por el puerto especificado x
set_tris_x(valor) /*carga el registro tris_x con el dato de valor
output_low(pin) /*determinado pin se hace cero
output_high(pin) /*determinado pin se hace uno
Directivas requeridas:
#USE FAST_IO(PUERTO) /*esta no modifica los registros TRISX, hay que
asegurarse que estn bien declarados*/

pg. 27
#USE STANDARD_IO(PUERTO) /*esta modifica los registros TRISX, segn sea
una salida o entrada*/
#USE FIXED_IO(PUERTO_OUTPUTS=PIN1,...PINX) /*Solo se indican los
terminales de salida*/
Ejercicio 1.- Hacer un programa que encienda y apague un LED 5 veces, este
estar conectado al PB.0. Desarrollar el cdigo con las tres directivas usadas para
el manejo de puertos explicadas anteriormente (standard_io, fast_io, fixed_io)
Efectuar la simulacin en PROTEUS.
Solucin:
a) Se puede hacer mediante la directiva #byte (es decir, definiendo la
ubicacin en memoria de cada registro del PIC), esta equivale a la directiva
del ensamblador equ, quedando como sigue:

#include <16f877a.h>
#use delay (clock=4000000)
#fuses XT,NOWDT,NOPROTECT /*cristal,no perro guardian,no proteccin de cdigo*/
#byte portb=0x6 /* ubicacin del Puerto b en la memoria del micro*/
#byte trisb=0x86
int n; /* variable entera de 8 bits*/
void main()
{
for (n=0;n<5;n++)
{
bit_clear(trisb,0);
bit_set(portb,0);
delay_ms(500);
bit_clear(portb,0);
delay_ms(500);
}
}
b) #include <16f877a.h>
#use delay (clock=4000000)
#fuses XT,NoWDT, NOPROTECT
#use fast_io(b) /*con el uso de esta directiva, nicamente hay que usar los TRISx y Output
int n;
void main()
{
for (n=0;n<5;n++)
{
set_tris_b(0x00);
output_b(0b00000001);
delay_ms(500);
output_b(0x00);
delay_ms(500);
}
}


pg. 28
c) #include <16f877a.h>
#use delay (clock=4000000)
#fuses XT,NoWDT,NOPROTECT
#use fast_io(b)
#define pin_b0 48 /*Puerto b esta en la direccin 6*8+0 porque es el bit cero
int n;
void main()
{
for (n=0;n<5;n++)
{
set_tris_b(0x00);
output_b(0b00000001);
delay_ms(500);
output_low(pin_b0);
delay_ms(500);
}
}
Ejercicio 2.- Elaborar un programa que encienda y apague un LED en forma
intermitente.
Solucin:
#include <16f877a.h>
#use delay (clock=4000000)
#fuses XT,NoWDT,NOPROTECT
#use fast_io(b)
#define pin_b0 48

void main()
{
while(1) /*condicin que seiempre es verdadera, por lo que nunca se sale del lazo infinito
{
set_tris_b(0x00);
output_b(0b00000001);
delay_ms(500);
output_low(pin_b0);
delay_ms(500);
}
}

Ejercicio 3.- Elabore un programa que ejecute la funcin de scanner doble, en todo
el puerto B.
Solucin:


bit_test (var,bit) /*mustrea determinado bit de la variable var
BIBLIOGRAFIA

pg. 29
Compilador C CCS y Simulador Proteus para microcontroladores
PIC, Eduardo Garcia Breijo, Ed. Alfaomega, ediciones tcnicas
marcombo, primera edicin (2008)
Making Pic microcontroller instruments and controllers,
Haprit Singh Sandhu, Ed. Mc Graw Hill,

También podría gustarte