Autor Tema: NECESITO RUTINA COMUNICACION SERIE SIN UART EN C  (Leído 2409 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado REFLEXIONES270

  • PIC10
  • *
  • Mensajes: 3
NECESITO RUTINA COMUNICACION SERIE SIN UART EN C
« en: 03 de Marzo de 2005, 04:52:00 »
NECESITO RUTINA COMUNICACION SERIE SIN UART EN C

Hola, estoy buscando alguien que tenga alguna rutina de comunicacion serie rs-232 realizada por software, sin utilizar ninguna UART, realizada en C para PIC....

GRACIAS

Desconectado akydes_

  • PIC12
  • **
  • Mensajes: 68
RE: NECESITO RUTINA COMUNICACION SERIE SIN UART EN C
« Respuesta #1 en: 04 de Marzo de 2005, 15:34:00 »
Escrito originalmente por REFLEXIONES270
NECESITO RUTINA COMUNICACION SERIE SIN UART EN C

Hola, estoy buscando alguien que tenga alguna rutina de comunicacion serie rs-232 realizada por software, sin utilizar ninguna UART, realizada en C para PIC....

GRACIAS


hola, si mal no recuerdo, en CCS tan sólo tienes que especificar los pines de SCL y SDA y utilizar el comando forze_sw como parámetro en la función #use RS232...

Mira en la ayuda, pero básicamente es así.

Espero que te sirva. Un saludo, y suerte!.

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
RE: NECESITO RUTINA COMUNICACION SERIE SIN UART EN C
« Respuesta #2 en: 04 de Marzo de 2005, 16:15:00 »
Hola, si no encuentras algo hecho como te comentan, prueba con algo asi:

#define TXD porta.0 blablabl o komo se haga en el pic
#define TXD porta.1 blablabl o komo se haga en el pic

void delay(int ms)
{
//Aqui temporizas como quieras, con un temporizador o con un bucle for
}

void send_byte(char byte)
{
 char i = 0;
 
 TXD = 0; // Bit de start
 delay(TIEMPO); // TIEMPO es el tiempo entre bits (depende de la velocidad de comunicacion)
 for (i=0;i<8;i++)
 {
   if(byte & 0x01) TXD = 1;
   else TXD = 0;
 
   byte >>= 1; // es lo mismo que byte = byte >>1, o byte = byte / 2:
   delay(TIEMPO);
 }
 TXD = 1; // Bit de stop
}

char rec_byte(void)
{
 char byte=0;

 while(RXD==1);
 delay(TIEMPO*1.5); // Esperamos a estar en el proximo bit a mitad (1 bit de start mas la mitad del proximo)
 for (i=0;i<8;i++)
 {
  if(RXD) byte |= 1; // Es lo mismo que byte = byte | 1;
  byte <<=1;
  delay(TIEMPO);
 }

 return byte;
}

Este es el aspecto parecido al que deberia tener Sonrisa

Un saludo.

Desconectado emaberna

  • PIC10
  • *
  • Mensajes: 18
RE: NECESITO RUTINA COMUNICACION SERIE SIN UART EN C
« Respuesta #3 en: 07 de Marzo de 2005, 10:05:00 »
#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#define Tx PIN_B1 // PIN de Transmisión
#define Rx PIN_B2 // PIN de Recepción

/*9600 baudios, 8 bit de datos, 1 bit de stop, sin paridad*/

#use rs232(baud = 9600, xmit = Tx, rcv = Rx)

void main (void)
{
   char b;

   set_tris_b(0b00000100);
   set_tris_a(0x00);

   while(1)
   {
      b = getc(); //Funcionando como espejo
      putc(b);
   }
}


Por lo menos el 16f84 no tiene uart y lo emula el ccs.
Suerte
Saluda atte ema


 

anything