Обсуждаем цифровые устройства...
Ответить

вопрос! AVR studio>микроконтоллер?

Вт янв 24, 2006 22:28:04

Господа вопрос такой:
Написал прогу ,в AVR studio под 2313,прогнал ее в симуляторе
вроде все работает ,прошил контроллер.
А в схеме она работает мягко говоря некоректно.
т.е не соблюдаются условия переходов при сравнении
(BREQ,BRNE...).В РОН забиваеш 0 как запрет на исполнение,а в реальности кнопку жмеш и он отрабатывает,хотя должен сначала
увидеть 1 как разрешение в регистре???
команды и переходы неоднократно проверял,глоб. запреты ставил
подскажите хоть что-то!!!!!!!!!!!!!!!!

Вт янв 24, 2006 23:29:34

Ну ты хоть код дай и схему, чтоб предметно разговаривать. А вообще, я подозреваю, что ты попросту забыл про дребезг :)

продолжение

Чт янв 26, 2006 21:01:26

схема проста :(опишу кратко) .термодатчик(биметал),контроль нагрузки(токовое реле),исполнительное устр.(оптосимистор),кнопка
(одна)для предвыбора исп. устр.(их несколько) которым разрешено работать.Так вот изначально для всех устр. стоит запрет(использую рег.r19,r20,r21)т.е. забиты 0. дальше происходит сравнение(CPI R19,0
BREQ POWER N)если равно перейти на управление следующим устр.
Т.е.устр.не вкл. пока будут 0 в регистрах.В avr симуляторе так и
происходит. Шью в МК. Включаются устр.как-будто им заданы 1
либо игнорируются ф-ции BREQ ,BRNE и т.д.
Может надо отказаться от всех прерываний (rjmp reset,rjmp int_0 и т.д.) глобальный запрет не помог(CLI).
и еще ф-ции ,операторы имеют циклы ,как их организовать или убедиться что цикл какой-то ф-ции выполнен или это не нужно
вообще?
С ДРЕБЕЗГОМ боролся обкладывая опрос кн. и реле приличной паузой.

Чт янв 26, 2006 21:36:10

Короч, скорее всего не сохраняется содержимое каких-то регистров при входе в обработчик прерывания. Также, нужно сохранять флаговый регистр.
Допустим, в обработчике используются R16 и R17. Пишем обработчик

InterruptProcessor:

push R16
in R16,SREG
push R16
push R17
cli

;код обработчика

sei
pop R17
pop R16
out SREG,R16
pop R16

push - помещаем в стек
pop - вытаскиваем из стека :)
Ответить