Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'таймер на атмега8'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Автомобильная электроника
    • Питание
    • Ремонт
    • Системы охраны и наблюдения. Личная безопасность
    • Роботы и модели на ДУ-управлении
    • Световые эффекты и LED
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Металлоискатели
    • Автоматика
    • Электрика
    • Промышленная электроника
    • Измерительная техника
    • Мастерская радиолюбителя
    • КВ и УКВ радиосвязь
    • Радиопередатчики
    • Сотовая связь
    • Спутниковое ТВ
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Схемотехника для профессионалов
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • Arduino, ESP32, ESP8266, Raspberry Pi
    • AVR
    • STM32
    • PIC
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Курилка
    • Сайт Паяльник и форум
    • FAQ (Архив)
    • Технический английский (English)
    • Личные блоги
    • Наши проекты для Android и Web
    • Корзина
    • Конкурсы сайта с призами
    • Вопросы с VK
  • Переделки ATX->ЛБП
  • Переделки разные темы
  • Киловольты юмора Юмор в youtube

Блоги

  • Твори, выдумывай, пробуй.
  • fant's блог
  • Ток покоя
  • Где купить велпатасвир, epclusa, velpanat, velasof, софосбувир в России по лучшей цене.
  • Китайские бренды видеокамер
  • Создание Маленькой Мастерской
  • Блог администрации
  • STEN50's блог
  • Изучение, наладка, исследование
  • MiSol62's блог
  • короткие записки по ходу дела
  • Программирование AVR и PIC блог
  • Стабилизированный выпрямитель тока ТЕС 12-3-НТ
  • Блог getshket
  • ТНПА
  • welder's блог
  • blog cheloveka loshadi
  • OPeX3's блог
  • Подводная робототехника
  • Сабвуфер и акустика.
  • Радиоуправляемая машина
  • Консультация психолога сексолога онлайн, психолог онлайн
  • Nokian блог
  • Оповещения Dermabellix Scam !! Не покупайте это !!!
  • Cheerful Boss' блог
  • Cheerful Boss' блог
  • VLAD1996B's блог
  • "Коллективное увеличение продаж"
  • Dudok's блог
  • "Коллективное увеличение продаж"
  • Goluboglazyi's блог
  • Прибор определяющий электролитический конденсатор на работоспособность.
  • Mosfet@'s блог
  • mazzi's блог
  • Лучшие компьютерные игры 2017
  • Marchenkokerya's блог
  • Заметки начинаущего аудиофила
  • Почти бесполезные проги
  • Светлый блог.
  • дядюшка Филин's блог
  • Дневники нуба
  • satyrn's блог
  • Люк. В погреб.
  • Фильм Дом Солнца
  • Светодиодная лента B-LED 2835-120 W белая негерметичная
  • Само-Реплицируещиеся Производственные Системы
  • Блог от Eknous
  • РВС's блог
  • Den_R's blog
  • РВС's блог
  • Чтото крутое и про криворукость
  • ekadom's блог
  • Проектирование любых чертежей
  • Lisovic's блог
  • Блог уже не юного радиогубителя
  • денди
  • eHouse
  • zaregan's блог
  • Схемотехника УНЧ с низковольтным питанием на примере приёмников фирмы Grundig
  • То, что в руки попало.
  • Блок питания водородного генератора и все что с ним связано
  • slava_va@mail.ru's блог
  • Блог alex123al97
  • slava_va@mail.ru's блог
  • параленое соединение КРЕНок или как сделать стабилизатор напряжения 24-12в
  • Свободная генерация Андрея Мельниченко
  • реобас
  • Модернизации системы впрыска на 555
  • помощь
  • Копии схем и печатных плат устройств попавшие ко мне
  • MBM75's блог
  • Буду
  • lagutai's блог
  • Мои проекты.
  • lagutai's блог
  • Трудовик
  • vOVK@'s блог
  • токарь-радиолюбитель
  • azlk3000's блог
  • Коллизия сингулярности
  • SmallAlex's блог
  • Вопрос по Цифровому усилителю мощности звука 2x12 Вт YDA138-E
  • bebulo's блог
  • Простейший макет станка термо-вакуумной формовки
  • Блог им. pryanic
  • peratronika
  • Zer's блог
  • MEDBEDb's
  • Гнездо кукушки
  • hiMiческий блог
  • luna_kamen's блог
  • Изучаем USI на основе сверхэкономичного прототипа
  • Алекс-Юстасу
  • SUBWOOFER.RU
  • kot sansher's блог
  • Поделки стареющего пионера
  • доброжелатель2's блог
  • Grig96. Полезные заметки.
  • Attiny 0-ой и 1-ой серии (Attiny817, 1614 и прочие)
  • pavlo's блог
  • MSP430FR
  • viper2's блог
  • Моя Электро Чинильня
  • Selyk's блог
  • VoltServis.ru
  • kpush's блог
  • OM3 на новых платах.
  • конни's блог
  • Электронный экстазёр "MASHKA".
  • ptimai's блог
  • noc functionalities
  • Sun kapitane's blog
  • ODEON AV-500
  • Sun kapitane's blog
  • Логика на транзисторах,диодах, счетние тригери на транзисторах
  • AleksandrBulchuck's блог
  • Качественные окна от производителя
  • KRALEX's блог
  • Javaman's projects
  • SeVeR36's блог
  • 3232
  • Пять копеек.
  • Az@t's блог
  • Индукционный нагрев
  • Схемы разных устройств
  • Кардшаринг SAT ТВ блог
  • PENTAGRID SAYS
  • Ещо раз о "Кощее 5И"
  • Игровые автоматы на официальном сайте
  • коллекционер
  • дямон's блог
  • Ламповый усилитель и акустика для озвучки семейных мероприятий
  • дямон's блог
  • tiosmutoutrup1971
  • Светомузыкальная установка для новачков
  • Лучшие игры для ПК скачать бесплатно
  • sqait's блог
  • Блокнотик
  • Gubernator's блог
  • Записки электрика
  • Полстакана
  • Vrednyuka
  • Интегральные микросхемы
  • grigorik's блог
  • Интегральные микросхемы
  • VMWare удобство и безопастность
  • Профсоюз обычных пользователей
  • rtfcnf's блог
  • Гидроэнергетика в России: отечественные гидроэлектростанции, типы и характеристики
  • VMWare удобство и безопастность
  • Лайфхаки от Кати
  • Kinh chong anh sang xanh gia re
  • ukabumaga's блог
  • АО "Диполь Технологии"
  • artos5's блог
  • блог
  • Kraftwerk's блог
  • 1
  • Kraftwerk's блог
  • Как выбрать точечный светильник?
  • мастерская ky3ne4ik'а
  • Работа с микроконтроллером Atmega8
  • Aronsky
  • Игорь Камский
  • Диммеры
  • 5В = 1,5+3
  • vitiv' блог
  • Ремонт цифровой панели прибора тойоты марк 100. Замена транзистора 36 ( SOT- 23 )PNP
  • Все СРО России
  • 300writers
  • Металлоискатель Tracker FM-1D3
  • Былое
  • Создание монстра "Blaster 8920"
  • 2Smart Cloud Blog
  • EmmGold's блог
  • 2Smart Cloud Blog
  • ivan15961596's блог
  • Кумир у-001
  • ivan15961596's блог
  • My blog
  • Интернет радио в машину
  • SamON
  • Помогите люди добрые
  • AI
  • Помогите подключить маяк 231 стерео.
  • Гаусс-пушки
  • Название
  • 7400's блог
  • Как я собирал свой первый импульсный источник питания
  • Віталік Приходько_130349's блог
  • Lithium ECAD - российская САПР печатных плат
  • Евгений Малюта's блог
  • ПИшу свои мысли
  • werekpro
  • Venera Electronica
  • afurgon's блог
  • Выбросьте это в парашу!
  • odaplus' блог
  • Zvik's блог
  • Smart overload protection power amplifier «Zita (Z) ThermalTrak™»
  • радиоэлектоника
  • BoBka777's блог
  • МиУЗР - Модернизация и Усовершенствование Звуковой Радиотехники .
  • aleksey9900's блог
  • Лабораторная блок питания
  • Нашел статью о пайке проводов к светодиодов
  • Китайский городовой
  • Костик0's блог
  • УФ лампа для маникюра SK-818
  • 8 Contrasts Between Web Servers and Application Servers
  • Конденсатор
  • Новости, обзоры и другая полезная информация от ИМ "Радиодар"
  • Цветомузыка
  • OPeX3's блог
  • Sem2012's блог
  • это не хлам – это часть моей жизни
  • Контроллер на базе ПК (OS Win LTSC)
  • OdiS' блог
  • Хитрости строителя
  • aleksfil's блог
  • Color Preamp - предусилитель на лампах 12AU7
  • Проблема с зарядкой литиевого аккумулятора для шуруповерта 21 вольт
  • EmmGold's блог; AVR
  • Микроэлектроника
  • З
  • CH32V
  • Блог Плотникова Ильи
  • Бесплатные радиодетали с Алиэкспресс
  • Повышение качества и снижение временных затрат при испытаниях электронных компонентов с помощью отечественного испытательного оборудования
  • Источники питания MEAN WELL
  • Жизнь и рыбалка
  • yureika's блог
  • Глушитель спутникогого интернета
  • Всякая всячина
  • Для начинающих
  • Ignite your senses with the grace and allure of female escorts near Laguna Niguel
  • Fumitox's блог
  • Наш-RXT6 топ-10 на январь 2023: Лучшие сайты онлайн казино в России
  • Лицензионные казино онлайн в 2024 году на реальные деньги
  • Самоделки блог
  • Домашняя автоматика
  • Интересное и полезное
  • Ремонт Амфитон 35у-101с
  • ульян's блог
  • Свет в грузовой газели
  • Блок питания 0-12В для начинающих
  • Dimko's блог
  • Иван Самец's блог
  • SolomonVR's блог
  • gendzz's блог
  • fleh138's блог
  • Электроника forever!
  • aleksejhozhenets' блог
  • aleksejhozhenets' блог
  • diserver блог
  • aleksey290476 блог
  • ВАРГ's блог
  • Люстра Чижевского
  • wanes101's блог
  • voldemar2009's блог
  • Jana's блог
  • Jana's блог
  • Рена Искужин's блог
  • abduraxman7's блог
  • Kuzumba's блог
  • Самопальник
  • заработок через интернет на запчасти!!!
  • electric.kiev's блог
  • lolo's блог
  • leravalera's блог
  • ideomatic's блог
  • приглашаем на работу инженера-радиоэлектронщика
  • FREEMAN_77's блог
  • Блог автоэлектрика
  • Блог начинающего электронщика
  • Dersu's блог
  • Электроэнергия и её экономия!
  • Электроэнергия и её экономия!
  • Семён Ковалёв's блог
  • piligrim-666's блог
  • помогите с партотивной калонкой
  • помогите с партотивной калонкой
  • Музыка в стене.
  • m-a-r-i-k-a's блог
  • cosmos44's блог
  • oyama14's блог
  • блог Виталика!
  • ciornii's блог
  • Великий и Ужастный блог
  • Denis__Ricov's блог
  • Universal12's блог
  • Sprut's блог
  • Alexeyslav's блог
  • cosmosemo's блог
  • Заметки радиолюбителя
  • Falconist. Мемуары
  • Блог MillyVolt
  • усилитель импульсов
  • Panasonic sa-ak 18
  • Простое радиоуправление из того, что было.
  • 35house
  • Блог Радиочайника
  • Блохи iiiytnik'a
  • Хороший сервис- Бяка
  • Аудиолаборатория "Философия Звука"
  • ОколоCADовое
  • Блог KVLADS
  • Короп блог
  • Автоматизация котла Protherm MTV
  • Бложиг Касянича
  • Обо всём
  • Эксперимент
  • No electronics
  • ПРИРОДА СВЕТА и ЕГО ВОЗМОЖНОСТИ
  • Генератор на xr2206
  • HTPOWLASER
  • Когда-то были очень популярны у радиолюбителей
  • AVR - микроконтроллеры
  • Микроконтроллер
  • Самодельный автосимулятор
  • Интернет-магазин керамической плитки «Боярская Плитка»
  • Разработка электронных метрических мишеней IPSC для мягкой пневматики (страйкбол)
  • ,

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Skype


ICQ


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено: 1 результат

  1. Доброго времени суток всем! Собираю таймер на меге8 вот этот: http://c2.at.ua/load/avr/tajmer_na_atmega8/17-1-0-25 прошивка с архива работает идеально, но когда компилирую текст с исходника полученная прошивка не работает как должно, а именно не выводдится индикация секунд если остаётся менее часа до отключения и нет сигнала на РС4 когда остаётся 20 секунд до завершения! Индикацию секунд я вывел и сигнал на РС4 тоже только не мигает светодиод ! Помогите!! Вот собственно код исправленный мною; /* * tim.c * * Created: 04.04.2017 17:37:57 * Author: ARSEN */ #include <avr/io.h> // Most basic include files #include <avr/interrupt.h> // Add the necessary ones //#include <avr/signal.h> // here //#define __AVR_ATmega8__ #include <avr/pgmspace.h> #include <string.h> //****************************************************************************** // Определение констант //****************************************************************************** #define IND_PORT PORTD #define IND_DDR DDRD #define IND_COM PORTB #define IND_CDDR DDRB #define IND_PIN PINB #define IND_CA1 PB1 // Левый индикатор #define IND_CA2 PB2 #define IND_CA3 PB3 #define IND_CA4 PB4 // Правый #define KEY_PORT PORTC #define KEY_DDR DDRC #define KEY_PIN PINC #define KEY_HOURS PC0 #define KEY_MINUTES PC1 #define KEY_RUN PC2 #define KEY_RESET PC3 #define JUMPER PB0 // Джампер, определяющий работу после пропадания питания #define CHECK_POWER PB5 // Вход для контроля наличия питания #define SIGNAL_OUT PC4 // Выход для контрольного светодиода или пищалки #define LOAD PC5 // Выход управления нагрузкой // Значения для таймеров #define T0_VALUE (255-78) #define KEY_DEBOUNCE 100 // Флаги #define f_WholeSec 0 // Флаг указывает, что отсчитана целая секунда. // Используется для мигающей точки, переключается // каждые 0.5 секунд #define f_CountDown 1 // Флаг, указывающий на то, что происходит обратный // отсчет. Используется для гашения ведущих нулей в // индикации часов. #define f_TimerRunning 2 // Флаг, указывающий на то, что таймер был запущен #define f_Power 3 // Флаг наличия общего питания #define f_Signal 4 // Флаг работы сигнализации (звуковой или световой) #define IND_OA 1 // Общий анод const unsigned char DIGITS_OA[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //****************************************************************************** // Глобальные переменные //****************************************************************************** //typedef struct { // unsigned char Seconds; // unsigned char Minutes; // unsigned char Hours; //} time; //volatile time Time; volatile unsigned char m_ucSecOnes = 0; volatile unsigned char m_ucSecTens = 0; volatile unsigned char m_ucMinOnes = 0; volatile unsigned char m_ucMinTens = 0; volatile unsigned char m_ucHrsOnes = 0; volatile unsigned char m_ucHrsTens = 0; volatile unsigned char sm_ucIndNum = 0; volatile unsigned char m_ucFlags = 0; volatile unsigned char ucKey_Run_Timeout = 0; volatile unsigned char ucKey_Hours_Timeout = 0; volatile unsigned char ucKey_Mins_Timeout = 0; //****************************************************************************** // Прерывания //****************************************************************************** // Прерывание по переполнению таймера Т0, здесь мы выводим часы и минуты на // индикатор, а также опрашиваем кнопки. ISR(TIMER0_OVF_vect, ISR_NOBLOCK){ // Разрешены вложенные прервания volatile unsigned char ucTemp = 0; // //volatile unsigned char ucKey_Run_Timeout; TCNT0 = T0_VALUE; // Перезагрузка таймера sm_ucIndNum++; if (sm_ucIndNum > 3){ sm_ucIndNum = 0; } IND_COM &= ~((1<<IND_CA1)|(1<<IND_CA2)|(1<<IND_CA3)|(1<<IND_CA4)); IND_PORT = 0xFF; // Во время работы таймера, когда идет отсчет, убираем ведущие ноли. // Если пропало питание (очищен флаг питания) индикация отключена switch (sm_ucIndNum){ case 0: {IND_COM |= (1<<IND_CA1); // Индикация десятков часов ucTemp = DIGITS_OA[m_ucHrsTens]; break;} case 1: {IND_COM |= (1<<IND_CA2); // Индикация единиц часов ucTemp = DIGITS_OA[m_ucHrsOnes]; // Здесь мы мигаем точкой! если таймер запущен if (m_ucFlags & (1 << f_TimerRunning)) if (m_ucFlags & (1 << f_WholeSec)){ ucTemp &= 0x7F; } break;} case 2: {IND_COM |= (1<<IND_CA3); // Индикация десятков минут ucTemp = DIGITS_OA[m_ucMinTens]; break;} case 3: {IND_COM |= (1<<IND_CA4); // Индикация единиц минут ucTemp = DIGITS_OA[m_ucMinOnes]; break;} } // А это мои изменения if (m_ucFlags & (1 << f_TimerRunning)){ // Если таймер запущен if(( m_ucHrsOnes<1)&&( m_ucHrsTens==0 )){ // и осталось менее одного часа, switch (sm_ucIndNum){ // то на индикаторы выодятся минуты и секунды, индикатор приобретает форму формата ММ.СС case 0: {IND_COM |= (1<<IND_CA1); // Индикация десятков минут ucTemp = DIGITS_OA[m_ucMinTens]; break;} case 1: {IND_COM |= (1<<IND_CA2); // Индикация единиц минут ucTemp = DIGITS_OA[m_ucMinOnes]; // Здесь мы мигаем точкой! if (m_ucFlags & (1 << f_TimerRunning)) // если таймер запушен if (m_ucFlags & (1 << f_WholeSec)){ // то мигаем точкой ucTemp &= 0x7F; } break;} case 2: {IND_COM |= (1<<IND_CA3); // Индикация десятков секунд ucTemp = DIGITS_OA[m_ucSecTens]; break;} case 3: {IND_COM |= (1<<IND_CA4); // Индикация единиц секунд ucTemp = DIGITS_OA[m_ucSecOnes]; break;} } } } if (IND_PIN & (1 << CHECK_POWER)){ // Если пропало питание IND_PORT = ucTemp; } else{ IND_PORT = 0xFF; // отключаем индикацию } // Опрос кнопки Пуск/Пауза (KEY_RUN) if((m_ucSecOnes==0)&&(m_ucSecTens==0)&&(m_ucMinOnes==0)&&(m_ucMinTens==0)&&(m_ucHrsOnes==0)&&(m_ucHrsTens==0)){ m_ucFlags &= ~(1 << f_CountDown); m_ucFlags &= ~(1 << f_TimerRunning); KEY_PORT &= ~(1 << LOAD); KEY_PORT&=~(1 << SIGNAL_OUT);} if (!(KEY_PIN & (1 << KEY_RUN))){ if (ucKey_Run_Timeout == 0){ // Установка флага работы таймера // Этот флаг служит для блокировки кнопок и очищается // в обработчике прерывания таймера Т2 m_ucFlags ^= (1 << f_CountDown); m_ucFlags |= (1 << f_TimerRunning); ucKey_Run_Timeout = 2*KEY_DEBOUNCE; // Устанавливаем флаг питания m_ucFlags |= (1 << f_Power); // Переключаем нагрузку if (m_ucFlags & (1 << f_CountDown)) KEY_PORT |= (1 << LOAD); else KEY_PORT &= ~(1 << LOAD); KEY_PORT&=~(1 << SIGNAL_OUT); } } // Опрос кнопки настройки Часов // Только если не установлен флаг работы таймера if (!(m_ucFlags & (1 << f_TimerRunning))){ if (!(KEY_PIN & (1 << KEY_HOURS))){ if (ucKey_Hours_Timeout == 0){ m_ucHrsOnes ++; if (m_ucHrsOnes > 9){ m_ucHrsOnes = 0; m_ucHrsTens ++; if (m_ucHrsTens > 9) m_ucHrsTens = 0; } ucKey_Hours_Timeout = KEY_DEBOUNCE; } } } // Опрос кнопки настройки минут // Те же условия if (!(m_ucFlags & (1 << f_TimerRunning))){ if (!(KEY_PIN & (1 << KEY_MINUTES))){ if (ucKey_Mins_Timeout == 0){ m_ucMinOnes ++; if (m_ucMinOnes > 9){ m_ucMinOnes = 0; m_ucMinTens++; if (m_ucMinTens > 5) m_ucMinTens = 0; } ucKey_Mins_Timeout = KEY_DEBOUNCE; } } } // Опрос кнопки останова таймера if (!(KEY_PIN & (1 << KEY_RESET))){ m_ucFlags &= ~(1 << f_CountDown); // Очистка флагов m_ucFlags &= ~(1 << f_TimerRunning); KEY_PORT&=~(1 << SIGNAL_OUT); // отключаем сигнал с РС4 m_ucHrsTens = 0; // это тоже мои изменения если нажать на сброс то очищаем и время m_ucHrsOnes = 0; m_ucMinTens = 0; m_ucMinOnes = 0; m_ucSecTens = 0; m_ucSecOnes = 0; // Отключаем нагрузку KEY_PORT &= ~(1 << LOAD); // } // Проверка наличия питания проводится только, если таймер в работе if (m_ucFlags & (1 << f_TimerRunning)){ if (IND_PIN & (1 << CHECK_POWER)){ // power ok // Проверяем состояние джампера // и в зависимости от состояния флага питания делаем следующее if (!(m_ucFlags & (1 << f_Power))){ // Если питание пропадало if (IND_PIN & (1 << JUMPER)){ // Если джампер не замкнут Останавливаем отсчет // нагрузка отключена m_ucFlags &= ~(1 << f_CountDown); KEY_PORT &= ~(1 << LOAD); } else{ // Если джампер замкнут на 0 // Продолжаем отсчет, включаем нагрузку m_ucFlags |= (1 << f_CountDown); KEY_PORT |= (1 << LOAD); } // Снова выставляем флаг, что с питанием все ок. if (IND_PIN & (1 << CHECK_POWER)) m_ucFlags |= (1 << f_Power); } } else{ //power fail m_ucFlags &= ~(1 << f_Power); // Отключаем нагрузку KEY_PORT &= ~(1 << LOAD); // Выставляем флаг паузы отсчета m_ucFlags &= ~(1 << f_CountDown); } } if (ucKey_Run_Timeout > 0) ucKey_Run_Timeout--; if (ucKey_Hours_Timeout > 0) ucKey_Hours_Timeout--; if (ucKey_Mins_Timeout > 0) ucKey_Mins_Timeout--; } // Таймер Т2 работает все время, останавливается или запускается // только отсчет времени. // Прерывание по переполнению таймера Т2 ISR(TIMER2_OVF_vect){ // сбрасываем счетный регистр таймера/счетчика T0 m_ucFlags ^= (1 << f_WholeSec); // Переключаем флаг if (m_ucFlags & (1 << f_CountDown)){ if (m_ucFlags & (1<<f_WholeSec)){ if((m_ucSecOnes==7)&&( m_ucSecTens==0)&&( m_ucMinOnes==0)&&( m_ucMinTens==0)&&( m_ucHrsOnes==0)&&( m_ucHrsTens==0 )) KEY_PORT|=(1 << SIGNAL_OUT); // здесь мы выводим сигнал на порт PC4 когда остаётся менее 7ми секунд до отключения m_ucSecOnes --; if (m_ucSecOnes > 9){ m_ucSecOnes = 9; m_ucSecTens --; if (m_ucSecTens > 5){ m_ucSecTens = 5; m_ucMinOnes --; if (m_ucMinOnes > 9){ m_ucMinOnes = 9; m_ucMinTens --; if (m_ucMinTens > 5){ m_ucMinTens = 5; m_ucHrsOnes --; if(m_ucHrsOnes > 9){ m_ucHrsOnes = 9; m_ucHrsTens --; if(m_ucHrsTens > 9){ // Здесь мы дошли до конца отсчета m_ucHrsTens = 0; m_ucHrsOnes = 0; m_ucMinTens = 0; m_ucMinOnes = 0; m_ucSecTens = 0; m_ucSecOnes = 0; // Очищаем флаг отсчета m_ucFlags &= ~(1 << f_CountDown); m_ucFlags &= ~(1 << f_TimerRunning); KEY_PORT &= ~(1 << LOAD); // отключаем нагрузку KEY_PORT&=~(1 << SIGNAL_OUT); // отключаем сигнал РС4 } } } } } } } } }; //****************************************************************************** // Функции //****************************************************************************** //****************************************************************************** // Main program //****************************************************************************** int main(void) { //*************************************************************************** // Инициализация периферии //*************************************************************************** //int temp0, temp1; // Настройка порта для сегментов индикатора #ifdef IND_OA IND_PORT = 0xFF; #else IND_PORT = 0x00; #endif IND_DDR = 0xFF; // Настройка порта для общих выводов индикатора IND_CDDR = 0x00; IND_COM = 0x00; IND_CDDR = (1<<IND_CA1)|(1<<IND_CA2)|(1<<IND_CA3)|(1<<IND_CA4); IND_COM |= (1<<JUMPER)|(1<<CHECK_POWER)|(0<<IND_CA1)|(0<<IND_CA2)|(0<<IND_CA3)|(0<<IND_CA4); // Настройка порта для кнопок KEY_DDR &= ~((1<<KEY_HOURS)|(1<<KEY_MINUTES)|(1<<KEY_RUN)|(1<<KEY_RESET)); // input KEY_DDR |= (1<<SIGNAL_OUT)|(1<<LOAD); // output KEY_PORT |=(1<<KEY_HOURS)|(1<<KEY_MINUTES)|(1<<KEY_RUN)|(1<<KEY_RESET); // Настройка таймера Т2, который работает в Асинхронном режиме // и тактируется от часового кварца на 32768 Гц ///// Ждем пока не стабилизируется работа внешнего кварца // for(temp0=0;temp0<0x0040;temp0++) // Wait for external clock crystal to stabilize // { // for(temp1=0;temp1<0xFFFF;temp1++); // } TIMSK &=~((1<<TOIE2)|(1<<OCIE2)); // Запрещаем TC2 прерывания ASSR |= (1<<AS2); // Режим таймера - асинхронный // тактирование от внешн. кварца (32,768kHz) while (ASSR & (1 << TCN2UB)){}; TCNT2 = 0x00; while (ASSR & (1 << TCR2UB)){}; TCCR2 = 0x04; //Делитель таймера / 64 для получения // переполнения каждые 0.5 секунд TIMSK |= (1<<TOIE2); //set 8-bit Timer/Counter2 Overflow Interrupt Enable //////// // Настройка таймера Т0, который используется для динамической индикации // и опроса кнопок. МК работает на частоте 1 МГц без внешнего кварца // Загрузка регистра таймера Т0 TCNT0 = T0_VALUE; // Разрешение прерываний по переполнению таймера Т0 TIMSK |= (1<<TOIE0); // Пуск таймера Т0 TCCR0 = (0<<CS02)|(1<<CS01)|(1<<CS00); // Разрешение глобальных прерываний sei(); while(1) { // Infinite loop; define here the asm ("nop"); // system behaviour } } //****************************************************************************** // END of File //********************
×
×
  • Создать...