В Си для задания битовых масок обычно пишут (стиль варируется)
Код
DDRD =
//(1<<PD7) |
//(1<<PD6) |
//(1<<PD5) |
//(1<<PD4) |
//(1<<PD3) |
//(1<<PD2) |
//(1<<PD1) |
(1<<PD0) |
0;
Студия не понимает такие фокусы, поэтому удобно писать
Код
DDRD = (0<<PD7) |(0<<PD6) |(0<<PD5) |(0<<PD4) |(0<<PD3) |(0<<PD2) |(0<<PD1) |(1<<PD0);
Особенно удобно, когда конфигурируешь переферию (типа SPI или UART), где биты имеют разные имена. Например SPI для Mega88
Код
ldi temp,(1<<SPIE)|(1<<SPE)|(0<<DORD)|(0<<MSTR)|(1<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0)
Чтобы быстро переконфигурировать не вспоминая их корявых названий: в СИ достаточно закомментирова/раскомментировать строку, при таком способе записи поменять "0" на "1" или "1" на "0".
Заголовочники для МК как лежат в C:\Program Files\AVRStudio4\AvrAssembler2\Appnotes файлы типа m8def.inc (для Mega8) и tn2313def.inc (ATtiny2313). В них можно увидеть следующее
Цитата
; ***** PORTD ************************
; PORTD - Data Register, Port D
.equ PORTD0 = 0 ;
.equ PD0 = 0 ; For compatibility
.equ PORTD1 = 1 ;
.equ PD1 = 1 ; For compatibility
.equ PORTD2 = 2 ;
.equ PD2 = 2 ; For compatibility
.equ PORTD3 = 3 ;
.equ PD3 = 3 ; For compatibility
.equ PORTD4 = 4 ;
.equ PD4 = 4 ; For compatibility
.equ PORTD5 = 5 ;
.equ PD5 = 5 ; For compatibility
.equ PORTD6 = 6 ;
.equ PD6 = 6 ; For compatibility
; DDRD
.equ DDD0 = 0 ;
.equ DDD1 = 1 ;
.equ DDD2 = 2 ;
.equ DDD3 = 3 ;
.equ DDD4 = 4 ;
.equ DDD5 = 5 ;
.equ DDD6 = 6 ;
По оформлению в своё время с коллегой "Сишником" долго дискутировал. Он также убеждал, что запись (0<<PD5) смысла не имеет и не стоит поэтому уродовать код