Como entender este AND!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Como entender este AND!!

Mensagempor antonio » 25 Mar 2012 05:44

Pessoal tudo bem !!

Quero fazer uns testes com o Ds1307 para isso estou a estudar a driver do mesmo que vem com o CCS mas tenho uma duvida, não estou a entender bem o seguinte AND pintado a vermelho!
sec = bcd2bin(i2c_read() & 0x7f);
min = bcd2bin(i2c_read() & 0x7f);
hr = bcd2bin(i2c_read(0) & 0x3f);

Jà dei uma olhada no datasheet e não consigo entender porque è ao ler o DS1307 faz aquele AND?

Caso algem poder ajudar agradeço
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Re: Como entender este AND!!

Mensagempor andre_luis » 25 Mar 2012 08:00

No caso dos segundos / minutos, o filtro é desnecessário, chegando a ser redundante, uma vez que a magnitude do valor lido não chega á preencher o 8o bit. Suponho que a razão seja meramente segurança, para o caso de algum erro de leitura.

Idem para o caso das horas.


+++
"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 jorgeluiz » 26 Mar 2012 01:30

deve ser isso que andre falou, para mascarar o resultado. Lembre-se que AND, os valores em 0 forçam o resultado para 0 tambem.
Avatar do usuário
jorgeluiz
Byte
 
Mensagens: 448
Registrado em: 26 Mar 2007 02:26

Re: Como entender este AND!!

Mensagempor Rodrigo_P_A » 26 Mar 2012 09:57

antonio escreveu:Pessoal tudo bem !!

Quero fazer uns testes com o Ds1307 para isso estou a estudar a driver do mesmo que vem com o CCS mas tenho uma duvida, não estou a entender bem o seguinte AND pintado a vermelho!
sec = bcd2bin(i2c_read() & 0x7f);
min = bcd2bin(i2c_read() & 0x7f);
hr = bcd2bin(i2c_read(0) & 0x3f);

Jà dei uma olhada no datasheet e não consigo entender porque è ao ler o DS1307 faz aquele AND?

Caso algem poder ajudar agradeço


para você entender faça na mão o cálculo

0x7F = 0111 1111

vamos supor que o seu i2c_read() retorne o valor 0xCF

0x7F = 0111 1111
0xCF = 1100 1111

fazendo and = 0100 1111

entendeu?

Geralmente esta técnica de usar AND é usada para limitar valores como o André falou.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor antonio » 27 Mar 2012 11:23

Grato Pessoal!
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Mensagempor marcelo campos » 27 Mar 2012 23:20

antonio escreveu:Grato Pessoal!


Na verdade o bit 7 (que está sendo zerado com o AND feito) do registrador 0 é o CH de "Clock Halt" ou parada de clock, então se você ler ele e o clock estiver parado (estado inicial no power up) resultará que lerá como setado !!
vale lembrar que durante seu programa você também pode escrever neste bit assim como no horário, e parar / habilitar o clock

como é do reg 0 (segundos) nos outros não preicsa fazer isto

abraço

marcelo
marcelo campos
Word
 
Mensagens: 648
Registrado em: 08 Ago 2009 08:37


Voltar para PIC

Quem está online

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

x