Аааа.. Вот как дела значат абстоят.
Значит 100 раз прав оказался компилятор IAR, который требует ко всем портам такого обращения.

При этом он достаточно грамотный, чтобы чётко распознавать и компилироваться в "нужные" конструкции.
Вот объявления
Код
#define OW_DQ 0 // Шина данных для 1-wire устройств
#define OW_PIN PINB
#define OW_DDR DDRB
#define OW_PORT PORTB
#define OW_PORT_SET OW_PORT |= (1<<OW_DQ)
#define OW_PORT_CLR OW_PORT &= ~(1<<OW_DQ)
#define OW_DDR_SET OW_DDR |= (1<<OW_DQ)
#define OW_DDR_CLR OW_DDR &= ~(1<<OW_DQ)
А вот пример компиляции
Код
uint8_t OW_reset(void)
\ OW_reset:
44 {
\ 00000000 938A ST -Y, R24
45 uint8_t answer;
46
47 OW_PORT_SET; // Обеспечить питанием для двух проводного варианта
\ 00000002 9A28 SBI 0x05, 0x00
48 OW_DDR_SET; // На вывод
\ 00000004 9A20 SBI 0x04, 0x00
49 DelayMs(10); // 10 ms
\ 00000006 E00A LDI R16, 10
\ 00000008 .... RCALL DelayMs
50
51 OW_PORT_CLR; // Reset
\ 0000000A 9828 CBI 0x05, 0x00
52 DelayMks(510); // 510 us
\ 0000000C EF0E LDI R16, 254
\ 0000000E E011 LDI R17, 1
\ 00000010 .... RCALL DelayMks
53
54 OW_DDR_CLR; // Освободить шину
\ 00000012 9820 CBI 0x04, 0x00
55 OW_PORT_SET; // Подпорка
\ 00000014 9A28 SBI 0x05, 0x00
56 DelayMks(90); // ~90us
\ 00000016 E50A LDI R16, 90
\ 00000018 E010 LDI R17, 0
\ 0000001A .... RCALL DelayMks
57
58 answer = ((OW_PIN & (1<<OW_DQ))!=0);
\ 0000001C E080 LDI R24, 0
\ 0000001E 9918 SBIC 0x03, 0x00
\ 00000020 E081 LDI R24, 1
59 DelayMks(400); // ~420us для завершения цикла
\ ??OW_reset_0:
\ 00000022 E900 LDI R16, 144
\ 00000024 E011 LDI R17, 1
\ 00000026 .... RCALL DelayMks
60 OW_DDR_SET; // На вывод
\ 00000028 9A20 SBI 0x04, 0x00
61 return (answer); // 0-есть устройства, 1-нет устройств
\ 0000002A 2F08 MOV R16, R24
\ 0000002C 9189 LD R24, Y+
\ 0000002E 9508 RET
\ 00000030 REQUIRE _A_PORTB
\ 00000030 REQUIRE _A_DDRB
\ 00000030 REQUIRE _A_PINB
62 }
63