controll only 1 bit from 1 byte

Guest #3027556
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
Guest #3027563
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;

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.