Anda di halaman 1dari 10

ndice Prcticas PIC en C

Prcticas de microcontroladores PIC en lenguaje C utilizando el compilador PCW de la casa CCS. Bueno por fin le ha llegado el turno a las prcticas, vamos a ver como utilizar los diferentes recursos que nos ofrecen los PIC utilizando la facilidad de programacin de un lenguaje de alto nivel como es el C. He pensado hacer tres categoras: Ejemplos bsicos, Recursos del PIC y Proyectos PIC en funcin de la complejidad de los ejemplos. Cada prctica ir acompaada por el cdigo fuente, el esquema en Proteus y la explicacin correspondiente, tambin estar disponible en la seccin descargas todos los ejemplos a medida que vayan saliendo, incluidos los DSN.

Para tener localizados los ejemplos se podrn acceder a cada uno de ellos desde el ndice que se muestra ms abajo. Quiero aclarar que yo no soy el Master PIC de la programacin de microcontroladores ni mucho menos simplemente me gusta el tema y como vosotros quiero aprender ms, por eso comparto mis experiencias en este tema con vosotros, as que aprovecho para animaros a contribuir bien sea en el foro, comentando los artculos o enviando vuestros propios artculos o ejemplos que por supuesto sern publicados con el reconocimiento pertinente. Tambin decir que no hay ningn artculo cerrado y mucho menos el de de Programacin de Microcontroladores en lenguaje C, pero quera empezar este para ir viendo a la vez la teora y la prctica. Bueno ya est bien de parloteo ndice. y vamos al

Ejemplos bsicos de PIC en C - Decodificador de Binario a Decimal


Cdigo
/*Decodificador de binario a decimal, mostrando los resultados en un display de siete segmentos. autor: biblioman www.aquihayapuntes.com*/ # # # # # include <16F84A.h> use delay(clock=4000000) fuses XT,NOWDT byte puerto_b=06 //Direccin del puerto B byte puerto_a=05 //Direccin del puerto A

void main() { set_tris_b(0x00); //Configuro la puerta B como salida y RA0, RA1, RA2, RA3 y RA4 como set_tris_a(0x1F); //entradas aunque por defecto ya estn configuradas como entradas puerto_b=0; //inicializo todos los bits de la puerta B a cero

while(true) //bucle infinito {

if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==false) { puerto_b=0b0111111; //configura los bits de la puerta B } if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==false) { puerto_b=0b00000110; } if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==false) { puerto_b=0b01011011; } if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==false) { puerto_b=0b01001111; } if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==true) { puerto_b=0b01100110; } if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==true) { puerto_b=0b01101101; } if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==true) { puerto_b=0b01011110; } if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==true) { puerto_b=0b00000111; } } }

CIRCUITO:

Comentario:
Circuito sencillo que hace las funciones de un decodificador de binario a decimal de un dgito y muestra los resultados en un display de siete segmentos de ctodo comn, lo que quiere decir que el PIC debe proporcionar valores positivos en su salida de la puerta B. La relacin entre las patillas del display y el valor de las letras de cada segmento es la siguiente:

luego se puede hacer una pequea tabla de verdad donde se muestre por cada combinacin en la entrada que patillas del PIC se tienen que activar:

La lgica del programa lo nico que hace es chequear el estado de las entradas, en este caso representadas por los interruptores A0, A1 y A2 y activar el conjunto de patillas correspondientes en el PIC que alimentarn los nodos del display.

Ejemplos bsicos de PIC en C - Secuencia de luces. Utilizando operadores aritmticos

Comentario:
Este ejemplo que simula las luces del coche fantstico, en cuanto a lo que hace no tiene nada de especial, ya hay muchos ejemplos en la red que simulan las luces del coche fantstico, pero si en la forma de como lo hace, este es un ejemplo que nos sirve para ver como utilizar los operadores en nuestros programas. En este caso una multiplicacin por 2 (en binario 10) hace desplazar el bit que est a uno hacia la izquierda. Al dividir entre 2 desplazamos el bit a 1 hacia la derecha, con lo que tenemos una secuencia parecida al del coche fanttico. En la lnea 4: #byte puerto_b=6 --> creamos un identificador llamado puerto_b para referenciar el registro de proposito especfico (SFR) con direccin 0x06. Esta es una forma de acceder a los puertos del PIC, pero hay ms. Se vern todas las formas cuando se vea el tema de los punteros.

En la lnea 8: set_tris_b(0x00); --> configuramos el puerto b del PIC como salida digital En la lnea 9: puerto_b=1; --> asignamos el valor 1 (en binario 0b00000001) al puerto b, o sea RB0=1 los dems bits del puero B a cero. Para acceder al tema de operadores del curso de c, haz clic aqu Esquema del circuito:

Contador de 0 a 10
Ejemplo de contador de 0 a 10 con dos funciones: manual y automtico.

Esquema:

Cdigo fuente:
01./********* Contador Binario de 1 al 10, Visualizado en 4 LEDs ************ 02.Incluye Boton para Incrementar y otro para Decrementar 03.Y un selector de conteo Manual o Automatico */ 04. 05.#Include <16F84A.h> //Define el Pic a usar 06.#Use delay(Clock=4000000) //Define la frecuencia de reloj

07.#Fuses XT,NOWDT,NOPUT,NOPROTECT //Define los fusibles activos 08.#Byte status = 0x03 //Direccion del registro STATUS 09.#Byte port_b = 0x06 //Direccion del registro PORTB 10.#Use fast_io(B) //Codigo mas eficiente 11. 12.//INICIA CUERPO DEL PROGRAMA 13.void main(){ 14.set_tris_b (0xF0); //RB7-RB4 salidas, RB3-RB0 entradas 15.port_b = 0x00; //Limpia el Puerto B 16.signed int contador=0x00; //Contador definido con signo 17. 18.while (True){ //Inicia ciclo infinito 19.while (input(PIN_B4)){ //Mientras est activo el modo auto 20.port_b = contador; //Muestra el valor de contador en PORTB 21.++contador; //Incrementa el contador 22.delay_ms(500); //Retardo de 500ms 23.if (contador>10) //Si elcontador es mayor que 10 24.contador = 0x00; //Entonces vuelve a valer 0 25.} //Fin del ciclo modo auto 26. 27.while (input (PIN_B5)){ //Mientras est en modo Manual 28.if (bit_test(port_b,6)==1){ //Si se presiona el boton de SUBE 29.++contador; //Incrementa en 1 el contador 30.if (contador>10){ //Si contador vale mas de 10 31.contador = 10;} //Se fija su valor en 10 32.port_b = contador; //Pone el valor de contador en PORTB 33.delay_ms(500); //Retardo de 500ms 34.} //Fin del ciclo SUBE 35. 36.if (bit_test (port_b,7)==1){ //Si se presiona el boton de BAJA 37.--contador; //Decrementa en 1 el contador 38.if (contador<0){ //Si contador es menor a 0 39.contador = 0;} //Se fija su valor en 0 40.port_b = contador; //Pone el valor de contador en PORTB 41.delay_ms(500); //Retardo de 500ms 42.} //Fin del ciclo BAJA 43.} //Fin del ciclo MANUAL 44.} //Fin del ciclo infinito 45.} //Fin de programa 46.

Entrenadora para PIC (Fenix V2.0)


Versin mejorada de la placa entrenadora para PIC Fenix 1.0

Cara componentes (TOP):

Cara Button:

Como novedad con respecto a la anterior versin se tiene: adems de un conector USB tipo B, un nuevo jumper el JP2 que permite deshabilitar el condensador de 470 nF necesario para la comunicacin USB. Esto es til para cuando se utiliza un PIC de inferior categora y se quiere aprovechar la patilla RC3. De esta manera se tienen disponibles todos los pines del PIC. Tambin se puede utilizar un adaptador de Pines y utilizar Microcontroladores PIC de 28 y 18 pines.

Anda mungkin juga menyukai