Ir ao conteúdo

Posts recomendados

Postado

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.

  • Membro VIP
Postado

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

  • Membro VIP
Postado

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ç

Postado
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?

  • Membro VIP
Postado

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
  • 11 meses depois...
Postado

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

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