Página 1 de 1

Usar bits para ligar saídas

MensagemEnviado: 25 Set 2012 12:29
por daniel.sloczynski
Bom dia.

Venho pedir ajuda aos colegas do fórum.

Estou desenvolvendo um algoritmo em C para um dispositivo, para que cada vez que eu mande um valor em decimal através da porta serial, ele acione determinada saída:

EX:

Saída 1: 1
Saída 2: 2
Saída 3: 4
Saída 4: 8
Saída 5: 16
Saída 6: 32
Saída 7: 64
Saída 8: 128
Saída 9: 256
Saída 10: 512
Saída 11: 1024
Saída 12: 2048

Como posso usar apenas uma word (definições do protocolo de comunicação) para especificar quantas saídas serão ligadas, pensei em fazer assim, com os bits.

Pra ligar uma saída é simples, só mandar o valor e deu.

Mas como faço, em algoritmo para l dispositivo que recebe a mensagem entender que 7 seria 111, ou seja, saída 1, 2 e 3 ligadas?

Deve haver uma maneira de fazer isso sem usar if (até então só isso que passou pela minha cabeça) comparando cada valor para ver qual saídas devem ser ligadas.

Espero pela dicas/ajudas de vocês.

MensagemEnviado: 25 Set 2012 13:18
por barboza
como você mesmo disse, "só mandar o valor".

O valor 7 será a saída 1, 2 e 3 e assim por diante.

Não complique o fácil!!!

MensagemEnviado: 25 Set 2012 13:22
por daniel.sloczynski
Sim, mandar o valor é isso mesmo.

Mas minha dúvida está na hora de tratar esse número no dispositivo que recebe ele.

No caso, 7, seria a entrada 1, 2 e 3...
Se fosse 9, entrada 1 e 4...

Pensei em usar if, mas não dá pq daria muitas combinações com 16 bits.

MensagemEnviado: 25 Set 2012 14:49
por barboza
Se suas saídas estão mapeadas a uma porta PORTB por exemplo, aoa escrever o valor recebido (7) na porta, os bits 1, 2 e 3 serão configurados.

É direto. escreve na porta o que receber.

MensagemEnviado: 25 Set 2012 15:25
por barboza
Se suas saídas estão mapeadas a uma porta PORTB por exemplo, aoa escrever o valor recebido (7) na porta, os bits 1, 2 e 3 serão configurados.

É direto. escreve na porta o que receber.

MensagemEnviado: 26 Set 2012 07:57
por andre_luis
Isso aqui é padrão na programação em C :

Código: Selecionar todos
PORTx |=    valor   ; // usado para setar os bits
PORTx &= ~valor  ; // usado para resetar o bits



+++

MensagemEnviado: 26 Set 2012 08:17
por ze
confesso que não entendi tua dúvida visto que ela é autorespondível. Ela seria razoável se voce quisesse acionar bits de ports diferentes-disponíveis com o mesmo word. Aí é só fazer:
void espalhabits(unsigned int d)
{
RA0=d>>0;//!
RB0=d>>1;
RC0=d>>2;
RD0=d>>3;
RA1=d>>4;
RB1=d>>5;
RC1=d>>6;
RD1=d>>7;
RA2=d>>8;
RB2=d>>9;
RC2=d>>10;
RD2=d>>11;
}

MensagemEnviado: 26 Set 2012 15:32
por daniel.sloczynski
Sim, é em PORTs diferentes.

Pois é, fiz isso que o Lellis mencionou acima.


Funcionou direitinho.


Obrigado pela ajuda pessoal.