|
Atmega8:Выход с прерывания по rjmp, с последующей корректировкой указателя стека и установкой флага глоб.прерывания (sei), слишком ли грубый ход ? |
|
|
|
Jan 26 2011, 09:43
|
Группа: Участник
Сообщений: 12
Регистрация: 24-07-09
Из: Барнаул
Пользователь №: 51 518

|
На данный момент существует самодельное устройство автозавода автомобиля по таймеру, управляющий контроллер ATMEGA8. Задумал добавить кнопку, что бы можно было заводить с кнопки. Получается так: сел в машину, нажал кнопку, и авто завелось, при этом автомобиль мог до этого стоять на «программе прогрева», соответственно «программа прогрева» должна быть прекращена. Появились небольшие вопросы при реализации задуманного в программе. Программа написана на асме, весь текст приводить не буду , напишу «обычным языком» и коротко без деталей и ньансов. Вопрос: Слишком ли будет грубо переходит из прерывания в основную программу, установив указатель стека в начало и установив флаг гл. прерывания («sei») так как он при вызове прерывания сбрасывается? Решил сделать так, потому что команды от кнопок будут обрабатываться мгновенно не дожидаясь выполнения подпрограмм(паузы и т.д.)
Существует ли альтернатива этому механизму ?
Вот алгоритм программы ______________________________ Иницируем таймер опроса кнопок Разрешаем прерывания по IRQ1 для тахометра (считать импульсы, решать завелась или незавелась) Стек в начало;
Основной цикл:
Проверка статуса кнопок: Мигаем диодом, авто ждет команды Rjmp Проверка статуса кнопок
// в основном цикле я разместил оба процесса, прогрев и заводим с кнопки Прогрев: Стек в начало; «Ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16» установим флаг гл.прерывания «sei» Пауза 1 час Rcall ЗавестиМашину Пауза 5 минут глушим Rjmp Прогрев
ЗаводимСКнопки: Стек в начало; установим флаг гл.прерывания;
//Проверка заведена ли машина Если машина заведена то rjmp Проверка статуса кнопок Иначе rcall ЗавестиМашину rjmp Проверка статуса кнопок Rjmp ЗаводимСКнопки
Rjmp Основной цикл
ЗавестиМашину: Запрещаем прерывание таймера опроса кнопок Заводим включая зажигание и включая стартер по определенному алгоритму Разрешаем прерывание таймера опроса кнопок Ret
Прерывание таймера опроса кнопок: // если нажали кнопку завести то сразу переходим на программу завести с кнопки // тем самым команда ret не будет никогда выполнена // мы заменим её в основной программе возвратом указателя стека и установкой флага // глобального прерывания?! Если нажата кнопку 1 (завести авто) То rjmp ЗаводимСКнопки
Если нажата кнопку 2 (прогрев авто по таймеру) То rjmp Прогрев
Ret
Сообщение отредактировал DmSk - Jan 26 2011, 09:45
|
|
|
|
|
 |
Ответов
|
Jan 27 2011, 18:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата если нажалии кнопку "прогрев по таймеру", а статус процесса "заводим" - то rjmp(переходим) на процесс "прогрев по таймеру" Какая такая кнопка "прогрев по таймеру". А если не завелась , что прогревать будите? Заводим - завелась- прогрев - одна кнопка "завести" Вы к машине подойдите , позаводите. Цитата дребезг по таакому алгоритму обрабатывать ненужно ? Конечно не нужно, так как алгоритма , как такового и нет. Процессор точно с ума сойдёт, бедолага
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 28 2011, 03:22
|
Группа: Участник
Сообщений: 12
Регистрация: 24-07-09
Из: Барнаул
Пользователь №: 51 518

|
Цитата(ILYAUL @ Jan 27 2011, 21:21)  Конечно не нужно, так как алгоритма , как такового и нет. Процессор точно с ума сойдёт, бедолага Процессор не человек с ума не сойдет, а что ему сходить то ? какая разница программно или аппаратно флаги и указатель стека корректируется Цитата(ILYAUL @ Jan 27 2011, 21:21)  Какая такая кнопка "прогрев по таймеру". А если не завелась , что прогревать будите? Заводим - завелась- прогрев - одна кнопка "завести" Вы к машине подойдите , позаводите. имел ввиду статус текущего процесса, например нажали кнопку "завести", статус процесса "заводи", нажали кнопку "прогрев по таймеру" - статус процесса "прогрев по таймеру", Цитата(ILYAUL @ Jan 27 2011, 21:21)  Какая такая кнопка "прогрев по таймеру". эта такая кнопка которая запускает процесс, при котором авто заводится 1 раз в час например и прогревается в течении определенного времени, это у нас в Сибири актуально при больших морозах.
|
|
|
|
|
Jan 30 2011, 15:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(DmSk @ Jan 28 2011, 06:22)  Процессор не человек с ума не сойдет, а что ему сходить то ? какая разница программно или аппаратно флаги и указатель стека корректируется
имел ввиду статус текущего процесса, например нажали кнопку "завести", статус процесса "заводи", нажали кнопку "прогрев по таймеру" - статус процесса "прогрев по таймеру",
эта такая кнопка которая запускает процесс, при котором авто заводится 1 раз в час например и прогревается в течении определенного времени, это у нас в Сибири актуально при больших морозах. У ВАС элементарная задача - одна кнопка два процесса разделённые между собой временным интервалом. Одно прерывание. Стек не трогать. И как уже было сказано Цитата Это хорошие слова, еще чуть-чуть и будет конечный автомат, осталось только отказаться от манипуляций со стеком и выходов из прерываний не по reti. Теперь вкл. логику , читайте литературу и решите эту задачку
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
Сообщений в этой теме
DmSk Atmega8:Выход с прерывания по rjmp, с последующей корректировкой указателя стека и установкой флага глоб.прерывания (sei), слишком ли грубый ход ? Jan 26 2011, 09:43 GDI Вместо такого описания, лучше бы нарисовали алгори... Jan 26 2011, 10:13 DmSk Цитата(GDI @ Jan 26 2011, 13:13) И что зн... Jan 26 2011, 10:40  GDI Цитата(DmSk @ Jan 26 2011, 13:40) это нап... Jan 26 2011, 14:12   DmSk Цитата(GDI @ Jan 26 2011, 17:12) Вот пото... Jan 27 2011, 03:01    GDI Цитата(DmSk @ Jan 27 2011, 06:01) пустой ... Jan 27 2011, 08:11 Maik-vs А! обычная вещь - прерывание длиной в секунду.... Jan 26 2011, 10:45 DmSk Цитата(Maik-vs @ Jan 26 2011, 13:45)... Jan 26 2011, 14:02  zombi Цитата(DmSk @ Jan 26 2011, 17:02) main:
... Jan 27 2011, 08:50   DmSk Цитата(zombi @ Jan 27 2011, 11:50) 2: Вых... Jan 27 2011, 11:14    zombi Цитата(DmSk @ Jan 27 2011, 14:14) если в ... Jan 27 2011, 12:18     DmSk Цитата(zombi @ Jan 27 2011, 15:18) Ну тог... Jan 27 2011, 14:36      zombi Цитата(DmSk @ Jan 27 2011, 17:28) дребезг... Jan 27 2011, 14:42  Maik-vs Цитата(DmSk @ Jan 26 2011, 17:02) спасибо... Jan 27 2011, 10:20 _Pasha кнопки по прерыванию можно только в одном случае -... Jan 26 2011, 12:36 GDI Цитатастатус процесса Это хорошие слова, еще чуть-... Jan 28 2011, 12:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|