Цифровые часы с таймером
Описание используемого микроконтроллера. Разработка структурной схемы устройства. Принципиальная схема устройства часов с таймером. Разработка алгоритма работы управляющей программы. Разработка управляющей программы. Демонстрация работы устройства.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.07.2016 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
bcf PORTA,4 ; сбросили 4-й бит(включили точку) если 1 Гц бит включён
; вывод в порт B
;***********************
; если бит мигания включен, то индикатор мигает с частотой 2 Гц
ind_pre_a movf ct256,W ; загрузили в аккомулятор счётчик прерываний
andlw B'00000011' ; выключили все биты кроме двух последних
; в аккомуляторе номер индицируемого разряда
movwf n_ind ; переправили в ячейку номера индикатора
incf n_ind,F ; увеличили номер индикатора на 1
movf ct256,W ; загрузили счётчик в аккомулятор
clrf mask_b ; обнулили маску
movwf temp1 ; загрузили счётчик во временную ячейку
rlf temp1,F
rlf temp1,F ; на месте флага переноса - бит 2 Гц
ind_pre01 rlf mask_b,F ; сдвигаем бит 2 Гц влево в маске
decfsz n_ind,F ; уменьшаем номер индикатора с проверкой на 0
; номер индикатора >0
goto ind_pre01 ; уход на цикл
; номер индикатора = 0, в mask_b на месте индицируемого бита - бит 2 Гц
movf mask_b,W ; загрузили в аккомулятор бит 2 Гц
andwf fl_ind,W ; логическое И с флагом мигания
xorwf temp_ind,W ; исключающщее ИЛИ с битом включения разряда
xorlw B'00001111' ; исключающщее ИЛИ с маскирующим значением
movwf mask_b ; в mask_b - значение порта B
; - индицируемый разряд обнулён(если бит мигания выключен)
movf PORTB,W
xorwf mask_b,W
andlw B'11110000'
xorwf mask_b,W
movwf PORTB ; заменили 4 младших бита порта B на результат из маски
return
;-------------------------------
;чтение из EEPROM
;=========================================
ee_rd bsf STATUS,RP0 ; банк 1
movwf EEADR ; загрузили из аккомулятора адрес для чтения
bsf EECON1,RD ; читаем EEPROM
ee_rd00 btfsc EECON1,RD ; проверяем закончено ли чтение
; RD=1 чтение НЕ закончено
goto ee_rd00 ; повтор проверки
; чтение закончено
movf EEDATA,W ; переписываем данные в аккомулятор
bcf STATUS,RP0 ; банк 0
return ; возврат из подпрограммы
;-------------------------------
;запись в EEPROM
;=========================================
ee_wr bcf INTCON,GIE ; запрет всех прерываний
bsf EECON1,WREN ; разрешение записи
movwf EEDATA ; загрузили записываемое значение из аккомклятора
; в 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
...Подобные документы
Разработка структурной схемы устройства. Принцип работы его блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчиков давления и температуры. Разработка алгоритма работы управляющей программы, ее блок-схема.
курсовая работа [2,5 M], добавлен 23.06.2015В работе на базе PIC-контроллера реализуется цифровой секундомер. Выбор технических требований к устройству, к питанию. Разработка структурной схемы, принципиальной электрической схемы, алгоритма работы управляющей программы, управляющей программы.
курсовая работа [427,1 K], добавлен 20.06.2008Разработка и описание структурно-функциональной схемы к динамику. Принципы построения устройства синтезатора звуковых сообщений, работа с таймером микроконтроллера. Выбор элементной базы. Разработка программного обеспечения, алгоритм и листинг программы.
курсовая работа [387,9 K], добавлен 24.12.2012Роль микроконтроллерных технологий в развитии микроэлектроники. Алгоритм разработки микропроцессорной системы термометр-часы на базе микроконтроллера PIC16F84A. Разработка схемы электрической принципиальной устройства и программы для микроконтроллера.
курсовая работа [584,1 K], добавлен 19.03.2012Параметры, характеристики, схемы и назначение выводов микроконтроллера. Разработка программы, реализующей взаимодействие со сторонними устройствами, вместе образующих устройство часов с функцией будильника. Электрическая схема разрабатываемого устройства.
курсовая работа [406,5 K], добавлен 12.09.2012Особенности проектирования микропроцессорного устройства "Цифровой осциллограф". Выбор микроконтроллера, описание периферийных устройств. Разработка принципиальной схемы устройства и программы для микроконтроллера, осуществляющей все функции устройства.
курсовая работа [923,5 K], добавлен 24.12.2012Описание работы электронных часов и микроконтроллера АТTiny2313 фирмы Atmel. Выходные буферы порта. Принципиальная схема электронных часов. Разработка печатной платы и практическое её применение. Принципы программирования и прошивки микроконтроллера.
курсовая работа [749,0 K], добавлен 29.05.2009Разработка структурной и принципиальной схем электронного тахометра. Изучение принципа работы датчика магнитного поля. Выбор микроконтроллера. Проектирование управляющей программы для микроконтроллера. Адаптация устройства к промышленному применению.
курсовая работа [1,1 M], добавлен 22.01.2015Структурная схема устройства управления. Алгоритм работы микроконтроллера в его составе. Строение центрального процессорного элемента – микроконтроллера AVR семейства Classic. Принципиальная схема устройства, расчет временных параметров ее работы.
курсовая работа [636,5 K], добавлен 03.12.2013Описание Автоматического Определителя Номера (АОНа). Характеристики микроконтроллера Z86E0812PSC, ЖК индикатора PANAPHONE. Ассемблирование и разработка алгоритма работы устройства. Управление АОН и описание функциональных узлов МПС, принципиальная схема.
курсовая работа [913,0 K], добавлен 26.12.2009Функциональная спецификация и структурная схема электронных автомобильных часов-термометра-вольтметра. Разработка алгоритма работы и принципиальной электрической схемы. Получение прошивки программы для памяти микроконтроллера в результате ассеблирования.
курсовая работа [2,0 M], добавлен 26.12.2009Разработка структурной и принципиальной схемы устройства. Микроконтроллер PIC16F886, температурные и электрические характеристики. Четырехразрядный семисегментный светодиодный индикатор. Разработка алгоритма управляющей программы, общий алгоритм.
курсовая работа [497,4 K], добавлен 31.01.2013Разработка системы считывания данных с пяти четырехбитных датчиков. Проектирование структурной схемы микроконтроллера, схемы электрической принципиальной, блок-схемы работы программного обеспечения устройства. Разработка алгоритма основной программы.
контрольная работа [275,4 K], добавлен 08.01.2014Электрическая принципиальная схема устройства автоматической тренировки аккумулятора. Выбор элементной базы. Разработка схемы электрической принципиальной. Размещение компонентов на печатной плате. Разработка алгоритма программы микроконтроллера.
дипломная работа [670,2 K], добавлен 20.10.2013Функциональная спецификация и структурная схема автомобильных вольтметра-термометра-часов. Описание ресурсов микроконтроллера, назначение выводов микросхемы. Ассемблирование и разработка алгоритма работы, коды кнопок и описание команд управления.
курсовая работа [2,0 M], добавлен 27.12.2009Структурная схема микропроцессорного устройства для определения частоты сигнала. Выбор микроконтроллера, описание алгоритма нахождения частоты. Алгоритм работы программы управления микропроцессорным устройством. Программа работы микропроцессора.
курсовая работа [605,7 K], добавлен 24.11.2014Функциональная спецификация, описание объекта, структура системы и ресурсов микроконтроллера. Ассемблирование, программирование микроконтроллера и разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы.
курсовая работа [2,2 M], добавлен 02.01.2010Развитие и применение микропроцессоров как одно из направлений научно-технического прогресса. Разработка структурной и принципиальной схемы разрабатываемого устройства, анализ функциональности. Алгоритм работы управляющей программы: работа и требования.
курсовая работа [459,4 K], добавлен 11.12.2015Разработка и описание алгоритма функционирования устройства, отладка рабочей программы на языке команд микропроцессора. Обоснование аппаратной части устройства. Составление электрической принципиальной схемы устройства, расчет быстродействия устройства.
курсовая работа [50,2 K], добавлен 03.12.2010Проектирование микроконтроллера системы управления холодильника, разработка принципиальной электрической и общей функциональной схемы устройства. Описание работы специальной прикладной программы. Программа устройства на Ассемблере. Блок-схема программы.
курсовая работа [47,6 K], добавлен 14.07.2009