Ir ao conteúdo
  • Cadastre-se

PIC Como ler estado de saida de um Port do Pic em CCS C Compiler?


Posts recomendados

Boa Tarde

Sou novato no mundo da programação em PIC, visto isso, tenho a seguinte dúvida: Como posso "ler" o estado de um Port configurado como saída? No caso, estou fazendo um programa que ao pressionar um push button coloque alguns bits da saída do Port A em nível lógico alto, como por exemplo, output_A (2), para mostrar esse número num Display de 7 Segmentos. Mas preciso "ler" quais bits estão em nível lógico alto para realizar uma comparação.

De qualquer forma agradeço quem puder ajudar.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Como ninguém da turma ccs respondeu, vejamos...

Eu não gosto do "modelo de negócio" do ccs e não o uso mas isso ndv. Num compilador de verdade você faria

TRISA=0; //saída
PORTA=0b01010101;

e leria diretamente

a=PORTA; //port todo
//ou
a_bit=RA5; //só um pino.

A alternativa do amigo @Eder Neumann é boa. Use uma variável espelho do port
 

espelho=0b01010101;
outport(espelho);
a=espelho; //byte todo
a_bit=espelho>>5; //só bit5

O que estiver no espelho, está no port. Mas k entre nós, vejo pouca utilidade prática pra isso: reler o que já está registrado no port. Queres ter certeza que o dado está correto, é isso? enfim...

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

6 horas atrás, Isadora Ferraz disse:

Como ninguém da turma ccs respondeu, vejamos...

Eu não gosto do "modelo de negócio" do ccs e não o uso mas isso ndv. Num compilador de verdade você faria


TRISA=0; //saída
PORTA=0b01010101;

e leria diretamente


a=PORTA; //port todo
//ou
a_bit=RA5; //só um pino.

A alternativa do amigo @Eder Neumann é boa. Use uma variável espelho do port
 


espelho=0b01010101;
outport(espelho);
a=espelho; //byte todo
a_bit=espelho>>5; //só bit5

O que estiver no espelho, está no port. Mas k entre nós, vejo pouca utilidade prática pra isso: reler o que já está registrado no port. Queres ter certeza que o dado está correto, é isso? enfim...

 

Entendi, na verdade meu programa seria o seguinte: Ao pressionar um push button irá aparecer no Display de 7 Segmentos um algarismo, por exemplo, nesse caso, preciso saber, se na saída do PORT_D, por exemplo, qual algarismo está a mostrar no display para depois realizar uma comparação com um outro estado lógico e se ambos forem verdadeiros aciona uma carga.

adicionado 4 minutos depois
6 horas atrás, Isadora Ferraz disse:

Como ninguém da turma ccs respondeu, vejamos...

Eu não gosto do "modelo de negócio" do ccs e não o uso mas isso ndv. Num compilador de verdade você faria


TRISA=0; //saída
PORTA=0b01010101;

e leria diretamente


a=PORTA; //port todo
//ou
a_bit=RA5; //só um pino.

A alternativa do amigo @Eder Neumann é boa. Use uma variável espelho do port
 


espelho=0b01010101;
outport(espelho);
a=espelho; //byte todo
a_bit=espelho>>5; //só bit5

O que estiver no espelho, está no port. Mas k entre nós, vejo pouca utilidade prática pra isso: reler o que já está registrado no port. Queres ter certeza que o dado está correto, é isso? enfim...

 

Essa alternativa "espelho", tens como ser modificada várias vezes ao invés de um byte ja programa como vez? Pois seria como se fosse uma contagem, ao incrementar um número o estado lógico do meu port muda.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok...

agora, The Gu disse:

qual algarismo está a mostrar no display para depois realizar uma comparação

Pra este caso não precisa ler o port. Leia o byte ou variável que indexa ou que controla o port, entendes?

 

Ah sim... não queime a etapa do pisca led ok?

abç

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, Isadora Ferraz disse:

ok...

Pra este caso não precisa ler o port. Leia o byte ou variável que indexa ou que controla o port, entendes?

 

Ah sim... não queime a etapa do pisca led ok?

abç

Hum entendi, então crio uma variável para realizar o armazenamento do estado lógico do port e a partir dela realizo a minha comparação? Seria isso?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Quase isso. Se seu port for ligado diretamente p.ex. num display, a que deve ser manipulada é a variável que 'indexa' o 'desenho' do display no port.

Se o que você colocar no port for o dado que efetivamente vai usar, aí sim...

17 horas atrás, The Gu disse:

uma variável para realizar o armazenamento do estado lógico do port e a partir dela realizo a minha comparação

...tdav

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 11 meses depois...

Como estamos em 2020 pode ser útil a mais alguem

Para  ver se está configurado como entrada ou saída use:

int16 value;

value = get_tris_B();

fprintf("PortB: %lu\n ...",value);

 

 

Você pode setar o tris assim

set_tris_b(0xffff);

set_tris_b(0b0000000); // seta para output

set_tris_b(0b11111111); // seta para input

set_tris_b(0b00000001); // seta para seta B0 input e as portas  B1 a B7  para output

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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