Цифровые часы с будильником на семисегментном индикаторе

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

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