Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Duncan Idaho
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 9
1

Не происходит возврат из подпрограммы (AVR Studio 4, Asm)

28.09.2015, 20:15. Просмотров 793. Ответов 2
Метки нет (Все метки)

Доброго времени суток. Пишу мигающий светодиод на Avr ассемблере под Atmega16, среда AVR Studio 4.
Написал отдельную подпрограмму для задержки, получилось что-то вроде этого:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.include "D:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes\m16def.inc"
 
sbi DDRC, 0
 
Main:
sbi PORTC, 0
rcall Delay
cbi PORTC, 0
rjmp Main
 
Delay:
ldi R18, 0xFF
Delay3:
ldi R17, 0xFF
Delay2:
ldi R16, 0xFF
Delay1:
dec R16
brne Delay1
dec R17
brne Delay2
dec R18
brne Delay3
ret
Дебажу через AVR Simulator. На скрине ниже - среда после вызова процедуры.
Не происходит возврат из подпрограммы (AVR Studio 4, Asm)

На вершине стека после вызова лежит совершенно непонятное число вместо адреса возврата. Дебаггер пишет Uninitialized stack pointer used at 0x0002, а после ret - Invalid opcode 0xffff at address 0x00e8e8; затем управление переходит к началу программы. Подскажите, в чем ошибка и как её исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2015, 20:15
Ответы с готовыми решениями:

Вопрос к пишущим на asm в AVR Studio 4-5-6
Собственно хотелось бы услышать какая версия наименее глючная и удобная в этом ключе. Какие глюки...

Инкрементация числа до переполнения на ASM в AVR Studio
1 задача. Ввести число. В цикле инкрементировать его до переполнения. Вывести в порт вывода...

Вычитание двухбайтных чисел в AtMega8535 на ASM (AVR Studio 4)
Составить программу вычитания двухбайтных чисел. Уменьшаемое содержится в регистровой паре R3:R2,...

AVR Studio (ASM). Поменять местами тетрады в данных
№16 Задание делается в AVR Studio Помогите, буду очень признателен, задание сделать надо к...

Обращение к регистрам через адреса (ASM, AVR Studio)
Здравствуйте, есть такой вопрос: к примеру у меня в SRAM хранятся реальные адреса регистров общего...

2
paskal
450 / 299 / 28
Регистрация: 15.08.2011
Сообщений: 931
28.09.2015, 23:24 2
Указатель стека не инициализирован. Это ж не 8051
Обычно делают так:
Assembler
1
2
3
4
                                ldi     r16,high(RAMEND) 
                                out     SPH,r16          
                                ldi     r16,low(RAMEND) 
                                out     SPL,r16
1
Duncan Idaho
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 9
28.09.2015, 23:59  [ТС] 3
Спасибо! Как-то не подумал об этом.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2015, 23:59

ATMega16 (AVR Studio, ASM) - Вывести результат на светодиоды по схеме
Ребят, помогите, пожалуйста, с решением задачи, не получается вывести результат на светодиоды по...

Прерывание по переполнению таймера-счетчика ATmega8535 (ASM, AVR Studio 4)
Система прерываний на примере прерывания по переполнению встроенного таймера-счётчика...

CAVR против AVR Studio, что не так в программе под AVR Studio
Проблема такая, есть исходник, если его компилировать в CAVR заливаю в МК все работает, если этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru