Para quem manja de microcontroladores PIC e/ou linguagem C

Novidades, reclamações e ajuda aqui!!!
Post Reply
09_Bruno

Para quem manja de microcontroladores PIC e/ou linguagem C

Post by 09_Bruno »

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!
NiltonAC

Re: Para quem manja de microcontroladores PIC e/ou linguagem

Post by NiltonAC »

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!
S!
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
09_Bruno

Post by 09_Bruno »

S!

Eu tenho esse livro :D

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... :roll:

Valeu pela dica.

SP! :
NiltonAC

Post by NiltonAC »

09_Bruno wrote:S!

Eu tenho esse livro :D

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... :roll:

Valeu pela dica.

SP! :
Se tem o Hyperterminal instalado no PC? Com ele é possivel ver o que está sendo recebido na porta serial.

[],s

Nilton
09_Bruno

Post by 09_Bruno »

Estou utilizando o 232Analyzer ou o siow do CCS.

Acredito que esse Hyperterminal seja parecido, não?
NiltonAC

Post by NiltonAC »

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);
}
09_Bruno

Post by 09_Bruno »

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!
Post Reply