Autor Tema: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();  (Leído 3240 veces)

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

Desconectado marturetjulio

  • PIC10
  • *
  • Mensajes: 44
HOLA AMIGOS DE TODOPIC...RECIBAN UN CORDIAL SALUDO...QUERIA SOLICITARLES AYUDA EN CUANDO A UN PROGRAMA QUE ESTOY INTENTANDO HACER Y ES PARA PODER RECIBIR DATOS CON LA INSTRUCCION GETS...YA HE HECHO TODO LO QUE SE PERO AL PARECER ME FALTA ALGO...AQUI LES DEJO EL PROGRAMA DEL TRANSMISOR Y DEL RECEPTOR.

PROGRAMA TRANSMISOR:
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7,ENABLE=PIN_C5)

void main() {
set_tris_c(0x00);
while(true)
{
printf("%s","JULIO\r");
delay_ms(300);
}
}


PROGRAMA DEL RECEPTOR:
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)
#include <lcd.c>
#include <stdlib.h>
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#byte portb =06
#byte portc =07
char recibir[6];
char nombre[6]={"JULIO"};
#int_rda
void serial_isr(void)//función de interrupción por recepción de datos USART               
{
if(kbhit()){
disable_interrupts(int_rda);
gets(recibir);
//delay_ms(300);
if(recibir!=0) //se compara clave introducida con real
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Correcto"); //si coincide correcta
}
else
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Incorrecto");
}
}
enable_interrupts(int_rda);
}
void main() {
lcd_init();
set_tris_c(0x00);
portc =0;
while(true)
{
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(int_rda);
}
}
 ESPERO ME PUEDEN AYUDAR..ADJUNTO EL CIRCUITO QUE USO PARA LA SIMULACION...
Expeciencia es simplemente el nombre que le damos a nuestros errores!!!

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #1 en: 22 de Diciembre de 2009, 22:10:35 »
porque no sacas el disable_interrupts(int_rda) del if(kbhit), es decir lo colocas antes.

Sinceramente nunca he colocado esto:
#byte portb =06
#byte portc =07

dejo que el compilador se encargue de eso, inclusive de los tris, yo sé que esta mal, pero muchas veces no se como configurarlo y le dejo esa responsabilidad al compilador (se que no deberia ser asi!)

ahora tu problema de una forma mas especifica cual es? no recibes nada en el bufer? o te llegan puros 0? o sencillamente no entra en la interrupcion?

a por si acaso mira que el reloj de la simulacion sea 4 M en los dos...
« Última modificación: 22 de Diciembre de 2009, 22:12:54 por fidodido18 »

Desconectado marturetjulio

  • PIC10
  • *
  • Mensajes: 44
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #2 en: 22 de Diciembre de 2009, 23:20:01 »
hola amigo gracias por tu respuesta. bueno si yo se lo coloco solo para guiarme pero no es necesario...y bueno el problema es que no recibo nada no se muestra nadacambie lo que me dijiste y hice una comparación pero nada...la comparacion yo ya la habia hecho pero se la habia quitado para postearlo aqui y ahora se la pongo de nuevo y el problema es que como que no recibe porque si recibiera al realizar la comparacion deberia de ejecutar el if o el else este es el nuevo programa del receptor:

#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)
#include <lcd.c>
#include <stdlib.h>
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)
char recibir[6];
char nombre[6]={"JULIO"};
#int_rda
void serial_isr(void)//función de interrupción por recepción de datos USART               
{
disable_interrupts(int_rda);
if(kbhit()){
gets(recibir);
delay_ms(300);
if(strcmp(recibir,nombre)) //se compara clave introducida con real
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Correcto"); //si coincide correcta
}
else
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Incorrecto");
}
}
enable_interrupts(int_rda);
}
void main() {
lcd_init();
while(true)
{
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(int_rda);
}
}

Expeciencia es simplemente el nombre que le damos a nuestros errores!!!

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #3 en: 23 de Diciembre de 2009, 15:29:14 »
mandame todo comprimido en un archivo para revisarlo desde aca.. para saber si estas entrando a la interrupcion o no...

Desconectado marturetjulio

  • PIC10
  • *
  • Mensajes: 44
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #4 en: 23 de Diciembre de 2009, 15:36:41 »
ok amigo aui te lo adjunto todo..la simulacion esta hecha en proteus 7.5
Expeciencia es simplemente el nombre que le damos a nuestros errores!!!

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #5 en: 23 de Diciembre de 2009, 15:40:36 »
me pare q tienes muchu codigo dentro de la interrupcion,seria mejor en la interrupcion solo recibir y activar un flag y en el main hacer la comparacion y la actualizacion del lcd.saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado marturetjulio

  • PIC10
  • *
  • Mensajes: 44
Re: AYUDA CON USART PROBLEMA PARA RECIBIR DATOS CON LA INSTRUCCION GETS();
« Respuesta #6 en: 23 de Diciembre de 2009, 15:46:19 »
a ok bueno saque la etapa de comparación y mira como quedo que te parece amigo. pero no me da tampoco jeje..el problema esta en la recepción...gracias por responder salu2.

#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)
#include <lcd.c>
#include <stdlib.h>
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)
char recibir[6];
char nombre[6]={"JULIO"};
#int_rda
void serial_isr(void)//función de interrupción por recepción de datos USART               
{
disable_interrupts(int_rda);
if(kbhit()){
gets(recibir);
}
enable_interrupts(int_rda);
}
void main() {
lcd_init();

while(true)
{
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(int_rda);

if(strcmp(recibir,nombre)) //se compara clave introducida con real
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Correcto"); //si coincide correcta
}
else
{
 lcd_putc("\f");
 lcd_gotoxy(1,2);
 printf(lcd_putc,"Incorrecto");
}

}
}
Expeciencia es simplemente el nombre que le damos a nuestros errores!!!


 

anything