Tutor CursoPIC

15

Click here to load reader

Transcript of Tutor CursoPIC

Page 1: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 1

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:

Page 2: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 2

En el menú Project entre a la opción Project Wizard

Obtendrá el siguiente mensaje, haga clic en Siguiente

Page 3: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 3

Luego seleccione el PIC16F877A:

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

Page 4: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 4

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

Page 5: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 5

Aparecerá la ventana anterior pero con los dos recuadros escritos, hacer clic en Siguiente:

Obtendrá la siguiente ventana, haga clic en Siguiente:

Page 6: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 6

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:

Page 7: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 7

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

Page 8: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 8

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.

Page 9: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 9

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 :

Page 10: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 10

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 vari ables del programa char i; // Rutina de delay de 200ms

Page 11: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 11

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:

Page 12: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 12

if ( PORTA > 15 ) // Condicion: “PORTA es mayor qu e 15 ?” { PORTB++; // Si es Verdadero, entonces incrementar PORTB } else { PORTB--; // Si es Falso, entonces decrementar POR TB }

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 co n 10 } else: { PORTA = 20; // Si es falso: PORTA se carga con 2 0 }

Otro ejemplo: if (PORTB != 12) // Condicion: PORTB diferente de 12 ? { PORTA = 100; // Si es verdadero: PORTA se carga c on 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; }

Page 13: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 13

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:

Page 14: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 14

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:

Page 15: Tutor CursoPIC

PIC16F877A con el PICC Lite de HI-TECH

Ing. Wilber Mendoza V. E-mail: [email protected] 15

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.