SERIN2 DataPin { FlowPin } ,Mode,{ParityLabel,} {Timeout,Label,}[Item...]
Recibe uno ó más Items en el Pin especificado en formato standard asincrónico .SERIN2 es similar al comando Serin de BS2 .DataPin es colocado como entrada en forma automática .FlowPin es opcional y es automáticamente colocado como salida .DataPin y FlowPin pueden 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)
El pin opcional de control de flujo FlowPin , puede ser incluído para ayudar a que los datos no desborden la capacidad del receptor .Si se usa , FlowPin es automáticamente habilitado para permitir la transmisión de cada carácter .Este estado habilitado es determinado por la polaridad del dato especificado en Mode .
Mode se usa para especificar el baud rate y los parámetros de operación de la transferencia serial .Los 13 bits de menor orden seleccionan el baud rate . Bit 13 selecciona paridad ó no paridad . Bit 14 selecciona nivel cierto ó invertido . Bit 15 no se usa .
Los bits de baud rate especifican el el tiempo de bit en microsegundos -20 .Para encontrar un valor dado , use la ecuación :
(1000000/bayd)-20
Algunos baud rate standard se muestran en la tabla siguiente :
Bit 13 selecciona paridad par (bit13=1) ó sin paridad (bit13=0) .Normalmente ,las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit) .Si se selecciona paridad ,los datos son recibidos como 7E1 (7 bit de datos , paridad par ,1 stop bit) .
Bit 14 selecciona el nivel de los pins de datos y de control de flujo .Si bit 14=0 , se reciben los datos en forma normal ,para usar con los drivers RS-232 .Si bit 14=1 , los datos se reciben invertidos .Esto se puede usar para evitar usar drivers RS-232
Algunois ejemplos de Mode son : Mode = 84 (9600 baud ,sin paridad , cierto),Mode = 16780 ( 2400 baud , sin paridad , invertido ) , Mode = 27889 ( 300 baud , paridad par invertido ) .
Si se incluye ParityLabel , se saltará a la etiqueta indicada si se recibe un carácter con error de paridad .Solo debe ser usado con paridad par seleccionada (bit 13=1)
En forma opcional se puede incluir Timeout y Label para permitir que el programa continúe si no se recibe un carácter dentro de un cierto tiempo .Timeout se especifica en unidades de 1 milisegundo .
SERIN2 soporta distintos modificadores , que pueden ser combinados entre sí ,dentro de una declaración SERIN2 para obtener distintos formatos .
Una variable precedida por BIN va a recibir la representación ASCII de su valor binario ..Por ejemplo ,si está especificado BIN B0 y se recibe “1000” , B0 será 8.
Una variable precedida por DEC va a recibir la representación ASCII de su valor decimal ..Por ejemplo ,si está especificado DEC B0 y se recibe “123 ” , B0 será 123.
Una variable precedida por HEX va a recibir la representación ASCII de su valor hexadecimal ..Por ejemplo ,si está especificado HEX B0 y se recibe “FE ” , B0 será 254.
SKIP seguido por un contador , va a saltear esa cantidad de caracteres en el flujo de datos .Por ejemplo , SKIP 4 salteará 4 caracteres .
STR seguido por una variable de array , un contador y un carácter opcional de finalización ,va a recibir una cadena de caracteres .La longitud de la cadena está determinada por el contador ó cuando se encuentre el carácter opcional .
La lista de items de datos a ser recibidos ,puede estar precedida por uno ó más calificadores entre parentesis después del WAIT . SERIN2 debe recibir estos bytes en un orden exacto ,antes de recibir los datos .Si algún byte recibido no concuerda con el próximo en la secuencia de calificación ,recomienza el proceso de calificación .( p.ej. el el próximo byte recibido se compara con el primer item en la lista de calificadores )..Un Qualifier puede ser constante , variable ó una cadena de constantes ,Cada carácter de una cadena es tratado como un calificador individual .
WAITSTR puede ser usado como WAIT anteriormente , para forzar a SERIN2 a esperar por una cadena de caracteres de un determinado largo ,antes de seguir adelante .
Una vez que los calificadores WAIT y WAITSTR están cumplimentados , SERIN” comienza a guardar los datos en las variables asociadas con cada Item .Si se usa solo el nombre de la variable , se guarda el valor del carácter ASCII . Si la variable está precedida por BIN,DEC ö HEX , SERIN2 convierte un valor binario , decimal ó hexadecimal en su equivalente ASCII y guarda el resultado en esa variable .Todos los no-díhitos recibidos antes que el primer digito del valor decimal es ignorado y descartado .El carácter no-digito que termina el valor también es descartado .
BIN , DEC y HEX pueden estar seguidos por un número .reciben tantos digitos como hay en la entrada .Sin embargo , si un número sigue a un modificador ,SERIN2 siempre recibirá ese número de dígitos , salteando dígitos adicionales si es necesario .
SERIN2 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 .
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 ( Mode bit14 = 1 ) .Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos ).
SERIN2 1,16780,[wait (”A”),B0] ´ espera hasta que el carácter “A” sea recibido en forma serial en Pin1 y pone el
´próximo carácter en B0
SERIN2 PORTA.1 ,84,[skip 2,dec4 B0] ´ saltea 2 caracteres y toma un número decimal de 4 dígitos
SERIN2 PORTA.1.0 ,84,100,tlabel,[wait (“x”,b0),str ar]
SEROUT2 DataPin { FlowPin } ,Mode,{Pace,} {Timeout,Label,}[Item...]
Envía uno ó más Items al Pin especificado en formato standard asincrónico .SEROUT2 es similar al comando Serout de BS2 .DataPin es colocado como salida en forma automática .FlowPin es opcional y es automáticamente colocado como entrada .DataPin y FlowPin pueden 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)
El pin opcional de control de flujo FlowPin , puede ser incluído para ayudar a que los datos no desborden la capacidad del receptor .Si se usa , los datos seriales no serán enviados hasta que FlowPin esté en el estado adecuado . .Este estado es determinado por la polaridad del dato especificado en Mode .
Como opción se puede incluir Timeout y Label para permitir continuar al programa si el FlowPin no cambia al estado de habilitación dentro de un cierto tiempo .Timeout esta especificado en unidades de 1 milisegundo .
En algunos casos ,los rangos de transmisión de SEROUT2 pueden presentar los datos demasiado rápidamente al dispositivo receptor .Puede no desearse usar un pin extra para control de flujo .La opción Pace se puede usar para agregar tiempo entre cada carácter durante la transmisión .La demora puede ser de 1 a 65535 milisegundos entre cada carácter transmitido .
Mode se usa para especificar el baud rate y los parámetros de operación de la transferencia serial .Los 13 bits de menor orden seleccionan el baud rate . Bit 13 selecciona paridad ó no paridad . Bit 14 selecciona nivel cierto ó invertido . Bit 15 selecciona si está abierto ó no.
Los bits de baud rate especifican el el tiempo de bit en microsegundos -20 .Para encontrar un valor dado , use la ecuación :
(1000000/bayd)-20
Algunos baud rate standard se muestran en la tabla siguiente :
Bit 13 selecciona paridad par (bit13=1) ó sin paridad (bit13=0) .Normalmente ,las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit) .Si se selecciona paridad ,los datos son enviados como 7E1 (7 bit de datos , paridad par ,1 stop bit) .
Bit 14 selecciona el nivel de los pins de datos y de control de flujo .Si bit 14=0 , se envian los datos en forma normal ,para usar con los drivers RS-232 .Si bit 14=1 , los datos se envian invertidos .Esto se puede usar para evitar usar drivers RS-232
Bit 15 selecciona si el pin de datos está siempre con carga (bit15=0) ó si queda abierto en uno de los estados (bit15=1).El modo abierto puede usarse para conectar varios dispositivos juntos en el mismo bus serial .
Algunos ejemplos de Mode son : Mode = 84 (9600 baud ,sin paridad , cierto , con carga ),Mode = 16780 ( 2400 baud , sin paridad , invertido ,con carga ) , Mode = 60657 ( 300 baud , paridad par, invertido , abierto) .
SEROUT2 soporta distintos modificadores , que pueden ser combinados entre sí ,dentro de una declaración SEROUT2 para obtener distintos formatos .
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 BIN va a enviar la representación ASCII de su valor binario ..Por ejemplo ,si B0=8 , entonces BIN B0 va a enviar “1000”
Un valor numérico precedido por DEC va a enviar la representación ASCII de su valor decimal ..Por ejemplo ,si B0=123 , entonces DEC B0 va a enviar ”123 ”
Un valor numérico precedido por HEX va a enviar la representación ASCII de su valor hexadecimal ..Por ejemplo ,si B0=254 , entonces HEX B0 envia “FE ”.
REP seguido por un carácter y un contador , va a repetir el carácter la cantidad de veces que indique el contador .Por ejemplo , REP “0”´ 4 enviará “0000”
STR seguido por una variable de array , y un contador opcional ,va a enviar una cadena de caracteres .La longitud de la cadena está determinada por el contador ó cuando se encuentre un carácter 0 en la cadena .
BIN ,DEC y HEX pueden estar precedidos , ó seguidos por varios parámetros opcionales . Si alguno de ellos está precedido por una I (por indicado ).la salida estará precedida por alguno de los símbolos % , # , $ para indicar que el valor siguiente es binario , decimal ó hexadecimal .
Si alguno está precedido por una s (por signo) ,la salida estará precedida por “ - “ , si el bit de alto orden del dato está alto .Esto permite la transmisión de números negativos .Recuerde que todas las operaciones u comparaciones de PBP son sin signo .Sin embargo ,las matemáticas sin signo pueden llevar a resultados con signo .Por ejemplo , B0 = 9 - 10 .El resultado de DEC B0 será “255” .Enviando sDEC B0 daría “-1” , dado que se envía el bit de alto orden .
BIN , DEC y HEX también pueden estar acompañados de un número .Normalmente , estos modificadores muestran exactamente tantos dígitos como sean necesarios (sin enviar los ceros a la izquierda).Sin embargo , si un npumero sigue a un modificador , SEROUT2 siempre ese número de dígitos , agregando tantos ceros al comienzo ,como sea necesario .Además , ajusta cualquier bit extra de orden superior.P.ej. BIN6 8 sería enviado como “001000” y BIN2 8 como “00” .
Se puede usar cualquier combinación de modificadores simultáneamente .P.ej. ISDEC4 B0 .
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 (se supone que RS-232 es tolerante a los cortocircuitos ).
SEROUT2 0,16780,[dec B0,10] ´ envía el valor ASCII de B0 ,seguido por un LF al pin 0 ,
´en forma serial a 2400 baud
SEROUT2 PORTA.1,84 ,[“B0=0”,ihex4 B0] ´ envía “B0 = 0” seguido por el valor binario de B0 ,a
´PORTA pin1 ,en forma serial , a 9600 baud