Суббота, Май 30, 2020

Указатели-косвенная адресация AVR ASM

 

;Будем разбираться с косвенной адресацией в AVR,это указатели в Си или как в книжке написано альтернативная адресация
.include "tn2313def.inc"
.list
.def     temp=r16
.def     count=r17
         .cseg
         .org    0
         ldi     temp,ramend
         out     spl,temp
         ldi     temp,0x80
         out     acsr,temp
main:    ldi     count,6          ;число проходов в цикле
         ldi     zl,low(memory*2) ;регистр z и есть указатель на mamory т.е. в него
         ldi     zh,high(memory*2);записываем адрес в SRAM нашего массива байтов умноженного на 2
loop:    lpm                      ;эта комманда загружает то что находится по адресу mamory в регистр R0.
         ldi     temp,1           
         add     zl,temp          ;двигаемся дальше по массиву
         dec     count            ;отнимаем 1 от счетчика
         cpi     count,0          ;проверяем на 0
         brne    loop             ;если не 0 то проходим цикл есчо раз
         ldi     count,3          ;способ второй
         ldi     zl,low(memory*2) ;опять грузим в z адресс начала массива
         ldi     zh,high(memory*2)
loop1:   lpm     yl,z+            ;load program memory в регистр yl
         lpm     yh,z             ;ведь z регистр состоит из 2-ух байтов
         ldi     temp,1        
         add     zl,temp          ;увеличиваем на 1 байт адрес массива
         dec     count            ;уже проходим 3 раза по 2 байта
         brne    loop1
         rjmp    main
memory:  .db     1,2,3,4,5,6      ;это у нас массив байтов с начальным адресом mamory





 

НАЗАД                  Assembler PIC                  Си AVR                  ДАЛЬШЕ

 


Back to Top