Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
Haga clic en el botón Browse... y aparecerá una ventana para que escoja una carpeta en su disco:
Obtendrá una ventana nueva dentro del mplab con el nombre Untitled
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.
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:
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:
__CONFIG(XT & PROTECT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN &
DEBUGDIS);
// Programa principal
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;
}
}
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:
Otro ejemplo:
En este caso no hay ninguna acción en caso la condición fuera falsa, esto es totalmente valido.
Otro ejemplo:
Otro ejemplo:
FOR:
Se usa para procesos repetitivos o iterativos, tiene una condición inicial, condición limite y una
sección para indicar el avance:
Ejemplos:
Se puede usar para generar tiempos muertos (retardos o delays) de manera sencilla con el apoyo de la
instrucción 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:
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:
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:
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:
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.
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( ):
Ejemplo:
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.