Ola turma estou Começando a usar  Atmel Studio 6 para programação em para o microcontrolador Atmega8. Fiz um exemplo de liga e desliga a PORTD.


#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{ DDRC = 0xFF;
while(1)
{
PORTC = 0xFF;
_delay_ms(1000);
PORTC= 0x00;
_delay_ms(1000);
}
}

Gostaria de saber como faz para manipulação de um bit na PORTD sem altera os outros bits.

Muito Obrigado

Exibições: 385

As respostas para este tópico estão encerradas.

Respostas a este tópico

Utilize máscaras binárias...

Um resuminho de lógica binária:

AND: para "zerar" bits (forçar "0") em algumas posições, onde na mascara "0" é o que queres zerar (0&0=0 e 1&0=1) e "1" é o que queres manter (0&1=0 e 1&1=1) .Ex:

Valor  & Mascara =

001 010 & 110 110 = 000 010

111 100 & 110  011 = 110 000

OR: Forçar bits "1" em determinadas posições usando uma máscara onde "1" muda o valor  original e "0" o mantém (0|0=0 e 1|0=1) Ex:

Valor | máscara =

001 010 | 110 110 = 111 110

111 000 | 110  011 = 111 011

XOR:  Inverte os bits, usando a mascara onde "0" manter (0^0=0 1^0=1) e "1" inverte (0^1=1 e 1^1=0). Ex:

Valor  ^ Mascara =

001 010 ^ 110 111 = 110 101

111 000 ^ 110  011 = 001 011

E o Not?

NOT (~): Bem... esse vai inverter tudo, o que não é o caso já que se quer evitar operação bit-a-bit.

~110 001 = 001 110

~001 110 = 110 001

*Se tiver algum erro de digitação ou de lógica me avisem.

Muito Obrigado Jonatas Freitas

tirou todas as minhas duvidas

Muito Obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço