Serie Asincrona en C

17
1 Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño Lenguaje C aplicado a microcontroladores PIC (Compiladores de CCS) 2 Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño Lenguaje C aplicado a microcontroladores PIC COMUNICACIÓN SERIE ASÍNCRONA en C (compiladores de CCS) La Configuración de una Comunicación Serie Asíncrona desde el compilador PCM de CCS está gobernada, de manera fundamental por la directiva #USE RS232 Aunque la directiva se llame así, sirve para configurar cualquier transferencia serie asíncrona y no sólo RS232, que no deja de ser una de las posibles normas Los niveles eléctricos asociados a los niveles lógicos de recepción/transmisión son los correspondientes a la tensión de alimentación del microcontrolador y no a los de la norma RS232 El asistente del entorno PCW (PIC Wizard) permite definir, para esta directiva: • Velocidad de transmisión (en baudios) • Qué pin se empleará para la transmisión • Qué pin se utilizará para la recepción • Si se va a utilizar o no bit de paridad y de qué tipo (par o impar)

Transcript of Serie Asincrona en C

Page 1: Serie Asincrona en C

1Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

(Compiladores de CCS)

2Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

COMUNICACIÓN SERIE ASÍNCRONA en C (compiladores de CCS)

La Configuración de una Comunicación Serie Asíncrona desde el compilador PCM de CCS está gobernada, de manera fundamental por la directiva #USE RS232

Aunque la directiva se llame así, sirve para configurar cualquier transferenciaserie asíncrona y no sólo RS232, que no deja de ser una de las posibles normas

Los niveles eléctricos asociados a los niveles lógicos de recepción/transmisiónson los correspondientes a la tensión de alimentación del microcontrolador y noa los de la norma RS232

El asistente del entorno PCW (PIC Wizard) permite definir, para esta directiva:

• Velocidad de transmisión (en baudios)• Qué pin se empleará para la transmisión• Qué pin se utilizará para la recepción• Si se va a utilizar o no bit de paridad y de qué tipo (par o impar)

Page 2: Serie Asincrona en C

3Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

PIC Wizard para configuraciónde comunicaciones

Comunicación serie asíncrona

Posible más de un puerto

4Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Opciones de la directiva #USE RS232 :

• BAUD= xx sería la velocidad de comunicación (en baudios). Para que el compiladorinserte el código necesario para transmitir/recibir a la velocidad indicada, debe “conocer” la frecuencia del oscilador que se va a utilizar. Deberá pues existir previamente una directiva #USE DELAY(clock=frec.)

Si la velocidad de transmisión indicada no se pudiera alcanzar con un error inferior al 3%, se generaría a la hora de realizar la compilación un mensaje de error del tipo: “Baud rate out of range” salvo que se incluyauna opción BRGH1OK en la directiva (asumimos ese error)

• XMIT=pin Pin de transmisión que se va a utilizar (p.e.: xmit=PIN_C6)

• RCV=pin Pin de recepción que se va a utilizar (p.e.: rcv=PIN_C7)

Si el microcontrolador seleccionado tiene módulo SCI y se especifican los pinesasociados como los que se deben utilizar, la transmisión y/o recepción se harácon el hardware disponible, en caso contrario será implementado por software

Page 3: Serie Asincrona en C

5Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

• ENABLE=pinDurante la transmisión, el pin especificado estará en estado alto y durantela recepción en estado bajo . Ese pin se puede utilizar para habilitarbien la transmisión o bien la recepción en una comunicación semi-dúplexcomo puede ser el caso del control de los drivers de un bus RS485

• RESTART_WDTSe insertará código para resetear el Watchdog durante la esperapor un byte (para funciones que se quedan esperando) a que “llegue algo”

• INVERTCon esta opción, se invierte la polaridad de los niveles asociados a lospines de la comunicación: el 0 correspondería a tensión y el 1 a masa.El estado inactivo o de reposo (a 1) se correspondería con tensión nulaEsta opción no debería utilizarse si se emplea el módulo SCI interno

• BITS=xSe especifica el tamaño de los datos que serán enviados, x puede tomarun valor comprendido entre 5 y 9 si se implementa por softwarela comunicación o bien de 8 ó 9 si se emplea el módulo SCI interno

6Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

• FLOAT_HIGHEn estado alto, la línea no estará en un nivel alto sino en un estado de tensión flotante debido a que la salida que la controla es del tipodrenador (o colector) abierto

• BRGH1OKCon esta opción el compilador permite la generación de código aún enaquellos dispositivos que presentarán problemas en su velocidad detransmisión

• PARITY=x -> x puede ser N (none: sin), O (odd: impar) o E (even: par)Si se especifica el empleo de paridad, se envía un bit adicional comocomprobación y en el supuesto de que se produzca un error, éstequedaría registrado en una variable denominada RS232_ERRORS

• ERRORSSi se emplea esta opción, el compilador define una variable llamadaRS232_ERRORS que “recoge” los errores en cada recepción y los“resetea” después de que éstos se produzcan

Page 4: Serie Asincrona en C

7Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

La variable RS232_ERRORS (definida por el compilador) contiene:

a) Si se está utilizando una implementación software:

• En el bit 7, el 9º bit si se está utilizando tamaño de 9 bits en transmisión• El bit 6 se pone a 1 si se produjo un fallo en el envío con el modo detensión flotante de salida

b) Si se está empleando una UART interna:

• Es una copia del registro RCSTA (sólo para recepción), salvo el bit 0que se emplea para indicar error de paridad

Registro RCSTA

8Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Más acerca de la Directiva #USE RS232(opción, opción,...)

Si la implementación va a realizarse por software (no se va a utilizar unmódulo SCI interno), es importante que las directivas #USE FAST_IOo bien #USE FIXED_IO vayan delante de esta directiva pero no ladirectiva #USE STANDARD_IO por la manera en que se generaría el código de puesta a 1 o puesta a 0 de las líneas de salida

Las funciones integradas del compilador más usadas para comunicación serieasíncrona a las que afecta esta directiva son las siguientes:

• Para CONFIGURACIÓN: set_uart_speed( )

• Para TRANSMISIÓN: putc() o su equivalente: putchar()puts()printf()

• Para RECEPCIÓN: kbhit()getc() o sus equivalentes getch() y getchar()gets()

Page 5: Serie Asincrona en C

9Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Com. Serie Asíncrona (Configuración):

set_uart_speed(baudios)

Esta función sólo se puede emplear en aquellos dispositivos que utilizanel módulo SCI (USART) interno hardware. La función se emplea paracambiar la velocidad de transmisión/recepción en tiempo de ejecución(no en la compilación)

P.e.: switch( input_d() & 0x03){

case 0: set_uart_speed(2400);break;

case 1: set_uart_speed(4800);break;

case 2: set_uart_speed(9600);break;

case 3: set_uart_speed(19200);break;

} //Con los pines RD0 y RD1 se selecciona la velocidad

10Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Com. Serie Asíncrona (Transmisión):

putc() ó putchar() (son idénticas) putc(caracter)

Se envía un carácter a través del pin especificado para envío (XMIT) en la directiva #USE RS232 anterior

Ejemplo: char mensaje[10];...putc(‘*’);for(i=0;i<10;i++) putc(mensaje[i]);

puts() Llamada: puts(tira_caracteres)

La tira de caracteres debe finalizar con un 0. Se envía cada uno de loscaracteres de la tira usando la función putc(). Después del envío de la tira de caracteres, se envía un retorno de carro (carácter 13 =0x0D) y un avance de línea (carácter 10 =0x0A)

Ejemplo: puts(“Hola que tal”);

Page 6: Serie Asincrona en C

11Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

printf() printf(tira_caracteres) printf(tira_car_constantes,Valores...)printf(Función, tira_car_constantes, Valores...)

Valores son variables en una lista separadas por comasFunción es el nombre de la función que se debe emplear para sacar loscaracteres (si no se especifica nada es la putc() por defecto)

Esta función saca, mediante la Función de salida especificada, loscaracteres y los valores para su representación. Si se especificanValores, la tira de caracteres debe ser constante y se puede insertarla representación de los valores utilizando el carácter especial % seguidodel número de caracteres a utilizar (opcional de 1 a 9 ó 01 a 09 si sedesean representar los ceros a izq.) y del tipo de dato, que puede ser:

C como carácter U como entero sin signo X como hexadecimalD entero con signo lu entero largo sin signo LX hexadecimal “largo” ld entero largo con signo

12Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Ejemplos:Especificación Valor_1=0x12 Valor_2=0xFE

%03u 018 254%u 18 254%2u 18 ?Indefinido%d 18 -2%X 12 FE

Representación que se veríaOtros ejemplos:

printf(“Temporizador 0: %2X”,get_rtcc());

printf(“%2u %X %4X \n\r”, A,B,C);

printf(lcd_putc, “N = %u”, numero);

Page 7: Serie Asincrona en C

13Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Com. Serie Asíncrona (Recepción):

Importante: Estas funciones tienen un comportamiento diferente si la comunicación está implementada mediante el hardware o por software

getc() ó getch() ó getchar() (son idénticas) valor = getc( )

Cuando se la llama, espera por la llegada de un byte en el pin de recepciónRCV especificado en la directiva #USE RS232 y devuelve dicho byte comoresultado.

Si la recepción está implementada mediante el módulo USARThardware, se puede hacer uso del triple buffer existente sin perder datos. Si está implementada por software, debemos estar esperando cada bytecon getc() para no perder recepciones.

Para evitar que el microcontrolador quede “colgado” esperando de maneraindefinida la recepción de un byte que no llega, se debería usar lafunción kbhit() para verificar si ha llegado un carácter y está disponible

14Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

kbhit() Llamada: valor = kbhit( )

Esta función devuelve 0 (FALSE) ó 1 (TRUE) si la función getc() necesitara conocer la disponibilidad de un carácter (byte) paraser leído.

Si la comunicación está gestionada por software, la función devuelveTRUE si se ha detectado un bit de START en el pin de recepción

Si está implementada con la USART hardware, devuelve TRUE si elbyte ha sido recibido y está disponible en el buffer para ser leídomediante getc()

char getc_con_tiempo( ) {int t_maximo=0;while(!kbhit( ) && (t_maximo++ < 50) delay_ms(10);if(kbhit( ))

return(getc( )); //devuelve carácter recibidoelse

return(0); } //si no llegó nada devuelve 0

Ejemplo de Función queespera 0,5 segundos como máximo

Page 8: Serie Asincrona en C

15Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

gets(puntero_a_tira_caracteres) Llamada gets(puntero)

Esta función espera y lee caracteres que va colocando a partir de laposición señalada por el puntero utilizado como parámetro.

Lee hasta que recibe un retorno de carro (13 en decimal 0x0D). La tira de caracteres se finaliza con la inclusión de un cero.

Ejemplo:

char tira[30];do{

printf(“Clave:”); //se saca mensaje solicitando clave

gets(tira); //se espera por clave con retorno de carro final

if(strcmp(tira,password)) //se compara clave introducida con realprintf(“Correcta”); //si coincide correcta

else printf(“Clave Incorrecta”);} while !strcmp(tira,password);

Ejemplo para solicitar clave por pantalla

16Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Hablando de Tiras de Caracteres...

Funciones Estándar para tiras de caracteres:

strcat(s1,s2) Para encadenar tiras de caracteresstrchr(s1,c) Localiza c en tira por 1ª vez y devuelve dirección (&s1[i])strrchr(s1,c) Idem a la anterior pero empieza búsqueda desde finalstrcmp(s1,s2) Compara tiras s1 y s2 y devuelve TRUE si coincidenstrncmp(s1,s2,n) Compara n caracteres entre s1 y s2stricmp(s1,s2) Compara ignorando si son mayúsculas o minúsculasstrncpy(s1,s2,n) Copia n caracteres de s2 en s1strcspn(s1,s2) Cuenta caracteres de s1 que no están en s2strspn(s1,s2) Cuenta caracteres de s1 que también están en s2strlen(s1) Cuenta los caracteres de s1strlwr(s1) Convierte todas las mayúsculas a minúsculasstrpbrk(s1,s2) Busca posición en s2 donde empieza copia de s1

s1 y s2 son punteros a arrays de caracteres

Page 9: Serie Asincrona en C

17Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

La Norma RS232

En principio nació con la idea de recoger todas las posibilidades de comunicación entre un computador o equipo terminal de datos (DTE o Data Terminal Equipment) y un módem o equipo de comunicación de datos (DCE o Data Communications Equipment).

Sin embargo su uso se extendió a otras aplicaciones que nada tienen que ver con la intención original y se emplea para comunicar equipos que no respetan íntegramente la norma o la cumplen sólo de manera parcial. De hecho se empleapara comunicar equipos que son ambos DTE (dos PCs ó un PC con un micro p.e.)que no necesitan la mayoría de las líneas de la norma original: detector deportadora (DCD), indicador de llamada (RI), canal secundario,…

Los conectores que se suelen utilizar en los equipos son:

• Conector SUB-D de 25 pines• Conector SUB-D de 9 pines• Conector SUB-D de 15 pines de alta densidad (más extraño)

18Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

El conector de 25 pines es el que dispone de todas las señales definidas enla norma inicial, los otros dos prescinden de algunas de las señales.

Como recomendación general: si necesitamos comunicar nuestro micro conotro equipo que disponga de un puerto de comunicación serie “según norma RS232” y dado que cada fabricante hace su interpretación particular dela norma, consultemos los correspondientes manuales y esquemas para saberexactamente qué tipo de señales está utilizando y en qué pines.

Como ejemplo tenemos los puertos serie de un PC (COMn), que presentan demanera mayoritaria unos conectores SUB-D de 9 pines hembra (aunque la norma original decía que los DTE deberían ser machos)

Vista desde el exterior del conector del PC

Page 10: Serie Asincrona en C

19Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Funcionalidad de los pines en el conector SUB-D 9 del PC :

Pin 1 DCD (Entrada al Puerto: Detección de Portadora)Pin 2 RXD (Entrada de Recepción de Datos)Pin 3 TXD (Salida de Transmisión de Datos)Pin 4 DTR (Salida: PC listo para recibir, es la respuesta a CTS)Pin 5 MASA COMÚNPin 6 DSR (Entrada: PC puede enviar datos, como respuesta a RTS)Pin 7 RTS (Salida: PC pide envío de datos, le responderían con DSR )Pin 8 CTS (Entrada: Pregunta exterior sobre si PC listo para recibir,

contestará con DTR)Pin 9 RI (Entrada: Indicador de llamada, sólo si es realmente un módem

el otro equipo)

Protocolos de envío y de recepción:

RTS-DSR funcionan como pregunta-respuesta para enviar datos desde el PC

CTS-DTR también son pregunta-respuesta para recibir datos en el PC

20Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Para realizar la conexión entre un microcontrolador y un PC, será necesariorealizar la correspondiente adaptación de los niveles de tensión que utilizael microcontrolador a los niveles de la norma RS232

“1” -> 5V “1” -> -5V a -15V “1” -> -3V a -15V“0” -> 0V “0” -> +5V a +15V “0” -> +3V a +15V

Escritura RS232 Lectura RS232 Micro a 5Vlectura yescritura

Existen varios circuitos integrados comerciales que realizan esta adaptacióncon muy pocos componentes (p.e. la familia MAX220 a 249)

La conexión puede realizarse utilizando las líneas que se consideren oportunas.Se puede simplificar el conexionado y obviar las líneas de pregunta-respuesta “engañando” al emisor para hacerle creer que el receptor está siempre listo.El truco pasa por “puentear” las líneas de petición de envío y las respuestas.

Page 11: Serie Asincrona en C

21Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Emisores/Receptores de 2 canales para adaptación TTL - RS232 y viceversa

Una sola alimentación de 5V para generar tensiones de +10V y -10V

22Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

DriverRS232

(MAX232)

TX

RX

RX

TX

“1” -> 5V“0” -> 0V

“1” -> -3V a -15V“0” -> +3V a +15V

GND GND

Niveles lectura RS232

“1” -> -5V a -15V“0” -> +5V a +15V

Niveles escritura RS232

EJEMPLO DECONEXIÓN A 3 HILOS

FULL DÚPLEX

Conexión serie según norma RS232: Comunicación PIC - PC (puerto serie)

Pin2Pin3

Pin5

Page 12: Serie Asincrona en C

23Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

La Norma RS485

Es una norma de comunicación serie asíncrona que utiliza dos líneas (A y B)de manera que la tensión diferencial entre ambas marca el nivel lógico quese está enviando.

La transferencia es semi-dúplex ya que sólo es posible que un equipo envíe,gobernando las líneas de datos A y B, y otro u otros equipos reciban. Estápensada para una comunicación multipunto.

La norma RS485 define únicamente la especificación eléctrica del interfacey no un conector específico. El medio físico es un par de hilos trenzados entresí para reducir el posible ruido electromagnético inducido.

El estándar RS485 permite la interconexión de hasta 32 dispositivos sobreun único par de hilos, con velocidades de hasta 10Mbits por segundo y unadistancia máxima de 1200 metros. Ambas magnitudes, velocidad y distanciaestán ligadas entre sí, de manera que si se aumenta una, se debe reducir laotra.

24Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Posibles Circuitos de adaptación a un bus RS485

Emisor(driver)

Receptor(receiver)

Emisor/Receptor(transceiver)

Impedancias de terminación a ambos lados

El margen de la tensión de modo común permitida en los terminales deentrada A y B respecto a la masa del receptor está comprendida entre-7V y 12V. Si el terminal A está a una tensión superior a B (con un valordiferencial superior a 0,2V) se estará recibiendo un “1” y en caso contrario(tensión de B superior en más de 0,2V a A) se interpreta un “0”

Page 13: Serie Asincrona en C

25Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Circuitos de Interface RS485

Las señales eléctricas que es capaz de generar y leer la USART interna del microcontrolador (o su implementación software) deben adaptarse a losniveles diferenciales RS485 mediante algún circuito de interface.

Para permitir el envío y la recepción con un mismo circuito se debe emplearun transceiver. Son circuitos que además pueden soportar “colisiones”, esdecir que más de un circuito transmisor esté emitiendo (o tratando de emitirya que se producirá un error en los mensajes de ambos)

El transceiver integrado más popular probablemente sea el 75176, capaz derealizar la adaptación TTL-RS485 y viceversa.

Otro transceiver utilizado con frecuencia es el 75184 que es totalmentecompatible en patillaje y funcionalidad con el 75176 pero que además incluyeuna red de entrada supresora de transitorios de tensión sobre las líneasdel bus.

26Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Transceiver 75176

Se alimenta con una tensión única de 5V y combinan el funcionamiento de un driver diferencial triestado de salida con una entrada diferencial para larecepción.

Diagrama lógicoEncapsulado DIP8

Tabla de verdad como emisor Tabla de verdad como receptor

Page 14: Serie Asincrona en C

27Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Conexión del transceiver RS485 al microcontrolador

Además de los pines de Recepción y Transmisión, necesitaremos un pinadicional que controle el sentido de los datos en cada momento (entradao salida) para habilitar el bloque envío o de recepción del transceiver.

Con dicho pin se podría controlar el terminal DE (habilita envío) y RE (habilita recepción) del 75176. Como presentan una lógica opuesta, se puedeemplear un único pin para controlar ambos: si pin=0 se habilita la recepcióny se anula el envío, si pin=1 se activa envío y se anula recepción.

A

BRRXDTX

DERE

Enable

75176Microcontrolador

28Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Programación en C para transferencia sobre RS485:

La directiva #USE RS232 permite definir, además de los pines de envío yrecepción, un pin de habilitación que se coloca a 1 durante el envío y a 0durante la recepción. Dicho pin se activará por software ya que dicha salidano está disponible en la USART integrada, pero desde el punto de vistadel programador, una vez definida la directiva, será posible utilizar lasfunciones integradas del compilador.

Ejemplo:

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2)...if (kbhit()){ cola_circular[cola]=getch();cola++;if (cola>(TAM_BUF_UART-1))cola=0;

}

Page 15: Serie Asincrona en C

29Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Nota de Interés:

Es posible tener activas varias transferencias asíncronas del mismo o dediferentes tipos (RS232, RS485,...) con el mismo microcontrolador PIC.

La configuración realizada con la directiva #USE RS232 tiene efecto desdeel lugar en que se encuentra dicha directiva para las funciones getc(), putc(), printf() y kbhit() que aparezcan a continuación y hasta que aparezca unanueva directiva #USE RS232

#USE RS232 no es una línea de código ejecutable si no una configuraciónpara las funciones que le siguen, trabaja de manera similar a una directiva#DEFINE.

De este modo, podríamos incluir una directiva #USE RS232 justo antes decada una de las funciones que queramos utilizar para una transferenciaasíncrona con una determinada configuración o bien definir unas nuevasfunciones con la cabecera de configuración correspondiente al tipo decomunicación serie asíncrona que queramos emplear.

30Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Ejemplo: Se incluyen dos directivas y se definen funciones específicas

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2)

void enviar_RS485( char c) //Para enviar por RS485{ putc( c ); }char tomar_RS485( ) //Para recibir por RS485{ return(getc( ));}

#use rs232(baud=9600 ,xmit=PIN_B1,rcv=PIN_B2)

void enviar_RS232( char c) //Para enviar por RS232{ putc( c );}char tomar_RS232( ) //Para recibir por RS232{ return(getc( ));}main( ){ ... caracter=tomar_RS485();

enviar_RS232(carácter-’0’);

enviar_RS485(nuevo);}

PARA

RS2

32PA

RA R

S485

Recibo por RS485

Envío por RS232

Envío por RS485

Page 16: Serie Asincrona en C

31Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

El mismo ejemplo:

Se incluye la directiva justo antes de la llamada a la función integrada

main(){...

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2)

carácter = getc( ); //Recibir con la configuración para RS485

#use rs232(baud=9600 ,xmit=PIN_B1,rcv=PIN_B2)

putc(carácter-’0’); //Enviar con la configuración de RS232

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2)

putc(nuevo); //Enviar con la configuración RS232

}

32Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

A CONTINUACIÓN ALGUNOS EJEMPLOS DE CONEXIÓNENTRE EL PIC EN PICDEM2 plus Y EL PUERTO SERIE DE UN PC,

TRABAJANDO ÉSTE COMO EMULADOR DE TERMINAL

Programas > Accesorios >

Comunicaciones > Hyper Terminal

Se mostrará lo que se reciba por el COMny sacará por dicho puerto serie el códigoASCII correspondiente a la tecla que sepulse con el teclado del PC

Configuración de HyperTerminal

Page 17: Serie Asincrona en C

33Comunicación Serie Asíncrona en C ©ATE-Universidad de Oviedo-Fernando Nuño

Lenguaje C aplicado a microcontroladores PIC

Se podría utilizar una utilidad del Compilador de CCS: SIOW

También es un emulador de terminal