Цифровые часы
Выбор и обоснование технических требований к цифровым часам с будильником. Разработка структурной схемы. Разработка алгоритма управляющей программы. Характеристики, специальные особенности микроконтроллеров PIC16F62X. Характеристика периферийных модулей.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 08.02.2017 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
; в EEDATA
movlw 0x55 ; загрузили в аккомулятор 55h
movwf EECON2 ; переправили в EECON2
movlw 0AAh ; записываем в аккомулятор 0AAh
movwf EECON2 ; переправили в EECON2
bsf EECON1,WR ; старт записи данных
ee_wr00 btfsc EECON1,WR ; проверяем закончена ли запись
; WR=1 запись не закончена
goto ee_wr00 ; повтор проверки
; WR=0 запись завершена
bcf EECON1,WREN ; запрет записи
bcf EECON1,EEIF ; сброс флага прерывания по окончанию записи
bsf INTCON,GIE ; разрешение прерываний
return ; возврат из подпрограммы
;-------------------------------
; обнуление секунд
;===============================
sec_nol bcf INTCON,GIE ; запрет всех прерываний
bcf T1CON,TMR1ON; выключили таймер TMR1
clrf ct256 ; обнулили счётчик прерываний
movlw .60 ; загрузили в аккомулятор число 60 dec
movwf sec ; переправили в счётчик секунд
movlw 0F0h ; загрузили в аккомулятор старший полубайт константы
movwf TMR1H ; переправили в регистр старшего байта таймера
movlw 0C6h ; загрузили в аккомулятор младший полубайт константы
movwf TMR1L ; переправили в регистр младшего полубайта таймера
bsf T1CON,TMR1ON ; включили таймер
bsf INTCON,GIE ; разрешили прерывания
return ; возврат из подпрограммы
;-------------------------------
пауза автоповтора
;===============================
pause_ap btfsc ct256,5 ; проверяем бит 4 Гц
; бит 4 Гц включен
goto pause_ap0 ; переход к проверке контрольного бита
; бит 4 Гц ВЫключен
bsf flagi,kon_bit ; включаем контрольный бит
return ; возврат из подпрограммы
pause_ap0 btfss flagi,kon_bit ; проверяем контрольный бит
; контрольный бит ВЫключен
return ; возврат из подпрограммы
; контрольный бит включен
bsf flagi,bit_ap ; установили бит автоповтора
bcf flagi,kon_bit; сбросили контрольный бит
return ; возврат из подпрограммы
;-------------------------------
;преобразование 2-байтных двоичных чисел в 4-разрядные
;десятичные числа.
;======================================================
bin2_10 bcf STATUS,C ; Сброс флага переноса-заема.
movlw .16 ; Зпись в регистр Count числа проходов преобразования,
movwf Count ; равного суммарному количеству битов многоразрядного
; регистра TimerL/TimerM (8*2=16).
clrf LED0 ; Сброс в 0 содержимого регистра LED0.
clrf LED1 ; -------"------ LED1.
clrf LED2 ; -------"------ LED2.
clrf LED3 ; -------"------ LED3.
Loop16 rlf TimerL,F ; Циклический сдвиг влево 2-байтного двоичного числа,
rlf TimerM,F ; записанного в группе регистров TimerL/TimerM
rlf LED0,F ; Циклический сдвиг влево 2-байтного двоичного числа,
rlf LED1,F ; записанного в группе регистров LED0/LED1
; на одну позицию через бит С регистра STATUS.
decfsz Count,F ; Декремент (-1) содержимого регистра Count с сохранением
; результата в нем же.
goto adjDEC ; Если результат не=0, то переход в ПП adjDEC
; Если результат =0, то программа исполняется далее.
; Поразрядное распределение содержимого регистров LED0...1 (обоих
; полубайтов) по младшим полубайтам регистров LED0...3.
swapf LED1,W ; Запись старшего полубайта LED1
andlw 0Fh ; в младший полубайт LED3.
movwf LED3 ; --------------------------------
movfw LED1 ; Запись младшего полубайта LED1
andlw 0Fh ; в младший полубайт LED2.
movwf LED2 ; --------------------------------
swapf LED0,W ; Запись старшего полубайта LED0
andlw 0Fh ; в младший полубайт LED1.
movwf LED1 ; --------------------------------
movfw LED0 ; Запись младшего полубайта LED0
andlw 0Fh ; в младший полубайт LED0.
movwf LED0 ; --------------------------------
return ; возврат из подпрограммы преобразования
; Запись в регистр FSR адресов регистров LED0...1 для дальнейшей косвенной адресации
; к ним в ПП adjBCD.
adjDEC movlw LED0 ; Запись в регистр FSR, через регистр W, адреса регистра LED0
movwf FSR ; с дальнейшим переходом в ПП adjBCD
call adjBCD ; (адрес следующей команды закладывается в стек).
movlw LED1 ; -----------------------------
movwf FSR ; То же самое для регистра LED1.
call adjBCD ; -----------------------------
goto Loop16 ; Проход всех LED (с LED0 по LED1). Переход в ПП Loop16,
; то есть на следующее кольцо числовых преобразований.
; Основные операции преобразования двоичных чисел в двоично-десятичные:
; операции сложения LED0...3 и констант 03h,30h с условиями по 3-му и 7-му битам.
adjBCD movlw 3h ; Сложить содержимое текущего LED (LED0...3) с числом 03h,
addwf INDF,W ; c записью результата операции, через регистр W,
movwf Mem ; в регистр Mem.
btfsc Mem,3 ; Анализ состояния 3-го бита регистра Mem.
movwf INDF ; Если бит № 3 =1, то содержимое регистра Mem
; копируется в текущий LED.
movlw 30h ; Если бит №3 =0, то содержимое текущего LED складывается
addwf INDF,W ; с константой 30h, с последующей записью результата операции,
movwf Mem ; через регистр W, в регистр Mem.
btfsc Mem,7 ; Анализ состояния 7-го бита регистра Mem.
movwf INDF ; Если бит №7 =1, то содержимое регистра Mem
; копируется в текущий LED.
retlw 0 ; Если бит №7 =0, то регистр W очищается и происходит
; возврат по стеку в ПП adjDEC.
;-------------------------------
; инкремент корректирующей константы
;====================================
konst_inc bcf fl_inc,fl_kn; сбросили флаг нажатия кнопки инкремент
movlw 01h ; загрузили в аккомулятор 1
addwf tempkor_l,F ; инкремент младшего полубайта
movf STATUS,W
andlw B'00000001' ; выделяем бит переноса
movwf Mem ; сохраняем во временной ячейке
movf tempkor_h,W ; загружаем в аккомулятор старший полубайт константы
sublw 07h ; вычитаем из 7
btfsc STATUS,Z ; старший полубайт равен 7 ?
; старший полубайт равен 7
goto kons_max
; НЕ равен
movf Mem,W ; загружаем бит переноса из Mem
addwf tempkor_h,F ; суммируем со старшим полубайтом
return
kons_max btfsc Mem,0 ; проверяем сохранённый бит переноса
decf tempkor_l,F ; если перенос был- декремент младшего полубайта
return
;-------------------------------
; декремент корректирующей константы
;====================================
konst_dec bcf fl_bud,fl_kn; сбросили флаг нажатия кнопки будильник (-)
movf tempkor_l,W ; проверка на 0
iorwf tempkor_h,W
btfsc STATUS,Z ; константа =0 ?
; да константа =0
return ; возврат из подпрограммы без декремента
; константа НЕ =0
movlw 01h
subwf tempkor_l,F ; декремент младшего полубайта
movf STATUS,W
andlw B'00000001' ; выделяем бит переноса
xorlw B'00000001' ; инвертируем бит переноса
subwf tempkor_h,F ; вычитаем бит переноса из старшего полубайта
return ; возврат из подпрограммы
;-------------------------------
; инкремент минут будильника
;============================
incminbud movlw .59
subwf bud_min,W
btfsc STATUS,Z
goto incminbud0
incf bud_min,F
return
incminbud0 clrf bud_min
return
;-------------------------------
; инкремент часов будильника
;=============================
inchasbud movlw .23
subwf bud_has,W
btfsc STATUS,Z
goto inchasbud0
incf bud_has,F
return
inchasbud0 clrf bud_has
return
;-------------------------------
; вывод в младшие разряды индикатора
;====================================
; в аккомуляторе - выводимое однобайтное число
indout_ml call dd_preo ; преобразуем число в дес. формат
movf e_rez,W ; загрузили единицы в аккомулятор
movwf ind_0 ; переправили единицы на индикацию
movf d_rez,W ; загрузили десятки в аккомулятор
movwf ind_1 ; переправили десятки на индикацию
return ; возврат из подпрограммы
;-------------------------------
; вывод в старшие разряды индикатора
;====================================
; в аккомуляторе - выводимое однобайтное число
indout_st call dd_preo ; преобразуем число в дес. формат
movf e_rez,W ; загрузили единицы в аккомулятор
movwf ind_2 ; переправили единицы на индикацию
movf d_rez,W ; загрузили десятки в аккомулятор
movwf ind_3 ; переправили десятки на индикацию
return ; возврат из подпрограммы
;-------------------------------
; вывод на индикатор часов - минут или минут-секунд
;==================================================
hasmin_ind btfss flagi,rind ; проверка режима индикации
goto hmin00
; минуты-секунды
movf sec,W
sublw .60
call indout_ml
movf min,W
sublw .60
call indout_st
return
; часы-минуты
hmin00 movf min,W
sublw .60
call indout_ml ; вывод на индикатор минут
movf has,W
sublw .24
call indout_st ; вывод на индикатор часов
return
;-------------------------------
; инкремент минут
;=================
inc_min decfsz min,F
return
movlw .60
movwf min
return
;-------------------------------
; инкремент часов
;=================
inc_has decfsz has,F
return
movlw .24
movwf has
return
;-------------------------------
; индикация часов - минут будильника
;===================================
budind movf bud_min,W
call indout_ml ; вывод минут будильника на индикатор
movf bud_has,W
call indout_st ; вывод часов будильника на индикатор
return
;-------------------------------
; проверка срабатывания будильника вызывается из прерывания
;=====================================================
bud_prov btfss flagi,bu_vkl ; проверяем включен ли будильник
return ; будильник ВЫключен - возврат
movf has,W ; загрузили (24-часы) в аккомулятор
sublw .24 ; вычли из 24-х - в аккомуляторе часы
subwf bud_has,W ; вычли из часов будильника
btfss STATUS,Z ; проверка результата на 0
return ; результат НЕ нулевой - возврат
movf min,W ; загрузили (60-минуты) в аккомулятор
sublw .60 ; вычли из 60-ти - в аккомуляторе минуты
subwf bud_min,W ; вычли из минут будильника
btfsc STATUS,Z ; проверка результата на 0
bsf flagi,bu_sr ; результат = 0, установили флаг "будильник сработал"
return ; результат НЕ нулевой - возврат
;-------------------------------
; пауза
;=====================
time0.25 movlw .80
goto time_load
time0.5ms movlw 0xA4
nop
goto time_load
time1.0ms movlw 0xff
call time_load
nop
movlw 0x4a
goto time_load
time_load movwf time_temp
time3f4 decfsz time_temp,F
goto time3f4
return
;-------------------------------
; вызов звукового сигнала частотой 1 кГц, длительность 1 секунда
;======================================================
zvuk1sek clrf ct256zvuk
decf ct256zvuk,F ; установили в счётчик число 255
zvuk1sec0 movlw B'00010000' ; загрузили в аккомулятор маску для 4-го бита
xorwf PORTB,F ; инвертировали 4-й бит порта B
; задержка
movlw .100
movwf time_temp
zv_cik00 decfsz time_temp,F
goto zv_cik00
btfss flagi,mctn ; проверка на 0 дополнительного счётчика
goto zvuk1sec0 ; счётчик НЕ равен 0 - переход к началу цикла
return
;-------------------------------
; переключение режимов энергопотребления
;====================================================
u_re btfss PORTA,5 ; проверка напряжения
; напряжения нет RA5=0
goto u_re00 ; переход к проверке флага u_on при RA5=0
; напряжение есть RA5=1
btfsc flagi1,u_on ; проверка флага u_on
; флаг u_on=1
return ; возврат
; флаг u_on=0 переключаем порты в обычный режим
bsf STATUS,RP0 ; 1-й банк
movlw B'11100000' ; загрузили в ак-р число для TRISA
; RA0-RA4 - выходы
; RA5-RA7 - входы
movwf TRISA ; переправили в TRISA
movlw B'11100000' ; загрузили в ак-р число для TRISB
; RB0-RB4 - выходы
; RB5-RB7 - входы
movwf TRISB ; переправили в TRISB
bcf STATUS,RP0 ; 0-й банк
bsf flagi1,u_on ; выставляем флаг u_on
return ; возврат
; напряжения нет RA5=0
u_re00 btfss flagi1,u_on ;проверка флага u_on
; флаг u_on=0
return ; возврат
; флаг u_on=1 блокируем порты
bsf STATUS,RP0 ; 1-й банк
movlw B'11111111' ; загрузили в ак-р число для TRISA
; RA0-RA7 - входы
movwf TRISA ; переправили в TRISA
movlw B'11111111' ; загрузили в ак-р число для TRISB
; RB0-RB7 - входы
movwf TRISB ; переправили в TRISB
bcf STATUS,RP0 ; 0-й банк
bcf flagi1,u_on ; сбрасываем флаг u_on
return ; возврат
;-------------------------------
end
ЗАКЛЮЧЕНИЕ
В ходе проделанной работы основан выбор элементной базы и разработана схема цифровых часов с будильником на семисегментном индикаторе.
Программное обеспечение разработанного устройства реализовано на языке Assembler в интегрированной среде разработки MPLAB IDE v7.20 для PIC.
Основными узлами разработанного устройства являются микроконтроллер PIC16F628, который выполняет обработку полученных данных и управляет семисегментным индикатором на который выводятся необходимые данные.
Работоспособность программы и устройства проверена с помощью системы автоматизированного проектирования Proteus 8, которая позволяет моделировать работу различных электронных схем. После чего схема была собрана в железе. В приложении А продемонстрирована работа устройства.
Разработанное устройство может применяться в быту как автономно, так и в составе других устрйств.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
[1] Хабрахабр [Электронный ресурс]. - Режим доступа: http://www.habrahabr.ru
[2] Labkit [Электронный ресурс]. - Режим доступа: http://www.labkit.ru
[3] Заец, Н. И. Радиолюбительские конструкции на PIC-микроконтроллерах/Н. И. Заец - К.: МК-Пресс, 2008. - 336с.
ПРИЛОЖЕНИЕ А
ДЕМОНСТРАЦИЯ РАБОТЫ УСТРОЙСТВА
ПРИЛОЖЕНИЕ Б
ВЕДОМОСТЬ КУРСОВОЙ РАБОТЫ
Обозначение |
Наименование |
Дополнительные сведения |
||||||||
Текстовые документы |
||||||||||
БГУИР КР 1-45 01 02-01 017 ПЗ |
Пояснительная записка |
57 с. |
||||||||
БГУИР КР 1-45 02-01 017 ПЗ |
||||||||||
Изм. |
Л. |
№ докум. |
Подп. |
Дата |
Измеритель напряжения Ведомость курсового |
Лист |
Листов |
|||
Разраб. |
Хвасько О.Ю. |
Т |
57 |
|||||||
Пров. |
Петров С.Н. |
Кафедра ЗИ гр. 362101 |
Размещено на Allbest.ru
...Подобные документы
В работе на базе PIC-контроллера реализуется цифровой секундомер. Выбор технических требований к устройству, к питанию. Разработка структурной схемы, принципиальной электрической схемы, алгоритма работы управляющей программы, управляющей программы.
курсовая работа [427,1 K], добавлен 20.06.2008Выбор и обоснование основных технических решений микроконтроллера. Разработка алгоритма рабочей программы. Расчет потребляемой мощности и определение требований к источникам питания. Описание модулей программы и ее отдельных функциональных модулей.
курсовая работа [210,3 K], добавлен 25.11.2013Характеристика микропроцессора Z80, его достоинства и система команд. Проектирование интерфейса, структурной схемы и алгоритма работы управляющей микро-ЭВМ. Разработка модулей памяти, генератора тактового импульса, контроллера, ввода/вывода и индикатора.
курсовая работа [1,7 M], добавлен 17.02.2014Основные типы микроконтроллеров. Разработка структурной схемы прибора. Работа матричного индикатора HCMS-2000. Разработка принципиальной схемы. Расчет режимов элементов. Разработка алгоритма программы. Последовательный интерфейс обмена данными.
курсовая работа [650,6 K], добавлен 12.01.2016Разработка структурной и принципиальной схемы устройства. Микроконтроллер PIC16F886, температурные и электрические характеристики. Четырехразрядный семисегментный светодиодный индикатор. Разработка алгоритма управляющей программы, общий алгоритм.
курсовая работа [497,4 K], добавлен 31.01.2013Однокристальные микро-ЭВМ, предназначенные для использования в бытовой радиоэлектронной аппаратуре. Обоснование технических требований к устройству. Разработка структурной и принципиальной электрической схем устройства. Алгоритм управляющей программы.
курсовая работа [159,9 K], добавлен 19.06.2010Особенности проектирования микропроцессорного устройства "Цифровой осциллограф". Выбор микроконтроллера, описание периферийных устройств. Разработка принципиальной схемы устройства и программы для микроконтроллера, осуществляющей все функции устройства.
курсовая работа [923,5 K], добавлен 24.12.2012Разработка блока управления, управляющей программы, структурной и электрической схем высокомоментного линейного привода с цифровым программным управлением на базе современных компьютерных технологий. Математический расчет его динамических характеристик.
дипломная работа [2,4 M], добавлен 22.10.2010Разработка и обоснование структурной схемы цифрового корректирующего фильтра. Обоснование общего алгоритма его функционирования. Оценка быстродействияустройства. Отладка разработанной программы. Составление принципиальной схемы устройства и ее описание.
курсовая работа [774,7 K], добавлен 03.12.2010Описание алгоритма работы и разработка структурной схемы микропроцессорной системы управления. Разработка принципиальной схемы. Подключение микроконтроллера, ввод цифровых и аналоговых сигналов. Разработка блок-схемы алгоритма главной программы.
курсовая работа [3,3 M], добавлен 26.06.2016Разработка структурной и принципиальной схем микропроцессорного тахометра. Микроконтроллер PIC16F886 и устройство индикации тахометра. Основные температурные и электрические характеристики микроконтроллера. Разработка алгоритма управляющей программы.
курсовая работа [527,0 K], добавлен 07.07.2013Разработка структурной схемы устройства. Принцип работы его блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчиков давления и температуры. Разработка алгоритма работы управляющей программы, ее блок-схема.
курсовая работа [2,5 M], добавлен 23.06.2015Разработка и обоснование общего алгоритма функционирования устройства. Выбор однокристального микропроцессора повышенной производительности. Написание управляющей программы на языке микропроцессора. Расчет амплитудно-частотной характеристики фильтра.
курсовая работа [113,8 K], добавлен 04.12.2010Техническое обоснование структурной схемы и разработка универсального источника бесперебойного питания с цифровым управлением. Электрический расчет силовых элементов и структурной схемы Line-interractive устройства. Расчет себестоимости блока питания.
дипломная работа [883,1 K], добавлен 09.07.2013Параметры, характеристики, схемы и назначение выводов микроконтроллера. Разработка программы, реализующей взаимодействие со сторонними устройствами, вместе образующих устройство часов с функцией будильника. Электрическая схема разрабатываемого устройства.
курсовая работа [406,5 K], добавлен 12.09.2012Разработка структурной схемы системы и ее описание. Матричная клавиатура AK1604A-WWB. Жидкокристаллический индикатор, часы реального времени. Интерфейс процессора с памятью. Разработка программы для микроконтроллера. Резидентный загрузчик НЕХ202.
курсовая работа [1,0 M], добавлен 01.02.2014Семейство однокристальных микроконтроллеров HCS12. Внутренняя или неявная адресация INH. Команды загрузки и пересылки данных, битовых операций, вызова подпрограмм и перехода в режимы пониженного энергопотребления. Основная блок-схема алгоритма, листинг.
курсовая работа [453,4 K], добавлен 04.06.2014Разработка цифровых часов, отображающих время посредством светодиодной индикации. Выбор и обоснование структурной схемы и электрорадиоэлементов: резисторов, светодиодов. Определение средней наработки на отказ. Процесс программирования PIC-контроллера.
дипломная работа [1,1 M], добавлен 12.05.2016Обзор и сравнительный анализ методов измерения уровня жидкости. Основные виды уровнемеров. Выбор структурной схемы, разработка и расчет ее узлов. Разработка алгоритма программы для микроконтроллера. Расчет технико-экономических показателей проекта.
дипломная работа [1,1 M], добавлен 12.05.2013Этапы разработки микропроцессорной системы на основе микроконтроллера. Общая характеристика солнечных часов. Разработка схемы, программного обеспечения и алгоритма управления солнечных часов. Технико-экономическое обоснование разработки и охрана труда.
дипломная работа [5,9 M], добавлен 16.07.2010