IAR C/C++ Compiler for AVR 5.11B/W32 (5.11.2.5)
В следующем коде __swap_nibbles выполняется ошибочно:
Код
132 buffer = byte; //передача младших битов 3-0
\ 00000034 2F10 MOV R17, R16
133 __swap_nibbles(buffer);//обмен битов
\ 00000036 2F21 MOV R18, R17
\ 00000038 9522 SWAP R18
134 buffer &= lcd_mask; //выделим старшие биты 7-4 сбросив остальные
\ 0000003A 7F10 ANDI R17, 0xF0
135 LCD_PORT &= ~lcd_mask; //сбросим биты на шине данных ЖКИ
\ 0000003C 91200105 LDS R18, 261
\ 00000040 702F ANDI R18, 0x0F
\ 00000042 93200105 STS 261, R18
Как видим, обмен битов происходит в другом регистре. А buffer используется дальше, нисколько не изменённый swap. Как исправить такое?