ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
7 мая
269713 Топик полностью
ReAl (01.09.2011 13:20, просмотров: 189) ответил mazur на С еором ничего не выйдет. Все равно нужно сохранять LCD_DATA. r16-младшая тетрада-управление. Старшая тетрада-шина данных. На LCD сначала отправляется старшая тетрада, затем младшая.
Возможно, я и ошибаюсь. Но LCD_DATA "сохраняется" в своем же регистре, никуда не исчезая. Проверьте было: push LCD_DATA ; сохранили andi LCD_DATA,0xF0 ; выделили старшую часть (убили младшую) in r16,DATA_PORT ; врезали старшую часть LCD_DATA andi r16,0x0F ; в часть данных or r16,LCD_DATA ; образа порта LCD out DATA_PORT,r16 ; отправили СТАРШУЮ часть ... andi r16, 0x0F ; убили старшую часть LCD_DATA в образе порта LCD pop LCD_DATA ; восстановили всё содержимое LCD_DATA swap LCD_DATA ; младшую часть LCD_DATA andi LCD_DATA,0xF0 ; перенесли в старшую и замаскировали or r16,LCD_DATA ; врезали в старшую часть образа порта out DATA_PORT,r16 ; отправили МЛАДШУЮ часть стало: in r16,DATA_PORT ; andi r16, 0x0F ; ; Для старшей части LCD_DATA это будет фактически OR, так как в R16 там нули ; Т.е. в старшей части R16 будет уже нужная часть LCD_DATA ; в младшей части R16 сидит XOR нужного с младшей частью LCD_DATA eor r16, LCD_DATA ; убиваем старшую часть LCD_DATA, она уже не нужна, младшая сохранилась andi LCD_DATA, 0x0F ; старшая часть R16 не меняется, в LCD_DATA там нули ; младшая часть R16 восстанавливается ; low4(R16) ^ low4(LCD_DATA) ^ low4(LCD_DATA) == low4(R16) eor r16, LCD_DATA out DATA_PORT,r16 ; отправили СТАРШУЮ часть ... andi r16, 0x0F ; убили старшую часть LCD_DATA в образе порта LCD swap LCD_DATA ; младшую часть LCD_DATA перенесли в старшую or r16,LCD_DATA ; и врезали в R16 out DATA_PORT,r16 ; отправили МЛАДШУЮ часть