Цитата
Как сделать, чтобы в WINAVR можно было бы работать с отдельными битами аналогично
CVAVR например PORTD.5=0 . Где-то видел готовый хидер для этого, но,увы...
не могу найти. Также интересут другие подобные хидеры облегчающие переход между
различными версиями компиляторов С для AVR.
Как в CV не получится. Точка все таки оператор. А вот типа как в IAR можно.
Код
#include <avr/io.h>
/*
=====================================================================
Задаем структуру (битовое поле) чтобы иметь возможность обращаться к битам переменных.
=====================================================================
*/
typedef struct _bit_struct {
unsigned char Bit0:1,
Bit1:1,
Bit2:1,
Bit3:1,
Bit4:1,
Bit5:1,
Bit6:1,
Bit7:1;
}bit_field;
/*
=====================================================================
Определяем PORTD.
=====================================================================
*/
#ifdef PORTD
#define PORTD_Bit0 (*((volatile bit_field*) (0x32))).Bit0
#define PORTD_Bit1 (*((volatile bit_field*) (0x32))).Bit1
#define PORTD_Bit2 (*((volatile bit_field*) (0x32))).Bit2
#define PORTD_Bit3 (*((volatile bit_field*) (0x32))).Bit3
#define PORTD_Bit4 (*((volatile bit_field*) (0x32))).Bit4
#define PORTD_Bit5 (*((volatile bit_field*) (0x32))).Bit5
#define PORTD_Bit6 (*((volatile bit_field*) (0x32))).Bit6
#define PORTD_Bit7 (*((volatile bit_field*) (0x32))).Bit7
#define DDRD_Bit0 (*((volatile bit_field*) (0x31))).Bit0
#define DDRD_Bit1 (*((volatile bit_field*) (0x31))).Bit1
#define DDRD_Bit2 (*((volatile bit_field*) (0x31))).Bit2
#define DDRD_Bit3 (*((volatile bit_field*) (0x31))).Bit3
#define DDRD_Bit4 (*((volatile bit_field*) (0x31))).Bit4
#define DDRD_Bit5 (*((volatile bit_field*) (0x31))).Bit5
#define DDRD_Bit6 (*((volatile bit_field*) (0x31))).Bit6
#define DDRD_Bit7 (*((volatile bit_field*) (0x31))).Bit7
#define PIND_Bit0 (*((volatile bit_field*) (0x30))).Bit0
#define PIND_Bit1 (*((volatile bit_field*) (0x30))).Bit1
#define PIND_Bit2 (*((volatile bit_field*) (0x30))).Bit2
#define PIND_Bit3 (*((volatile bit_field*) (0x30))).Bit3
#define PIND_Bit4 (*((volatile bit_field*) (0x30))).Bit4
#define PIND_Bit5 (*((volatile bit_field*) (0x30))).Bit5
#define PIND_Bit6 (*((volatile bit_field*) (0x30))).Bit6
#define PIND_Bit7 (*((volatile bit_field*) (0x30))).Bit7
#endif
int main ()
{
while (1)
{
PORTD_Bit0 = 1;
PORTD_Bit0 = 0;
};
}