TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: REFLEXIONES270 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
-
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!.
-
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 
Un saludo.
-
#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