HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

tutorial: funciones adicionales para enviar y recibir información del  puerto serial: getchar( ), putchar( ), gets( ), atoi( ), atof( )

 

db9.jpg (74187 bytes)

Descripción:

Existen varias funciones complementarias a printf( ) y que son indispensables para enviar y recibir información del puerto serial. En este tutorial, se presentan 5 nuevas funciones. Todas ellas forman parte de las librerías estándar del ANSI C.

getchar( ) recibe un caracter del puerto serial. No lleva parámetros y su valor de retorno es el código ASCII de la tecla oprimida. En el caso del compilador HiTech, la función equivalente es getch( ).

putchar( ) envía un caracter al puerto serial. El argumento es el valor ASCII del caracter que desea enviarse. En el caso del compilador HiTech, la función equivalente es putch( ).

gets( ) recibe caracteres del puerto serial, hasta que el usuario oprime la tecla ENTER ó CR. El argumento es el nombre del string en donde se habrán de acomodar los caracteres. Al final del string inserta el caracter NULL.

atoi( ) y atol( ) convierten un string en una variable con formato entero, (int ó long int). Para usar esta función - y atof( ) - debe incluirse en el header la librería <stdlib.h>. El argumento es un arreglo que tenga formato de string.

atof( ) convierte un string en una variable en formato de punto flotante (float)

 

Función

Descripción

x=getchar( );  recibe un caracter, en valor ASCII y lo asigna a la variable x.
x=getch( ); para el compilador HiTech, misma función que la mostrada en el renglón de arriba.
putchar('*'); se envía el código ASCII del asterisco. En la pantalla observaremos un asterisco.
putchar(53);   se envía el código ASCII del número 5, cuyo valor decimal es 53
putchar(x);   se envía por el puerto serial, en un solo caracter, el valor de x, que debe ser un código ASCII.
putch(x); para el compilador HiTech, misma función que la mostrada en el renglón de arriba.
y=atoi(array);  convierte el string que se almacenó en el arreglo "array" en un valor entero (int)
y=atol(array); convierte el string que se almacenó en el arreglo "array" en un valor entero (long int)
z=atof(array);     convierte el string que se almacenó en el arreglo "array" en un valor con formato punto flotante.
gets(array);     recibe caracteres del puerto serial, hasta que se recibe el caracter CR (código decimal 13). Con los caracteres recibidos, genera un string en el arreglo "array". No hay ECO.

 

PROGRAMA EJEMPLO PARA EVOLUPIC:

Escribe en el puerto serial "X=". Espera a que el usuario envíe desde el teclado varios dígitos hasta que termina con el caracter "ENTER" ó "CR". Reenvía dos veces el valor, primero directamente como string y luego con formato de variable entera con signo, convertida previamente a un string. Observe el resultado de la prueba del programa en la ventana de abajo.

Los archivos son: CCSPRINTF2.c, 16F628A.h

wpe2.jpg (85743 bytes)

 

 

wpe3.jpg (7970 bytes)

 

Resultado de la prueba en el software Hyperterminal, conectando el sistema EVOLUPIC con la computadora PC: el programa envía el letrero "X=" y espera un valor que tecleé el usuario. Cada caracter es recibido con la función getchar( ) y reenviado de regreso (ECO) con la función putchar( ). Los valores se acomodan en un string llamado array[5] de 5 elementos. El usuario termina el envío mediante un "ENTER" o "CR" cuyo valor ASCII es 13. En este ejemplo, el valor escrito fue -120.

Observe como al string se añade al final el valor NULL=0. Mediante la función atoi( ), se convierte el string en un valor entero con signo. Posteriormente, mediante la función printf( ), se envía 2 veces la misma información, pero con diferentes formatos. En el primer caso, se envía directamente el string. En el segundo caso, la propia función printf( ) convierte primero la variable x en un string y luego la envía al puerto serial.

Dado que la variable x fue definida como "int", se almacena en un byte y su gama de valores puede ir de -128 a +127.

 

PROGRAMA PARA EVOLUPIC. MISMO EJEMPLO ANTERIOR PERO USANDO LA FUNCION gets( ):

El programa escribe en el puerto serial el texto "X=". Espera a que el usuario envíe desde el teclado varios dígitos hasta que termina con el caracter "ENTER" ó "CR". Reenvía dos veces el valor, primero directamente como string y luego con formato de variable entera con signo, convertida previamente a un string. Observe el resultado de la prueba del programa en la ventana de abajo. La diferencia entre este programa y el ejemplo anterior, es que la función gets( ) no envía "ECO" en cada caracter recibido.

Los archivos son: CCSPRINTF3.c, 16F628A.h

wpe3.jpg (56130 bytes)

 

 

wpe4.jpg (10292 bytes)

 

La función gets( ) realiza las mismas tareas explicadas en el ejemplo anterior. La función almacena cada caracter recibido en el string definido como parámetro de la función (en este caso "array"), detecta en forma automática el CR enviado por el usuario y además inserta en el string el caracter NULL, también en forma automática. Pero tiene una variante: no envía ECO, es decir, si el usuario oprime una tecla, no la verá en su pantalla inmediatamente, sino solo hasta que termine de escribir la cifra o el texto completo y oprima el CR. Sin embargo, esta función es sumamente útil para recibir información de terminales remotas, en aplicaciones en las que no se requiere ECO. Observe la sencillez del programa, comparado con el ejemplo que lo antecede.