Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf()                                                  Page 1 of 4




  Inicio        Contactar       Acerca de ..       Foros         Blog




                                        Inicio    Programación PIC en C
            Menú Principal
                                         Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf()
       Inicio                            Escrito por biblioman

       Registrarse                       Página 8 de 18
                                         Volver al índice
       Enlaces Web
                                         Aunque no hemos visto el tema de las funciones todavía, pero ya que estamos utilizando esta función
       Foros
                                         muy a menudo, vamos a ver alguna de las posibilidades que nos ofrece. El que tenga conocimientos del
       Sitemap                           lenguaje C sabrá que para utilizar esta función que pertenece al estándar 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 función 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 función printf tenemos que haber incluido
                                         previamente esta directiva, que posibilita la comunicación del PIC con otro dispositivo utilizando el
                                         protocolo de comunicación serie RS232, además de la función 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 más 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 parámetros que son los que van entre
                                         paréntesis separados por comas, estos son los siguientes:


                                          • BAUD con este parámetro establecemos la velocidad en baudios a la que queremos que se
                                            transmitan los datos por el puerto serie, 9600 es lo normal.
           Últimos Tutoriales
                                          • BITS número de bits que utilizaremos en la transmisión, el estándar establece que pueden ser 8 ó
       Índice Programación                  9, para la comunicación con microcontroladores con 8 son suficientes.
       PIC en C                           • PARITY nos permite utilizar un bit de paridad para la comprobación de errores, está opción la
                                            dejamos a No.
       Índice prácticas PIC C
                                          • XMIT está opción nos configura porque patilla del PIC saldrán los datos, está opción junto con la
       Curso PIC32
                                            siguiente sí que la tendremos que cambiar a nuestras necesidades.
       SDCC (Small Device
       C Compiler) en                     • RCV nos configura porque patilla del PIC se recibirán los datos. En el ejemplo, los datos se
                                            transmiten por el PIN RB1 y se reciben por RB2.
       Windows

       Actualizar a Ubuntu
       9.10 (Karmic Koala)               La forma de hacer la llamada a la función printf es la siguiente:

       Programación de                   printf(Nombre Función, Cadena de caracteres , valores);
       Microcontroladores
       PIC en C con Ubuntu               Como vemos la función printf también admite parámetros que podremos utilizar para formatear el texto
       utilizando el ICD2                de salida. Vamos a ver cuáles son:

       Particiones y sistemas
                                         El primero es opcional y es el nombre de una función, si no lo ponemos los datos se transmitirán vía
       de archivos en Linux
                                         RS232 a través de los pines que hayamos configurado en la directiva #use RS232.
       Algunas razones para              El segundo parámetro es una cadena de caracteres encerrada entre comillas dobles.
       probar Ubuntu                     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:
       Instalación de Ubuntu
       9.04 paso a paso
                                         1º Ejemplo:
       Compilador PCW CCS

       Compiladores C para               #include <16F877.h>
       PIC                               #use delay(clock=4000000)
                                         #include <LCD.C>
       Programación PIC en
                                         #use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B1,RCV=PIN_B2)
       C
                                         void main()
       X - 10                            {
                                         int i1=9;
       Comandos Unix/Linux               lcd_init(); //función de inicialización del LCD
       Autómatas                         //Mostramos una cadena en la terminal
       Secuenciales Finitos              printf("Esto es una cadenar");

       CAD Electrónico                   //Mostramos una cadena de texto junto con el valor de una variable
                                         //en la terminal.
       Arduino y el
                                         printf("El valor de la variable i1 es: %d",i1);
       controlador LCD serie

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




http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7                                                                   14/08/2012
Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf()                                                      Page 2 of 4



                 Chat
                                           }
                                       5
                  11 ago 12, 18:27
     Ann:                                  Comentario:
                  11 ago 12, 18:26
     Ann: ia buske XD                      En este primer ejemplo vamos a ver el uso de la función printf utilizando diferentes parámetros. Como
                  11 ago 12, 10:31
                                           vamos a utilizar la librería que incluye el compilador para el manejo de un LCD tenemos que incluir la
     xor: Busca en el foro..
                                           directiva:
                  10 ago 12, 19:38
     Ann: kk?
                  10 ago 12, 18:45         #include <LCD.C>
     Ann: Como puedo
     programar en C para
     circuito con RF?                      Declaramos una variable i1 de tipo entero que nos va a servir para mostrar su valor en la terminal y en un
                  10 ago 12, 17:16         LCD.
     frentzen2@ig.com.br:                  Cuando utilicemos la librería LCD.C y antes de utilizar cualquier otra función incluida en la librería tenemos
     salsa2
                                           que llamar a la siguiente función que sirve para inicializar el LCD.
                   1 ago 12, 01:56
     logix0000: hola algien me
     puede ayudar con un                   lcd_init();
     programa
                    29 jul 12, 11:02
     Biblioman: CCS también                En la primera llamada a la función printf como parámetros solo incluimos una cadena de caracteres
     tiene una versión para                constante que termina en (r), esa barra invertida junto con la r se le llama secuencia de escape y le está
     LInux aunque sin IDE..       6
                                           diciendo al compilador que al final de la cadena introduzca un retorno de carro (tecla enter). Las
     [Get a Cbox]        actualizar
                                           secuencias de escape se utilizan para representar caracteres o acciones especiales.
      nombre
      mensaje                    ok        printf("Esto es una cadenar");
         ayuda · emoticonos · cbox
                                           En la tabla de abajo se muestran las secuencias de escape que tenemos disponibles para utilizar con la
          Siguenos en ...                  función printf:

                                           r   Retorno de carro
                                           t   Tabulador
                                           '   Comilla simple
                                           "   Comillas dobles
                                              Barra invertida
                                           ?   Símbolo de interrogación
                Licencia
                                           0   Caracter nulo
                                           %   Símbolo Tanto por ciento
                                           b   Retroceder un caracter
    Todo el contenido de
    este sitio está bajo una               Vamos con la segunda llamada a la función:
    licencia de Creative
    Commons                                printf("El valor de la variable i1 es: %d",i1);

                                           En este caso tampoco está definido el primer parámetro, por tanto, al igual que en la primera llamada a la
                                           función, 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 parámetro el nombre de la variable i1 que habíamos declarado previamente.
                                           En la cadena de caracteres vemos que aparece el carácter de % seguido de la letra d, ese es un carácter
                                           especial para la función y lo que le indica a la función es que en esa posición muestre el valor de la
                                           variable i1, la d le indica a la función que represente ese valor en formato de número entero. Podemos
                                           representar el valor de la variable en diferentes formatos según 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 (minúsculas)
                                           X       Entero Hexadecimal (mayúsculas)
                                           Lx      Entero largo Hexadecimal (minúsculas)
                                           LX      Entero largo Hexadecimal (mayúsculas)
                                           f       Número real en coma flotante con truncado
                                           g       Número real en coma flotante con redondeo
                                           e       Número real en formato exponencial
                                                   Entero sin signo con decimales insertados.
                                           w       Especifica dos números para n. La 1ª cifra
                                                   indica el total y la 2ª el número de decimales

                                           Si quisiésemos mostrar el valor de más de una variable lo haríamos 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 función del 1º ejemplo:

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




http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7                                                                       14/08/2012
Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf()                                   Page 3 of 4



                         En esta llamada hemos incluido el primer parámetro y hemos puesto el nombre de la función lcd_putc,
                         está función está definida en la librería 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 librería está encerrada entre los símbolos de <> esto le indica al compilador que busque la
                         librería en el directorio en que se instalo el compilador, si copiáramos esa librería en otro directorio
                         tendríamos que indicarle la ruta completa, pero esta vez encerrada entre comillas dobles.


                         Ejemplo:

                         #include “C:Ejemplos de Clcd.c”

                         Pues bien ahora la función printf no enviará los datos al puerto serie, sino a la función lcd_puct que será
                         la encargada de enviárselos al LCD, esta función por defecto envía los datos al puerto D del PIC, pero
                         accediendo a la librería se puede modificar el puerto fácilmente.

                         Aquí tenéis un video demostrativo del ejemplo:




                         2º Ejemplo




                         Salida del programa:




http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7                                                    14/08/2012
Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf()                                  Page 4 of 4




                         Comentario del programa:

                          • El especificador de formato %x indica al sistema que escriba en hexadecimal (base 16) el valor
                            sustituido.

                          • El ejemplo también escribe el carácter 'A', apoyándose en cuatro formas distintas de
                            representaciones iníciales. En todos los casos se almacenará el mismo valor numérico, pero son
                            diferentes las representaciones usadas.
                          • El carácter (A) sale en la terminal en una línea diferente cada vez que se imprime, eso es debido a
                            la secuencia de escape (r) utilizada.

                          • Observar que el ejemplo se ha hecho sobre el PIC 16f84 que no dispone de una USART hardware
                            para la comunicación serie , pero sin embargo el programa se ha ejecutado correctamente, eso es
                            debido a que la comunicación serie se ha establecido por software por medio de las librerías
                            implementadas en el compilador PCW.


                         Volver al índice


                         << Inicio < Prev 1 2 3 4 5 6 7 8 9 10 Próximo > Fin >>


                         Última actualización el Viernes, 12 de Marzo de 2010 21:26




                                                     © 2007-2012 AquiHayapuntes.com




http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7                                                   14/08/2012

Dudas printf()

  • 1.
    Programación PIC enC - Funciones de Entrada/Salida serie RS232. Función printf() Page 1 of 4 Inicio Contactar Acerca de .. Foros Blog Inicio Programación PIC en C Menú Principal Programación PIC en C - Funciones de Entrada/Salida serie RS232. Función printf() Inicio Escrito por biblioman Registrarse Página 8 de 18 Volver al índice Enlaces Web Aunque no hemos visto el tema de las funciones todavía, pero ya que estamos utilizando esta función Foros muy a menudo, vamos a ver alguna de las posibilidades que nos ofrece. El que tenga conocimientos del Sitemap lenguaje C sabrá que para utilizar esta función que pertenece al estándar 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 función 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 función printf tenemos que haber incluido previamente esta directiva, que posibilita la comunicación del PIC con otro dispositivo utilizando el protocolo de comunicación serie RS232, además de la función 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 más 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 parámetros que son los que van entre paréntesis separados por comas, estos son los siguientes: • BAUD con este parámetro establecemos la velocidad en baudios a la que queremos que se transmitan los datos por el puerto serie, 9600 es lo normal. Últimos Tutoriales • BITS número de bits que utilizaremos en la transmisión, el estándar establece que pueden ser 8 ó Índice Programación 9, para la comunicación con microcontroladores con 8 son suficientes. PIC en C • PARITY nos permite utilizar un bit de paridad para la comprobación de errores, está opción la dejamos a No. Índice prácticas PIC C • XMIT está opción nos configura porque patilla del PIC saldrán los datos, está opción junto con la Curso PIC32 siguiente sí que la tendremos que cambiar a nuestras necesidades. SDCC (Small Device C Compiler) en • RCV nos configura porque patilla del PIC se recibirán los datos. En el ejemplo, los datos se transmiten por el PIN RB1 y se reciben por RB2. Windows Actualizar a Ubuntu 9.10 (Karmic Koala) La forma de hacer la llamada a la función printf es la siguiente: Programación de printf(Nombre Función, Cadena de caracteres , valores); Microcontroladores PIC en C con Ubuntu Como vemos la función printf también admite parámetros que podremos utilizar para formatear el texto utilizando el ICD2 de salida. Vamos a ver cuáles son: Particiones y sistemas El primero es opcional y es el nombre de una función, si no lo ponemos los datos se transmitirán vía de archivos en Linux RS232 a través de los pines que hayamos configurado en la directiva #use RS232. Algunas razones para El segundo parámetro es una cadena de caracteres encerrada entre comillas dobles. probar Ubuntu 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: Instalación de Ubuntu 9.04 paso a paso 1º Ejemplo: Compilador PCW CCS Compiladores C para #include <16F877.h> PIC #use delay(clock=4000000) #include <LCD.C> Programación PIC en #use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B1,RCV=PIN_B2) C void main() X - 10 { int i1=9; Comandos Unix/Linux lcd_init(); //función de inicialización del LCD Autómatas //Mostramos una cadena en la terminal Secuenciales Finitos printf("Esto es una cadenar"); CAD Electrónico //Mostramos una cadena de texto junto con el valor de una variable //en la terminal. Arduino y el printf("El valor de la variable i1 es: %d",i1); controlador LCD serie //Mostramos el valor de la variable por el LCD printf (lcd_putc,"El valor de i1 es: %d",i1); http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7 14/08/2012
  • 2.
    Programación PIC enC - Funciones de Entrada/Salida serie RS232. Función printf() Page 2 of 4 Chat } 5 11 ago 12, 18:27 Ann: Comentario: 11 ago 12, 18:26 Ann: ia buske XD En este primer ejemplo vamos a ver el uso de la función printf utilizando diferentes parámetros. Como 11 ago 12, 10:31 vamos a utilizar la librería que incluye el compilador para el manejo de un LCD tenemos que incluir la xor: Busca en el foro.. directiva: 10 ago 12, 19:38 Ann: kk? 10 ago 12, 18:45 #include <LCD.C> Ann: Como puedo programar en C para circuito con RF? Declaramos una variable i1 de tipo entero que nos va a servir para mostrar su valor en la terminal y en un 10 ago 12, 17:16 LCD. frentzen2@ig.com.br: Cuando utilicemos la librería LCD.C y antes de utilizar cualquier otra función incluida en la librería tenemos salsa2 que llamar a la siguiente función que sirve para inicializar el LCD. 1 ago 12, 01:56 logix0000: hola algien me puede ayudar con un lcd_init(); programa 29 jul 12, 11:02 Biblioman: CCS también En la primera llamada a la función printf como parámetros solo incluimos una cadena de caracteres tiene una versión para constante que termina en (r), esa barra invertida junto con la r se le llama secuencia de escape y le está LInux aunque sin IDE.. 6 diciendo al compilador que al final de la cadena introduzca un retorno de carro (tecla enter). Las [Get a Cbox] actualizar secuencias de escape se utilizan para representar caracteres o acciones especiales. nombre mensaje ok printf("Esto es una cadenar"); ayuda · emoticonos · cbox En la tabla de abajo se muestran las secuencias de escape que tenemos disponibles para utilizar con la Siguenos en ... función printf: r Retorno de carro t Tabulador ' Comilla simple " Comillas dobles Barra invertida ? Símbolo de interrogación Licencia 0 Caracter nulo % Símbolo Tanto por ciento b Retroceder un caracter Todo el contenido de este sitio está bajo una Vamos con la segunda llamada a la función: licencia de Creative Commons printf("El valor de la variable i1 es: %d",i1); En este caso tampoco está definido el primer parámetro, por tanto, al igual que en la primera llamada a la función, 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 parámetro el nombre de la variable i1 que habíamos declarado previamente. En la cadena de caracteres vemos que aparece el carácter de % seguido de la letra d, ese es un carácter especial para la función y lo que le indica a la función es que en esa posición muestre el valor de la variable i1, la d le indica a la función que represente ese valor en formato de número entero. Podemos representar el valor de la variable en diferentes formatos según 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 (minúsculas) X Entero Hexadecimal (mayúsculas) Lx Entero largo Hexadecimal (minúsculas) LX Entero largo Hexadecimal (mayúsculas) f Número real en coma flotante con truncado g Número real en coma flotante con redondeo e Número real en formato exponencial Entero sin signo con decimales insertados. w Especifica dos números para n. La 1ª cifra indica el total y la 2ª el número de decimales Si quisiésemos mostrar el valor de más de una variable lo haríamos 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 función del 1º ejemplo: printf (lcd_putc,"El valor de i1 es: %d",i1); http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7 14/08/2012
  • 3.
    Programación PIC enC - Funciones de Entrada/Salida serie RS232. Función printf() Page 3 of 4 En esta llamada hemos incluido el primer parámetro y hemos puesto el nombre de la función lcd_putc, está función está definida en la librería 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 librería está encerrada entre los símbolos de <> esto le indica al compilador que busque la librería en el directorio en que se instalo el compilador, si copiáramos esa librería en otro directorio tendríamos que indicarle la ruta completa, pero esta vez encerrada entre comillas dobles. Ejemplo: #include “C:Ejemplos de Clcd.c” Pues bien ahora la función printf no enviará los datos al puerto serie, sino a la función lcd_puct que será la encargada de enviárselos al LCD, esta función por defecto envía los datos al puerto D del PIC, pero accediendo a la librería se puede modificar el puerto fácilmente. Aquí tenéis un video demostrativo del ejemplo: 2º Ejemplo Salida del programa: http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7 14/08/2012
  • 4.
    Programación PIC enC - Funciones de Entrada/Salida serie RS232. Función printf() Page 4 of 4 Comentario del programa: • El especificador de formato %x indica al sistema que escriba en hexadecimal (base 16) el valor sustituido. • El ejemplo también escribe el carácter 'A', apoyándose en cuatro formas distintas de representaciones iníciales. En todos los casos se almacenará el mismo valor numérico, pero son diferentes las representaciones usadas. • El carácter (A) sale en la terminal en una línea diferente cada vez que se imprime, eso es debido a la secuencia de escape (r) utilizada. • Observar que el ejemplo se ha hecho sobre el PIC 16f84 que no dispone de una USART hardware para la comunicación serie , pero sin embargo el programa se ha ejecutado correctamente, eso es debido a que la comunicación serie se ha establecido por software por medio de las librerías implementadas en el compilador PCW. Volver al índice << Inicio < Prev 1 2 3 4 5 6 7 8 9 10 Próximo > Fin >> Última actualización el Viernes, 12 de Marzo de 2010 21:26 © 2007-2012 AquiHayapuntes.com http://www.aquihayapuntes.com/programacion-pic-en-c.html?start=7 14/08/2012