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

Обсуждаем цифровые устройства...
Ответить
Родился
Сообщения: 9
Зарегистрирован: Сб фев 23, 2013 00:28:49

Сообщение м@кс »

здравствуйте уважаемые, купил микроконтроллер атмега 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

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

картинка с фьюзами из аврдуде прилагается
Вложения
фьюзы.PNG
фьюзы мк атмега 16а
(31.83 КБ) 186 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Стек забыли инициализировать.
Docendo discimus
Контактная информация:
Реклама
Родился
Сообщения: 9
Зарегистрирован: Сб фев 23, 2013 00:28:49

Сообщение м@кс »

спасибо большое за ответ, неужели для столь простой операции его каждый раз необходимо запускать?)))сейчас попробую и отпишусь что и как? а почему тогда программа в эмуляторе(протеусе) работает как положено?
Родился
Сообщения: 9
Зарегистрирован: Сб фев 23, 2013 00:28:49

Сообщение м@кс »

http://openrobo.ru/soft/4

и вот там выложена программа с задержкой без инициализации стека
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 9
Зарегистрирован: Сб фев 23, 2013 00:28:49

Сообщение м@кс »

вы были правы,огромное спасибо,все дело в стеке было)))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

м@кс писал(а):неужели для столь простой операции
Вы используете обращение к подпрограмме. Надо полагать, представляете себе, как происходит эта операция. Сначала адрес следующей за вызовом подпрограммы команды ложится на стек (во! стек уже должен быть проинициализирован), управление передается по адресу подпрограммы, выполняется, по команде возврата RET происходит снятие адреса со стека и управление уходит по этому адресу. Т.о., если стек не настроен на область ОЗУ, то вся программа оказывается нерабочей.
Docendo discimus
Контактная информация:
Реклама
Родился
Сообщения: 9
Зарегистрирован: Сб фев 23, 2013 00:28:49

Сообщение м@кс »

я только учусь обращаться с микроконтроллерами, огромное вам спасибо, что просто,доходчиво и ,главное, без пафоса объяснили мне что к чему)))
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Осмелюсь предположить, что Вы бы сами нашли свою ошибку, если бы воспользовались симуляцией в среде программирования. Выполняя программу по шагам, используя точки останова и отслеживая значения проблемных переменных (регистров) Вы бы увидели что возврат из подпрограммы происходит некорректно. Не пренебрегайте этим, пошаговое выполнение - основное средство отладки программы.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

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

Вернуться в «Цифровая техника»