Цифровые часы с будильником на семисегментном индикаторе
Основные характеристики и принцип работы микроконтроллера. Принципиальная схема устройства. Структурная схема цифровых часов с будильником. Разработка алгоритма работы управляющей программы с помощью интегрированной среды разработки MPLAB IDE v7.20.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.11.2015 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
bcfEECON1,WREN; запрет записи
bcfEECON1,EEIF; сброс флага прерывания по окончанию записи
bsfINTCON,GIE; разрешение прерываний
return; возврат из подпрограммы
;-------------------------------
; обнуление секунд
;===============================
sec_nolbcfINTCON,GIE; запрет всех прерываний
bcfT1CON,TMR1ON; выключили таймер TMR1
clrfct256; обнулили счётчик прерываний
movlw.60; загрузили в аккомулятор число 60 dec
movwfsec; переправили в счётчик секунд
movlw0F0h; загрузили в аккомулятор старший полубайт константы
movwfTMR1H; переправили в регистр старшего байта таймера
movlw0C6h; загрузили в аккомулятор младший полубайт константы
movwfTMR1L; переправили в регистр младшего полубайта таймера
bsfT1CON,TMR1ON ; включили таймер
bsfINTCON,GIE; разрешили прерывания
return; возврат из подпрограммы
;-------------------------------
пауза автоповтора
;===============================
pause_apbtfscct256,5; проверяем бит 4 Гц
; бит 4 Гц включен
gotopause_ap0; переход к проверке контрольного бита
; бит 4 Гц ВЫключен
bsfflagi,kon_bit ; включаем контрольный бит
return; возврат из подпрограммы
pause_ap0btfssflagi,kon_bit ; проверяем контрольный бит
; контрольный бит ВЫключен
return; возврат из подпрограммы
; контрольный бит включен
bsfflagi,bit_ap ; установили бит автоповтора
bcfflagi,kon_bit; сбросили контрольный бит
return; возврат из подпрограммы
;-------------------------------
;преобразование 2-байтных двоичных чисел в 4-разрядные
;десятичные числа.
;=====================================================
bin2_10bcfSTATUS,C; Сброс флага переноса-заема.
movlw.16; Зпись в регистр Count числа проходов преобразования,
movwfCount; равного суммарному количеству битов многоразрядного
; регистра TimerL/TimerM (8*2=16).
clrfLED0; Сброс в 0 содержимого регистра LED0.
clrfLED1; -------"------ LED1.
clrfLED2; -------"------ LED2.
clrfLED3; -------"------ LED3.
Loop16rlfTimerL,F; Циклический сдвиг влево 2-байтного двоичного числа,
rlfTimerM,F; записанного в группе регистров TimerL/TimerM
rlfLED0,F; Циклический сдвиг влево 2-байтного двоичного числа,
rlfLED1,F; записанного в группе регистров LED0/LED1
; на одну позицию через бит С регистра STATUS.
decfszCount,F; Декремент (-1) содержимого регистра Count с сохранением
; результата в нем же.
gotoadjDEC; Если результат не=0, то переход в ПП adjDEC
; Если результат =0, то программа исполняется далее.
; Поразрядное распределение содержимого регистров LED0...1 (обоих
; полубайтов) по младшим полубайтам регистров LED0...3.
swapfLED1,W; Запись старшего полубайта LED1
andlw0Fh; в младший полубайт LED3.
movwfLED3; --------------------------------
movfwLED1; Запись младшего полубайта LED1
andlw0Fh; в младший полубайт LED2.
movwfLED2; --------------------------------
swapfLED0,W; Запись старшего полубайта LED0
andlw0Fh; в младший полубайт LED1.
movwfLED1; --------------------------------
movfwLED0; Запись младшего полубайта LED0
andlw0Fh; в младший полубайт LED0.
movwfLED0; --------------------------------
return; возврат из подпрограммы преобразования
; Запись в регистр FSR адресов регистров LED0...1 для дальнейшей косвенной адресации
; к ним в ПП adjBCD.
adjDECmovlwLED0; Запись в регистр FSR, через регистр W, адреса регистра LED0
movwfFSR; с дальнейшим переходом в ПП adjBCD
calladjBCD; (адрес следующей команды закладывается в стек).
movlwLED1; -----------------------------
movwfFSR; То же самое для регистра LED1.
calladjBCD; -----------------------------
gotoLoop16; Проход всех LED (с LED0 по LED1). Переход в ПП Loop16,
; то есть на следующее кольцо числовых преобразований.
; Основные операции преобразования двоичных чисел в двоично-десятичные:
; операции сложения LED0...3 и констант 03h,30h с условиями по 3-му и 7-му битам.
adjBCDmovlw3h; Сложить содержимое текущего LED (LED0...3) с числом 03h,
addwfINDF,W; c записью результата операции, через регистр W,
movwfMem; в регистр Mem.
btfscMem,3; Анализ состояния 3-го бита регистра Mem.
movwfINDF; Если бит № 3 =1, то содержимое регистра Mem
; копируется в текущий LED.
movlw30h; Если бит №3 =0, то содержимое текущего LED складывается
addwfINDF,W; с константой 30h, с последующей записью результата операции,
movwfMem; через регистр W, в регистр Mem.
btfscMem,7; Анализ состояния 7-го бита регистра Mem.
movwfINDF; Если бит №7 =1, то содержимое регистра Mem
; копируется в текущий LED.
retlw0; Если бит №7 =0, то регистр W очищается и происходит
; возврат по стеку в ПП adjDEC.
;-------------------------------
; инкремент корректирующей константы
;====================================
konst_incbcffl_inc,fl_kn; сбросили флаг нажатия кнопки инкремент
movlw01h; загрузили в аккомулятор 1
addwftempkor_l,F; инкремент младшего полубайта
movfSTATUS,W
andlwB'00000001' ; выделяем бит переноса
movwfMem; сохраняем во временной ячейке
movftempkor_h,W; загружаем в аккомулятор старший полубайт константы
sublw07h; вычитаем из 7
btfscSTATUS,Z; старший полубайт равен 7 ?
; старший полубайт равен 7
gotokons_max
; НЕ равен
movfMem,W; загружаем бит переноса из Mem
addwftempkor_h,F; суммируем со старшим полубайтом
return
kons_maxbtfscMem,0; проверяем сохранённый бит переноса
decftempkor_l,F; если перенос был- декремент младшего полубайта
return
;-------------------------------
; декремент корректирующей константы
;====================================
konst_decbcffl_bud,fl_kn; сбросили флаг нажатия кнопки будильник (-)
movftempkor_l,W; проверка на 0
iorwftempkor_h,W
btfscSTATUS,Z ; константа =0 ?
; да константа =0
return ; возврат из подпрограммы без декремента
; константа НЕ =0
movlw01h
subwftempkor_l,F; декремент младшего полубайта
movfSTATUS,W
andlwB'00000001'; выделяем бит переноса
xorlwB'00000001'; инвертируем бит переноса
subwftempkor_h,F; вычитаем бит переноса из старшего полубайта
return; возврат из подпрограммы
;-------------------------------
; инкремент минут будильника
;============================
incminbudmovlw.59
subwfbud_min,W
btfscSTATUS,Z
gotoincminbud0
incfbud_min,F
return
incminbud0clrfbud_min
return
;-------------------------------
; инкремент часов будильника
;=============================
inchasbudmovlw.23
subwfbud_has,W
btfscSTATUS,Z
gotoinchasbud0
incfbud_has,F
return
inchasbud0clrfbud_has
return
;-------------------------------
; вывод в младшие разряды индикатора
;====================================
; в аккомуляторе - выводимое однобайтное число
indout_mlcalldd_preo; преобразуем число в дес. формат
movfe_rez,W; загрузили единицы в аккомулятор
movwfind_0; переправили единицы на индикацию
movfd_rez,W; загрузили десятки в аккомулятор
movwfind_1; переправили десятки на индикацию
return; возврат из подпрограммы
;-------------------------------
; вывод в старшие разряды индикатора
;====================================
; в аккомуляторе - выводимое однобайтное число
indout_stcalldd_preo; преобразуем число в дес. формат
movfe_rez,W; загрузили единицы в аккомулятор
movwfind_2; переправили единицы на индикацию
movfd_rez,W; загрузили десятки в аккомулятор
movwfind_3; переправили десятки на индикацию
return; возврат из подпрограммы
;-------------------------------
; вывод на индикатор часов - минут или минут-секунд
;==================================================
hasmin_indbtfssflagi,rind ; проверка режима индикации
gotohmin00
; минуты-секунды
movfsec,W
sublw.60
callindout_ml
movfmin,W
sublw.60
callindout_st
return
; часы-минуты
hmin00movfmin,W
sublw.60
callindout_ml; вывод на индикатор минут
movfhas,W
sublw.24
callindout_st; вывод на индикатор часов
return
;-------------------------------
; инкремент минут
;=================
inc_mindecfszmin,F
return
movlw.60
movwfmin
return
;-------------------------------
; инкремент часов
;=================
inc_hasdecfszhas,F
return
movlw.24
movwfhas
return
;-------------------------------
; индикация часов - минут будильника
;===================================
budindmovfbud_min,W
callindout_ml; вывод минут будильника на индикатор
movfbud_has,W
callindout_st; вывод часов будильника на индикатор
return
;-------------------------------
; проверка срабатывания будильника вызывается из прерывания
;=====================================================
bud_provbtfssflagi,bu_vkl ; проверяем включен ли будильник
return; будильник ВЫключен - возврат
movfhas,W; загрузили (24-часы) в аккомулятор
sublw.24; вычли из 24-х - в аккомуляторе часы
subwfbud_has,W; вычли из часов будильника
btfssSTATUS,Z; проверка результата на 0
return; результат НЕ нулевой - возврат
movfmin,W; загрузили (60-минуты) в аккомулятор
sublw.60; вычли из 60-ти - в аккомуляторе минуты
subwfbud_min,W; вычли из минут будильника
btfscSTATUS,Z; проверка результата на 0
bsfflagi,bu_sr; результат = 0, установили флаг "будильник сработал"
return; результат НЕ нулевой - возврат
;-------------------------------
; пауза
;=====================
time0.25movlw.80
gototime_load
time0.5msmovlw0xA4
nop
gototime_load
time1.0msmovlw0xff
calltime_load
nop
movlw0x4a
gototime_load
time_loadmovwftime_temp
time3f4decfsztime_temp,F
gototime3f4
return
;-------------------------------
; вызов звукового сигнала частотой 1 кГц, длительность 1 секунда
;=====================================================
zvuk1sekclrfct256zvuk
decfct256zvuk,F ; установили в счётчик число 255
zvuk1sec0movlwB'00010000'; загрузили в аккомулятор маску для 4-го бита
xorwfPORTB,F; инвертировали 4-й бит порта B
; задержка
movlw.100
movwftime_temp
zv_cik00decfsztime_temp,F
gotozv_cik00
btfssflagi,mctn; проверка на 0 дополнительного счётчика
gotozvuk1sec0; счётчик НЕ равен 0 - переход к началу цикла
return
;-------------------------------
; переключение режимов энергопотребления
;====================================================
u_rebtfssPORTA,5; проверка напряжения
; напряжения нет RA5=0
gotou_re00; переход к проверке флага u_on при RA5=0
; напряжение есть RA5=1
btfscflagi1,u_on; проверка флага u_on
; флаг u_on=1
return; возврат
; флаг u_on=0 переключаем порты в обычный режим
bsfSTATUS,RP0; 1-й банк
movlwB'11100000'; загрузили в ак-р число для TRISA
; RA0-RA4 - выходы
; RA5-RA7 - входы
movwfTRISA; переправили в TRISA
movlwB'11100000'; загрузили в ак-р число для TRISB
; RB0-RB4 - выходы
; RB5-RB7 - входы
movwfTRISB; переправили в TRISB
bcfSTATUS,RP0; 0-й банк
bsfflagi1,u_on; выставляем флаг u_on
return; возврат
; напряжения нет RA5=0
u_re00btfssflagi1,u_on;проверка флага u_on
; флаг u_on=0
return; возврат
; флаг u_on=1 блокируем порты
bsfSTATUS,RP0; 1-й банк
movlwB'11111111'; загрузили в ак-р число для TRISA
; RA0-RA7 - входы
movwfTRISA; переправили в TRISA
movlwB'11111111'; загрузили в ак-р число для TRISB
; RB0-RB7 - входы
movwfTRISB; переправили в TRISB
bcfSTATUS,RP0; 0-й банк
bcfflagi1,u_on; сбрасываем флаг u_on
return; возврат
;-------------------------------
end
микроконтроллер цифровой программа будильник
Заключение
В ходе проделанной работы основан выбор элементной базы и разработана схема цифровых часов с будильником на семисегментном индикаторе.
Программное обеспечение разработанного устройства реализовано на языке Assembler в интегрированной среде разработки MPLAB IDE v7.20 для PIC.
Основными узлами разработанного устройства являются микроконтроллер PIC16F628, который выполняет обработку полученных данных и управляет семисегментным индикатором на который выводятся необходимые данные.
Работоспособность программы и устройства проверена с помощью системы автоматизированного проектирования Proteus 8, которая позволяет моделировать работу различных электронных схем. После чего схема была собрана в железе. В приложении А продемонстрирована работа устройства.
Разработанное устройство может применяться в быту как автономно, так и в составе других устрйств.
Список использованных источников
1. Хабрахабр
2. Labkit
3. Заец Н.И. Радиолюбительские конструкции на PIC-микроконтроллерах/Н. И. Заец - К.: МК-Пресс, 2012. - 336с.
Приложение А
Демонстрация работы устройства
Размещено на Allbest.ru
...Подобные документы
Особенности проектирования часов со звуковым сигналом с использованием однокристального микроконтроллера семейства МК51. Разработка функциональной схемы устройства. Функции, выполняемые клавиатурой. Разработка алгоритма работы и управляющей программы.
курсовая работа [460,5 K], добавлен 16.05.2013Актуальность задачи. Разработка функциональной схемы устройства. Радиолокационная установка (РЛУ). Микропроцессорная часть. Обоснование алгоритма работы устройства. Разработка управляющей программы устройства. Схема алгоритма. Пояснения к программе.
курсовая работа [193,9 K], добавлен 18.10.2007Схема алгоритма работы устройства сравнения трех чисел, структурная, функциональная и принципиальная схемы. Оценка параметров устройства. Схемы задержки и сброса по питанию, комбинационная схема определения среднего числа. Построение временной диаграммы.
курсовая работа [205,0 K], добавлен 24.06.2013Разработка устройства управления двухконфорочной электроплитой на базе микроконтроллера, описание функциональных действий. Структурная схема аппаратной части. Проектирование программного обеспечения. Описание алгоритма работы системы и программы.
курсовая работа [709,3 K], добавлен 22.12.2010Примерный вид выходного сигнала датчика. Описание и блок-схема алгоритма обработчиков прерываний. Формула вычисления температуры на индикаторе. Перевод абсолютного значения в BCD-код. Блок-схема алгоритма основной программы. Динамическая индикация.
курсовая работа [141,2 K], добавлен 21.10.2012Микроконтроллер — компьютер на микросхеме, предназначенный для управления электронными устройствами. Структурная схема типичного современного микроконтроллера. Архитектурная особенность построения портов ввода/вывода. Принципиальная схема устройства.
курсовая работа [2,1 M], добавлен 26.11.2013Основные параметры устройства отображения информации. Обоснование выбора используемых ресурсов микроконтроллера и схемы включения. Разработка схемы алгоритма. Описание и отладка программы. Схема электрическая принципиальная и листинг трансляции программы.
курсовая работа [121,3 K], добавлен 12.12.2014Обеспечение устойчивости грузоподъемных машин - важнейшее условие при разработке систем управления их рабочими операциями. Физическая модель платформы. Краткие технические характеристики элементов. Схема автоматизации и электрическая принципиальная схема.
курсовая работа [4,2 M], добавлен 09.12.2013Разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы. Текст программы, инициализация указателя стека, структура системы и ресурсов микроконтроллера. Запись кодов при программировании данного устройства.
контрольная работа [18,4 K], добавлен 24.12.2010Конструкция и принцип работы пеллетных котлов, их основные элементы. Среды для разработки и отладки систем управления. Внутренняя структурная схема микроконтроллеров семейства LPC23. Разработка блок схем алгоритмов работы ИСУ отопительного котла.
дипломная работа [3,8 M], добавлен 19.01.2017Разработка функциональной и принципиальной схемы. Выбор управляющего контроллера. Описание МК PIC16F626, МК AVR, МК 51. Выбор элементной базы. Разработка управляющей программы. Описание алгоритма работы программы. Схема устройства, листинг программы.
курсовая работа [492,9 K], добавлен 28.12.2012Принцип действия устройства сбора информации на базе микроконтроллера МК51: индикация, "рабочий режим" и передача данных персонального компьютера. Алгоритм начального опроса датчиков. Электрическая принципиальная схема устройства, текст программы.
курсовая работа [102,5 K], добавлен 21.10.2012Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Микропроцессоры позволяют строить универсальные устройства управления электронными весами. Разработка функциональной схемы, схемы алгоритма прикладной программы. Разработка принципиальной схемы, управляющей программы. Листинг управляющей программы.
курсовая работа [118,0 K], добавлен 04.07.2008Охранно–пожарная сигнализация. Принципы работы систем пожарной сигнализации. Блок-схема алгоритма функционирования разработанного устройства. Выбор и обоснование элементной базы. Схема электрической принципиальной и проектирование цифровых устройств.
курсовая работа [786,6 K], добавлен 10.11.2011Выбор принципов проектирования устройства записи, хранения и передачи чисел. Разработка алгоритма выполнения операций, необходимых для обработки информации. Структурная схема устройства. Элементарная база, необходимая для разработки принципиальной схемы.
курсовая работа [1,3 M], добавлен 16.08.2012Моделирование работы вычислительной системы из двух процессоров и общей оперативной памяти. Структурная схема модели системы. Укрупненная схема моделирующего алгоритма. Результаты моделирования и их анализ. Машинная программа объекта исследования.
курсовая работа [1,0 M], добавлен 21.06.2011Разработка алгоритма работы и структуры контроллера кэш-памяти с полностью ассоциативным отображением основной памяти. Представление операционной и управляющей частей черного ящика устройства. Схема алгоритма контроллера кэш на уровне микроопераций.
курсовая работа [1,0 M], добавлен 19.03.2012Сравнительный анализ существующих приборов. Разработка функциональной схемы устройства. Выбор и статистический расчет элементов, входящих в систему: датчика, источник тока, усилителя, микроконтроллера, блок питания. Блок-схема управляющей программы.
курсовая работа [769,9 K], добавлен 12.01.2015Разработка структурной и принципиальной схемы. Блок-схема основной программы и подпрограмм обработки прерываний. Имена переменных, используемых в них. Результаты моделирования работы устройства в программе ISIS пакета Рroteus. Разработка печатной платы.
курсовая работа [1,5 M], добавлен 13.11.2016