ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
269476 Топик полностью
ReAl (31.08.2011 00:24 - 00:49, просмотров: 288) ответил mazur на Ну, понаехали тут. А я-то, а я-то, от избытка чувств, в зобу дыханье сперло, что все работает, щедрым жестом, вот вам нате, из-под кровати.... :)))))))
Ну... RLA,SSA,RSS (это не три команды ассемблера, а одна, а вот RLA,SSA -- это другая одна команда) никто ведь не написал? Ну, до этого :-) А теперь так, что в глаза бросилось: Ваш код Send_Byte: rcall Data_Port_Out push LCD_DATA andi LCD_DATA,0xF0 in r16,DATA_PORT andi r16,0x0F push r16 or r16,LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena pop r16 pop LCD_DATA swap LCD_DATA andi LCD_DATA,0xF0 or r16,LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena rcall Data_Port_In ret Непонятно, что тут делает push/pop r16 Разве что по совместительству задержку. Так как без этого Send_Byte: rcall Data_Port_Out push LCD_DATA andi LCD_DATA,0xF0 in r16,DATA_PORT andi r16,0x0F or r16,LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena andi r16, 0x0F pop LCD_DATA swap LCD_DATA andi LCD_DATA,0xF0 or r16,LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena rcall Data_Port_In ret получается короче на слово и такта на три короче. Но на деле не нужен и push/pop LCD_DATA Send_Byte: rcall Data_Port_Out in r16,DATA_PORT andi r16, 0x0F eor r16, LCD_DATA andi LCD_DATA, 0x0F eor r16, LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena andi r16, 0x0F swap LCD_DATA or r16,LCD_DATA out DATA_PORT,r16 sbi CMD_PORT,Ena nop nop nop nop nop cbi CMD_PORT,Ena rcall Data_Port_In ret что выходит уже на три слова короче первоначального варианта. Остаётся nop nop nop nop nop заменить на rjmp . ; пардон, не помню, как у avrasm написать переход на следующую команду rjmp . ; rjmp $ или как? Это такой двухтактовый НОП выходит. nop что даст ту же задержку, но сократит еще на несколко слов.