Está en la página 1de 15

PIC16F877A con el PICC Lite de HI-TECH

Tutor del Curso PIC16F877A usando el PIC C Lite de Hitech


Autor: Ing. Wilber Mendoza V.

OBJETIVO:
El objetivo de este articulo es iniciar y orientar al lector en la realización de un programa
con el PIC16F877A usando el PIC C Lite como compilador y el MPLAB IDE como programa
contenedor.

Este articulo no pretende ser una guía para aquellos programadores con basta
experiencia en el uso del lenguaje C, simplemente se trata de ubicar al lector en el punto desde el cual
pueda partir.

REQUISITOS:
En primer lugar el lector tendrá que tener instalado el MPLAB IDE en versiones
superiores a la 6.30, y también deberá tener instalado el PIC C Lite Compiler en su PC. También
puede hacer uso del PIC C Compiler si con este cuenta.

Puede escoger el software grabador de PICs que Ud. Prefiera. Si busca herramientas de
bajo costo y buen desempeño puede usar el EPICWIN o el WINPIC800, entre otros.

CREACIÓN DE UN PROYECTO:

Para la creación de un proyecto a partir de “cero” con el MPLAB usando el PIC C Lite como
compilador siga estos pasos.

* Nuestro programa se llamará: Ejemplo1.c


* Nuestro proyecto será: proyecto1

Abra el MPLAB, en nuestro caso es la versión 7.20:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 1


PIC16F877A con el PICC Lite de HI-TECH
En el menú Project entre a la opción Project Wizard

Obtendrá el siguiente mensaje, haga clic en Siguiente

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 2


PIC16F877A con el PICC Lite de HI-TECH
Luego seleccione el PIC16F877A:

Seleccione a continuación la herramienta: HI-TECH PICC Toolsuite y haga clic en Siguiente

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 3


PIC16F877A con el PICC Lite de HI-TECH
A continuación escriba el nombre del proyecto, en nuestro caso proyecto1 y escoja una carpeta en su
disco en donde ubicara su proyecto.

Haga clic en el botón Browse... y aparecerá una ventana para que escoja una carpeta en su disco:

En el ejemplo he escogido la carpeta “Clase03” y luego hago clic en Aceptar

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 4


PIC16F877A con el PICC Lite de HI-TECH
Aparecerá la ventana anterior pero con los dos recuadros escritos, hacer clic en Siguiente:

Obtendrá la siguiente ventana, haga clic en Siguiente:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 5


PIC16F877A con el PICC Lite de HI-TECH
Finalmente obtendrá la ventana que le indica que todos los pasos se realizaron correctamente, haga clic
en Finalizar:

Tendrá el MPLAB con la siguiente disposición:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 6


PIC16F877A con el PICC Lite de HI-TECH
Hasta aquí su proyecto ya ha sido creado pero no tiene ningún programa en él; necesita un archivo que
sera el que contenga el programa principal, a tal archivo lo llamaremos Ejemplo1.c y lo crearemos de
la siguiente manera:

Ingrese al menú File opción New:

Obtendrá una ventana nueva dentro del mplab con el nombre Untitled

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 7


PIC16F877A con el PICC Lite de HI-TECH
Guarde esa ventana con el nombre Ejemplo1.c en la misma carpeta que seleccionó para el proyecto
ingresando al menú File opción Save as...:

Clic en Guardar y ya tiene el archivo en donde escribirá su programa, pero tiene que agregarlo al
proyecto.

Deberá observar que la ventana que anteriormente llevaba por titulo Untitled ahora tiene el nombre
Ejemplo1.c.

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 8


PIC16F877A con el PICC Lite de HI-TECH
Para agregar su archivo al proyecto como archivo principal realice lo siguiente:

En la ventana que lleva por titulo proyecto1.mcw haga clic derecho en la opción Source Files y luego
haga clic en Add Files... como se observa en la siguiente figura:

Escoja el archivo Ejemplo1.c y luego clic en Abrir:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 9


PIC16F877A con el PICC Lite de HI-TECH
Su proyecto deberá quedar como se observa a continuación:

Si es así su proyecto esta listo y solo tiene que empezar a escribir su programa dentro de la ventana que
se observa con el titulo D:\...\Ejemplo1.c. En su PC podría diferir ligeramente el título de la ventana,
como por ejemplo: C:\...\Ejemplo1.c pero esto no tiene nada de incorrecto.

El programa que escriba puede copiarlo de algún otro programa o puede empezar a digitarlo
“desde cero”.

ESCRIBIENDO EL PROGRAMA:

Este seria un modelo de programa pequeño que visualiza leds en todos los puertos:

#include <pic.h> // Libreria necesaria para el PIC C Lite

__CONFIG(XT & PROTECT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN &
DEBUGDIS);

char conta1, conta2, conta3; // definicion de variables del programa


char i;

// Rutina de delay de 200ms

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 10


PIC16F877A con el PICC Lite de HI-TECH
void delay200ms(void)
{
for(conta2 = 0; conta2 < 200; conta2++) {
for(conta1 = 0; conta1 < 124; conta1++) asm("nop");
}
}

// Programa principal

void main (void)


{
TRISA = 0; // Todos los pines como salidas
TRISB = 0; // digitales
TRISC = 0;
TRISD = 0;
TRISE = 0;
PORTA = 0b00000001;
PORTB = 0b00000001;
PORTC = 0b00000001;
PORTD = 0b00000001;
PORTE = 0b00000001;
ADCON0 = 0; // Deshabilito entradas
ADCON1 = 0b00000110; // analogicas

// Debe conectarse leds en los puertos


// y ver un led que va corriendo

while(1) {
delay200ms();
PORTA = 2*PORTA;
PORTB = 2*PORTB;
PORTC = 2*PORTC;
PORTD = 2*PORTD;
PORTE = 2*PORTE;
if(PORTA == 0) PORTA = 0b00000001;
if(PORTB == 0) PORTB = 0b00000001;
if(PORTC == 0) PORTC = 0b00000001;
if(PORTD == 0) PORTD = 0b00000001;
if(PORTE == 0) PORTE = 0b00000001;
}
}

CONTROL DEL FLUJO DEL PROGRAMA:

El programa que contiene el PIC ira realizando acciones en base a las decisiones que tenga que
tomar sobre la marcha, para esto se utilizan las sentencias de control de flujo de programa:

• if(..)... else...
• for(...;...;...)
• do ...while(..)
• while(...)
• switch case (...) .. case 1: .. case2.. default:..

IF ELSE:
Se usa para seleccionar entre dos opciones, si es verdadero ejecuta una acción y si es falso
ejecuta otra:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 11


PIC16F877A con el PICC Lite de HI-TECH

if ( PORTA > 15 ) // Condicion: “PORTA es mayor que 15 ?”


{
PORTB++; // Si es Verdadero, entonces incrementar PORTB
}
else {
PORTB--; // Si es Falso, entonces decrementar PORTB
}

Otro ejemplo:

if ( conta1 == 10 ) // Condicion: conta1 es igual a 10 ?


{
conta2++; // Si es Verdadero: incremetar conta2
}

En este caso no hay ninguna acción en caso la condición fuera falsa, esto es totalmente valido.

Otro ejemplo:

if (RB3 == 1) // Condicion: pin RB3 esta en 1 (5 voltios) ?


{
PORTA = 10; // Si es verdadero: PORTA se carga con 10
}
else:
{
PORTA = 20; // Si es falso: PORTA se carga con 20
}

Otro ejemplo:

if (PORTB != 12) // Condicion: PORTB diferente de 12 ?


{
PORTA = 100; // Si es verdadero: PORTA se carga con 100
}

FOR:
Se usa para procesos repetitivos o iterativos, tiene una condición inicial, condición limite y una
sección para indicar el avance:

for (condición inicial ; condición limite ; avance )


{
instrucciones;
}

Ejemplos:

for ( conta1 = 0; conta1 < 20; conta1++)


{
PORTB = PORTA + PORTC;
}

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 12


PIC16F877A con el PICC Lite de HI-TECH
el ejemplo anterior inicia a conta1 en 0 y lo incrementa de uno en uno (conta1++) siempre que conta1
sea menor que 20, es decir que conta1 va desde 0 hasta 19 y cada vez cargara en PORTB el resultado
de la suma de PORTA y PORTC. En total esto sucederá 20 veces.

Se puede usar para generar tiempos muertos (retardos o delays) de manera sencilla con el apoyo de la
instrucción NOP.

for (conta1 = 0; conta1 < 200; conta1++)


{
asm(“nop”);
}

en el ejemplo mencionado se ejecutara la instrucción asembler NOP desde que conta1 es 0 hasta que
conta1 llegue a 199 avanzando de uno en uno, es decir que la instrucción NOP se ejecutara 200 veces;
esto constituye una forma sencilla de generar un retardo.

Una sentencia for puede contener dentro otra sentencia for o alguna sentencia if, o varias sentencias if y
for combinadas.

Ejemplo:

for (conta2 = 0; conta2 < 100; conta2++)


{
for(conta1 = 0; conta1 < 200; conta1++) // Aquí se realiza 200 veces NOP
{
asm(“nop”);
}
}

en el for que esta dentro se realizan 200 veces NOP y el for que esta afuera hace que lo que tiene dentro
se realice 100 veces, es decir que finalmente se realizaran en total 100*200 = 20000 veces NOP.

Se podría usar también la sentencia FOR para enviar un tren de pulsos por algún pin del PIC:

for (conta1 = 0; conta1 < 50; conta1++)


{
RB1 = 0; // Un pulso positivo en el pin RB1
RB1 = 1;
}

aquí se puede ver que la sentencia FOR realiza pulsos positivos en el pin RB1 del PIC pasando el pin
de 0 a 1 (de 0v a 5v), esto se realizara desde que conta1 es 0 hasta que conta1 sea 49, es decir, 50
veces; así que se enviaran 50 pulsos por el pin RB1.

DO WHILE:

El par Do While se usa para procesos repetitivos como FOR pero a diferencia de FOR se usa
cuando no se sabe exactamente cuantas veces se realizara el proceso.

Ejemplo:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 13


PIC16F877A con el PICC Lite de HI-TECH
do
{
PORTA++;
}
while (PORTB < 20);

en este caso el proceso es incrementar PORTA en 1, mientras PORTB sea menor que 20.
Como se puede ver, no se sabe con exactitud cuando PORTB dejará de ser menor que 20.

Ejemplo:
do {
RB1 = 0; // Genero pulso en RB1
RB1 = 1;
} while (PORTD == 18);

en este ejemplo se generan pulsos en RB1 mientras PORTD sea igual a18, otra vez no sabemos con
exactitud cuando PORTD dejara de ser igual a 18, de modo que no sabemos cuantos pulsos en RB1 se
producirán.

Aunque también se puede usar cuando si se sabe cuantas veces tendrá que realizar el proceso, pero para
esto es mejor usar FOR.

Ejemplo:

conta1 = 10; // Inicialmente conta1 es 10


do {
RB1 = 0; // Generar pulso en RB1
RB1 = 1;
conta1--; // Decrementar en 1 a conta1
}while (conta1 != 0); // Realizar mientras conta1 sea diferente de 0

aquí se carga un valor inicial a conta1 antes de entrar al bucle do while, y se realizan los procesos que
están dentro de do while mientras conta1 sea diferente de 0, pero ya que conta1 se decrementa en 1
cada vez que se genera un pulso podemos notar que los pulsos que se realizaran en total son 10.

Lo mismo podríamos haber planteado con FOR de la siguiente forma:

for (conta1 = 10; conta1 > 0; conta1--)


{
RB1 = 0; // Pulso en RB1
RB1 = 1;
}

aquí la condición inicial es conta1 igual a 10 , la condición límite es que conta1 sea mayor que 0 y el
avance es decrementar conta1 de uno en uno; así que se realizaran 10 pulsos en total.

WHILE( ):

Este es similar a do while, se plantea de la siguiente manera:

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 14


PIC16F877A con el PICC Lite de HI-TECH
while(condición que debe ser verdadera)
{
procesos;
}

Ejemplo:

while (PORTA == 23)


{
PORTB++;
}

aquí se entiende así: mientras PORTA sea igual a 23, incrementar PORTB.

Por el momento hasta aquí llega el tutor, ira incrementando su contenido en las siguientes publicaciones.

Ing. Wilber Mendoza V. E-mail: wilbermv@viabcp.com 15

También podría gustarte