Для чего нужен регистр TIMSK в AVR микроконтроллерах. Какую роль играют биты TOIE0 и OCIE0 в этом регистре. Как правильно настраивать и использовать биты прерываний таймеров в TIMSK. Какие типичные конфигурации можно реализовать с помощью этого регистра.
Назначение регистра TIMSK в микроконтроллерах AVR
Регистр TIMSK (Timer/Counter Interrupt Mask Register) в микроконтроллерах AVR предназначен для управления прерываниями от таймеров/счетчиков. Он позволяет разрешать или запрещать генерацию прерываний при возникновении определенных событий таймера, таких как переполнение или совпадение.
Основные биты в регистре TIMSK и их назначение:
- TOIE0 — разрешение прерывания по переполнению таймера 0
- OCIE0 — разрешение прерывания по совпадению таймера 0
- TOIE1 — разрешение прерывания по переполнению таймера 1
- OCIE1A, OCIE1B — разрешение прерываний по совпадению A и B таймера 1
- TOIE2 — разрешение прерывания по переполнению таймера 2
Роль битов TOIE0 и OCIE0 в регистре TIMSK
Биты TOIE0 и OCIE0 в регистре TIMSK играют важную роль в управлении прерываниями таймера 0:
- TOIE0 (Timer/Counter0 Overflow Interrupt Enable) — разрешает прерывание при переполнении таймера 0. Когда этот бит установлен в 1, прерывание будет генерироваться каждый раз, когда значение таймера 0 переполняется (переходит от максимального значения к 0).
- OCIE0 (Timer/Counter0 Output Compare Match Interrupt Enable) — разрешает прерывание при совпадении значения таймера 0 с заданным значением сравнения. Когда этот бит установлен в 1, прерывание будет генерироваться каждый раз, когда значение таймера 0 совпадает с значением в регистре OCR0.
Почему нужны биты разрешения прерываний в TIMSK?
Биты разрешения прерываний в регистре TIMSK необходимы по нескольким причинам:
- Гибкость управления: Они позволяют программисту выборочно включать или отключать прерывания для конкретных событий таймера, не затрагивая работу самого таймера.
- Экономия ресурсов: Отключение неиспользуемых прерываний помогает избежать ненужных вызовов обработчиков прерываний, экономя процессорное время.
- Предотвращение конфликтов: Позволяет избежать нежелательных прерываний в критических участках кода.
- Динамическое управление: Дает возможность включать и выключать прерывания в процессе выполнения программы в зависимости от текущих задач.
Типичные конфигурации использования регистра TIMSK
Регистр TIMSK позволяет реализовать различные конфигурации работы с таймерами. Вот несколько типичных сценариев:
1. Простой подсчет времени без прерываний
В этом случае все биты TIMSK устанавливаются в 0. Таймер работает, но не генерирует прерываний. Программа может периодически проверять значение таймера для измерения временных интервалов.
TIMSK = 0x00; // Отключаем все прерывания таймера
2. Измерение длительных интервалов с прерыванием по переполнению
Для измерения длительных интервалов можно использовать прерывание по переполнению. В этом случае устанавливается бит TOIE0:
TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению таймера 0
В обработчике прерывания можно увеличивать программный счетчик для учета количества переполнений.
3. Генерация точных временных интервалов
Для генерации точных интервалов используется прерывание по совпадению. Устанавливается бит OCIE0:
TIMSK |= (1 << OCIE0); // Разрешаем прерывание по совпадению таймера 0
OCR0 = 250; // Устанавливаем значение сравнения
В этом случае прерывание будет генерироваться каждый раз, когда значение таймера достигнет 250.
4. Реализация ШИМ с использованием прерываний
Для реализации ШИМ можно использовать оба типа прерываний:
TIMSK |= (1 << TOIE0) | (1 << OCIE0); // Разрешаем оба прерывания
В обработчике прерывания по совпадению можно выключать выход, а в обработчике переполнения - включать, реализуя тем самым ШИМ-сигнал.Как правильно настраивать биты прерываний в TIMSK?
При настройке битов прерываний в регистре TIMSK следует придерживаться следующих рекомендаций:
- Определите, какие события таймера вам нужны для вашей задачи (переполнение, совпадение или оба).
- Настройте соответствующие биты в регистре TIMSK, используя операцию побитового ИЛИ:
TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению
TIMSK |= (1 << OCIE0); // Разрешаем прерывание по совпадению
- Убедитесь, что глобальные прерывания разрешены:
sei(); // Разрешаем глобальные прерывания
- Реализуйте соответствующие обработчики прерываний:
ISR(TIMER0_OVF_vect) { // Обработчик прерывания по переполнению } ISR(TIMER0_COMP_vect) { // Обработчик прерывания по совпадению }
Часто задаваемые вопросы о регистре TIMSK
Какой бит в TIMSK отвечает за прерывание по переполнению таймера 0?
За прерывание по переполнению таймера 0 отвечает бит TOIE0 (Timer/Counter0 Overflow Interrupt Enable) в регистре TIMSK.
Можно ли одновременно использовать прерывания по переполнению и по совпадению?
Да, можно одновременно использовать оба типа прерываний. Для этого нужно установить соответствующие биты в регистре TIMSK:
TIMSK |= (1 << TOIE0) | (1 << OCIE0);
Что произойдет, если не установить биты в TIMSK?
Если не установить соответствующие биты в регистре TIMSK, прерывания от таймера генерироваться не будут, даже если флаги прерываний в регистре TIFR будут установлены. Таймер будет продолжать работать, но без генерации прерываний.
Нужно ли очищать биты TIMSK после обработки прерывания?
Нет, биты в регистре TIMSK не нужно очищать после обработки прерывания. Они продолжают разрешать генерацию прерываний до тех пор, пока не будут явно сброшены программно.
Заключение
Регистр TIMSK играет ключевую роль в управлении прерываниями от таймеров в микроконтроллерах AVR. Правильное использование битов этого регистра позволяет гибко настраивать работу таймеров и эффективно обрабатывать связанные с ними события. Понимание назначения и принципов работы TIMSK необходимо для создания точных и эффективных временных систем в проектах на базе AVR микроконтроллеров.
timsk | МКОУ "Тымская ООШ"
Опубликовано автором timsk
Ребята нашей школы стали участниками традиционных лыжных гонок в селе Староюгино, посвященные памяти воина-интернационалиста Юрия Перемитина, который с детства занимался спортом.
16 февраля 2023 года спортсмены разных возрастов встретились на лыжне, чтобы продемонстрировать своё мастерство, спортивный азарт и волю к победе. И, конечно же, чтобы вспомнить трагическую историю семьи Перемитиных, потерявшей сына в Афганской войне, и почтить память Юрия, замечательного, трудолюбивого, жизнерадостного парня, который с честью выполнил свой воинский долг, оправдав звание командира взвода, и за боевые заслуги был награждён медалью «За отвагу» и орденом Красной Звезды посмертно.
На лыжне собрались около ста участников соревнований из Староюгинской, Новоюгинской, Тымской, Сосновской, Павловской школ, школы-интерната №1, школы №2 и ДЮСШ вместе с тренерами, членами судейской коллегии и болельщиками, которые с волнением и восхищением наблюдали за происходящим.
Для наших ребят это было первое выездное соревнование по лыжным гонкам, поэтому волнение у ребят было сильное, но в нужный момент смогли взять себя в руки и прошли гонку с хорошими результатами.
Гонка продолжалась несколько часов. Пока судьи подводили итоги, всех участников угощали вкусными булочками с чаем и конфетами.
Участвовало в соревнованиях 8 Тымских ребят:
Брагина Анастасия — 9 класс, забег 2 километра,
Марамошкина Варвара — 6 класс, забег 1 км,
Гаус Диана — 6 класс, забег 1 км.,
Марамошкин Арсений — 5 класс, забег 1 км.,
Юдина Юлия — 4 класс, забег 1 км.,
Савенко Сергей — 3 класс, забег 500 метров,
Панова Олеся — 3 класс, забег 500 метров.
И самый юный участник нашей команды
Смоленцев Дмитрий - 2 класс, забег 500 метров.Тымская команда привезла в школу три медали.
Серебренные медали получили Панова Олеся и Савенко Сергей, золотую медаль получил Смоленцев Дмитрий.МКОУ «Тымская ООШ» выражает благодарность МКОУ «Староюгинская ООШ» за приглашение на такое замечательное мероприятие и радушный прием.
Опубликовано автором timsk
14 февраля 2023 года на базе МКОУ «Вертикосская СОШ» был проведен Районный методический день учителей физической культуры и тренеров-преподавателей школ Каргасокского и Тымского образовательных округов по теме: «Организация условий, способствующих профессиональному и творческому росту педагога».
Участников Районного методического дня поздравила А.С. Гусева, директор МКОУ «Вертикосская школа». Школьники показали яркий, зажигательный танец, который подарил участникам заряд бодрости и положительные эмоции.
Уроки физической культуры, спортивные секции играют большую роль в образовательном процессе школ, оказывают огромное влияние на здоровье и физическую подготовку детей. Поэтому работа учителей физкультуры и тренеров спортивных секций требует профессионального подхода, который включает использование новейших методов и современных средств обучения. В ходе мероприятия преподаватели физической культуры и тренера-преподаватели провели: урок «Совершенствование элементов гимнастики и акробатики» (А.В. Астафьев, МКОУ «Сосновская ООШ») для учеников 3 –его класса и учебно-тренировочное занятие по дополнительному образованию школьников по теме: «Совершенствование технико-тактический действий в футболе» (П.В. Столяров, МБОУ «Каргасокская СОШ-интернат № 1).
Новосельцева Д.С. выступала с сообщением «Спорт в Тымской школе», подробно рассказав, какие виды спорта, секции, спортивные мероприятия есть в нашей школе. Также Дарья Сергеевна рассказала о спортивных традициях Тымской школы и спортивных предпочтениях детей.
Был представлен слайд-шоу фотографий ребят с занятий физической культуры. И в завершение своего выступления вместе с присутствующими на мероприятии отправились в виртуальную экскурсию «киноколлаж спортивных занятий».И.В. Кирин представил вниманию преподавателей опыт своей работы «Применение игрового портала shessking, lichess,chess.com для организации тренировочного процесса по виду спорта «Шахматы».
На заключительном этапе все участники районного методического дня получили сертификаты.
МКОУ «Тымская ООШ» выражает благодарность УООиП «Каргасокский район» за организацию районного методического дня и педагогическому составу МКОУ «Вертикосская СОШ» за гостеприимство и добрый прием.
Рубрика: Главная | Добавить комментарийОпубликовано автором timsk
Мы живём в удивительной стране: самой большой в мире по площади, уникальной по природным и культурным объектам, с великой историей и мужественными людьми. Российским учёным принадлежат величайшие научные открытия, произведениями великих русских поэтов и писателей, художников и композиторов восхищается весь мир.
И нам с вами важно осознавать эти особенности, чтобы ценить, сохранять, а в будущем и преумножать славу нашей страны. Ведь от всех нас зависит будущее нашей страны, будущее России!
Живут в России разные
Народы с давних пор.
Одним тайга по нраву,
Другим степной простор.
У каждого народа
Язык свой и наряд.
А Родина – Россия
У нас у всех одна. Рубрика: Главная | Добавить комментарий
Опубликовано автором timsk
По традиции наша новая учебная неделя началась с церемонии поднятия Государственного флага Российской Федерации.
Почетное право поднять флаг, было доверено активистам школы: ученице 6 класса Марамошкиной Варваре, ученице 4 класса Юдиной Юлии и ученице 3 класса Пановой Олесе.
Рубрика: Главная | Добавить комментарийОпубликовано автором timsk
Ешьте овощи и фрукты-
Это лучшие продукты.
Вас спасут от всех болезней.
Нет вкусней их и полезней.
Подружитесь с овощами,
И с салатами и щами.
Витаминов в них не счесть.
Значит, нужно это есть!
(Н. Довженко)
Рубрика: Главная | Добавить комментарийВ рамках недели старших классов по теме — «Великие люди России и мира», Дарья Сергеевна провела информминутку на тему: «Великие Российские спортсмены».
В России всегда большое внимание уделялось спорту. Необходимо помнить людей, прославивших нашу страну.
Самые знаменитые спортсмены России завоевали множество медалей, показали себя настоящими борцами, способными отстоять честь страны!Детям были представлены 16 Спортсменов, которые имеют многие спортивные награды, их имена на века останутся в истории спорта. Это Иван Поддубный – советский и российский профессиональный борец, который за 40 лет не проиграл ни одного поединка. Это Лариса Латынина, которая до 2012 года имела наибольшую коллекцию олимпийских медалей.
На этом мероприятии дети познакомились с уважаемыми российскими спортсмена, их заслугами, их деятельностью.
Был оформлен стенд «10 величайших шахматистов всех времён».
Открывает список Гарри Каспаров – ВЕЛИЧАЙШИЙ ИЗ ВЕЛИКИХ, а на 10 месте Вишванатан Ананд. Представлена краткая история шахматистов, их победы и заслуги.
Также представлен стенд «Герои нашего времени. Известные подвиги спасателей МЧС». Ведь люди, которые спасают чужие жизни, заслуживают звание «Великие люди России».
Нам есть на кого ровняться!
Рубрика: Главная | Добавить комментарийОпубликовано автором timsk
В преддверие общероссийского праздника «День Российской науки, который отмечается ежегодно 8 февраля с 1999 года, в нашей школе стартовала неделя старших классов. Развитие науки и великие открытия не свершились бы без огромного вклада людей — ученых. Поэтому темой недели старших классов мы выбрали «Великие люди России и мира». Начали мы наше путешествие с информминутки «Великие люди России и мира», где познакомились с знаменитыми именинниками февраля. Их оказалось так много и каждого ребята узнали, у нас не осталось сомнений, что этот праздник заслуживает нашего внимания. Временные рамки не позволили нам поближе поговорить о каждом в этот день, поэтому ребята по классам выбрали одного из именинников, с которым познакомились поближе, оформляя плакат с его биографией, достижениями и открытиями. В завершении работы 5 класс познакомили обучающихся с выдающимся именинником, день рождение которого приходится на 8 февраля — Дмитрием Ивановичем Менделеевым.
6 класса представили биографию и творчество французского писателя Жуль Верна. 7 класс — великие открытия Галелео Галилея и 9 класс — Владимира Ивановича Вернадского. Рубрика: Главная | Добавить комментарийОпубликовано автором timsk
Рубрика: Главная | Добавить комментарийОпубликовано автором timsk
С давних времён человек пытался ответить на вопросы: как устроен мир? Почему день сменяет ночь? Почему плавятся металлы? Почему идёт дождь, и летают птицы?
И со временем, отвечая на множество вопросов, люди построили корабли, автомобили и паровозы, посмотрели в небо сквозь линзы телескопов.
А сейчас мы уже привыкли, что книги стали электронными, телескопы отправляются в далёкий космос, а операции делает лазер.
И всё это стало возможным благодаря учёным.
Кто же такие учёные? Учёные – это люди, изучающие явления и объекты в области какой-то науки: физики, химии, астрономии, математики, медицины, истории и многих других.
Цель их работы – узнавать новое и изучать неизвестное в окружающем нас мире. И использовать эти знания на благо людей.
Так, например, изучая строение кожи акулы, учёные создали костюмы для пловцов с целью увеличения их скорости.
Благодаря химикам, были изобретены новые материалы, различного рода пластики.
В конце XX века российские учёные в Антарктиде обнаружили большое озеро подо льдом. Озеро назвали «Восток», по названию полярной станции, которая находится над ним.
Всё озеро находится под слоем льда толщиной около 4 километров, и было изолировано от внешнего мира более миллиона лет назад.
Пробы, собранные нашими учёными, помогут определить, какие живые организмы приспособились к жизни в таких суровых условиях. Ещё одно научное открытие российских учёных – самый большой космический радиотелескоп. Он позволяет эффективно изучать всё, что происходит в космосе.
И в наше время – наука и технологии продолжают стремительно развиваться. Множество открытий ещё впереди. И, возможно, какие-то открытия сделаете именно вы!
Рубрика: Главная | Добавить комментарий
Опубликовано автором timsk
Рубрика: Образование и воспитание | Добавить комментарийTimsk on Apple Music
Timsk on Apple Music- Algeria
- Angola
- Armenia
- Azerbaijan
- Bahrain
- Benin
- Botswana
- Cameroun
- Cape Verde
- Chad
- Côte d’Ivoire
- Congo, The Democratic Republic Of The
- Egypt
- Eswatini
- Gabon
- Gambia
- Ghana
- Guinea-Bissau
- India
- Iraq
- Israel
- Jordan
- Kenya
- Kuwait
- Lebanon
- Liberia
- Libya
- Madagascar
- Malawi
- Mali
- Mauritania
- Mauritius
- Morocco
- Mozambique
- Namibia
- Niger (English)
- Nigeria
- Oman
- Qatar
- Congo, Republic of
- Rwanda
- Saudi Arabia
- Senegal
- Seychelles
- Sierra Leone
- South Africa
- Sri Lanka
- Tajikistan
- Tanzania, United Republic Of
- Tunisia
- Turkmenistan
- United Arab Emirates
- Uganda
- Yemen
- Zambia
- Zimbabwe
- Australia
- Bhutan
- Cambodia
- 中国大陆
- Fiji
- 香港
- Indonesia (English)
- 日本
- Kazakhstan
- 대한민국
- Kyrgyzstan
- Lao People's Democratic Republic
- 澳門
- Malaysia (English)
- Maldives
- Micronesia, Federated States of
- Mongolia
- Myanmar
- Nepal
- New Zealand
- Papua New Guinea
- Philippines
- Singapore
- Solomon Islands
- 台灣
- Thailand
- Tonga
- Turkmenistan
- Uzbekistan
- Vanuatu
- Vietnam
- Armenia
- Österreich
- Belarus
- Belgium
- Bosnia and Herzegovina
- Bulgaria
- Croatia
- Cyprus
- Czech Republic
- Denmark
- Estonia
- Finland
- France (Français)
- Georgia
- Deutschland
- Greece
- Hungary
- Iceland
- Ireland
- Italia
- Kosovo
- Latvia
- Lithuania
- Luxembourg (English)
- Malta
- Moldova, Republic Of
- Montenegro
- Nederland
- North Macedonia
- Norway
- Poland
- Portugal (Português)
- Romania
- Россия
- Serbia
- Slovakia
- Slovenia
- España
- Sverige
- Schweiz
- Turkey
- Ukraine
- United Kingdom
- Anguilla
- Antigua and Barbuda
- Argentina (Español)
- Bahamas
- Barbados
- Belize
- Bermuda
- Bolivia (Español)
- Brasil
- Virgin Islands, British
- Cayman Islands
- Chile (Español)
- Colombia (Español)
- Costa Rica (Español)
- Dominica
- República Dominicana
- Ecuador (Español)
- El Salvador (Español)
- Grenada
- Guatemala (Español)
- Guyana
- Honduras (Español)
- Jamaica
- México
- Montserrat
- Nicaragua (Español)
- Panamá
- Paraguay (Español)
- Perú
- St. Kitts and Nevis
- Saint Lucia
- St. Vincent and The Grenadines
- Suriname
- Trinidad and Tobago
- Turks and Caicos
- Uruguay (English)
- Venezuela (Español)
- Canada (English)
- Canada (Français)
- United States
- Estados Unidos (Español México)
- الولايات المتحدة
- США
- 美国 (简体中文)
- États-Unis (Français France)
- 미국
- Estados Unidos (Português Brasil)
- Hoa Kỳ
- 美國 (繁體中文台灣)
avr - Полезность некоторых битов в регистре TIMSK
спросил
Изменено 5 лет назад
Просмотрено 784 раза
\$\начало группы\$
В регистре TIMSK
есть вещи, которые меня смутили. Согласно даташиту на Atmega32:
Когда бит TOIE0 записывается в единицу, а бит I в регистре состояния установлен (единица), прерывание по переполнению таймера/счетчика 0 разрешено.
А дальше пишет что выполняется соответствующее прерывание, а именно TOV0
, в регистре ТИФР
.
Зачем вообще нужен бит TOIE0
? Если он включен аппаратно, и я не могу его отключить (ну, я мог бы, записав в него логическую 1, но по какой причине/результату?), то почему он вообще был встроен в реестр? То же самое верно и для других битов, таких как OCIE0
в регистре TIMSK
и соответствующий флаг в регистре TIFR
, OCF0
. Я не изучал другие биты в регистре TIMSK
, но пока первые два бита меня смутили.
\$\конечная группа\$
7
\$\начало группы\$
Этот бит регистра TIMSK управляет прерыванием таймера/счетчика 0 по переполнению 9. 0048 будет включен или нет. Важно, если вы собираетесь кодировать подпрограмму обслуживания прерываний (ISR) для TC0, тогда вам нужно 1
в этом бите, чтобы разрешить запуск прерывания по переполнению.
\$\конечная группа\$
\$\начало группы\$
Биты разрешения прерывания сообщают, когда вы хотите получить прерывание.
Типичные конфигурации:
Прерывание не требуется. Приложение просто оставляет таймер включенным и просматривает значение счетчика всякий раз, когда происходит что-то еще, чтобы узнать, сколько времени это заняло. Тогда все биты IE равны нулю.
Измерение длительных интервалов. Вас по-прежнему интересует только то, сколько времени что-то заняло, но это может быть много времени, и вы ожидаете, что счетчик переполнится. Затем вы включаете бит
TOIE0
, и ваш обработчик прерываний программно реализует биты более высокого порядка в счетчике.Измерение точных интервалов. Вы запускаете таймер, устанавливаете значение сравнения, затем включаете
OCIE0
и флаг автоматического сброса. Вы получаете прерывание каждый раз, когда компаратор совпадает, и таймер перезапускается, поэтому у вас есть четко определенный интервал между прерываниями.ШИМ. Вы устанавливаете как
TOIE0
, так иOCIE0
, затем вы получаете прерывания, когда счетчик соответствует значению сравнения и когда он переполняется. Когда счетчик совпадает, вы отключаете выход, когда происходит переполнение, вы включаете его.
\$\конечная группа\$
Зарегистрируйтесь или войдите
Зарегистрироваться через Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.avr-libc: iocompat.h Исходный файл
1 /*
2 * ---------------------------------------------- ------------------------------------------------------------
3 * " THE BEER-WARE LICENSE" (Revision 42):
4 *
5 * можете делать с этим материалом все, что захотите. Если мы когда-нибудь встретимся, и ты считаешь, что
6 * это того стоит, ты можешь купить мне пиво взамен. Йорг Вунш
7 * ----------------------------------------------------------- --------------------------------
8 *
9 * Определения совместимости функций ввода/вывода для различных AVR.
10 *
11 * $Id: iocompat_8h_source.html,v 1.1.1.7 2022/01/29 09:22:00 joerg_wunsch Exp $
12 */
13
14 #if! Определено (iocompat_h)
15 #define iocompat_h 1
16
17/ *
18 * Регулирование специфики для устройства:
9 *
20 * * Предоставьте определения для расположения порта/контакта OCR1[A],
21 * имя регистра OCR, управляющего ШИМ, и отрегулируйте прерывание
22 * имена векторов, которые отличаются от используемых в demo. c
23 * [TIMER1_OVF_vect].
24 */
25 #if defined(__AVR_AT90S2313__)
26 # define OC1 PB3
27 # define OCR OCR1
28 # define DDROC DDRB
29 # define TIMER1_OVF_vect TIMER1_OVF1_vect
30 #elif defined(__AVR_AT90S2333__ ) || Defined(__AVR_AT90S4433__)
31#define OC1 PB1
32#Define DDROC DDRB
33#Define OCR OCR1
34#elifdefined(__AVR_AT90S4414__)| определено (__AVR_AT90S8515__) || \
35 определено (__AVR_AT90S4434__) || определено (__AVR_AT90S8535__) || \
36 определено (__AVR_ATmega163__) || определено (__AVR_ATmega8515__) || \
37 определено (__AVR_ATmega8535__) || \
38 определено (__AVR_ATmega164P__) || определено (__AVR_ATmega324P__) || \
39 определено (__AVR_ATmega644__) || определено(__AVR_ATmega644P__) || \
40 определено (__AVR_ATmega1284P__)
41 # определить OC1 PD5
42# DEFINE DDROC DDRD
43# Определите OCR OCR1A
44# IF! Определено (TIMSK) / * Новый Atmegas * /
45# DEFINE TIMSK1
46# ENDIFT
47 #ELIFENIFINED (__ER_8
46# endif
47 #ELIFINIFINE (__ER_862 46# endif
47. ) || определено (__AVR_ATmega48__) || \
48 определено (__AVR_ATmega88__) || определено(__AVR_ATmega168__)
49 # определить OC1 PB1
50 # определить DDROC DDRB
51 # определить OCR OCR1A
52 # if !defined(TIMSK) /* ATmega48/88/168 */
53 # define TIMSK TIMSK1
54 # endif /* !defined(TIMSK) */
55 #elifdefined(__900_ATtiny23900_5) 56 # определить OC1 PB3
57 # определить OCR OCR1A
58 # определить DDROC DDRB
59 #elifdefined(__AVR_ATtiny24__) || определено (__AVR_ATtiny44__) || \
60 определенный (__AVR_ATtiny84__)
61 # определить OC1 PA6
62 # define DDROC DDRA
63 # if !defined(OCR1A)
64 # /* обход имени с ошибкой в avr-libc 1.4.[0..1] */
65 # define OCR OCRA1
6 60002 64 # else67# Define OCR OCR1A
68# ENDIF
69# Определите TIMSK TIMSK1
70# Определите TIMER1_OVF_VECT TIM1_OVF_VECT / * XML и DataShiet MAISTINGE * /
71 #ELIFININED (__ERININGEINGEINGEIINGEIINGENTIIN определено (__AVR_ATtiny45__) || \
72 defined(__AVR_ATtiny85__)
73 /* Таймер 1 на этих устройствах является только 8-битным таймером. */
74# DEFINE OC1 PB1
75# DEFINE DDROC DDRB
76# DEFINE OCR1A
77# DEFINE TCCR1A TCCR1
78# DEFINE TCCR1B1B1
79# DEFINE DEFINER11 255 /* возможен только 8-битный ШИМ */81 # определить TIMER1_PWM_INIT _BV(PWM1A) | _BV(COM1A1)
82 # define TIMER1_CLOCKSOURCE _BV(CS12) /* использовать прескалер 1/8 */
83 #elif Defined(__AVR_ATtiny26__)
84 /* Довольно близко к ATtinyX5, но достаточно отличается для своего собственного раздела. */
85# DEFINE OC1 PB1
86# DEFINE DDROC DDRB
87# DEFINE OCR1A
88# DEFINE TIMER1_OVF_VECT TIMER1_OVF1_VECT
89# DEFINE TIMER1_TOP 255/ *ВЫСОКОЙ БИТ 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT 8-BIT PWM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # определить TIMER1_PWM_INIT _BV(PWM1A) | _BV(COM1A1)
91 # определить TIMER1_CLOCKSOURCE _BV(CS12) /* использовать прескалер 1/8 */
92 /*
93 * Без установки OCR1C в TOP ATtiny26 не вызывает прерывание
94 * переполнения в режиме PWM.
95 */
96 # определить TIMER1_SETUP_HOOK() OCR1C = 255
97 #elifdefined(__AVR_ATtiny261__) || определено (__AVR_ATtiny461__) || \
98 определено (__AVR_ATtiny861__)
99 # определить OC1 PB1
100 # определить DDROC DDRB
101 # определить OCR OCR1A
102 # определить TIMER1_PWM_INIT _BV(WGM10) | _BV(PWM1A) | _BV(COM1A1)
103 /*
104 * Хотя на этих устройствах таймер 1 может работать в 10-битном режиме,
105 * обработка 10-битных регистров ввода-вывода сложнее, чем
106 * что 16-разрядных регистров других устройств AVR (комбинированные
107 * 16-разрядные операции ввода-вывода невозможны), поэтому мы ограничиваем эту демонстрацию 8-разрядными
108 * режим довольно стандартный.
109 */
110 # определить TIMER1_TOP 255
111 # определить TIMER1_CLOCKSOURCE _BV(CS12) /* использовать прескалер 1/8 */
112 #elif Defined(_3_AVR_ATmega)| Defined(__AVR_ATmega16__)
113#define OC1 PD5
114#Define DDROC DDRD
115#Define OCR OCR1A
116#elifdefined(__AVR_ATmega64__) || определено (__AVR_ATmega128__) || \
117 определено (__AVR_ATmega165__) || определено (__AVR_ATmega169__) || \
118 определено (__AVR_ATmega325__) || определено (__AVR_ATmega3250__) || \
119 определено (__AVR_ATmega645__) || определено (__AVR_ATmega6450__) || \
120 определено (__AVR_ATmega329__) || определено (__AVR_ATmega3290__) || \
121 определено (__AVR_ATmega649__) || определено (__AVR_ATmega6490__) || \
122 определено (__AVR_ATmega640__) || \
123 определено (__AVR_ATmega1280__) || определено (__AVR_ATmega1281__) || \
124 определено (__AVR_ATmega2560__) || определено (__AVR_ATmega2561__) || \
125 Определено (__ avr_atmega32u4__)
126# define oc1 pb5
127# define ddroc ddrb
128# define ocr ocr1a
129# defined (pb5) / * * * * 130 # define PB5 5
131 # endif
132 # if !defined(TIMSK) /* new ATmegas */
133 # define TIMSK TIMSK1
134# endif
135 #else
136# Ошибка "Не знаю, какой вид MCU вы собираетесь для"
137 #endif
138
139/
старые AVR здесь.