Страница 1 из 1

проблема с atmega 16a

Добавлено: Вс июн 07, 2015 13:15:08
м@кс
здравствуйте уважаемые, купил микроконтроллер атмега 16а и уменя появились проблемы. при загрузке в регистры данных на выход все работает, но как только пытаюсь реализовать функцию задержки, то она не срабатывает, хотя в симуляторе протеус все работает.
исходный код программы:

ldi r16, 0b11111111
out DDRD, r16

main:

ldi r16, 0b11111111
out PORTD, r16
rcall delay
ldi r16, 0b00000000
out PORTD, r16
rcall delay

rjmp main

delay:
ldi r17, 32
ldi r18, 250
ldi r19, 200
loop:
subi r17,1
sbci r18,0
sbci r19,0
brcc loop
ret

попробовал скачать хекс файл какого-то доброго человека реализовавшего программу задержки на си, но она тоже не сработала!!! светодиод даже не загорелся. что делать не знаю,может кто-нибудь подсказать в какую сторону копать хоть?

картинка с фьюзами из аврдуде прилагается

Re: проблема с atmega 16a

Добавлено: Вс июн 07, 2015 15:40:18
pyzhman
Стек забыли инициализировать.

Re: проблема с atmega 16a

Добавлено: Вс июн 07, 2015 15:51:55
м@кс
спасибо большое за ответ, неужели для столь простой операции его каждый раз необходимо запускать?)))сейчас попробую и отпишусь что и как? а почему тогда программа в эмуляторе(протеусе) работает как положено?

Re: проблема с atmega 16a

Добавлено: Вс июн 07, 2015 15:56:04
м@кс
http://openrobo.ru/soft/4

и вот там выложена программа с задержкой без инициализации стека

Re: проблема с atmega 16a

Добавлено: Вс июн 07, 2015 16:54:42
м@кс
вы были правы,огромное спасибо,все дело в стеке было)))

Re: проблема с atmega 16a

Добавлено: Вс июн 07, 2015 18:28:09
pyzhman
м@кс писал(а):неужели для столь простой операции
Вы используете обращение к подпрограмме. Надо полагать, представляете себе, как происходит эта операция. Сначала адрес следующей за вызовом подпрограммы команды ложится на стек (во! стек уже должен быть проинициализирован), управление передается по адресу подпрограммы, выполняется, по команде возврата RET происходит снятие адреса со стека и управление уходит по этому адресу. Т.о., если стек не настроен на область ОЗУ, то вся программа оказывается нерабочей.

Re: проблема с atmega 16a

Добавлено: Пн июн 08, 2015 15:10:08
м@кс
я только учусь обращаться с микроконтроллерами, огромное вам спасибо, что просто,доходчиво и ,главное, без пафоса объяснили мне что к чему)))

Re: проблема с atmega 16a

Добавлено: Пн июн 08, 2015 19:19:13
Z_h_e
Осмелюсь предположить, что Вы бы сами нашли свою ошибку, если бы воспользовались симуляцией в среде программирования. Выполняя программу по шагам, используя точки останова и отслеживая значения проблемных переменных (регистров) Вы бы увидели что возврат из подпрограммы происходит некорректно. Не пренебрегайте этим, пошаговое выполнение - основное средство отладки программы.

Re: проблема с atmega 16a

Добавлено: Пн июн 08, 2015 20:30:12
Jack_A
Z_h_e писал(а):Не пренебрегайте этим, пошаговое выполнение - основное средство отладки программы.
Мо'лодежь не хочет сейчас заморачиваться таким "тщательнизмом" . Зачем велосипед, если есть Мерседес, то-бишь его величество Протеус ? :(