Цитата(ZiB @ Feb 20 2006, 14:58)

всем, привет!
я решаю эту проблему вот так:
#define porta 0x3B
#define bit 1
........................
void Set_Port(Byte PortNumber, Byte BitNumber)
{
*((Byte*)PortNumber) |= BitNumber;
}
void Clr_Port(Byte PortNumber, Byte BitNumber)
{
*((Byte*)PortNumber) &= ~BitNumber;
}
.........................
Clr_Port(porta, bit);
Delay(1000);
Set_Port(porta, bit);
// можно и так
for(Byte i = 0; i<7; i++)
{
Set_Port(porta, _Bit(i));
}
Попробовал вашу конструкцию вот что вышло в процессе компиляции в IAR 5.5 без оптимизации
Код
void Set_Port(uchar PortNumber, uchar BitNumber)
??Set_Port:
// 36 {
// 37 *((uchar*)PortNumber) |= BitNumber;
MOV R30, R16
LDI R31, 0
LD R18, Z
OR R18, R17
ST Z, R18
// 38 }
RET
// 39
RSEG CODE:CODE:NOROOT(1)
// 40 void Clr_Port(uchar PortNumber, uchar BitNumber)
??Clr_Port:
// 41 {
// 42 *((uchar*)PortNumber) &= ~BitNumber;
MOV R18, R17
COM R18
MOV R30, R16
LDI R31, 0
LD R19, Z
AND R19, R18
ST Z, R19
// 43 }
RET
// 44
// 45
RSEG CODE:CODE:NOROOT(1)
// 46 int main()
main:
// 47 {
// Пример работы с портом
// 48 PORTB = 10;
LDI R16, 10
OUT 0x18, R16
// 49 PORTB++;
IN R16, 0x18
INC R16
OUT 0x18, R16
// 50 // Ваши процедуры
// 51 Clr_Port(porta, bit);
LDI R17, 1
LDI R16, 24
RCALL ??Clr_Port
// 52
// 53 Set_Port(porta, bit);
LDI R17, 1
LDI R16, 24
RCALL ??Set_Port
// 54
// 55
// 56 return 0;
LDI R16, 0
LDI R17, 0
RET
REQUIRE _A_PORTB
// 57 }
Что то тут не то