Приветствую Вас, Гость! Регистрация RSS

Вторник, 22.08.2017
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Форум mega-avr.ucoz.ru » Языки программирования » Вызов функции по нажатию одной кнопки
Вызов функции по нажатию одной кнопки
RAIDERДата: Понедельник, 27.12.2010, 15:53 | Сообщение # 1
Заглянувший
Сообщений: 17
Репутация: 0
Город: Омск
Статус: Отсутствует
Вот начал писать программу на ассемблере и столкнулся с проблемой. Есть Mega8, кнопка и светодиоды. Я вот хочу сделать так: запустил работает бегущий огонек в одну сторону. Нажал на кнопку бегущий огонек в другую сторону. Таких серий будет больше. Просто хочу узнать как вызывать красные функции по нажатию одной кнопки.
Файл: 5093182.jpg(29Kb) · Project.asm(1Kb)
 
АвторДата: Понедельник, 27.12.2010, 20:37 | Сообщение # 2
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Вечер добрый! Аян почему на Си не пишешь, а на Асме?


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
RAIDERДата: Понедельник, 27.12.2010, 20:57 | Сообщение # 3
Заглянувший
Сообщений: 17
Репутация: 0
Город: Омск
Статус: Отсутствует
Здравствуй. Ну я сколько статей читал везде пишут что для начинания лучше асм использовать.
 
АвторДата: Понедельник, 27.12.2010, 22:15 | Сообщение # 4
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Это да. Для начинающих программирование на Асме позволяет осмыслить внутренюю работу микроконтроллера ( регистры, модули, память и т.д. ). А Си для высоко-уровнего программирования ( язык высокого уровня )...Разберёшся с внутренней архитектурой, "перелезай" на Си!

Quote
...как вызывать красные функции...

Это что именно, чего-то не допонял...



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
RAIDERДата: Понедельник, 27.12.2010, 23:04 | Сообщение # 5
Заглянувший
Сообщений: 17
Репутация: 0
Город: Омск
Статус: Отсутствует
ой это опечатка. в торопях писал. Я реализовал так. Есть одна функция там огонек в одну сторону бежит, другая функция огонек в другую сторону, третья функция светодиоды просто моргают и так далее. функции больше будет. И вот как сделать так: При запуске первая функция работает. Нажал на кнопку вторая функция работает, нажал еще раз третья функция и так далее. Потом в конце начинается с начала.
 
ilvzДата: Вторник, 28.12.2010, 01:38 | Сообщение # 6
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Объясняю логику на человеческом (которым, в отличии от ассемблера, владею :))

Для опроса твоей кнопки в протеусе достаточно зафиксировать сначала наличие нуля на нулевом разряде порта (нажатие) В, а потом снова единицы (отпускание). Ведь у кнопок протеуса (я надеюсь :)) нет дребезга. (В реале всё чуть сложнее)

Почему именно так? Потому что, если фиксировать только нажатие, то пока кнопка будет отпущена программа успеет несколько тыс.,сотен или десятков раз зафиксировать нажатие и столько же раз переключиться.
А так, фиксируем нажатие и ждём отпускания. Меняем программу для светодиодов.

Тоесть примерно так:

Code

НАЧАЛО:
Если (PINB & 1) = 1 переходим в КОНЕЦ (кнопка не нажата, продолжаем моргать)
ЦИКЛ:
Теперь пока (PINB & 1) = 0 идём на ЦИКЛ (ждём отпускания кнопки)
Меняем программу для светодиодов (или прямо здесь или вызываем чего нибудь)
КОНЕЦ: (опроса кнопки)
Здесь один цикл включения выключения цепочки диодов
Переходим в НАЧАЛО.

Теперь что такое PINB & 1. Это выделение младшего (нулевого) разряда порта В. Если он равен 0 то кнопка нажата. Если 1 то отпущена. В ассемблере, по моему, команда называется ANDI. За ней будет переход по нулю ил не нулю.

И ещё. 0-вой разряд порта В надо подтянуть к + питания. Или внешним резистором 10ком, или внутренней подтяжкой записав в порт (PORTB=1) единицу. Естественно перед этим сконфигурировать соответствующий разряд (В0) на вход.

И ещё. (уже на последок) После Ассемблера не мешкая переходи на "С". Ассемблер это конечно "круто", а "С" это - быстро, удобно и эфективно.

С наступающим Новым Годом! (ВСЕХ!)

Сообщение отредактировал ilvz - Вторник, 28.12.2010, 01:41
 
RAIDERДата: Вторник, 28.12.2010, 16:08 | Сообщение # 7
Заглянувший
Сообщений: 17
Репутация: 0
Город: Омск
Статус: Отсутствует
Спасибо. Вот я прочитал и созрела одна идея. Допустим 7 серий моргания у меня. Я делаю переменную и при запуске заношу туда число 1. Каждой функции я присваиваю число, 7 функций это 1..7. Потом при запуске в переменной число 1 работает первая функция, при нажатии мы инкрементируем число и вызываем вторую функцию. Как дойдет до 7 сбрасываем опять на 1. Это нормально?
 
ilvzДата: Среда, 29.12.2010, 01:11 | Сообщение # 8
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Пока абсолютно нормально. Так оно и делается. Только функции присваивается метка.
 
Форум » Форум mega-avr.ucoz.ru » Языки программирования » Вызов функции по нажатию одной кнопки
Страница 1 из 11
Поиск: