TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: davidendresden en 11 de Diciembre de 2009, 10:19:07

Título: Emulación Software del puerto serie para el PIC16F84A
Publicado por: davidendresden en 11 de Diciembre de 2009, 10:19:07
Hola,

en un proyecto estoy utilizando un PIC16F84A que no posee UART/Puerto serie junto con un módulo XBee que necesita recibir datos de forma serie. Por lo tanto, creo que el problema está en que debo implementarlo de forma SW. Estoy un poco liado porque creo que con CSS y la instrucción #USE RS232 parece que no funciona. ¿Es así de sencillo o hay que programar más?

Gracias
Título: Re: Emulación Software del puerto serie para el PIC16F84A
Publicado por: Suky en 11 de Diciembre de 2009, 10:43:51
No, es así de sencillo como se te ha mostrado en varios hilos de este foro y otros foros  ;-) Prueba la comunicación con la PC para salir de dudas.

Muestra todo el código que utilizas para saber si estas haciendo otra cosa que afecte al funcionamiento.

Saludos!
Título: Re: Emulación Software del puerto serie para el PIC16F84A
Publicado por: davidendresden en 11 de Diciembre de 2009, 12:12:06
Hola, siento si estoy un poco pesado con el tema pero es de lo que no estoy seguro. Este es mi caso:

#include "C:\Documents and Settings\David Crespo Ramírez\Escritorio\Uni\Robótica\ROVI\Documentación\PIC\ROVI C\ROVI_h.h"
#include <stdio.h>

#BYTE TRISA=0x85
#BYTE PORTA=0x05
#BYTE TRISB=0x86
#BYTE PORTB=0x06

void main()
{

   char orden;
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   orden='5';
   TRISB=0b00000000;   /*Para envío de órdenes a los motores*/
   TRISA=0b00000010;   /*Activo el pin RA1 para recepción de los bits mandados por ZigBee y pin RA0 Para transmitir información al ZigBee*/

   printf("Adelante ROVI");
   while(TRUE)
   {
   orden=getc();
   /*RB3 RB2 RB1 RB0*/
   /*IA ID DA DD*/
   if (orden=='8') PORTB=0b00000101; /*00101*/
   if (orden=='2') PORTB=0b00001010; /*01010*/
   if (orden=='4') PORTB=0b00001001; /*01001*/
   if (orden=='6') PORTB=0b00000110; /*00110*/
   if (orden=='5') PORTB=0b00000000; /*00000*/

   putc(orden);
   }
}

#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=8000000)
#use rs232(baud=19200,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,force_SW)

Sin embargo, no sé si quizás el problema esté en el cristal (8MHz) o en la tasa (19200Bd) que quizás sean demasiado altas para el módulo ZigBee.