Usar bits para ligar saídas

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Usar bits para ligar saídas

Mensagempor daniel.sloczynski » 25 Set 2012 12:29

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.
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13

Mensagempor barboza » 25 Set 2012 13:18

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!!!
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor daniel.sloczynski » 25 Set 2012 13:22

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.
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13

Mensagempor barboza » 25 Set 2012 14:49

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.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor barboza » 25 Set 2012 15:25

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.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor andre_luis » 26 Set 2012 07:57

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



+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor ze » 26 Set 2012 08:17

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;
}
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor daniel.sloczynski » 26 Set 2012 15:32

Sim, é em PORTs diferentes.

Pois é, fiz isso que o Lellis mencionou acima.


Funcionou direitinho.


Obrigado pela ajuda pessoal.
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13


Voltar para PIC

Quem está online

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

x