Assembler for AVR в вопросах и ответах
Assembler for AVR в вопросах и ответах
У меня такая проблема: в общем выполняю по обучалке http://www.radiokot.ru/start/mcu_fpga/avr/08/ программу:
.include "tn2313def.inc"
.def Temp =R16 ; обзываем регистры
.def Temp1=R17
.cseg ; начало программного сегмента
.org 0 ; задаем начальный адрес ПЗУ, в данном случае он = 0
ldi Temp,RamEnd ;добавлено позже
out SPL,Temp ;добавлено позже
ldi Temp, 0b11111111 ; записываем в регистр число
out DDRB, Temp
ldi Temp1, 0b00000010
m1: ldi Temp, 0b0000010
rcall p1
rjmp m1
;*********************************************************
p1: out PortB, Temp
ret
по идее должен вернуться в строчку "p1: ", тогда как возвращается в строчку "ldi Temp, 0b11111111". Никаких ошибок соответственно не выдаёт.
Пользуюсь AVR Studio 4.
.include "tn2313def.inc"
.def Temp =R16 ; обзываем регистры
.def Temp1=R17
.cseg ; начало программного сегмента
.org 0 ; задаем начальный адрес ПЗУ, в данном случае он = 0
ldi Temp,RamEnd ;добавлено позже
out SPL,Temp ;добавлено позже
ldi Temp, 0b11111111 ; записываем в регистр число
out DDRB, Temp
ldi Temp1, 0b00000010
m1: ldi Temp, 0b0000010
rcall p1
rjmp m1
;*********************************************************
p1: out PortB, Temp
ret
по идее должен вернуться в строчку "p1: ", тогда как возвращается в строчку "ldi Temp, 0b11111111". Никаких ошибок соответственно не выдаёт.
Пользуюсь AVR Studio 4.
Последний раз редактировалось std Вт май 15, 2007 23:44:16, всего редактировалось 2 раза.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
А что ж ты хотел, уважаемый?! Стек-то надо инициализировать в начале программы!
Стек - он как лестница-стремянка: сделал rcall - поднялся на ступенку, сделал ret - спустился на ступеньку. Только по умолчанию стоишь ты на самой вершине, потому любой шаг вверх - это переход на первую ступеньку (хорошо, если без ушибов)
...
Или невнимательно читал обучалку, или в ней про это забыли сказать...
Стек - он как лестница-стремянка: сделал rcall - поднялся на ступенку, сделал ret - спустился на ступеньку. Только по умолчанию стоишь ты на самой вершине, потому любой шаг вверх - это переход на первую ступеньку (хорошо, если без ушибов)
Или невнимательно читал обучалку, или в ней про это забыли сказать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
не знаю, о какой документации речь... но про стек там в основном пишут то, что после сброса его указатель SPL равен нулю, т.е. указывает на первую ячейку ОЗУ. И еще пишут, что как можно раньше, буквально в первых строчках программы, надо занести в этот указатель адрес самой последней ячейки ОЗУ... больше, в сущности, и знать не надо.
А по поводу битов порта - у меня что-то не сбрасывается
после установки верного значения указателя стека - программа работает. Но это странная программа, она ничего не меняет в порте В - как вывела единичку туда, так она там и остается...
А по поводу битов порта - у меня что-то не сбрасывается
Последний раз редактировалось ARV Вт май 15, 2007 23:21:57, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Очень хорошо помогает поиск в PDF-е по ключевым словам SPL или Stack Pointerstd писал(а):Документация имеется ввиду DataSheet на МК в данном случае на ATtiny2313
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Пожалустоstd писал(а):Всё, разобрался, вроде: в AT90S2313 всё нормально, а в ATtiny2313 обнуляется и выводы у них по-разному подписаны.
Спасибо.
Что за выводы? Что за программа? В вышеприведенной ничего обнуляться не должно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
То, что выводы подписаны по-разному - это ведь не удивительно, МК-то разные. А вот что там обнуляется - так и не понял. Какой бит, где этот бит, в какой такой программе...
так будешь объяснять свои проблемы - помощи не дождешься никогда...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Фантастика!
Но в симуляторе AVR Studio 4.12 buld 460 программа отрабатывает так, как должна - ничего не сбрасывается лишнего. И в Tiny2313 и в AT90S2313.
Но в симуляторе AVR Studio 4.12 buld 460 программа отрабатывает так, как должна - ничего не сбрасывается лишнего. И в Tiny2313 и в AT90S2313.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Потому что в коде команды для хранения этой константы отведено всего 5 битов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
не очень понял вопрос... может, так?
а где-нибудь в коде пишем такое
а в другом месте кода (именно в сегменте кода!!!) пишем так:
Код: Выделить всё
.macro Print
ldi ZL, low(@0*2)
ldi ZH, high(@0*2)
lpm Temp, Z+
; теперь что-то там делаем с загруженным символом строки. выводим, например...
.endmacroКод: Выделить всё
Print Stroka ; вывести строкуКод: Выделить всё
Stroka: .db 'Превед!',0если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


