Autor Tema: Emulación Software del puerto serie para el PIC16F84A  (Leído 1443 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado davidendresden

  • PIC10
  • *
  • Mensajes: 14
Emulación Software del puerto serie para el PIC16F84A
« 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Emulación Software del puerto serie para el PIC16F84A
« Respuesta #1 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!
No contesto mensajes privados, las consultas en el foro

Desconectado davidendresden

  • PIC10
  • *
  • Mensajes: 14
Re: Emulación Software del puerto serie para el PIC16F84A
« Respuesta #2 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.