Ё-моё. Это же уже классика.... (Мечтательно):Давно пора уже FAQ завести.... (+) Дубль 4
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ShiphT 05 мая 2003 г. 05:06
В ответ на: Директива FLASH в IAR AVR C отправлено ДМ 04 мая 2003 г. 21:55

unsigned char __flash cMyArray[NUM_OF_EL];   //размещение масссива во flash

Работать с битами портов можно двумя способами:
Вариант первый:
PORTC |= (1<<MY_BIT); //установить бит
PORTC &= ~(1<<MY_BIT); //сбросить бит

//Этот вариант можно упросить макросами:
#define SETB(node) SETOUT(node)
#define SETBIT(port, pin) PORT##port |= (1<<node)
#define CLRB(node) CLROUT(node)
#define CLRBIT(port, pin) PORT##port &= ~(1<<node)

//И описать порты как:
#define MY_LED A, 6 //PORTA.6
#define MY_OUT C, 2 //PORTC.2

//То в тексте можно уже писать:
SETB(MY_LED); //Устаовить бит MY_LED(PORTA.6) в 1
SETBIT(D, 3); //Установить бит PORTD.3 в 1
CLRB(MY_OUT); //Сбросить бит MY_OUT(PORTC.2) в 0
CLRBIT(B, 7); //Сбросить бит PORTB.7 в 0
Вариант второй:
Если подключен , то можно делать так:
PORTA_Bit5 = 1; //Установить бит в 1
PORTB_Bit0 = 0; //Сбросить бит в 0
PORTC_Bit4 ^= 1; //Инвертировать бит

C макросами:
#define My_Port PORTD_Bit6

My_Port = 1; //Установить бит
//Далее по образцу ;о)

Работать с битами переменных можно как с портами в варианте №1. Либо объявив:
union{
unsigned char cMyChar;
struct{
unsigned char bMyBit0 :1,
bMyBit1 :1,
bMyBit2 :1,
bMyBit3 :1,
bMyBit4 :1,
bMyBit5 :1,
bMyBit6 :1,
bMyBit7 :1;
};
};
//Работа будет выглядеть:
cMyChar = 0x5A;
bMyBit4 = 0;
bMyBit2 ^= 1; //И т.д.

Либо "более правильно":
union{
unsigned char cByte;
struct{
unsigned char Bit0 :1,
Bit1 :1,
Bit2 :1,
Bit3 :1,
Bit4 :1,
Bit5 :1,
Bit6 :1,
Bit7 :1;
}Bits;
}MyByte;

//Тогда работа с ними будет такой:
MyByte.cByte = 0x5A;
MyByte.Bits.Bit4 = 0;
MyByte.Bits.Bit2 ^= 1; //И т.д.

Удачи,
ShiphT.

Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru