You are on page 1of 7

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

TUTORIAL II parte A

OBJETIVOS

Conocer el manejo de puertos del microcontrolador 16F877A, registros


TRIS y PORT.
Familiarizarse con las principales instrucciones del lenguaje y la estructura
de un programa en C.
Afianzar conceptos relacionados con la simulacin en el MPLAB.
Realizar la implementacin en un microcontrolador por medio del uso de la
tarjeta programadora.
Conocer los elementos mnimos necesarios para realizar el montaje de un
sistema microcontrolado.

MARCO TERICO

Puertos de entrada / salida (I/O ports):

Una de las caractersticas de los microcontroladores es el hecho de poseer


puertos que pueden servir tanto como entradas de datos como salida de los
mismos.
Observemos el diagrama de pines del microcontrolador 16F877A:

Los pines indicados por R ms una letra y un nmero indican pines que pueden
ser usados como pines de I/O, el resto de pines son el oscilador, la
alimentacin y el reset (Master clear). Ntese algunos pines de I/O poseen
varios nombres (Por ejemplo RA0 / AN0) lo que indica que dicho pin puede ser

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

usado como puerto de I/O (RA0) o puede ser usado por un perifrico del
microcontrolador (AN0 conversor anlogo digital).
En total el 16F877A tiene cinco puertos denominados como Puerto A al Puerto
E, cada puerto est compuesto por de 3 a 8 pines de I/O de esta forma:

PORT A

PORT B

RA0
RA1
RA2
RA3
RA4
RA5
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PORT C

PORT D

RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
RD0
RD1
RD2
RD3
RD4
RD5
RD6
RD7

PORTE

RE0
RE1
RE2

CONFIGURACIN DE PUERTOS (Registros Tris):


Antes de poder usar los puertos del microcontrolador debemos configurarlos ya
sea como una entrada de datos o como una salida de los mismos. Para
realizar esto se recurre a los registros TRIS de la siguiente forma:
Cada puerto tiene un registro TRIS asociado, por ejemplo el PORTA se
configura usando el registro TRISA, el PORTD se configura usando el TRISD y
as sucesivamente.
Los TRIS son registros de 8 bits, cada uno de sus bits configura un pin de dicho
puerto. Por ejemplo: en el registro TRISD el bit menos significativo (bit 0)
configura el pin RD0, el bit 7 del registro TRISA configura el pin RA7 y as
sucesivamente.
Un uno en un registro TRIS indica que el pin asociado se comportar como una
entrada y un 0 indica que dicho pin se comportar como una salida.

Ejemplos:
TRISB= 0b10101011;
Ac se est configurando a RB7, RB5, RB3, RB1 y RB0 como entradas
mientras que RB6, RB4 y RB2 sern salidas. El prefijo 0b indica que los datos
que vamos a ingresar al registro estn en binario.

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

TRISD=0b00001111;
Se configuraron como entradas los pines RD0 a RD3 y como salidas los pines
RD4 a RD7.

TRISC=255;
Ac se configura todo el puerto C como entrada en todos sus pines, obsrvese
que no se us prefijo y por lo tanto el dato se interpreta como decimal,
recurdese que al convertir decimal a binario tenemos 255 = 0b11111111.
TRISC=0xFF;
Igualmente se configur el puerto C como entrada todos sus pines, esta ves se
utilizaron datos en formato hexadecimal (prefijo 0x). Recurdese 255 = 0xFF.

El compilador tambin nos permite configurar solamente un pin (bit) del registro
TRIS sin modificar el resto del registro de esta forma:
TRISC7=1; Configura el pin RC7 como una entrada, sin modificar la
configuracin del resto de pines del puerto C.

A tener en cuenta:
- Al iniciar o resetear el microcontrolador pone todos los pines como
entradas.
- Al configurar los puertos que manejan menos de 8 bits (PORTA y
PORTE) debe tenerse cuidado, en el 16F877 los bits TRISE3-7 deben
siempre mantenerse en cero.

MANEJO DE LOS PUERTOS:


Para escribir o leer a un puerto se utilizan los registros PORT, igualmente que
los TRIS existe uno para cada puerto y cada bit del registro corresponde a un
pin del puerto.
Ejemplos:
PORTA=0b1110001;
Suponiendo que el puerto A est todo como salidas,
se colocarn en 1 lgico (+5V) los pines RA7, RA6, RA5 y RA1, el resto irn a
cero lgico (0V).
PORTB = 255;
estn como salidas.

Pone todos los pines del puerto B en alto si estos

RB7=1;
Igualmente que con los TRIS en los PORT se puede
modificar un bit sin modificar todo el registro, para ello se utiliza el nombre del
pin.

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

Politecnico CJIC

RB6=0;

http://mecatronica.jimdo.com/

Lleva a cero el pin 6 del puerto RB.

PORTB = PORTD;
Suponiendo que PORTD est como entrada y
PORTB est como salida se copiara el PORTD en el PORTB.

A tener en cuenta:
- Para poder usar el puerto A como puerto de I/O se debe deshabilitar el
convertidor anlogo digital que por defecto tiene los pines como
anlogos, para ello se debe agregar esta instruccin: ADCON1=6; mas
detalles veremos cuando usemos el convertidor A/D.

APLICACIN: JUEGO DE LUCES


Como aplicacin al manejo de puerto como salida de datos realizaremos el
siguiente proyecto para ser implementado usando la tarjeta programadora.
Para esto colocaremos 8 leds en las salidas del puerto B del microcontrolador
de modo que se enciendan al poner un uno lgico en dichos pines.
Deseamos generar la siguiente secuencia de luces (las casillas en negro
indican leds encendidos):
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

Y se repita indefinidamente.
A continuacin se ilustra el cdigo en C que efecta dicha secuencia, se indica
con comentario cada lnea:

#include <pic.h> //Incluyo libreria con definicin de registros del PIC


#include "delay.h" //Incluyo libreria para manejar los retardos
#include "delay.c"
Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

void main (void)


{
TRISB=0;

Politecnico CJIC

http://mecatronica.jimdo.com/

//Indico que aca comienza mi programa


//Configuracin de puertos
//Todo el puerto B son salidas

while(1)
//Ciclo infinito para repetir la secuencia
{
PORTB=255;
//Primer paso de la secuencia todos prendidos
DelayMs(200);
//Retardo para visualizacin.
PORTB=0;
//Todos apagados
DelayMs(200);
//Retardo para visualizacin.
RB0=1;
RB7=1;
DelayMs(200);
//Retardo para visualizacin.
RB1=1;
RB6=1;
DelayMs(200);
//Retardo para visualizacin.
RB5=1;
RB2=1;
DelayMs(200);
//Retardo para visualizacin.
}
}

Iguales resultados se obtendran con el siguiente cdigo:

#include <pic.h> //Incluyo libreria con definicin de registros del PIC


#include "delay.h" //Incluyo libreria para manejar los retardos
#include "delay.c"
void main (void)
{
TRISB=0;

//Indico que aca comienza mi programa


//Configuracin de puertos
//Todo el puerto B son salidas

while(1)
//Ciclo infinito para repetir la secuencia
{
PORTB=255;
//Primer paso de la secuencia todos prendidos
DelayMs(200);
//Retardo para visualizacin.
PORTB=0; //Todos apagados
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b10000001;
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b11000011;
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b11100111;
DelayMs(200);
//Retardo para visualizacin.
}
}

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Retardos: Dado que la velocidad de ejecucin de un microcontrolador es


relativamente rpida (1us por instruccin a 4Mhz) no podramos observar la
ejecucin de la secuencia, para ello utilizamos los retardos. Un retardo es
simplemente un conjunto de instrucciones que se ejecutan repetitivamente para
crear un tiempo muerto en la ejecucin del programa.
El compilador PICClite en la librera Delay.h provee las funciones DelayMs() y
DelayUs() las cuales generan retardos de milisegundos y microsegundos
respectivamente, el parmetro pasado a dichas funciones debe estar entre 0 y
255. El clculo de retardos en estas funciones est basado en un reloj de 4Mhz
para distintas frecuencias deben escalarse. Recordar incluir delay.h y delay.c
en la carpeta del proyecto.

LECTURA DE PUERTOS:

A continuacin se ilustra un cdigo que hace uso de la lectura de puertos, en el


se verifica cada vez que va a comenzar la secuencia anterior si el pin RC0 est
en uno o no, si el pin est en uno se continua la secuencia, si no lo est no se
ejecuta secuencia hasta que se coloque en uno:
#include <pic.h> //Incluyo libreria con definicin de registros del PIC
#include "delay.h" //Incluyo libreria para manejar los retardos

void main (void)


//Indico que aca comienza mi programa
{
//Configuracin de puertos
TRISB=0;
//Todo el puerto B son salidas
TRISC0=1;
//El pin RC0 es una entrada
while(1)
//Ciclo infinito para repetir la secuencia
{if(RC0==1)
{
PORTB=255;
//Primer paso de la secuencia todos prendidos
DelayMs(200);
//Retardo para visualizacin.
PORTB=0; //Todos apagados
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b10000001;
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b11000011;
DelayMs(200);
//Retardo para visualizacin.
PORTB=0b11100111;
DelayMs(200);
//Retardo para visualizacin.
}
}
}

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/

DIAGRAMA DE CONEXIONES:

Obsrvese la conexin de los led y el swiche en PORTB y RC0


respectivamente, adems de esto est el montaje de la alimentacin del
microcontrolador, +5V en los pines 32 y 11 (Vdd) y tierra en los pines 31 y 12.
El master clear se debe mantener en un nivel alto para no resetear al
microcontrolador (puede colocarse un pulsador para realizar el reset cuando se
desee) por medio de una resistencia. El oscilador (cristal) se debe conectar en
los pines 13 y 14 adems se recomienda utilizar condensadores de 22pF entre
los pines del cristal y tierra para mejorar la estabilidad de este.

Nelson David Muoz C.

Politecnico CJIC

http://mecatronica.jimdo.com/