Ir ao conteúdo
  • Cadastre-se

Fermota

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Pessoal Bom dia ! Estou trabalhando com o PIC 18F452, e estabeleci uma comunicação serial com o mesmo, preciso encarecidamente de uma ajuda. Fiz a seguinte rotina: void main() { unsigned short int var; TRISD = 0; TRISB = 0; PORTB = 0; Usart_Init(9600); lcd_config(&PORTD,1,3,2,7,6,5,4); lcd_cmd(lcd_clear); lcd_cmd(lcd_cursor_off); delay_ms(10); do { if(Usart_Data_Ready()) //Verifica se algum byte, caractere, chegou no buffer serial { var = Usart_Read(); // Lê o byte, caractere, do buffer e salva na variável "var" } switch(var) { case 'A': lcd_cmd (lcd_clear); lcd_out (1, 1, "Abrindo"); lcd_out (2, 1, "Portao"); PORTB.F0 = 1; delay_ms(6000); lcd_cmd (lcd_clear); lcd_out (1, 1, "Portao Aberto"); PORTB.F0 = 0; break; var = 0; case 'B': lcd_cmd (lcd_clear); lcd_out (1, 1, "Fechando"); lcd_out (2, 1, "Portao"); PORTB.F1 = 1; delay_ms(6000); lcd_cmd (lcd_clear); lcd_out (1, 1, "Portao Fechado"); PORTB.F1 = 0; break; var = 0; case 'C': lcd_cmd (lcd_clear); lcd_out (1, 1, "Porta"); lcd_out (2, 1, "Destravada"); PORTB.F2 = 1; delay_ms(2000); PORTB.F2 = 0; break; var = 0; case 'D': lcd_cmd (lcd_clear); lcd_out (1, 1, "Aciona"); lcd_out (2, 1, "Rele"); PORTB.F3 = 1; break; var = 0; } } while(1); } Funciona da seguinte forma: Quando eu envio o caracter "A" ele executa a rotina acima e volta para o programa inicial. Usart_Data_Ready() - Esse comando fica fazendo uma varredura no buffer do PIC, para verificar se tem ou não bytes lá Se sim... Usart_Read() - esse outro comando faz a leitura e associa uma variável a esse byte, por exemplo var = Usart_Read(); Certo, agora vamos ao caso real. Envio pela serial o caracter "A" o Usart_Data_Ready() identificar, o var = Usart_Read(); associa o "A" á variável var, na sequência ele executa a rotina acima. Quando a rotina for finalizada, ele volta para o programa inicial, agora que vem o meu problema: Quando eu envio outro caracter, por exemplo "B" pela serial, dá erro na minha rotina, porque o caracter "A" ainda está no buffer do PIC, ou seja, ele não foi deletado ou excluído, desta forma a minha rotina não vai entender que terá que executar o caracter "B" invés do "A". Alguém poderia me ajudar me dizendo como eu faço para zerar/limpar o buffer do PIC logo após a execução dessa rotina? Tipo, mando o caracter "A", executa a rotina, e quando ele voltar para o programa inicial, o caracter "A" não estará mai lá no buffer, sendo assim, poderei enviar outro e assim sucessivamente. Obrigado à todos Abs

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!