- •Курсовой проект
- •Восточно-Сибирский государственный
- •Студент Ожигов и.А.,Горбов е.Г. Группа№ 621-2
- •Лист1 Схема эл. Принипиальная.
- •В ведение
- •1.Описание используемой омэвм
- •1 .2.Особенности структурной организации pic 16f84
- •Размещение регистров в памяти данных.
- •Описание специальных регистров pic 16f84
- •Состояние специальных регистров после сброса
- •2.Постановка задачи
- •2.1.Техническое задание
- •2 .2.Функциональная схема
- •2 .3.Описание работы системы
- •3 .Разработка программы работы омэвм
- •3.1.Блок-схема программы
- •3 .2.Программа работы омэвм
- •Спецификация элементов
- •Заключение
- •П ринципиальная схема
2.Постановка задачи
2.1.Техническое задание
Работа микроЭВМ по выполнению программы охранной сигнализации начинается и восстанавливается с помощью переключателя.Визуальный сигнал включается при несанкционированном открытии двери или окна, либо в случае возбуждения детектора движения на время не меньше 5 секунд.Звуковой сигнал включается через 60 секунд после включения визуального сигнала, если за этот промежуток времени система не была восстановлена с помощью переключателя. Программа работы микроЭВМ хранится в ПЗУ, реализуемом на микросхемах PIC16F84.
В итого получаем общее число задействованных линий ввода/вывода равное 5. Так как общее число линий в/в выбранной ОМЭВМ равно 15, то ресурсов в/в ЭВМ достаточно и не требует их увеличения.
2 .2.Функциональная схема
Рис1. Функциональная схема.
Схема построена на микроконтроллере PIC16F84. Питание осуществляется от источника напряжения +5 вольт.
Данные о состоянии системы дают ключи S1÷S3. В нормальном состоянии они разомкнуты (логическая единица на входах порта устанавливается через внутренние подтягивающие резисторы). При наступлении какого-либо события, замыкается соответствующий ключ (логический ноль), на что и реагирует микропроцессор.
Индикация срабатывания производится светодиодами, подключенными непосредственно к разрядам RA2 и RA3 порта A. Допустимая нагрузка по току у PIC16F84 через одну ножку порта 25mA. Сирена подключается к питанию +12.Общий сброс системы и приведение в исходное состояние производится ключом S4.
2 .3.Описание работы системы
Исходя из задания, логика работы охранной сигнализации построена следующим образом:
После включения питания производятся необходимые установки системных регистров и памяти данных, опрашивается состояние сигнальных ключей. При незамкнутом состоянии ключей процессор переходит в режим пониженного энергопотребления Sleep.
Выход их режима Sleep происходит при изменении состояния входов порта B RB4÷RB7. В проекте используются три старших разряда порта B.
При срабатывании любого из ключей S1÷S3 PIC16F84 выходит из режима Sleep, определяет, какой ключ сработал, в течение 5 секунд опрашивает состояние сработавшего ключа. Если оно не изменилось по окончании этого периода времени, включает соответствующий светодиод. Далее ожидает еще 60 секунд и включает сирену.
В исходное состояние устройство приводится при включении питания или нажатии ключа S4 «Сброс».
3 .Разработка программы работы омэвм
3.1.Блок-схема программы
НАЧАЛО
Инициализация
T:=60
да
Включение звукового
сигнала
КОНЕЦ
3 .2.Программа работы омэвм
2007 3FFB 00001 CONFIG
00000005 00002 Time1 equ D'5' ;Период времени 5 секунд
0000003C 00003 Time2 equ D'60' ;Период времени 60 секунд
0000002D 00004 DividerTMR0 equ D'256'-D'211' ;определитель таймера
00005 include;подключить стандартный файл заголовков
00006
0000000C 00007 countTMR0 ;счетчик прерываний таймера (~1/256Sec)
0000000D 00008 countSec ;шестнадцатиричный счетчик секунд
00009
0000000E 00010 w_temp ;регистр для временного хранения W при прерывании
0000000F 00011 status_temp ;регистр для временного хранения STATUS-регистра
00012
00000010 00013 mode ;флаги режимов
00014
00000011 00015 Keys ;копия порта B при опросе ключей
00016
00000012 00017 temp ;для хранения временных переменных
00018
00019 endc
0000 00020 ORG 0x000 ;с этого адреса процессор начинает выполнение программ
0000 2833 00021 goto main ;переход на начало главной программы
00023 ; Обработка прерываний
0004 00024 ORG 0x004 ;на этот адрес передается управление при прерываниях
0004 008E 00026 movwf w_temp ;сохранить регистр аккумулятор W
0005 0E03 00027 swapf STATUS,W ;регистр статуса переписать в аккумулятор W с обменом
0006 008F 00028 movwf status_temp ;сохранить регистр статуса
00029
0007 190B 00030 btfsc INTCON,T0IF ;прерывание от TMR0?
0008 2014 00031 call INTTMR0 ;да, обработать прерывание от таймера TMR0
00032
0009 180B 00033 btfsc INTCON,RBIF ;прерывание по изменению RB4...RB7?
000A 202E 00034 call INTRB ;да, обработать прерывание от таймера TMR0
00035
000B 30F8 00036 movlw B'11111000' ;сбросить все флаги прерываний
000C 058B 00037 andwf INTCON,F
000D 168B 00038 bsf INTCON,T0IE ;разрешить прерывание по таймеру
000E 158B 00039 bsf INTCON,RBIE ;разрешить прерывание по изменению RB4...RB7
00040
000F 0E0F 00041 swapf status_temp,W ;восстановить значение статуса в W
0010 0083 00042 movwf STATUS ;восстановить статус-регистр
0011 0E8E 00043 swapf w_temp,F ;восстановить регистр W
0012 0E0E 00044 swapf w_temp,W ;без изменения статус-регистра
0013 0009 00045 retfie
Процедура обработки прерывания от таймера TMR0
0014 00046 INTTMR0
0014 302D 00047 movlw DividerTMR0 ;загрузить пределитель
0015 0081 00048 movwf TMR0 ;перезапустить таймер
0016 0A8C 00049 incf countTMR0,F ;увеличить счетчик прерываний
0017 1903 00050 btfsc STATUS,Z ;он обнулился? (прошла 256*3,904mS~1Sec)
0018 0A8D 00051 incf countSec,F ;если да, увеличить счетчик секунд
00052
0019 0806 00053 movf PORTB,W ;загрузить порт B
001A 3AE0 00054 xorlw B'11100000' ;проверить три старших разряда
001B 1903 00055 btfsc STATUS,Z ;если все ключи отпущены,
001C 1410 00056 bsf ModeSleep ;установить режим Sleep
00057
001D 080D 00058 movf countSec,W ;загрузить счетчик секунд
001E 3C05 00059 sublw Time1 ;сравнить с первым периодом времени
001F 1803 00060 btfsc STATUS,C ;если не превысило,
0020 0008 00061 return ;выход
00062
0021 1F86 00063 btfss MOVkey ;сработан ключ "Движение"?
0022 1505 00064 bsf MOVpin ;да - зажечь светодиод "Движение"
00065
0023 1F06 00066 btfss WINkey ;сработан ключ "Окно"?
0024 1585 00067 bsf WINpin ;да - зажечь светодиод "Дверь, окно"
00068
0025 1E86 00069 btfss DOORkey ;сработан ключ "Дверь"?
0026 1585 00070 bsf WINpin ;да - зажечь светодиод "Дверь, окно"
00071
0027 080D 00072 movf countSec,W ;загрузить счетчик секунд
0028 3C3C 00073 sublw Time2 ;сравнить со вторым периодом времени
0029 1803 00074 btfsc STATUS,C ;если не превысило,
002A 0008 00075 return ;выход
00076
002B 1405 00077 bsf SIRENpin ;включить сирену
002C 1410 00078 bsf ModeSleep ;установить режим Sleep
00079
002D 0008 00080 return
Обработка прерывания от изменения RB4...RB7
002E 00081 INTRB
002E 1010 00082 bcf ModeSleep ;сбросить режим спячки
0
02F
0806 00083 movf
PORTB,W
;загрузить новое состояние ключей
0030 0091 00084 movwf Keys ;и сохранить их
0031 018D 00085 clrf countSec ;сбросить счетчик секунд
00086
0032 0008 00087 return
НАЧАЛО
0033 00088 main
0033 2038 00089 call Initial ;запустить процедуру инициализации
ГЛАВНЫЙ ЦИКЛ
0034 00090 Mloop
0034 1810 00091 btfsc ModeSleep ;установлен энергосберегающий режим?
0035 0063 00092 sleep ;да - заснуть
0036 0000 00093 nop
00094
0037 2834 00095 goto Mloop
00096
Код инициализации
0038 00097 Initial
Инициализировать порты
0038 0185 00098 clrf PORTA ;установить низкий уровень разрядов порта A
00099 ;(выключить все)
0039 0186 00100 clrf PORTB ;сбросить порт B
00101
003A 1683 00102 BANK1 ;переключиться на банк данных 1
003B 30F0 00103 movlw B'11110000' ;четыре младших разряда порта A
003C 0085 00104 movwf TRISA ;включить на вывод
003D 0186 00105 clrf TRISB ;сбросить порт B
003E 0986 00106 comf TRISB,F ;включить его на ввод
003F 1283 00107 BANK0
00108
0040 0190 00109 clrf mode ;сбросить режимы
00110
Разрешить прерывание по таймеру
0041 1683 00111 BANK1
0042 3003 00112 movlw B'00000011'
0043 0081 00113 movwf OPTION_REG ;установить пределитель =16 и включить
0044 1283 00114 BANK0
0045 018B 00115 clrf INTCON ;сбросить регистр прерываний
0046 168B 00116 bsf INTCON,T0IE ;разрешить прерывания от таймера
0047 158B 00117 bsf INTCON,RBIE ;разрешить прерывание от изменения RB4...RB7
0048 302D 00118 movlw DividerTMR0
0049 0081 00119 movwf TMR0 ;загрузить делитель (пуск таймера)
004A 1410 00120 bsf ModeSleep ;установить энергосберегающий режим
004B 0009 00121 retfie ;выход и разрешение прерываний вообще
00122 END ;директива 'конец программы'
