![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
KindEvil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Привет всем, я пока что полный ноль в ассеблере и программировании каких бы то ни было микропроцессоров и avr в частности , но хочется разобраться с этой задачей)
Используя систему прерываний и таймер реализовать следующую последовательность включения светодиода (atmega8): 1сек - ON 1сек - OFF 2сек - ON 1сек - OFF 1сек - ON 2сек - OFF 1сек - ON 1сек - OFF 2сек - ON 1сек - OFF 1сек - ON 2сек - OFF . . . Светодиод подключен к выходу параллельного порта PB1 и к земле, через токоограничивающий резистор 200 Ом. Основной цикл программы должен быть пустым. Приветствуется код с комментариями, иначе утону. Спасибо. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
KindEvil, рассказывай что делал, что не получилось.
|
|||
|
||||
KindEvil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
По-чесноку, я читал о механизмах прерываний от таймеров и до сих пор не понял, как оформить и по какому признаку (в смысле по совпадению, переполнению или захвату). Вообщем каша, нет понимая реализации прерывания. Алгоритм представляю следующий: на PB1 подать сигнал с задердкой на 1сек; потом вот это самое прерывание от таймера; затем опять сигнал на PB1 с задержкой на 2 сек.; и аналогичные действия для 1off, 1on, 2off и все это в цикле. предполагаю, что возможно упростить цикл через инкремент и декремент. стек необходим здесь? без него никуда, как я понял) и еще вопрос, что дает информация о сопротвлении резистора для кода? |
|||
|
||||
UniBomb |
|
||||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
По захвату отпадает, т.к. (если я правильно понял) для этого нужен внешний источник. Остаётся переполнение или совпадение. Выбор зависит от того, какой способ даст более точный квант времени. Итак, смотрим задачу и видим, что весь цикл моргания у нас занимает 8 секунд. Значит всё это можно было бы оформить в следующем виде:
Нет, цикл тут не нужен, т.к. всё это делается в прерывании, которое срабатывает само через равные промежутки времени. Нужно кстати ещё знать частоту, на которой работает мк. Ну а в общем виде программа могла бы выгядеть следущим образом:
Но есть одно но - само задание ущербно. В обработчике прерывания нужно выполнять минимальное количество действий. В лучшем случае в прерывании надо установить какой-нибудь программный флаг, а в главном цикле программы его проверять и по выставлению уже производить какие-либо действия. Как видишь нет. Абсолютно ничего. Резистор нужен для того, что бы не сгорел светодиод. Да и к тому же маловат он в этой схеме. Сейчас через диод течёт 25 мА, а надо где-то 10-15. Это сообщение отредактировал(а) UniBomb - 17.11.2010, 11:52 |
||||
|
|||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Я бы несколько дополнил программу, чтобы она работала в реальном времени
-------------------- Мне нужны помощники. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Mazzi, тут я немного не согласен
![]() ![]() |
|||
|
||||
KindEvil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Mazzi,
UniBomb, спасибо вам! Но, как бы этот код выглядел в ассемблере для atmega8? |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
KindEvil, а вот теперь давай немного сам
![]() ![]() А для ленивых студентов, которые сами не хотят ничего делать существует центр помощи. Но ты ведь не такой ![]() |
|||
|
||||
KindEvil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
UniBomb, спасибо. Будем разбираться)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |