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

Temas similares

06/07/2011 #1


Ayuda con recepcion de string RS232
Hola, estoy tratando de comunicar una pic 16f877a con el pc a traves del puerto serie, con el fin de encender o apagar un led mediante un mensaje. Si envio el mensaje ON el led se enciende, si envio el mensaje OFF el led se apaga. Al principio se enciende el led con el primer mensaje, pero al momento de enviar el segundo mensaje, este se queda pegado en la rutina de main. Le he dado mil vueltas y no logro ver donde esta el problema. Si me pudieran ayudar por favor. Gracias

Código:
#include <16f877A.h>
#use  delay(clock=20000000)
#fuses xt,nowdt,nobrownout,nolvp,noprotect   // Fusibles
#use  rs232 (baud=9600, bits=8, parity=N,xmit=PIN_C6,rcv=PIN_C7)
#define use_portb_lcd TRUE
#include "lcd420.c"
#include <stdlib.h>
#byte TRISA = 0x85
#byte PORTA = 0x05

int i;
char  dato[10]={0};
char c;

#INT_RDA  
void mensaje(){  
disable_interrupts(int_rda);
i=0;
if(kbhit()){

      while(c!='\r')
         {  
         c=getc();
         dato[i]=c;
         i++;
         }
      }
enable_interrupts(int_rda);
}


void muestra_lcd(void){
      lcd_putc('\f');
      for(i=0;i<11;i++)
         {
         printf(lcd_putc,"%c",dato[i]);
         }
      if(dato[0]=='O'&&dato[1]=='N')
      output_high(PIN_A1);
      if(dato[0]=='O'&&dato[1]=='F'&&dato[2]=='F')
      output_low(PIN_A1);
            
for(i=0;i<11;i++)
   dato[i]=0;
   
delay_ms(800);
}

void  main()
{
      lcd_init();                      // inicializa el lcd
      set_tris_a(0x00);                //puerto A como salida 
      output_a(0x00);                  // salida a 0 del puerto A
      lcd_putc("Inicializando");
      delay_ms(1000);
      lcd_putc('\f');
      output_high(PIN_A0);
      delay_ms(500);
      output_low(PIN_A0);
      enable_interrupts(int_rda); 
       enable_interrupts(global); 
       
        while(TRUE)
         {
            lcd_putc('\f');
            lcd_putc("ESCRIBE");
            delay_ms(500);
            lcd_putc('\f');
            lcd_putc("EL MENSAJE");
            delay_ms(500);
            output_high(PIN_A0);
            delay_ms(200);
            output_low(PIN_A0);
            delay_ms(200);
           if(dato[0]!=0)
           muestra_lcd();
         }
}
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.