кусок исходного кода на С:
Код
for (i=0;i<8;i++){
if(DispData[j]&0x01){ //в зависимости от значения младшего бита изменяем ножку DATA
DispPort|=_BV(DATA); //DATA=1
DispPort|=_BV(CLK); //тактируем ножкой CLK
_delay_ms(10);
DispPort&=~_BV(CLK);
}
else{
DispPort&=~_BV(DATA); //DATA=0
DispPort|=_BV(CLK); //тактируем ножкой CLK
_delay_ms(10);
DispPort&=~_BV(CLK);
};
DispData[j]>>1;
_delay_ms(500);
};
То, что получилось:
Код
---- main.c ---------------------------------------------------------------------------------------
19: if(DispData[j]&0x01){
+00000030: 9700 SBIW R24,0x00 Subtract immediate from word
+00000031: F011 BREQ PC+0x03 Branch if equal
20: DispPort|=_BV(DATA);
+00000032: 9AC2 SBI 0x18,2 Set bit in I/O register
+00000033: C001 RJMP PC+0x0002 Relative jump
26: DispPort&=~_BV(DATA);
+00000034: 98C2 CBI 0x18,2 Clear bit in I/O register
27: DispPort|=_BV(CLK);
+00000035: 9AC1 SBI 0x18,1 Set bit in I/O register
компилятор WinAVR-20090313. Уровень оптимизации -Os
прошу прощения, за идиотский вопрос - сам не могу решить