Autor Tema: consulta sobre usart  (Leído 1824 veces)

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

Desconectado Masterchoi

  • PIC10
  • *
  • Mensajes: 6
consulta sobre usart
« en: 19 de Mayo de 2018, 13:04:31 »
Buenas tardes,necesitaria algun tipo de orientacion sobre este código que no puedo hacer que funcione como pretendo.
Cuando envió una A B o E,  funciona como espero pero si envió una F, realiza el parpadeo del
led una sola vez.
He puesto alguna bandera, guardar la variable valor en otra, pero no he podido hacer que
si llega una F, se quede en esa opción hasta que reciba otra letra.
Desde ya muchas gracias.
Ruben

aqui adjunto el código

#include <16F1826.h>
#device ADC=16
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(internal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
#use fast_io(b)

char valor;

#INT_RDA
void  RDA_isr(void)
{
valor=getchar();

}

void main()
{
   set_tris_b(0b00000010);
   setup_adc(ADC_OFF);
   setup_adc_ports(NO_ANALOGS);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   output_high(pin_b3);
   output_high(pin_b4);
   
   while(TRUE)
   {
         
         switch(valor)
         {
           
           case 'A':
                   
                    output_high(pin_b3);
                    break;
           case 'B':
                   
                    output_high(pin_b4);
                    break;   
           case 'E':
                   
                    output_low(pin_b3);
                    break;
           case 'F':
                     output_low(pin_b4);
                     delay_ms(100);
                     output_high(pin_b4);
                     delay_ms(100);
                     break;
                       
          }//switch
           
   }

}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:consulta sobre usart
« Respuesta #1 en: 19 de Mayo de 2018, 13:19:49 »
Seguramente se esta enviando algo mas aparte de la A,B,E o F...

Lo notas en la F que es el unico que cambia. Pero en los demas no, porque el entrar 1 ves o muchas veces no hay diferencia. Seguramente este enviando un salto de linea o algo asi..
Si queres podes probar este codigo:


Código: C
  1. #INT_RDA
  2. void  RDA_isr(void)
  3. {
  4.   valor=getchar();
  5.   switch(valor)
  6.   {
  7.     case 'A':
  8.       prueba = 0;
  9.       break;
  10.     case 'B':
  11.       prueba = 1;
  12.       break;
  13.     case 'E':
  14.       prueba = 2;
  15.       break;
  16.     case 'F':
  17.       prueba = 3;
  18.       break;
  19.     default:
  20.       break;
  21.   }
  22. }
  23.  
  24. void main()
  25. {
  26.    set_tris_b(0b00000010);
  27.    setup_adc(ADC_OFF);
  28.    setup_adc_ports(NO_ANALOGS);
  29.    enable_interrupts(INT_RDA);
  30.    enable_interrupts(GLOBAL);
  31.    output_high(pin_b3);
  32.    output_high(pin_b4);
  33.    
  34.    while(TRUE)
  35.    {
  36.          
  37.          switch(prueba)
  38.          {
  39.            
  40.            case 0:
  41.                    
  42.                     output_high(pin_b3);
  43.                     break;
  44.            case 1:
  45.                    
  46.                     output_high(pin_b4);
  47.                     break;  
  48.            case 2:
  49.                    
  50.                     output_low(pin_b3);
  51.                     break;
  52.            case 3:
  53.                      output_low(pin_b4);
  54.                      delay_ms(100);
  55.                      output_high(pin_b4);
  56.                      delay_ms(100);
  57.                      break;
  58.                        
  59.           }//switch
  60.            
  61.    }
  62.  
  63. }

La diferencia es que "valor" ahora va a tener lo ultimo que recibio. Pero... esta ves cuadno llegue una letra va a darle un valor a "prueba", Si recibe cualquier otra cosa, prueba va a seguir teniendo el mismo numero, entonces deberia funciona como vos queres.


Desconectado Masterchoi

  • PIC10
  • *
  • Mensajes: 6
Re:consulta sobre usart
« Respuesta #2 en: 19 de Mayo de 2018, 13:30:39 »
Muchas gracias KILLERJC, efectivamente funciona como espero.
 ((:-))


 

anything