Цифровые часы

Выбор и обоснование технических требований к цифровым часам с будильником. Разработка структурной схемы. Разработка алгоритма управляющей программы. Характеристики, специальные особенности микроконтроллеров 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

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