EmbDev.net

Forum: µC & Digital Electronics controll only 1 bit from 1 byte


von micro u. (Guest)


Rate this post
useful
not useful
AVR Studio - ATmega8 - myAVR.de MK2 Board

Hi
im learning to switch 2 leds on and off.

my problem: how can i control only 1 bit of the whole port?
1
DDRC = 0xFF;
2
PORTC = 0x01; // Turn LED 1 on
3
PORTC = 0x02; // Turn LED 2 on

The problem: the second i turn on number 2, i also turn off number one.

Is there a way of saying Byte.Bit, or PORTC.firstBit


thanks for your help

von Floh (Guest)


Rate this post
useful
not useful
You can do this with bit manipulation, and, or, exor.

PORTD |= (1<<PD0); // sets PD0
PORTD &= ~(1<<PD0); // clears PD0
PORTD ^= (1<<PD1); // toggles PD1

von user (Guest)


Rate this post
useful
not useful
you can use this

struct bits {
  uint8_t b0:1;
  uint8_t b1:1;
  uint8_t b2:1;
  uint8_t b3:1;
  uint8_t b4:1;
  uint8_t b5:1;
  uint8_t b6:1;
  uint8_t b7:1;
} __attribute__((_packed_));

#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
#define SBIT(x,y) SBIT_(x,y)

SBIT(PORTC,0) = 0;
SBIT(PORTC,1) = 1;

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.