De_User (16.07.2019 11:33 - 11:45, просмотров: 133) ответил Ксения на Как это он может читать PINB, если операция производится с PORTB? Компилятор не способен к таким вольностям. В ассемблерный код загляните - неужели такое может быть? Можно ли этот кусок кода сюда выложить?
Спасибо! - ошибся. Читает PORTB. Но от этого не легче. Компилятор дважды использовал способ "чтение - модификация - запись" и один раз SBI.
794 if (cnt & (1 << n_line)) {SET_IN_74HC594;}
795 else {CLR_IN_74HC594;}
\ ??proc_2:
\ 00000016 B308 IN R16, 0x18
\ 00000018 7400 ANDI R16, 0x40
\ 0000001A BB08 OUT 0x18, R16
\ ??proc_3:
\ 0000001C 0000 NOP
\ 0000001E 0000 NOP
\ 00000020 B308 IN R16, 0x18
\ 00000022 7002 ANDI R16, 0x02
\ 00000024 BB08 OUT 0x18, R16
\ 00000026 0000 NOP
\ 00000028 0000 NOP
\ 0000002A 0000 NOP
\ 0000002C 9AC1 SBI 0x18, 0x01
\ 0000002E 0000 NOP
#define SET_CL_74HC594 { PORTB &= (1<<PB1); }
#define CLR_CL_74HC594 { PORTB |= (1<<PB1); }
#define SET_DT_74HC594 { PORTB |= (1<<PB6); }
#define CLR_DT_74HC594 { PORTB &= (1<<PB6); }
#define CLOCK2_74HC594 { SET_CL_74HC594; __no_operation(); __no_operation(); CLR_CL_74HC594; __no_operation(); }
#define SET_IN_74HC594 { SET_DT_74HC594; __no_operation(); __no_operation(); CLOCK2_74HC594;}
#define CLR_IN_74HC594 { CLR_DT_74HC594; __no_operation(); __no_operation(); CLOCK2_74HC594;}
Let's come together right now !