Ir ao conteúdo
  • Cadastre-se

jeferson555

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá pessoal a alguns meses resolvi montar um projeto que consiste em um módulo GPS recebendo informações e enviar para um PIC18f4520 trabalhar e apresentar em um display 16x2. Estou usando a linguagem C com o compilador Micro C Pro5.3 Tenho o hardware que é uma placa de desenvolvimento da microgenios, uma outra com um max232, um múdulo gps e alguns led para mostrar a transferência. Usando o Micro C fiz um código para esse projeto e não funcionou então abandonei ele e comprei uma apostila da CERNETEC que ensina no CCS e da um código que funcionando direitinho, mas eu não sei trabalhar no CCS e eu tinha em mente outras formas de fazer esse código, como: Usar a interrupção, colocar a função de um botão para poder alterar as informações mostradas no display(como mudar de latitude para hora, altitude, velocidade...). Tentei adaptar esse código no Micro c inicialmente usando só a interrupção. O Código tem que funcionar assim: Quero usar a interrupção da recepção serial e caso seja recebido a sequência "$GPRMC" começa a armazenar os proximos 60 caracteres em Buffer. Quando o buffer tiver cheio começa mostrar no display. obs.: Uma das sequencias que é recebida pelo pgs: $GPRMC,135220.000,A,2250.3411,S,04303.9833,W,1.07,56.62,220712,,,A*54 SEGUE ABAIXO O CÓDIGO QUE EU TENTEI ADAPTAR NO MICROC, MAS ELE TEM ALGUM ERRO. OBS.: eu usei a biblioteca do micro c de USART e LCD Desde já agradeço o tempo de todos /******************************************************************************* ************* inicialização das funções ************ *******************************************************************************/ /******************************************************************************* ************* declaração LCD ************ *******************************************************************************/ sbit LCD_RS at RE2_bit; sbit LCD_EN at RE1_bit; sbit LCD_D0 at RD0_bit; sbit LCD_D1 at RD1_bit; sbit LCD_D2 at RD2_bit; sbit LCD_D3 at RD3_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit; sbit LCD_RS_Direction at TRISE2_bit; sbit LCD_EN_Direction at TRISE1_bit; sbit LCD_D0_Direction at TRISD0_bit; sbit LCD_D1_Direction at TRISD1_bit; sbit LCD_D2_Direction at TRISD2_bit; sbit LCD_D3_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; /******************************************************************************* ************* Declaração variáveis ************ *******************************************************************************/ char dado; int controle=0; int controle1=0; int controle2=0; char vetor[70]; char indice=0; char buffer[70]; int nada; /******************************************************************************* ************* inicialização das funções ************/ void interrupt() { dado = RCREG; // recebe o dado if (controle1==1) { buffer[indice]=dado; indice++; if (indice==50) { controle1=0; controle2=1; } } if (controle==1) { buffer[indice]=dado; indice++; if (indice==5) { controle=0; if ((buffer[0]=='G') && (buffer[1]=='P') && (buffer[2]=='R') && (buffer[3]=='M') && (buffer[4]=='C')) { indice=0; controle1=1; } } } if (dado=='$') { controle=1; } PIR1.RCIF = 0; } /******************************************************************************* ************* Rotina de baixa prioridade de interrução ************ *******************************************************************************/ /******************************************************************************* ************* inicio do programa ************ *******************************************************************************/ void main() { /******************************************************************************* ************* INICIALIZAÇÂO DOS PORTES E INTERRUPÇÕES ************ *******************************************************************************/ INTCON.GIEH = 1; /*habilita a chave geral das interrupções e habilita o vetor de alta prioridade de interrupção*/ INTCON.GIEL = 1;//habilita o vetor de baixa prioridade de interrupção RCON.IPEN = 1; //define característica da família PIC18F com 2 level de prioridade de interrupção PIR1.RCIF = 0; // nome do byte.periferico(bit)+if=0; flag de sinalização do xxxx IPR1.RCIP = 1; // nome do byte.periferico(bit)+ip=1; configura auta prioridade(1) ou baixa(0) PIE1.RCIE = 1; // habilita Interrupção da recepção serial ADCON1 = 0x0f; // Configura todos os pinos A/D como I/O TRISB.RB3=1; // Define o pino RB0 do PORTB como entrada. TRISB.RB4=1; // Define o pino RB1 Do PORTB como entrada. TRISB.RB5=1; TRISE.RE1=0; // Define o pino RE1 do PORTE como saida. TRISE.RE2=0; // Define o pino RE2 Do PORTE como saida. TRISD = 0; // Define todos os pinos Do PORTD como saida. TRISC.RC7=1; TRISC.RC6=0; Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off UART1_Init(4800); // Initialize UART module at 9600 bps Delay_ms(100); // Wait for UART module to stabilize while(1) { if (controle2) { Lcd_Out(1, 1, vetor[1]); Lcd_Out(1, 2, vetor[2]); Lcd_Out(1, 3, ':'); Lcd_Out(1, 4, vetor[3]); Lcd_Out(1, 5, vetor[4]); Lcd_Out(1, 6, ':'); Lcd_Out(1, 7, vetor[5]); Lcd_Out(1, 8, vetor[6]); controle2=0; } } }

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!