Tabuada do 5 em C - CCS do livro do Fábio

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Tabuada do 5 em C - CCS do livro do Fábio

Mensagempor Lorin » 28 Fev 2007 19:28

Pessoal,

estou com uma dúvida no programa da página 112 do livro PIC - Programação em C do Fábio Pereira:

4) O programa seguinte imprime alguns valores na tela. Pressionando a tecla 5, quais são os valores impressos?


#include <16f877a.h>
#use delay(clock=4000000,restart_wdt)
#fuses xt,nowdt,put,nobrownout,nocpd,nolvp,nowrt,noprotect
#use rs232(baud=19200,parity=N,xmit=pin_c6,rcv=pin_c7)

main()
{
int x,y;
while ((y = (getc()-48)) > 0)
for (x = 0; x<=10; ++x) printf ("%u x %u = %u\r\n",y,x,x*y);
printf ("FIM");
}

O resultado no programa siow/CCS é o seguinte:

Imagem

Onde estou voando é nessa linha: while ((y = (getc()-48)) > 0)

A função getc() aguarda a chegada de um caractere pela porta serial padrão e retorna o seu valor.

Não estou entendendo as operações realizadas dentro dos parentesis, a ordem de precedência...como é que depois disso há o retorno do 5 e impressão da tabuada do mesmo pela printf?

obrigado!

Sdçs
Lorin
Bit
 
Mensagens: 31
Registrado em: 13 Out 2006 18:44

Mensagempor tcpipchip » 28 Fev 2007 21:40

48 é codigo ASCII de "0"
TCPICHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor ric_vas » 28 Fev 2007 21:41

A função getc() fica aguardando que você pressione um caractere. Quando você pressiona 5 a função getc() retorna a o valor ASCII para 5 (35 hexadecimal ou 53 decimal). Deste valor é subtraído 30 hexadecimal (48 decimal) o que resulta em 5. Como é maior que 0 é feito o loop de 0 a 10 gerando a tabela.

O loop while é reiniciado.

Ric
ric_vas
Nibble
 
Mensagens: 93
Registrado em: 11 Out 2006 22:22
Localização: RS

Mensagempor Lorin » 01 Mar 2007 11:21

Aaahh! agora clareou!

Obrigado tcpipchip e ric_vas pelas respostas!

Então eu posso dizer que a função getc() efetua a leitura de dados em ASCII (pois, a entrada de dados é pelo teclado do PC) mas as contas/operações dos parentesis internos são feitas em decimal/hexadecimal.

Blz!
Lorin
Bit
 
Mensagens: 31
Registrado em: 13 Out 2006 18:44


Voltar para PIC

Quem está online

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

x