RS232_SERIN / SEROUT

SERIN Pin,Mode, {Timeout,Label,}{[Qual...],} {Item...}

 

 Recibe uno ó más Items en Pin , en formato standard asincrónico , usando 8 bit de datos ,sin paridad y un stop bit (8N1) .SERIN es similar al comando Serin de BS1 con el agregado de Timeout . Pin automaticamente se convierte en entrada . Pin puede ser una constante , 0 - 15 , ó una variable que contenga un número de 0-15 (p.ej. B0) ó un número de Pin (p.ej. PORTA.0)

Los nombres Mode (p.ej. T2400 ) están definidos en el archivo MODEDEFS.BAS .Para usarlos ,agregue la línea :

 

Include “modedefs.bas”

 

al comienzo del programa PBP . BS1DEFS,BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS .No lo incluya , si ya está usando alguno de estos archivos .Los números Mode pueden ser usados sin incluir este archivo .

 

 

Timeout y Label son opciones que pueden ser incluídas para permitir al programa continuar si no se recibe un carácter durante un cierto tiempo . Timeout está especificado en unidades de 1 milisegundo .

La lista de Items de datos a ser recibida puede estar precedida por uno ó más calificadores encerrados entre corchetes . SERIN debe recibir estos bytes en un orden exacto , antes de recibir los datos .Si algún byte recibido no concuerda con el byte siguiente de la secuencia de calificación ,el proceso de calificación comienza nuevamente ( p.ej. el próximo hyte recibido es comparado con el primer Item de la lista de calificación ) .Un Qualifier puede ser constante,variable ó una cadena de constantes . Cada carácter de una cadena es tratado como un calificador individual .

Una vez que se completan los calificadores , SERIN comienza a guardar datos en la variable asociada con cada Item .Si el nombre de variable es único ,el valor del carácter ASCII recibido es guardado en la variable .Si la variable es precedida por el signo # . SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable .Todos los no-dígitos recibidos antes del primer dígito del valor decimal son ignorados y descartados .El carácter no-dígito que termina el valor decimal también se descarta .

Aunque los chips convertidores de nivel RS-232 son comunes y baratos , las excelentes especificaciones de I/O de los microPIC permiten ejecutar muchas aplicaciones sin usar convertidores de nivel .Más aún , se pueden usar entradas invertidas ( N300...N9600) junto con un resistor limitador de corriente de 22k.

 

SERIN 1,N2400, [“A”],B0                     ´ espera hasta que el carácter “A” sea recibido en forma serial en el pin 1          

                                                             ´y coloca el próximo caracter en B0

 SEROUT Pin,Mode,[Item[,Item...}]

 

 Envía uno ó más Items a Pin , en formato standard asincrónico usando 8 bits de datos , sin paridad y 1 stop bit (8N1) .SEROUT es similar al comando Serout de BS1 .Pin es automáticamente colocado como salida . Pin puede ser una constante , 0 - 15 , ó una variable que contenga un número de 0-15 (p.ej. B0) ó un número de Pin (p.ej. PORTA.0)

Los nombres Mode (p.ej. T2400) están definidos en el archivo MODEDEFS.BAS .

Para usarlos ,agregue la línea :

 

Include “modedefs.bas”

 

al comienzo de su programa PBP .

BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS . No lo incluya ,si ya está usando uno de ellos .Los números Mode pueden ser usados sin incluir este archivo .

 

 

SEROUT soporta 3 tipos distintos de datos , que pueden ser combinados libremente dentro de una declaración SEROUT .

Una cadena de constantes es enviada como una cadena de caracteres literales .

Un valor numérico (constante ó variable ) va a enviar el correspondiente carácter ASCII .Más aún , 13 es retorno de carro ( Carriage Return ó CR ) y 10 es avance de línea ( Line Feed ó LF ) .

Un valor numérico precedido por el signo # va a enviar la representación ASCII de su valor decimal .Por ejemplo , si W0=123 ,entonces #W0 (ó #123) va a enviar “1”,”2”,”3” .

 

SEROUT asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit .Para mantener los valores de baud rate adecuados con otro oscilador , asegúrese de usar DEFINE OSC con el nuevo valor de oscilador .

En algunos casos ,los rangos de transmisión de SEROUT pueden presentar los caracteres demasiado rápidamente en el dispositivi receptor .Un DEFINE agrega tiempo entre caracteres en la transmisión de salida .Esto permite un tiempo adicional entre caracteres a medida que son transmitidos .Se puede lograr una demora entre cada carácter transmitido de 1 a 65535 microsegundos ( .001 a 65,535 milisegundos ) .

Por ejemplo , para pausar 1 milisegundo entre cada carácter transmitido :

DEFINE CHAR_PACING 1000

Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementación de corriente RS-232 y las excelentes especificaciones de I/O del microPIC , no se requieren convertidores de nivel en muchas aplicaciones . Se puede usar TTL invertido ( N300 ...N9600 ) .Se sugiere el uso de un resistor limitador de corriente de 1K (se supone que RS-232 es tolerante a los cortocircuitos ).

SEROUT 0,N2400,[#B0,10]          ´ envía el valor ASCII de B0 ,seguido por un LF al pin 0 , en forma serial