Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите выяснить причину прерываний!
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Шалапут:-)
Всем привет, пишу программку для обмена по 1-wire на асме.

После компиляции отправляю её в МК ATmega16 с пом. JTAG mkII. Для отладки пользую его же..
и первое прерывание, которое происходит, так это прерывание готовности ЕЕПРОМа. ЕЕПРОМу я запретил делать прерывания в начале программы, да и если просто не инициализировать его, и не трогать его регистры, прерывание не должно случиться.

Тот же код при тестировании в симуляторе никогда не попадает на те же брейкпоинты, что при отладке джитагом.

строка в коде, на которую происходит неверный переход:

reti // происходит прерывание??? от ЕЕпром?

код в приложении.. Кто сталкивался с таким?
Еррата к 16-й меге выглядит так:

ATmega16(L) Rev. G. There are no errata for this revision of ATmega16.
ATmega16(L) Rev. H. There are no errata for this revision of ATmega16.

так что, надеюсь, проблема не в МК.



Цитата(Шалапут:-) @ Nov 28 2008, 14:10) *
так что, надеюсь, проблема не в МК.

Проблема не в МК.
просто я самоучка biggrin.gif

Нашел причину... Как оказалось, дело в определениях регистров.. точнее - в неверном определении.
после
.cseg
.org $0000

нельзя писать .equ .def
Тут фрагменты кода:
Код
Как "ненадо делать":
.cseg
.org $0[/b]
.def res_counter=r17
.equ reset_flag = $0100
.equ past_state = $0101
.equ bit_counter= $0102

jmp    start        ; Reset handler
reti //int_0
reti //int_0


и "Как работает":
Код
.include "m16def.inc"
.def res_counter=r17
.equ reset_flag = $0100
.equ past_state = $0101
.equ bit_counter= $0102

.cseg
.org $0
jmp    start        ; Reset handler
reti //int_0
reti //int_0

;)
Herz
a14.gif На написание поста, наверное, ушло больше времени, чем на поиск ошибки...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.