Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

16/04/2010 #1

Avatar de §-kelvi

problemas con rs232 puerto c con pic16f877a en ccs
buenas noches a todos necesito ayuda para comunicarme serialmente del pic 16f877a hacia la pc que sea por el puerto c pin_c6 pin_c7 que son los nativos del pic para estas funciones he intentado de todo y no logro hacer que funcione no se si hay que deshabilitar algunas funciones de la usuart, con los otros puertos funciona de maravilla pero con este en especial tengo problemas, el programa es mas complejo, pero me esta volviendo loco este problema y lo he simplificado para enviar el estado de un pin del puerto b, yo se que es un tema muy difundido, pero no logro solucinarlo, si no es mucha molestia talvez tambien me podrian ayudar a usar la #int_rda del pic, de antemano muchas gracias a todos

#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock=20,000,000)
#use fast_io(c)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
#bit v1= 0x06.4 //pin del puerto b a visualizar
#bit v15 = 0x06.3 // pin del puerto b del que se testea su estado
void main()
{
set_tris_c(0b10000000);
set_tris_b(0b00001000);
setup_psp(PSP_DISABLED);
do
{
if (V15==1) // si pinb3 = 1
{
putc ('a'); //visualizar a
v1 = 1;
}
if (V15==0) // si pinb3 = 0
{
fputc ('b'); // visualizar b
v1 = 0;
}
} while (true);
}

he usado pic simulator ide para ver en detalle los procesos del pic
17/04/2010 #2


Respuesta: problemas con rs232 puerto c con pic16f877a en ccs
hola!! lo unico que se me ocurre es que pongas los pines en minuscula, xmit=pin_c6 ,rcv=pin_c7. Y si es para simular de momento elimina todos los fuses a ver si el problema estuviera ahi.
La interrupcion INT_RDA funciona como cualquier otra interrupcion, el valor que llega al puerto se recoge con la instruccion getc (valor=getc()), antes tienes que habilitar las instrucciones globales y la de la interrupcion:
Código:
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
Un saludo
22/04/2010 #3

Avatar de §-kelvi

Respuesta: problemas con rs232 puerto c con pic16f877a en ccs
gracias pablet intentare configurarlo como dices y t avisare lo q suceda!! de todas formas agradeceria todas las sugerencias q tengan gracias
23/04/2010 #4

Avatar de §-kelvi

Respuesta: problemas con rs232 puerto c con pic16f877a en ccs
he solucionado el problema ahora! estoy intentando utilizar el buffer del puerto serial interno del pic, si alguien tiene alguna idea de como usarlo y puede compartirlo con nosotros se le sera agradecido, abajo dejo el codigo

Código PHP:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT 
#use delay (clock=20,000,000)
#use fast_io(b)
#use fast_io(c)
#use rs232(baud=9600,rcv=pin_c7,xmit=pin_c6) 
int estado;
#int_rda
void isr_rs232()
{
   
estado=getc();
}
void main()
{
   
set_tris_b(0b00000000);
   
set_tris_c(0b10000000);
   
enable_interrupts(INT_RDA);
   
enable_interrupts(GLOBAL);
 do
 { 
   if (
estado=='a')
   {
      
printf ("texto recibido \n\f");
      
delay_ms(1000);
   }

  if (
estado=='b')
  {
      
printf ("texto enviado \n\f");
      
delay_ms(1000);
  }
 } while (
true);

como ven la diferencia esta en el fuse jajaj upss!! era un error simple el cristal xt (debe ser hs, porque trabaja a 20mhz)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.