| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (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, то нужно писать так:
|