Цифровые часы с таймером

Описание используемого микроконтроллера. Разработка структурной схемы устройства. Принципиальная схема устройства часов с таймером. Разработка алгоритма работы управляющей программы. Разработка управляющей программы. Демонстрация работы устройства.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.