Printf %

Programação C em geral

Moderadores: 51, guest2003

Printf %

Mensagempor alessandro » 20 Fev 2007 13:08

Estou utilizando o C18 da microchip e depois de ter alguns problemas agora minha comuncação esta funcionando, mas com um problema.

Quando envio algo em uma variável inteira printf(" %u",variavel) ele mostra até 255.

Mas quando coloco outra variável maior que 8bits aparece um numero totalmente maluco. E o pior é que mesmo carregando a variável com 0, no hyerterminal aparece 236???????

Já tentei trocar o tipo de variável no prinf por %4lu, mas nada.

Alguém tem ideia do que pode estar havendo.



Alessandro
Editado pela última vez por alessandro em 20 Fev 2007 14:17, em um total de 1 vez.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor CCandido » 20 Fev 2007 14:09

printf(" %u",variavel) na serial ou em um LCD?
um inteiro=16bits certo
entao caso queira mandar via serial tem que ser em 2x,
printf(" %u",(uchar)variavel)
printf(" %u",(variavel>>8))
ou fazer uma funçao para resolver isto.
t+
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Mensagempor alessandro » 20 Fev 2007 14:22

Desculpe CCandido não entendi a função:

printf(" %u",(uchar)variavel)
printf(" %u",(variavel>>)

Um valor não sobrepoe o outro? E a função do rotacionamento neste caso.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor CCandido » 20 Fev 2007 14:52

eu quis dezer pra vc enviar o inteiro em 2 partes=2 bytes
varialvel=0x1234
printf(" %u",(uchar)variavel); aqui byte_L ,34
printf(" %u",(variavel>>8); aqui byte_H, 12

uchar = unsigned char
agora no PIC nem sei se um inteiro é 16bits,tem que ver isto tambem.
t+
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Mensagempor alessandro » 20 Fev 2007 17:55

Fiz da seguinte maneira:

Aproveitei que o registrador que fornece o valor esta dividido em dois valores de 8bits (apesar que um deles é usado somente 2 bits)

Salvei cada um deles em uma variavel VALORH e VALORL

E imprimi usando sua ideia:

printf(" %u", VALORH<<8|VALORL);

Agora preciso na realidade utilizar esse valor para fazer calculos e o resultado separa-los dessa forma.

Mas o importante é saber e entender o que estava havendo.

Grato,




Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor alessandro » 20 Fev 2007 20:27

Só que agora aparece outro problema.

Não estou conseguindo pegar uma variável e desmembra-la em duas partes.

Em CCS um inteiro se não me engano era uma variável de 8bits, mas em C18 estou adaptando ainda, por isso tendo esses problemas.

Já vi que swap e rotate_left ou rotate_right não funcionam, só o ">>" ou "<<".

Mas acho que em C18 int é de 16bits.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor alessandro » 24 Fev 2007 23:54

Pessoal já esta resolvido.

Fiquei dias para descobrir que não posso rotacionar o resultado de uma variavel de 16bits se uma das constantes for de 8 bits. Primeiro salva-se o valor de 8bits na variával de 16 bits para posteriormente rotaciona-la.

Acho que fazia direto sem ter que fazer isso em CCS, mas ta valendo.



Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x