Você está na página 1de 4

Programacin PIC en C

Detalles
ltima actualizacin el Lunes, 25 Noviembre 2013 20:44
Escrito por biblioman
Pgina 8 de 18
Volver al ndice

Aunque no hemos visto el tema de las funciones todava, pero ya que estamos
utilizando esta funcin muy a menudo, vamos a ver alguna de las posibilidades que
nos ofrece. El que tenga conocimientos del lenguaje C sabr que para utilizar esta
funcin que pertenece al estndar ANSI de C hay que incluir previamente el archivo de
cabecera #include <stdio.h>, pero esto con el compilador PCW de CCS no funciona, en
este compilador esta funcin est definida en la directiva:

#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B1,RCV=PIN_B2)

Esto quiere decir que cada vez que queramos utilizar la funcin printf tenemos que
haber incluido previamente esta directiva, que posibilita la comunicacin del PIC con
otro dispositivo utilizando el protocolo de comunicacin serie RS232, adems de la
funcin printf esta directiva permite el uso de otras funciones para la entrada y salida
de datos serie como: getc, getchar, gets, puts y kbhit que iremos viendo poco a poco,
pero la ms importante para la salida de datos sin duda es printf, porque nos permite
formatear la salida de esos datos de la forma que nosotros queramos.

Como vemos la directiva #use RS232 admite una serie de parmetros que son los que
van entre parntesis separados por comas, estos son los siguientes:

BAUD con este parmetro establecemos la velocidad en baudios a la que
queremos que se transmitan los datos por el puerto serie, 9600 es lo normal.
BITS nmero de bits que utilizaremos en la transmisin, el estndar establece
que pueden ser 8 9, para la comunicacin con microcontroladores con 8 son
suficientes.
PARITY nos permite utilizar un bit de paridad para la comprobacin de errores,
est opcin la dejamos a No.
XMIT est opcin nos configura porque patilla del PIC saldrn los datos, est
opcin junto con la siguiente s que la tendremos que cambiar a nuestras
necesidades.
RCV nos configura porque patilla del PIC se recibirn los datos. En el ejemplo,
los datos se transmiten por el PIN RB1 y se reciben por RB2.

La forma de hacer la llamada a la funcin printf es la siguiente:

printf(Nombre Funcin, Cadena de caracteres , valores);

Como vemos la funcin printf tambin admite parmetros que podremos utilizar para
formatear el texto de salida. Vamos a ver cules son:

El primero es opcional y es el nombre de una funcin, si no lo ponemos los datos se
transmitirn va RS232 a travs de los pines que hayamos configurado en la directiva
#use RS232.
El segundo parmetro es una cadena de caracteres encerrada entre comillas dobles.
Y el tercero son datos o nombres de variables cuyo valor queremos que se muestren.
Vamos a ver todo esto con ejemplos que es como mejor se ven las cosas:

1 Ejemplo:

#include <16F877.h>
#use delay(clock=4000000)
#include <LCD.C>
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B1,RCV=PIN_B2)
void main()
{
int i1=9;
lcd_init(); //funcin de inicializacin del LCD
//Mostramos una cadena en la terminal
printf("Esto es una cadena\r");

//Mostramos una cadena de texto junto con el valor de una variable
//en la terminal.
printf("El valor de la variable i1 es: %d",i1);

//Mostramos el valor de la variable por el LCD
printf (lcd_putc,"El valor de i1 es: %d",i1);

}
Comentario:
En este primer ejemplo vamos a ver el uso de la funcin printf utilizando diferentes
parmetros. Como vamos a utilizar la librera que incluye el compilador para el manejo
de un LCD tenemos que incluir la directiva:

#include <LCD.C>

Declaramos una variable i1 de tipo entero que nos va a servir para mostrar su valor en
la terminal y en un LCD.
Cuando utilicemos la librera LCD.C y antes de utilizar cualquier otra funcin incluida en
la librera tenemos que llamar a la siguiente funcin que sirve para inicializar el LCD.

lcd_init();

En la primera llamada a la funcin printf como parmetros solo incluimos una cadena
de caracteres constante que termina en (\r), esa barra invertida junto con la r se le
llama secuencia de escape y le est diciendo al compilador que al final de la cadena
introduzca un retorno de carro (tecla enter). Las secuencias de escape se utilizan para
representar caracteres o acciones especiales.

printf("Esto es una cadena\r");

En la tabla de abajo se muestran las secuencias de escape que tenemos disponibles
para utilizar con la funcin printf:

\r Retorno de carro
\t Tabulador
\' Comilla simple
\" Comillas dobles
\\ Barra invertida
\? Smbolo de interrogacin
\0 Caracter nulo
\% Smbolo Tanto por ciento
\b Retroceder un caracter

Vamos con la segunda llamada a la funcin:

printf("El valor de la variable i1 es: %d",i1);

En este caso tampoco est definido el primer parmetro, por tanto, al igual que en la
primera llamada a la funcin, los datos se enviaran por el puerto serie al pin que
hayamos definido en la directiva #use RS232, en esta llamada vemos que tenemos la
cadena de caracteres limitada por las comillas dobles y separado por una coma, como
tercer parmetro el nombre de la variable i1 que habamos declarado previamente. En
la cadena de caracteres vemos que aparece el carcter de % seguido de la letra d, ese
es un carcter especial para la funcin y lo que le indica a la funcin es que en esa
posicin muestre el valor de la variable i1, la d le indica a la funcin que represente
ese valor en formato de nmero entero. Podemos representar el valor de la variable en
diferentes formatos segn se muestra en la tabla de abajo:

c Caracter
s Cadena caracter
u Entero sin signo
d Entero con signo
Lu Entero largo sin signo
Ld Entero largo con signo
x Entero Hexadecimal (minsculas)
X Entero Hexadecimal (maysculas)
Lx Entero largo Hexadecimal (minsculas)
LX Entero largo Hexadecimal (maysculas)
f Nmero real en coma flotante con truncado
g Nmero real en coma flotante con redondeo
e Nmero real en formato exponencial
w
Entero sin signo con decimales insertados.
Especifica dos nmeros para n. La 1 cifra indica
el total y la 2 el nmero de decimales

Si quisisemos mostrar el valor de ms de una variable lo haramos de la siguiente
forma:

printf("El valor i1 es: %d el de i2: %d y el de i3: %d",i1,i2,i3);

Vamos con la ltima llamada a la funcin del 1 ejemplo:

printf (lcd_putc,"El valor de i1 es: %d",i1);

En esta llamada hemos incluido el primer parmetro y hemos puesto el nombre de la
funcin lcd_putc, est funcin est definida en la librera LCD.C que trae el compilador
para ayuda del manejo de los dispositivos LCD y que hemos incluido en nuestro
programa por medio de la directiva #include <lcd.c>, vemos que la librera est
encerrada entre los smbolos de <> esto le indica al compilador que busque la librera
en el directorio en que se instalo el compilador, si copiramos esa librera en otro
directorio tendramos que indicarle la ruta completa, pero esta vez encerrada entre
comillas dobles.


Ejemplo:

#include C:\Ejemplos de C\lcd.c

Pues bien ahora la funcin printf no enviar los datos al puerto serie, sino a la funcin
lcd_puct que ser la encargada de envirselos al LCD, esta funcin por defecto enva
los datos al puerto D del PIC, pero accediendo a la librera se puede modificar el puerto
fcilmente.

Você também pode gostar