Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Проблема при прогр-ии ATtiny13


Автор: interesuuwiysia 24.9.2007, 13:34
Доброго времени суток!
Столкнулся с проблемой при прогр-ии АТини13... Пытаюсь использовать функцию high(variable) в следующем контексте:

.DSEG

    var1:    .BYTE 2
    var2:    .BYTE 1

.CSEG

setup:

    Set_Stack;

begin:    

    ldi r18, 0xAB
    ldi r19, 0xCD
    ldi r26, $0000
    ldi r30, $0060

    ;sts $0060,r18      ;
    ;sts $0061,r19      ;this block works properly
    ;sts $0062,r18      ;

    sts high(var1), r18    ;mistake occures here 
    sts low(var1), r19
    sts var2, r18

    ;ld r20, Z+
    ;ld r21, Z+
    ;ld r22, Z

    lds r20, low(var1)
    lds r21, high(var1)
    lds r22, var2

При этом все вроде работает правильно, но только вот при выполнении строки sts high(var1), r18 значение регистра r18 почему-то записывается в регистр r0..... Перерыл уже всю имеющуюся литературу (описание контроллера, Instruction Set, и хэлп по авр студио 4.12) но понимание проблемы ко мне до сих пор не пришло... В чем я ошибаюсь?

За ранее благодарен!

Автор: Den64 8.10.2007, 21:13
  var1 - ссылка указывает на ОЗУ адрес которой, кажись, начинается с 0x60.

  Так-как var1 обявлена первой, то её значение адреса должно быть 0x60.

  Тогда low(var1), будет равно 60h, а high(var1) равно 0. Нулевой адрес имеет r0, кажись.

  Если нужно записать значение из регистровой пары r18/r19, то нужно писать так:

Код

  ;.....
  sts var1, r18 
  sts var1 + 1, r19
  ;....



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)