HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

Uso de strings en ANSI C. La función sprintf( ).

 

galaxy.jpg (67443 bytes)

 

El código ASCII es el estándar para comunicarse con la llamada "interfaz hombre-máquina" del sistema microcontrolador a través de mensajes de texto, ésto es, de "strings".

Los llamados "strings" son arreglos de valores en códigos ASCII, almacenados en localidades de memoria FLASH ó RAM.

El manejo de strings es indispensable dentro de cualquier aplicación, para que el sistema pueda interactuar con periféricos de entrada /salida de datos como los teclados, el display LCD, los módulos de LEDS de 7 segmentos, ó cualquier dispositivo con interfaz serial RS232, como sería por ejemplo una terminal remota ó una computadora PC ejecutando el software de comunicaciones "Hyperterminal".

 

 

El lenguaje ANSI C contiene numerosas funciones de librería para el manejo de strings, entre ellas: atoi( ), atof( ), atol( ), printf( ), sprintf( ), gets( ) strlen( ) y muchas otras, las cuales simplifican el trabajo del programador al realizar conversiones y otras tareas relacionadas con strings en forma inmediata.

Especialmente útil para el manejo de strings es la función sprintf( ), usada principalmente para enviar información a dispositivos como los LCD.

 

FORMATO DE UN STRING:

Para explicar como se manejan los strings en ANSI C, nos basamos en la figura de abajo. En este ejemplo, primeramente se declara un arreglo con el nombre "RIM" al cual se le asignan 6 caracteres. El arreglo se inicializa con las letras "ROBOT". Las comillas indican al compilador que se trata de un "string".

Observe como el nombre tiene 5 letras, pero el arreglo lleva 6 localidades. Al ejecutarse el programa, en la memoria RAM del microcontrolador se almacenan los códigos ASCII de cada letra del nombre. La última localidad se reserva siempre para guardar un caracter conocido como "NULL" y cuyo código es 00H. Este caracter permite reconocer al compilador y al programador, en donde termina un string definido en memoria.

 

string.jpg (35408 bytes)

 

En la siguiente figura se muestra una simulación del ejemplo anterior en MPLAB. Observe el string de la palabra ROBOT en las localidades marcadas de color rojo en la pantalla de memoria. Para completar el ejemplo, se declara también la variable a=255. Este valor se almacena como una FFH en la localidad de memoria en seguida de la terminación del string. Del lado derecho de la pantalla de la memoria, se muestra la interpretación ASCII de los valores almacenados.

 

wpeA.jpg (71568 bytes)

 

FUNCIONES DE LIBRERIA PARA EL MANEJO DE STRINGS:

Las librerías de los compiladores HITECH  y CCS contienen varias funciones para manejar strings. Veamos las más utilizadas (ver ventana abajo). Haciendo uso del simulador de MPLAB IDE, probamos las siguientes funciones:

atoi( ). La función convierte strings de números enteros, en este ejemplo "-2928" en su valor binario (ver aquí tutorial de formato de números enteros), al cual le asigna la variable de nombre "a" . El resultado aparece en la dirección 73H y 74H de memoria: F490. Observe que los valores hexadecimales están invertidos en las localidades de memoria.

atof( ). La función convierte strings de números de punto flotante, en el ejemplo "3.1416" en su valor binario (ver aquí tutorial de formato de números de punto flotante), al cual le asigna la variable "b". El resultado aparece en las direcciones 70H, 71H y 72H de memoria: 404911

Recuerde que se trata de una simulación en MPLAB cuyo objetivo es probar las funciones. Estos strings pudieron ingresar, por ejemplo, desde un teclado conectado al sistema microcontrolador.

 

wpe5.jpg (116841 bytes)

 

Ahora hagamos una simulación con la función sprintf( ), que hace la conversión de un valor en formato binario a un string, es decir la función inversa a atoi( ) y atof( ). La función es de formato un tanto sofisticado. Para poder usarla, es necesario definir previamente un arreglo que en este ejemplo será de 7 elementos (array[7] ), y que servirá para almacenar el resultado de la función que es un string. También debemos declarar una variable de punto flotante que en este ejemplo es a=24.54

sprintf (array,"%5.2f",a);

Esta función realiza lo siguiente: convierte la variable "a", que es de punto flotante (float), a un string que se almacenará en el arreglo de nombre "array". El formato será de 5 espacios, 2 de los cuales son la parte decimal y 3 la parte entera. Observe en la ventana de abajo el resultado de la simulación en MPLAB, para el compilador de CCS. En las localidades 28H...2BH se almacena en formato de punto flotante el valor definido para la variable "a". En las direcciones 21H..26H se almacena el string que forma el resultado de la función. En el lado derecho puede observarse la interpretación ASCII: 24.54

Otros formatos para la función sprintf( ):

sprintf(array,"%u",a); para variable entera (unsigned int) de 8 bits (CCS) ó 16 bits (HITECH).

sprintf(array,"%lu",a); para variable entera (long unsigned int) de 16 bits (CCS) ó 32 bits (HITECH).

sprintf(array,"%3u",a); para asignar 3 bytes en el string para la variable "a" en el arreglo; si la variable ocupa solo 1 ó 2 bytes, llena con espacios en blanco.

sprintf(array,"%03u",a); para asignar 3 bytes en el string para la variable "a"; si la variable ocupa solo 1 ó dos bytes, llena el resto con "0".

 

wpe2.jpg (99922 bytes)

 

También podemos definir strings para ser almacenados en la memoria FLASH, ahorrando espacio en la memoria de datos. Ejemplo:

const char wob[50]="ESCRIBA AQUI SU NOMBRE Y PRIMER APELLIDO"; este arreglo se almacena en la memoria FLASH. Las comillas indican al compilador que se trata de un string. Observe que no es necesario el uso de corchetes.

Otra función incluída en la librería estándar <string.h> es strlen( ). El valor de retorno de esta función es la longitud de un string determinado. Por ejemplo si deseamos conocer la longitud del arreglo definido arriba, entonces escribimos:

LEN=strlen(wob);  //LEN es una variable definida como entera y wob es el nombre del arreglo. En este caso, LEN=40.

 

PROGRAMA DE PRUEBA 1

SCROLLING CIRCULAR EN EL LCD CON 16 CARACTERES: este programa (compilador HiTech) define un arreglo con formato de strings de 16 caracteres en memoria RAM, lo muestra en el LCD 16 x 1 y realiza un scrolling (corrimiento) circular hacia la derecha. Se utiliza el archivo header universal key34.h el cual realiza las funciones del LCD más rápidamente que el key33.h. Los archivos que debe usted almacenar en su carpeta son: HITECHSTRINGS2.h y KEY34.h Pruebe el programa en EDUPIC 16F628 ó EVOLUPIC, insertando el módulo LCD. Microswitches en posición

 "OFF".

PROGRAMA DE PRUEBA 2

SCROLLING CIRCULAR EN EL LCD CON CUALQUIER NUMERO DE CARACTERES: este programa define un arreglo con formato de strings en memoria FLASH que puede tener cualquier longitud. El LCD muestra el mensaje y realiza un scrolling circular hacia la derecha. Los archivos que usted debe almacenar en el proyecto son: HITECHLCDSCROLLINGTINY.c y KEY34.h Pruebe el programa en el sistema EVOLUPIC Bootloader 16F88. Inserte el módulo LCD 16 x 1. Microswitches en posición "OFF".