Alterar apenas um bit de um byte, como?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor Djalma Toledo Rodrigues » 20 Jan 2010 14:33

lellis escreveu: ... o macete é usar union (pesquise isso) que faz variáveis diferentes ocuparem o mesmo espaço na mem mas com um certo respeito entre elas....

Respeito a próxima . Essa nem Fabim <---> :D

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor RobL » 20 Jan 2010 14:56

Não ví se você definiu uma variável com 32bits. Não ví o início do post.
Tá cheio de meios de fazer, já apresentado. Para entender como mudar um só bit definindo uma variável de 32 bits tem que operar com um número com 32 bits.
Código: Selecionar todos
uint32_t  numero ; // defini uma variável com 32 bits
numero = 0xFFFFFFFF ; // tá tudo com 1
numero = numero & ~0xFFFFFFFE ; // ou numero &= ~ 0xFF FF FF FE
// zerou somente o bit zero.
numero = numero | 0xFFFFFFFF ;  // ligou somente o bit zero

Se dominar ponteiros :
uint8_t *ponteiro ; //ponteiro para um byte
ponteiro = (uint8_t *) &numero ; // o ponteiro aponta para o byte inicial da sua variável de 32 bits, ou seja o byte de mais baixa ordem.
Para apontar para o segundo byte:
ponteiro++ ; // andando byte por byte (são 4 bytes)
Pega o byte faz um or ou and com 8bits e devolve ao byte da sua variável com 32 bits.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor fabim » 20 Jan 2010 15:18

rapaiz, to me borrando de rir disso aqui, adoro ver essas coisas,,,hehehehehehe
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor RobL » 20 Jan 2010 15:31

Pois é, imagina o cara mudar o bit n com um número de 32 bits !!! Só com calculadora :lol:
Mas espero que o neto_e_khelen tenha entendido, com o exemplo com 32 bits, o porque das sugestões com ponteiros, union etc e se quizer é só operar com um número 0xFA3DC5AB para ligar e desligar bits!!!
Editado pela última vez por RobL em 20 Jan 2010 15:33, em um total de 1 vez.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor jvanderleym » 20 Jan 2010 15:33

Boa tarde.
No mikroC realizou esta função da seguinte maneira

unsigned short dados;
dados.f0 = 0;
dados.f1 = 1;
dados.f2 = 0;
dados.f3 = 0;
dados.f4 = 1;
dados.f5 = 1;
dados.f6 = 0;
dados.f7 = 1;

Através do " .f0 até .f7 " consigo atribuir individualmente o valos do bit que quiser no byte em questão da variavel, no exemplo acima variavel " dados ". Espero que tenha ajudado.
jvanderleym
Bit
 
Mensagens: 43
Registrado em: 15 Mai 2007 20:51

Mensagempor ze » 20 Jan 2010 16:14

Fabin se risadinhas idiotas virtuais ajudassem o garoto a esta altura ele seria um gênio.
Vou tentar ajudar:
heheheheheheheheheheh hehehehe heheheh ehehehe eheheheehhe eheheheeh eheheeheheh ehehehehehehe ehehehehe ehehehe prrrrrr...peidei....heheh eh ehe he eh hehe pra descontrair 1 pouco. Tô estressado hoje.Pelo menos a gente se diverte um pouco nesta selva. rs (rs é menos agressivo mas + gay)

Jvanderleym a dica é boa, mas (sempre tem um mas) esta é uma das cagadinhas do mikroc que não deixa o cod portável pra os outros compiladores. Desta maneira vai ter que casar com ele. Mas o importante: FUNCIONA.

abç

Carái.. vai cair um toró aqui!! Tô com meda!! A tal de pega peão. Bem na hora de sair. táquipariu viu...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor fabim » 20 Jan 2010 16:17

lindissimo lellis lindo, ...
Meu risonho sorriso é da confusão, e da paciencia do pessoal, pra tentar fazer o amigo, que pelo jeito até desistiu do tópico, a entender que o problema é tão simples, mais tão simples, que até freud explica.

ele que não esta sabendo muito bem o que esta fazendo, e sim to cagando de rir, não só virtualmente, mais banheiramente , e peidamente!!! hahahahahahah

cara do céu, isso ta ficando muito divertido urtimamente.. hehehe
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor neto_e_khelen » 20 Jan 2010 22:26

Eu desisto!!! Infelizmente não consegui :oops: ALTERAR UM BIT DE UMA VARIAVEL SEM MECHER NOS RESTANTES DOS BITS..... :oops:
Moderador, pode trancar o tópico. Obrigado a todos.
neto_e_khelen
Bit
 
Mensagens: 33
Registrado em: 22 Jul 2009 19:01

Mensagempor fabim » 21 Jan 2010 07:17

neto antes de mais nada, eu tenho que dizer algo.
Pelo amor de Deus responda quando alguem perguntar.

1° - você esta mandando 4 bytes para os shit´s ?
2° - estes bytes estão indo sempre na mesma posição ? sequencia?
3° - bocê viu as macros que eu mandei para você ver o link, observou que no seu caso não precisa usar uma long. e sim 4 bytes apenas ? lembrando apenas de os enviar sempre na mesma sequencia.
4°- você observou que o shigt, tem um pino de strob,? Imagina que o LATCH de saida ja esta carregado, você pode mandar qualquer dado que quiser, estes pinos se mantem inauterados, até que o pino latch, de um pulso, isso faz com que o latch de saida seja atualizado, pelo novo dado que esta no buffer binario.

Bom, veja que o seu problema esta aí encima em algum lugar, e esta muito muito simples pra resolver, e tu não esta focando como sanar o problema.

Abra o datasheet do shift e olhe a carta de tempo dos comandos, ou faça a simulação no proteus, vai ver que fica perfeito!!!

Abraços
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Djalma Toledo Rodrigues » 21 Jan 2010 10:06

Outra Fabim seria ele simplificar

testar antes com apenas um Byte e um Shift

Abraxi Fabim

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor neto_e_khelen » 21 Jan 2010 14:27

1° - você esta mandando 4 bytes para os shit´s ?
2° - estes bytes estão indo sempre na mesma posição ? sequencia?
3° - bocê viu as macros que eu mandei para você ver o link, observou que no seu caso não precisa usar uma long. e sim 4 bytes apenas ? lembrando apenas de os enviar sempre na mesma sequencia.
4°- você observou que o shigt, tem um pino de strob,? Imagina que o LATCH de saida ja esta carregado, você pode mandar qualquer dado que quiser, estes pinos se mantem inauterados, até que o pino latch, de um pulso, isso faz com que o latch de saida seja atualizado, pelo novo dado que esta no buffer binario.

Bom, veja que o seu problema esta aí encima em algum lugar, e esta muito muito simples pra resolver, e tu não esta focando como sanar o problema.

Abra o datasheet do shift e olhe a carta de tempo dos comandos, ou faça a simulação no proteus, vai ver que fica perfeito!!!

Respostas:
1 - 1° - você esta mandando 4 bytes para os shit´s ?
R.: Pra facilitar meu entendimento, mudei meu hardware e estou usando apenas 1 shift register e enviando uma variável com
1 byte de tamanho. Estou usando a biblioteca <74595.c> do ccs para enviar o byte para o shift. E para alterar os bits estou usando
os comandos: bit_set(variavel, bit) e bit_clear(variavel,bit) os quais alteram mas também mudam os outros bits que não quero mudar.
Anexo o link da biblioteca:
74595.C
Anexo o link do meu hardware montado no Proteus juntamente com o código em CCS.:
Código e simulação.zip
Anexo do programa que usei pra criar portas seriais virtuais para que eu possa simular a comunicação entre o pic e o HiperTerminar do WIndows.:
Eltima Software Virtual Serial Port Driver v6.0.1.115 Cracked-Invisible.rar
2 - Como dito na primeira resposta, estou tentando só com um byte.

3 - Vi sim o link, tentei usar a makro, mas como eu disse em outro post, também não funcionou.

4 - Vi sim, como estou usando a biblioteca pronta que já vem no ccs ela já se encarrega de enviar pra mim, bastando eu apenas
mostrar qual variável enviar. Ex.:
write_expanded_outputs(&saidas);
neto_e_khelen
Bit
 
Mensagens: 33
Registrado em: 22 Jul 2009 19:01

Mensagempor ze » 21 Jan 2010 15:11

Jovem amiguinho, confesso que isto me deixa profundamente frustrado. E desistindo assim por algo tão simples a derrota não é só sua. É de todos nós que tentamos quase desesperadamente te ajudar. Taí o ex. do fabin que agora parou de rir e está prestes a chorar e não quer desistir de ti. Se é ele gay ou não, não importa. Ele foi com a tua cara. Aproveita mas não abusa.

Um micro conselho: que esta tua força de vontade não grasse pra outros aspectos mais importantes desta “errante” existência. Continue errando (nos dois sentidos) mas continue tentando.
+1: sugiro que dê marcha ré e tente [re]aprender eletronica digital básica. Pode até pular a parte de ANDS, OR, NOT e foque em Flip flops, contadores, SHIFT REGS, etc e tudo se tornará + claro. No mínimo veja o datasheet do ci lógico que usas.

sobre libs prontas ccs: não posso comentar sem me irritar. desculpe.

Dúvidas novas, tópico novo pois já tô com saco cheio deste. E a cada post novo sou OBRIGADO a ver pois faço isso em todos que participei

abç & sucessos.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor neto_e_khelen » 21 Jan 2010 19:40

Fabim, deu uma olhada no meu software e hardware????
neto_e_khelen
Bit
 
Mensagens: 33
Registrado em: 22 Jul 2009 19:01

Mensagempor fabim » 22 Jan 2010 07:55

neto_e_khelen escreveu:Fabim, deu uma olhada no meu software e hardware????


tentei, mais o tempo passa, e ele simplesmente volta pro começo quando eu clico nos links de download. :(

Faz favor, fioti, fico furioso.. Ficar fazendo download.....

Manda no meu e1/2..
fabioriksilva@hotmail.com..

E não mande source for CCS, it´s virouzes!!.. meu firewall vai barrar.

Povim teimoso, tão cansados de ver só CCS dar pau, e mesmo assim continuam insistindo com essa bosta.

Abraços
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Djalma Toledo Rodrigues » 22 Jan 2010 11:28

lellis escreveu:Taí o ex. do fabin que agora parou de rir e está prestes a chorar .

:D :D :D

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

AnteriorPróximo

Voltar para PIC

Quem está online

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

x