Como eu interpreto isto???

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Como eu interpreto isto???

Mensagempor KILB » 03 Mai 2007 20:14

data - =(!(data & 0x01) & (data & 0x02)) <<2

Esta função pertence a um exemplo contido no compilador CCS que é o EXPIO, ou seja, é uma expanção de entradas e saidas.
Já consegui entender praticamente todo o programa somente a linha que mostrei acima não ta tendo muito jeito de entender não!!!


Se alguem puder me esclarecer ficarei muito grato!!!



Valeu


KILB() :(
VENDO BRASILIA 78 - AZUL CALCINHA - RODA GAIUCHA, PNEU TALA LARGA E TOCA FITA RODSTAR, TRATAR NO BUTECO
KILB
Byte
 
Mensagens: 103
Registrado em: 17 Fev 2007 21:52

Mensagempor tcpipchip » 03 Mai 2007 21:10

data - =(!(data & 0x01) & (data & 0x02)) <<2

"C" "A" "B"

"A"= ISOLA O BIT 0 DE DATA, FORÇANDO DEMAIS BITS A 0
NEGA "A"

"B"=ISOLA O BIT 1 DE DATA, FORÇANDO DEMAIS BITS A 0

"C" = FAZ UM AND ENTRE "A" E "B"

"C" = "C" * 4

DATA = DATA - C

tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor andre_luis » 04 Mai 2007 08:55

Apenas um palpite :

Parece ser um gerador de padroes aleatórios, pois realmente a sequencia não faz muito sentido.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor KILB » 04 Mai 2007 11:14

Grandes meninos,



Muito obrigado pela atenção, e agora eu vou dar uma estudada no código juntamente com o que vcs expuseram.


Valeu, brigadão


KILB() :D
VENDO BRASILIA 78 - AZUL CALCINHA - RODA GAIUCHA, PNEU TALA LARGA E TOCA FITA RODSTAR, TRATAR NO BUTECO
KILB
Byte
 
Mensagens: 103
Registrado em: 17 Fev 2007 21:52

Mensagempor zielpunkt » 05 Mai 2007 11:00

Kilb, a tua linha de código está errada. falta a negação do segundo termo. O certo é:
Código: Selecionar todos
void main() {
   BYTE data;
   do {
      read_expanded_inputs (&data);

      data |= 0xF8;                           //Force the unused input bits on
      data -= (!(data&0x01)&!(data&0x02))<<2; //Turn on bit 2 it both inputs are
                                              //toggled
      write_expanded_outputs (&data);
   } while (TRUE);

Com o codigo completo fica + simples de interpretar, ok. Para dar lógica a quem está observando, não esqueça que se trata de um exemplo para leitura de dois botões, atuando sobre tres leds e algumas situações, etc.:

"When button 1 is pushed, LED 1 will toggle green. Button 2 will toggle LED 2. However, when both buttons are pushed, LED 3 will toggle green."


É isso.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor KILB » 05 Mai 2007 20:15

Kilb, a tua linha de código está errada. falta a negação do segundo termo

zielpunkt,

É que é o seguinte, eu realmente retirei a negação tentando faze-lo funcionar do jeito que eu queria, que é quando vc ativar uma entrada a respectiva saida seja ativada, e digamos que na sorte achei o ponto G da coisa, mas ai é que vem a pergunta, porque?Como esta linha funciona funciona?Tirei a negação e funcionou!!!



Valeu


KILB :oops: :x :?: :?: :?:
VENDO BRASILIA 78 - AZUL CALCINHA - RODA GAIUCHA, PNEU TALA LARGA E TOCA FITA RODSTAR, TRATAR NO BUTECO
KILB
Byte
 
Mensagens: 103
Registrado em: 17 Fev 2007 21:52


Voltar para PIC

Quem está online

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

x