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
==============================================
ПриложениеГ
Приложение Д
Схема принципиальная электрическая