Смекни!
smekni.com

Разработка микропроцессорной системы на базе микроконтроллера для пожарной сигнализации (стр. 4 из 4)

GOTO S10 ;ТО ИДЕМ ВЫКЛЮЧАТЬ.

BSF PORTA,4 ;ВКЛЮЧИМ НЕСУЩУЮ,

BSF FLAG,1 ;ПОСТАВИМ ФЛАГ ВКЛЮЧЕНИЯ.

BTFSC FLAG,0 ;ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,

RETURN ;ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.

CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.

BSF PORTA,3 ;ВКЛЮЧИМ ВЫХОД.

CALL ID21 ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ.

BCF PORTA,3 ;ВЫКЛЮЧИМ ВЫХОД.

CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.

BCF PORTA,4 ;ВЫКЛЮЧИМНЕСУЩУЮ.

RETURN

S10

BCF FLAG,1 ;СБРОСИМ ФЛАГ ВКЛЮЧЕНИЯ НЕСУЩЕЙ.

BTFSC FLAG,0 ;ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,

RETURN ;ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.

BSF PORTA,4 ;ВКЛЮЧИМ НЕСУЩУЮ,

CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.

BSF PORTA,3 ;ВКЛЮЧИМ ВЫХОД.

CALL ID21 ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ.

BCF PORTA,3 ;ВЫКЛЮЧИМ ВЫХОД.

CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.

BCF PORTA,4 ;ВЫКЛЮЧИМ НЕСУЩУЮ.

RETURN

;======================

; 2. ИНИЦИАЛИЗАЦИЯ.

;======================

INIT

BSF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 1.

MOVLW B'00000100';ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32...100,

MOVWF OPTION_REG^80H;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ.

MOVLW B'10100000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА.

MOVWF INTCON ;

MOVLW B'00000111' ;RA3,RA4-НА ВЫХОД, RA0-RA2-ВХОД.

MOVWF TRISA^80H

MOVLW B'11111111' ;RB0-RB7-НА ВХОД.

MOVWF TRISB^80H

BCF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 0.

CLRF TMR0 ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ

CLRF FLAG

CLRF PORTA

CLRF COU

GOTO KEY ;ИДЕМ НА ОПРОС ДАТЧИКОВ.

;==============================================

END

;


Приложение В

ПОЖАРНАЯ СИГНАЛИЗАЦИЯ НА 11 ДАТЧИКОВ,

; ДЕШИФРАТОР ПРИЕМНИКА.

;

; РАЗРАБОТАЛ ЧЕБОТАРЕВ А,А,

; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ.

; СЕВЕРОДОНЕЦК.

;

; ПРОГРАММА = OXPANAPM.ASM

; ВЕРСИЯ: 12-04-03.

; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.

;

#include p16f84a.inc

__CONFIG 3FF0H

;======================================

; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.

; RB0 - ВХОД.

; RA4 - ВЫХОД СИГНАЛА ТРЕВОГИ.

; RB1-RB7 - ВЫХОД СЕГМЕНТОВ.

;======================================

; СПЕЦ РЕГИСТРЫ.

;================

INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.

TIMER0 EQU 01H ;TMR0.

OPTIONR EQU 81H ;OPTION (RP0=1).

PC EQU 02H ;СЧЕТЧИК КОМАНД.

STATUS EQU 03H ;РЕГИСТР СОСТОЯНИЯ АЛУ.

FSR EQU 04H ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.

PORTA EQU 05H ;ПОРТ А ВВОДА/ВЫВОДА.

PORTB EQU 06H ;ПОРТ В ВВОДА/ВЫВОДА.

TRISA EQU 85H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.

TRISB EQU 86H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.

INTCON EQU 0BH ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.

;=================================

; ОПРЕДЕЛЕНИЕ РАБОЧИХ РЕГИСТРОВ.

;=================================

SCN EQU 0CH ;СЧЕТЧИК ИМПУЛЬСОВ.

SMC EQU 0DH ;СЧЕТЧИК МИЛЛИСЕКУНД.

SIN EQU 0EH ;РЕГИСТР ИНДИКАЦИИ.

;====================

; ВРЕМЕННЫЕ РЕГИСТРЫ.

;====================

W_TEMP EQU 0FH ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.

STATUS_TEMP EQU 10H ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.

FSR_TEMP EQU 11H ;ВРЕМЕННЫЙ ДЛЯ FSR.

;=========================================

; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG.

;=========================================

FLAG EQU 12H

;

; 0-> ФЛАГ ВКЛЮЧЕНИЯ ПЕРЕПОЛНЕНИЯ.

; 1-> ФЛАГ ВЫПОЛНЕННОЙ ПЕРЕЗАПИСИ.

;==================

; 1. ПУСК.

;==================

ORG 0

GOTO INIT

ORG 4

GOTO CONST

;==================

; 2. ИНИЦИАЛИЗАЦИЯ.

==================

INIT

BSF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 1.

MOVLW B'01000001' ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=4...1.

MOVWF OPTION_REG^80H ;СРАБАТЫВАНИЕ ПО ПЕРЕДНЕМУ ФРОНТУ.

MOVLW B'10110000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ИЗМЕНЕНИИ СИГНАЛА RВ0.

MOVWF INTCON ;

MOVLW B'00000000' ;ВСЕ - НА ВЫХОД.

MOVWF TRISA^80H

MOVLW B'00000001' ; RB1-RB7-НА ВЫХОД, RB0-ВХОД.

MOVWF TRISB^80H

BCF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 0.

CLRF TMR0 ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ

CLRF SCN

CLRF SMC

CLRF SIN

CLRF PORTB

CLRF FLAG

GOTO IND ;ИДЕМНАИНДИКАЦИЮ.

;========================================

; 3. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.

;========================================

SEGDATA ; 7, 6, 5, 4, 3, 2, 1, 0.

ADDWF PCL,F ; G, F, E, D, C, B, A, IN.

; ОБЩИЙ: КАТОД АНОД

RETLW B'00000000' ; B'1111111' СЕГМЕНТЫ ВЫКЛЮЧЕНЫ.

RETLW B'00001100' ; B'1111001' 1

RETLW B'10110110' ; B'0100100' 2

RETLW B'10011110' ; B'0110000' 3

RETLW B'11001100' ; B'0011001' 4

RETLW B'11011010' ; B'0010010' 5

RETLW B'11111010' ; B'0000010' 6

RETLW B'00001110' ; B'1111000' 7

RETLW B'11111110' ; B'0000000' 8

RETLW B'11011110' ; B'0010000' 9

RETLW B'00010000' ; B'1110111' 10

RETLW B'10000000' ; B'0111111' 11

;==============================================

; 4. ПП. ИНДИКАЦИИ.

;==============================================

IND

MOVFW SIN ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ РАЗРЯДА ИНДИКАЦИИ.

CALL SEGDATA ;ОПРЕДЕЛИМ ЗНАЧЕНИЯ СЕГМЕНТОВ.

MOVWF PORTB ;В ВЫХОДНОЙ РЕГИСТР ПОРТА "B" ПЕРЕПИШЕМ ЗНАЧЕНИЯ СЕГМЕНТОВ.

GOTO IND ;ПОВТОРИМ.

;====================================

; 5. СЧЕТЧИК ИМПУЛЬСОВ НОМЕРА ДАТЧИКА.

;====================================

SEC

BTFSS PORTB,0 ;ДЛЯ ИСКЛЮЧЕНИЯ ИМПУЛЬСА ПОМЕХИ.

RETURN ;ИМПУЛЬС КОРОЧЕ 1,34 МС. ОТСЕКАЕМ.

CLRF SMC ;СЧЕТЧИК И ТАЙМЕР СБРАСЫВАЮТСЯ

CLRF TMR0 ;ПРИ КАЖДОМ ИМПУЛЬСЕ.

BTFSS FLAG,0

RETURN

INCF SCN,1 ;ПРИ ЕДИНИЧНОМ ФЛАГЕ СЧИТАЕМ ИМПУЛЬСЫ.

MOVLW.20 ;ЕСЛИ УЖЕ 20 И БОЛЬШЕ,

SUBWF SCN,0 ;

SKPNC

BCF PORTA,4 ;ВКЛЮЧИМСИГНАЛ.

RETURN

;====================================

; 6. ПЕРЕЗАПИСЬ В РЕГИСТР ИНДИКАЦИИ.

;====================================

SES

MOVFW SCN ;ПЕРЕПИШЕМ ЗНАЧЕНИЯ СЧЕТЧИКА ИМПУЛЬСОВ

MOVWF SIN ;В РЕГИСТР ИНДИКАЦИИ.

MOVLW.12 ;ЕСЛИ УЖЕ 12 И БОЛЬШЕ,

SUBWF SIN,0 ;

SKPNC

CLRF SIN ;ОБНУЛИМ.

MOVLW.20 ;ЕСЛИ УЖЕ 20 И БОЛЬШЕ,

UBWF SCN,0 ;

SKPNC

BCF PORTA,4 ;ВКЛЮЧИМ СИГНАЛ.

CLRF SCN ;ОБНУЛИМ.

RETURN

;======================================================

; 7. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.

;======================================================

CONST

MOVWF W_TEMP ;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И

MOVFW STATUS ;STATUS,

MOVWF STATUS_TEMP ;

MOVFW FSR ;FSR.

MOVWF FSR_TEMP ;

BTFSS INTCON,1

GOTO S01 ;ПРИБАВИМ 1 ВСЧЕТЧИК.

CALL SEC ;СБРОСИМ ТАЙМЕР ИЛИ УВЕЛИЧИМ СЧЕТЧИК.

RECONST ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.

BCF INTCON,2 ;СБРОСИМ ФЛАГ ПО ПЕРЕПОЛНЕНИЮ ТАЙМЕРА.

BCF INTCON,1 ;СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ВХОДУ RВ0.

MOVFW STATUS_TEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:

MOVWF STATUS ;STATUS,

MOVFW FSR_TEMP ;

MOVWF FSR ;FSR,

MOVFW W_TEMP ;W.

; CLRF TMR0

RETFIE ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.

;========================

; 8. СЧЕТЧИК МИЛЛИСЕКУНД.

;========================

S01

INCF SMC,1 ;ЕСЛИ ДЕЛИТЕЛЬ НА 8, ТО БУДЕТ 1 СЕКУНДА.

MOVFW SMC ;

ADDLW -05H ;К=5. ЧТОБЫ ОБНУЛИТЬ

SKPNZ ;СЧЕТЧИК ПОСЛЕ

CALL SES ;АВАРИЙНОГО РЕЖИМА.

MOVFW SMC ;ПЕРЕЗАПИСЬ

ADDLW -07H ;К=7. ЧТОБЫ РАЗРЕШИТЬ ЗАПИСЬ

SKPNZ ;

BCF FLAG,0 ;В АВАРИЙНОМ РЕЖИМЕ.

SKPNZ ;ПОСЛЕ АВАРИЙНОГО РЕЖИМА

BSF PORTA,4 ;ВЫКЛЮЧИМ СИГНАЛ.

MOVFW SMC ;ЕСЛИ ДЕЛИТЕЛЬ НА 9, ТО БУДЕТ БОЛЬШЕ 1 СЕКУНДЫ.

ADDLW -09H ;К=9.

SKPNZ ;ПРИ ПЕРЕПОЛНЕНИИ СЧЕТЧИКА

BCF PORTA,4 ;ВКЛЮЧИМ СИГНАЛ.

SKPNZ

BSF FLAG,0 ;РАЗРЕШИМ СЧЕТ.

SKPNZ

CLRF SMC ;

GOTO RECONST

MOVFW SMC ;

ADDLW -0AH ;К=11.

SKPNZ

CLRF SMC ;ОБНУЛИМСЧЕТЧИКМИЛЛИСЕКУНД.

GOTO RECONST

;=============================================

END

==============================================


ПриложениеГ


Приложение Д

Схема принципиальная электрическая