Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » не работает программа на асме

Страниц (1): [1]
 

1. Резистор - 23 Ноября, 2013 - 21:03:35 - перейти к сообщению
Здравствуйте, начал параллельно C учить assemler для atmega8.
написал программу "бегущий огонёк"(обучаюсь с обучалкой на сайте www.radiokot.ru )

вот код:

CODE:
.include "c:\ProgrammingMC\avr\avrasm\APPNOTES\m8def.inc"

.def temp = R16
.def temp1 = R17
.def temp2 = R18
.def temp3 = R19
.def temp4 = R20

.cseg

.org 0

ldi temp, RamEnd
out SPL, temp

ldi temp, 0b11111111
out DDRD, temp


begin:

ldi temp, 0b00000001
rcall delay

ldi temp, 0b00000010
rcall delay

ldi temp, 0b00000100
rcall delay

ldi temp, 0b00001000
rcall delay

ldi temp, 0b00010000
rcall delay

ldi temp, 0b00100000
rcall delay

ldi temp, 0b01000000
rcall delay

ldi temp, 0b10000000
rcall delay

rjmp begin

delay: out PortD, temp

ldi temp1, 0
ldi temp2, 0
ldi temp3, 10

loop:

dec temp1
brne loop

dec temp2
brne loop

dec temp3
brne loop
ret

при компиляции выходит варнинг : Constant (0x45f) out of range (0x00-0xff) ldi temp, RamEnd

я так понял что адрес последней ячейки ОЗУ не входит в temp, в следствии чего вообще не работает вся программа(просто горит светодиод и всё). Что делать?
2. mihail - 25 Ноября, 2013 - 00:08:50 - перейти к сообщению
У ATmega8 1 килобайт SRAM. Одним байтом всю память не пересчитать. А в регистры общего назначения помещается только один байт. Поэтому нужно загрузить младший и старший байт по очереди.

CODE:
ldi R16, Low(RAMEND)
out SPL, R16
ldi R16, High(RAMEND)
out SPH, R16


Хороший обучающий курс по ассемблеру AVR есть на http://easyelectronics.ru/
Хорошая книга по ассемблеру AVR: Юрий Ревич Практическое программирование Микроконтроллеров AVR на языке ассемблера
И да, AVR Studio лучше.