Цитата(Alexey_N @ Apr 17 2014, 15:30)

Господа, вот в когда я рисовал софт в ИАРе на обычных мегах, всё было просто - в начале игры ножка обозначалась:
#define LED0 PORTD_Bit5
И дальше уже этой самой LED0 присваивалось 1 или 0.
(LED0 = 0;)
Сейчас я переползаю на Хмеги и пытаюсь с ними договориться в АтмелСтудии. Вот как правильно там шевелить ногами принято?
У Хмеги на каждый порт аж по 32 регистра зарезервировано, каждый для своих целей. Я когда сама переползала, то сперва злилась, испугавшись сложности, но потом поняла, как же всё чудесно сделано на ХМеге. После нее обычные Меги програмировать становится противно.

Смотрите хидер с описанием вашей ХМеги. Там сам порт называется по-старинке PORTD, а конкретный регистр этого порта уточняется через точку или подчеркивание (зависит от компилятора). Например:
PORTD.OUTSET
PORTD.OUTCLR
PORTD.OUTTGL
PORTD.DIR
PORTD.DIRSET
PORTD.DIRCLR
PORTD.DIRTGL
и т.д.
А если на ассеблере пишите, но у всех этих регистров есть адреса (они все соседи):
sfrb PORTD_DIR = 0x0660 ///< I/O Port Data Direction
sfrb PORTD_DIRSET = 0x0661 ///< I/O Port Data Direction Set
sfrb PORTD_DIRCLR = 0x0662 ///< I/O Port Data Direction Clear
sfrb PORTD_DIRTGL = 0x0663 ///< I/O Port Data Direction Toggle
sfrb PORTD_OUT = 0x0664 ///< I/O Port Output
sfrb PORTD_OUTSET = 0x0665 ///< I/O Port Output Set
sfrb PORTD_OUTCLR = 0x0666 ///< I/O Port Output Clear
sfrb PORTD_OUTTGL = 0x0667 ///< I/O Port Output Toggle
sfrb PORTD_IN = 0x0668 ///< I/O port Input
sfrb PORTD_INTCTRL = 0x0669 ///< Interrupt Control Register
sfrb PORTD_INT0MASK = 0x066A ///< Port Interrupt 0 Mask
sfrb PORTD_INT1MASK = 0x066B ///< Port Interrupt 1 Mask
sfrb PORTD_INTFLAGS = 0x066C ///< Interrupt Flag Register
sfrb PORTD_PIN0CTRL = 0x0670 ///< Pin 0 Control Register
sfrb PORTD_PIN1CTRL = 0x0671 ///< Pin 1 Control Register
sfrb PORTD_PIN2CTRL = 0x0672 ///< Pin 2 Control Register
sfrb PORTD_PIN3CTRL = 0x0673 ///< Pin 3 Control Register
sfrb PORTD_PIN4CTRL = 0x0674 ///< Pin 4 Control Register
sfrb PORTD_PIN5CTRL = 0x0675 ///< Pin 5 Control Register
sfrb PORTD_PIN6CTRL = 0x0676 ///< Pin 6 Control Register
sfrb PORTD_PIN7CTRL = 0x0677 ///< Pin 7 Control Register
Зажечь или потушить светодиод можно так:
PORTD.OUTSET = PIN5_bm; // поднимаем 5-ый пин порта D
PORTD.OUTCLR = PIN5_bm; // опускаем 5-ый пин порта D
А мигнуть можно одной командой:
PORTD.OUTTGL = PIN5_bm; // мигнуть 5-ым пином порта D
Заметили, как замечательно происходит управление за один такт?
А по старинке вам один пин так быстро не поднять, т.к.
LED0 |= PIN5_bm;
это три операции! Сначала читает весь порт, потом на число маску ставит, а затем назад в порт записывает.
P.S. Только я сама на IAR пишу, но в Студии оно похоже.
И еще вам от меня подарок - очень короткое руководство на русском языке, которого обычно достаточно для перехода с обычной Меги на ХМегу: