Страница 1 из 1
Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 13:32:07
Jeka-starik
Продолжаю осваивать ассемблер. Хочу сделать так чтоб данные из ОЗУ МК при нажатии кнопки через USART (Atmega

кидались на компьютер (программа соответствующая есть - через com порт). Так вот итересует Как прерывание от кнопки инициализировать. Просто полазил по просторвм инета - с кнопками не нашёл ничего. Может у кого какие программы с кнопками имеются в качестве примеров.
Я так понял - кнопку надо посадить с одной стороны на землю, а с другой на вывод МК и запрограммировать этот вывод на вход. Там резюк подтягивающий организовать. И в общем при нажатии кнопки напряжение до 0 падает с 5 вольт. А вот как программно описать это прерывание что-то понять не могу - туплю. И вообще к какому виду это прерывание отнести в векторах... к внешнему?
Помогите если не сложно...
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 14:18:08
sergeys
Погодите, чего то не очень понятно.
Если просто про то как надо использовать кнопку, то вот:
чтобы избавиться от дребезга (любое нажатие кнопки человеком МК воспримет как пачку импульсов) лучше реагировать на отпускание кнопки, то есть на появление низкого уровня на ноге. Те. алгоритм таков: отслеживаем состояние кнопки, если было нажатие (не было по новой) то устраиваем задержку и отслеживаем отпускание, есть отпускание что-то делаем.
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 15:12:09
Jeka-starik
Ладно - про дребезг понял - а вот как с самой программой по кнопке. Есть мысль - не знаю наскока она верна - сделать так: инициализировать таймер какой-нить, и чтоб он там каждый цикл состояние вывода на кнопку опрашивал и по получению нужного (зажатия кнопки) отправлял программу уже обрабатывать это событие (с учётом дребезга) и, в конечном итоге передача данных. Вот - на словах красиво и легко... А это реально осуществить можно??? Или лучше как-то по-другому.
Ещё раз прошу - если у кого-нить есть примеры прог с кнопками поделитесь (если не оч секретно

) Проста не нашёл нигде... (- нашёл тока на си - с учётом дребезга - но в си я совсем не разбираюсь) Вот и приходится импровизацией заниматься...
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 15:31:52
sergeys
Код: Выделить всё
pink: ;отслеживание кнопки, действ. по отпусканию
sbic PinX, (нужный бит); если нажата пропуск след. команды
rjmp pink;иначе обратно
;нажата пауза хватит 0.2 сек любым способом
pink0:;ловим отпускание
sbis PinX, (нужный бит);пропустить если отпущена
rjmp pink ;если нажата обратно
;делаем че надо
;пауза 0,5
rjmp pink
Вот в моей книжке такое есть, разбирайтесь, подождите умных котов, может я тут бред накатал какой
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 15:55:13
Jeka-starik
Ага - спасибо. Всё в общем понятно - тока я забыл дописать (извини уж) - это мне надо чтобы в ходе выполнения моей программы (она как раз записывает данные в ОЗУ) в любой момент можно было нажать и отобразить данные. По моему там должно быть что-то посложнее. Хотя вот этот твой кусок можно наверно как раз вставить в прерывание таймера.
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 16:03:24
sergeys
Jeka-starik писал(а):Ага - спасибо. Всё в общем понятно - тока я забыл дописать (извини уж) - это мне надо чтобы в ходе выполнения моей программы (она как раз записывает данные в ОЗУ) в любой момент можно было нажать и отобразить данные. По моему там должно быть что-то посложнее. Хотя вот этот твой кусок можно наверно как раз вставить в прерывание таймера.
Погодите. А в основном цикле нельзя отслеживать состояние кнопки? И как только то писать в ОЗУ?
А, понял. Ваша прога пишет в ОЗУ, а вам надо в любой момент это прервать? (НЕ культорно вроде как-то), ну тогда инициализируете прерывание например INTO или как там тчно-то, и в любой момент он переходить к обработчику.
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 16:21:29
Jeka-starik
А, понял. Ваша прога пишет в ОЗУ, а вам надо в любой момент это прервать?
в общем - да. Если заметил - у меня тут в этом же разделе ранее тема была - про TWI. Ну вот это как раз та программа. Мега читает с датчика данные и пишет в ОЗУ (в моём случае значения ёмкости аккумулятора). Параллельно с этим текущее значение ёмкости отображается на индикаторе и мы - видя что батарея разряжена (почти) - жмём кнопку и всё отрубается. Это в проекте.
Пока же нужно проследить зависимость ёмкости от времени работы - и поэтому данные и ОЗУ надо выдать на комп (но не сразу - а опять же с кнопки). Вот как-то так.
ну тогда инициализируете прерывание например INTO или как там тчно-то
Я ассемблер ещё тока осваиваю - и можешь пояснить что за прерывание INTO? Не то что я имел в виду?
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 16:31:10
sergeys
Так это там бы и продолжали , там ploop
Ну я сказал как на порт (!) кнопку посадить и ее использовать.
Ток подождите может кто из умных котов заглянет, может я че не то сказал.
Jeka-starik писал(а):Я ассемблер ещё тока осваиваю - и можешь пояснить что за прерывание INTO? Не то что я имел в виду?
Посмотрите в даташите табличку векторов прерываний

Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 16:35:42
Jeka-starik
А - понял - внешнее прерывание. Ну, а то что если что-то не так получится - исправить то программу не сложно.
Re: Прерывания от кнопки.
Добавлено: Пн апр 25, 2011 16:48:30
sergeys
Jeka-starik писал(а):А - понял - внешнее прерывание. Ну, а то что если что-то не так получится - исправить то программу не сложно.
Вот и я кому-то помог

надеюсь....