S!
Pessoal estou com uma dúvida que acredito que seja simples para quem tem mais experiência em microcontroladores ou linguagem C.
Preciso enviar para o computador pela serial mensagens no formato hexadecimal.
Utilizando a USART do PIC16F877A consigo enviar mensagens em código ASCII utilizando o comando printf() ou putc(). Ou seja, se eu usar prinft("Testando") ou um putc() em loop o microcontrolador envia a mensagem em ASCII.
Como faço para enviar por exemplo em hexadecimal o frame: 01h 06h 13h 8Ch 0Bh B8h 4Bh E7h?
SP!
Para quem manja de microcontroladores PIC e/ou linguagem C
Re: Para quem manja de microcontroladores PIC e/ou linguagem
S!09_Bruno wrote:S!
Pessoal estou com uma dúvida que acredito que seja simples para quem tem mais experiência em microcontroladores ou linguagem C.
Preciso enviar para o computador pela serial mensagens no formato hexadecimal.
Utilizando a USART do PIC16F877A consigo enviar mensagens em código ASCII utilizando o comando printf() ou putc(). Ou seja, se eu usar prinft("Testando") ou um putc() em loop o microcontrolador envia a mensagem em ASCII.
Como faço para enviar por exemplo em hexadecimal o frame: 01h 06h 13h 8Ch 0Bh B8h 4Bh E7h?
SP!
Rapaz, o tempo é phoda, a 4 anos que eu não mexo c/ o PIC, vamos ver se consigo te ajudar:
Para escrever em hexadecimal na saída serial, utilize o comando printf(), mas você irá ter que utilizar o código de formatação %x ou %Lx para palavras longas (16 bits), ex:
declarando as variáveis:
valor = int
Programa:
void teste()
{
valor=01h;
printf("%x,valor)
}
Acho que é isso, mas como disse, foi a long time ago, in a galaxy far, far away...
Um excelente livro de PIC em liguagem C é o "PIC programação em C" autor "Fábio Pereira", editorá "Érica". O que eu aprendi de programação de PIC em C (se é que eu aprendi algo...) foi com este livro.
[],s
Ronin
Se tem o Hyperterminal instalado no PC? Com ele é possivel ver o que está sendo recebido na porta serial.09_Bruno wrote:S!
Eu tenho esse livro![]()
O formato em hexa é %Lx mesmo, eu já tentei dessa forma mas não consegui, não descobri ainda onde estou errando. Vou fazer mais alguns testes.
Agora é que aquelas aulas no boteco da esquina da faculdade fazem falta...![]()
Valeu pela dica.
SP! :
[],s
Nilton
Acredito que sim, ele fica lendo continuamente o que esta entrando na porta serial do PC.
Ainda em relação aos códigos de formatação, tentou colocar %LX com letras maiúsculas? abaixo segue uma fração do código que já usei em um projeto, eu transmitia um valor em hexa p/ a porta serial de um PC:
main()
{
byte endereco, controle, tecla;
long int valor;
do
{
do
{
printf("\r\nLeitura ou Escrita: ");
tecla = toupper(getc());
putc(tecla);
} while ( (tecla!='L') && (tecla!='E') );
printf("\n\rEndereco: ");
endereco = gethex();
//printf("\n\rControle: ");
//controle = gethex();
if(tecla=='L') printf("\r\nValor: %LX\r\n",le_dac( endereco ));
if(tecla=='E')
{
printf("\n\rControle: ");
controle = gethex();
printf("\r\nNovo valor: ");
valor = gethex();
valor = ( valor<<8 )+gethex();
printf("\n\r");
escreve_dac( endereco, controle, valor );
}
} while (TRUE);
}
Ainda em relação aos códigos de formatação, tentou colocar %LX com letras maiúsculas? abaixo segue uma fração do código que já usei em um projeto, eu transmitia um valor em hexa p/ a porta serial de um PC:
main()
{
byte endereco, controle, tecla;
long int valor;
do
{
do
{
printf("\r\nLeitura ou Escrita: ");
tecla = toupper(getc());
putc(tecla);
} while ( (tecla!='L') && (tecla!='E') );
printf("\n\rEndereco: ");
endereco = gethex();
//printf("\n\rControle: ");
//controle = gethex();
if(tecla=='L') printf("\r\nValor: %LX\r\n",le_dac( endereco ));
if(tecla=='E')
{
printf("\n\rControle: ");
controle = gethex();
printf("\r\nNovo valor: ");
valor = gethex();
valor = ( valor<<8 )+gethex();
printf("\n\r");
escreve_dac( endereco, controle, valor );
}
} while (TRUE);
}
S!
Descobri o problema:
Usando o %X no comando printf ele 'imprime' a variável decimal como hexa mas ao enviar ele envia como ascii...
O que eu consegui fazer foi atribuir um valor em hexa mesmo para uma variável char e mandar pelo comando putc(). Talvez funcione com o printf() também mas não testei ainda.
SP!
Descobri o problema:
Usando o %X no comando printf ele 'imprime' a variável decimal como hexa mas ao enviar ele envia como ascii...
O que eu consegui fazer foi atribuir um valor em hexa mesmo para uma variável char e mandar pelo comando putc(). Talvez funcione com o printf() também mas não testei ainda.
SP!