Нужно организовать еще один цикл, используя пару ZH,ZL, для смещения данных в памяти: Obnulenie: ldi YL,0x00 ldi YH,0x02 ldi R17,0
Write_in_RAM: st Y+,R16 inc R17 cpi R17,6 breq Work_Cycle jmp Write_in_RAM
Work_Cycle: ldi YL,0x00 ldi YH,0x02 ldi ZL,0x01 ldi ZH,0x02 ldi R17,0 Copy_Cycle: ld R16,Z+ st Y+,R16 inc R17 cpi R17,5 breq Next_Byte jmp Copy_Cycle Next_Byte: ldi R16,New_Value st Y+,R16 jmp Work_Cycle
Идея в чем, сначала идет Ваш цикл, который заполняет все шесть байт, затем идет Work_Cycle, в котором сначала переписываются байты в памяти 0x200...0x205 при помощи двух пар регистров адреса Y и Z, первый байт пишется на место нулевого, второй на место первого и т.д. пять раз, после чего идет переход на Next_Byte, где в регистр R16 пишется новое значение непосредственно. Я не знаю, откуда Вы его будете брать, поэтому взял непосредственное присвоение. И после этого, новое значение пишется в шестой байт, потому что Y к этому моменту как раз будет адресовать именно его. Далее идет переход на Work_Cycle, где все байты переписываются со смещением по новой. И так повторяется. Конечно, все это можно оптимизировать до нескольких команд, но я специально сделал все вот так, чтобы было наглядно видно, что и как пересылается.
Сообщение отредактировал vvvv - Jan 18 2009, 05:40
|