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
Tags:
As respostas para este tópico estão encerradas.
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por