Данная статья представляет собой улучшенный вариант цифровых часов с использованием RTC DS12C887 и 8051 с установкой времени. В предыдущей статье мы обсуждали основные приемы получения данных из RTC DS12C887, используя микроконтроллер 8051 (AT89C51). Эта статья продолжение к вышеуказанной статье, которая знакомит вас с концепцией обработки прерываний для получения времени и другой информации от RTC DS12C887 .
Используя прерывания, мы получаем большое преимущество и гибкость при обработке данных с RTC, по сравнению с ранее описанным методом. Преимущество данного метода заключаются в том, что мы разгружаем микроконтроллер от лишних действий, тем самым экономим память мк.
RTC 12C887 имеет три прерывания, а именно:
- Будильник, настроенный на время суток
- По периоду времени
- Конец цикла обновления часов
Более подробно о прерываниях можно прочитать в техническом описании на изделие. Исходный код программы свободно распространим и написан на С.
Все три прерывания работают независимо друг от друга.
Схема часов:
Когда происходит прерывание DS12C887, выполняются следующие события:
1. Бит 7 и соответствующий флаг прерывания регистра С устанавливается равным лог. 1.
2. Вывод IRQ переключается на лог. 0, если бит разрешения соответствующего прерывания установлен в регистре B.
Шаги для обработки прерывания:
1. Подключите IRQ вывод RTC к внешнему аппаратному прерыванию микроконтроллера.
2. Инициализировать внешние прерывания микроконтроллера для получения прерываний от RTC.
3. Инициализировать прерывание RTC, которое будет использоваться, настроив соответствующие биты регистра B.
4. Когда возникает прерывание нужно читать значение Регистра C, чтобы проверить, какое прерывание произошло.
Регистры В и С используются для обработки прерываний. Чтобы включить нужное прерывание нужно установить биты 4-6 в регистре В.
Регистр С можно лишь читать, он содержит информацию о том какое прерывание произошло посредством установки (лог.1) соответствующего флага прерывания. Для более подробной информации можно обратиться к техническому описанию.
Когда происходит прерывание 7 ой бит регистра С устанавливается в лог. 1. Далее устанавливается флаг соответствующего прерывания. Далее просто считывается значение этого регистра. Регистр C обновляется каждый раз, независимо от того использовали ли мы прерывание или нет. В таком случае значение регистра С сохраняется. Если произошло первое прерывание, а потом второе то флаг первого прерывания сохранится в регистре.
Вывод 19 (выход прерывания IRQ) RTC используется для указания на прерывание. На выводе лог. 0 если:
1. Любое из 3-х прерываний происходит.
2. Бит разрешения соответствующего прерывания установлен в Регистре B.
Этот вывод может быть использован для обеспечения внешнего аппаратного прерывания микроконтроллеру. Этот вывод мультиплексирован ко всем трем прерываниям, т.е. лог.0, когда любое из прерываний происходит и, следовательно, означает, что прерывание произошло.Но, чтобы определить, какое прерывание произошло надо считать значение регистра С. На IRQ будет лог. 0, пока на флаге прерывания лог.1 в регистре С и соответствующих разрешающих битах регистра B. После того, как прерывание произошло, вывод IRQ нужно сменить состояние, чтобы часы работали дальше. Вывод IRQ может быть установлен с помощью одного из 2-х способов:
1. Подачей лог. 0 на вывод сброса очистит состояние IRQ.
2. Читая регистр C, вывод прерываний будет очищен с помощью процессора.
В коде мы использовали второй метод сброса IRQ. Читая регистр C узнаем, какие прерывания произошли.
Подключение DS12C887 к микроконтроллеру показано на схеме. В этой статье используется прерывание — конец цикла обновления часов. Каждый раз, когда приходит прерывание, время увеличивается на одну секунду. Результат отображается на ЖК-дисплее. Часы представлены в этой статье также имеют установку времени. Часы используют 2-е внешнее прерывание микроконтроллера AT89C51 для установки времени. Пользователь может установить время, нажав переключатель, подключенный к контакту 13 микроконтроллера, который является прерыванием 2. Часы и минуты можно установить с помощью кнопки на выводе 5 и 6 контроллера AT89C51. После того, как время установили, пользователю необходимо нажать на старт (вывод 8 контроллера), чтобы запустить часы. Код программы для часов RTC DS12C887 + 8051 написан на языке C.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
МикроконтроллерAT89C511
LCD-дисплей16×2 HD447801
RTCDS12C8871
Электролитический конденсатор10мкФ 25В1
Резистор10 кОм1
Подстроечный резистор10 кОм1
Кварцевый резонатор12 МГц1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- DS12C887.c (3 Кб)