GOTO CALL_COMP_T ;ВЫЗОВ ПОДПРОГРАММЫ КОНТРОЛЯ ТЕМПЕРАТУРЫ
BTFSS PORTB,1 ;ПРОВЕРКА СОСТОЯНИЯ КНОПКИ
GOTO $+3
BTFSC PORTB,5 ;ПРОВЕРКА СОСТОЯНИЯ ИНДИКАТОРА "ОШИБКА ПРИ ЗАПУСКЕ"
GOTO CALL_COMP_T ;ВЫЗОВ ПОДПРОГРАММЫ КОНТРОЛЯ ТЕМПЕРАТУРЫ
CALL SET_LED
BSF PORTB,4 ;ВКЛЮЧИТЬ ИНДИКАТОР "АВАРИЙНОЕ ПИТАНИЕ"
BSF T1CON,TMR1ON ;ЗАПУСК ТАЙМЕРА TMR1
BSF T1CON,T1OSCEN ;ЗАПУСК ГЕНЕРАТОРА ТАЙМЕРА TMR1
COMP_TIME ;СРАВНЕНИЕ ВРЕМЕНИ
MOVF SEC_L,W
XORLW 0x05 ;ЕСЛИ ТАЙМЕР ОТСЧИТАЛ 5с
;ПЕРЕХОДИТЬ К ПРОВЕРКЕ ЧАСТОТЫ ВРАЩЕНИЯ
BTFSS STATUS,Z
GOTO COMP_TIME ;ИНАЧЕ ВЕРНУТЬСЯ К ПРОВЕРКЕ ЗНАЧЕНИЯ
;СЧЕТЧИКА SEC_L
;-------------------------------------------------------------------------
;КОНТРОЛЬ ЧАСТОТЫ ВРАЩЕНИЯ
SET_TIMER1
BSF ADCON0,CHS0 ;ВЫБОР КАНАЛА 3 АЦП
BSF ADCON0,CHS1
BCF ADCON0,CHS2
M13
DECFSZ TIMER1,F ;ФОРМИРОВАНИЕ ЗАДЕРЖКИ 20 мкс
GOTO M13
BSF ADCON0,GO ;НАЧАТЬ ПРЕОБРАЗОВАНИЕ
M14
BTFSC ADCON0,GO ;ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ
GOTO M14
;------------------------------------------------------------------
;ПРОВЕРКА ЧАСТОТЫ
BCF STATUS,Z
BANC1
MOVF ADRESH,W
XORLW MIN_FH
BTFSC STATUS,Z
GOTO M15
MOVF ADRESH,W
BCF STATUS,C
SUBLW MIN_FH
BTFSC STATUS,C
GOTO AV_STOP ;ВЫЗОВ АВАРИЙНОЙ ОСТАНОВКИ ДГА
M15
BCF STATUS,Z
BANC0
MOVF ADRESL,W
SUBLW MIN_FL
BTFSC STATUS,C
GOTO AV_STOP ;ВЫЗОВ АВАРИЙНОЙ ОСТАНОВКИ ДГА
BANC1
MOVF ADRESH,W
XORLW MAX_FH
BTFSC STATUS,Z
GOTO M16
MOVF ADRESH,W
SUBLW MAX_FH
BTFSS STATUS,C
GOTO AV_STOP ;ВЫЗОВ АВАРИЙНОЙ ОСТАНОВКИ ДГА
M16
BCF STATUS,Z
BANC0
MOVF ADRESL,W
SUBLW MAX_FL
BTFSC STATUS,C
GOTO AV_STOP ;ВЫЗОВ АВАРИЙНОЙ ОСТАНОВКИ ДГА
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
AV_STOP ;АВАРИЙНАЯ ОСТАНОВКА
BANC0
BCF PORTB,4 ;ВЫКЛЮЧЕНИЕ ИНДИКАТОРА "АВАРИЙНОЕ ПИТАНИЕ"
BSF PORTB,5 ;ВКЛЮЧЕНИЕ ИНДИКАТОРА "ОШИБКА ПРИ ЗАПУСКЕ"
CALL DIS_LCD ;ВЫЗОВ ПОДПРОГРАММЫ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ
BTFSC PORTB,1 ;ЕСЛИ КНОПКА НЕ НАЖАТА
GOTO CALL_COMP_T ;ВЫЗВАТЬ ПОДПРОГРАММУ КОНТРОЛЯ ТЕМПЕРАТУРЫ
BCF PORTB,5 ;ИНАЧЕ ВЫКЛЮЧИТЬ ИНДИКАТОР "ОШИБКА ПРИ
;ЗАПУСКЕ"
GOTO START_DGA ;ПЕРЕЙТИ НА ПОДПРОГРАММУ ЗАПУСКА ДГА
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
CALL_COMP_T ;ПОДПРОГРАММА КОНТРОЛЯ ТЕМПЕРАТУРЫ
BCF ADCON0,CHS0 ;ВЫБОР КАНАЛА 4 АЦП
BCF ADCON0,CHS1
BSF ADCON0,CHS2
SET_TIMER1
M17
DECFSZ TIMER1,F ;ФОРМИРОВАНИЕ ЗАДЕРЖКИ 20 мкс
GOTO M17
BSF ADCON0,GO ;НАЧАТЬ ПРЕОБРАЗОВАНИЕ
M18
BTFSC ADCON0,GO ;ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ
GOTO M18
;------------------------------------------------------------
;ПРОВЕРКА НА СНИЖЕНИЕ ТЕМПЕРАТУРЫ НИЖЕ НОРМЫ
BCF STATUS,Z
BANC1
MOVF ADRESH,W
XORLW MIN_UH
BTFSC STATUS,Z
GOTO M19
MOVF ADRESH,W
BCF STATUS,C
SUBLW MIN_TH
BANC0
BTFSC STATUS,C
BCF PORTB,2 ;ВЫКЛЮЧЕНИЕ ВЕНТИЛЯТОРА
M19
BCF STATUS,Z
MOVF ADRESL,W
SUBLW MIN_TL
BTFSC STATUS,C
BCF PORTB,2 ;ВЫКЛЮЧЕНИЕ ВЕНТИЛЯТОРА
;---------------------------------------------------------------
;ПРОВЕРКА ПРЕВЫШЕНИЯ НОРМЫ
BANC1
MOVF ADRESH,W
XORLW MAX_TH
BTFSC STATUS,Z
GOTO M20
MOVF ADRESH,W
SUBLW MAX_TH
BANC0
BTFSS STATUS,C
BSF PORTB,2 ;ВКЛЮЧЕНИЕ ВЕНТИЛЯТОРА
M20
BCF STATUS,Z
MOVF ADRESL,W
SUBLW MAX_UL
BTFSC STATUS,C
BSF PORTB,2 ;ВКЛЮЧЕНИЕ ВЕНТИЛЯТОРА
;-----------------------------------------------------------------
BTFSC PORTB,0 ;ПРОВЕРКА ДАТЧИКА СНИЖЕНИЯ ТЕМПЕРАТУРЫ
BSF PORTB,3 ;ВКЛЮЧИТЬ ОБОГРЕВ
BCF PORTB,3 ;ВЫКЛЮЧИТЬ ОБОГРЕВ
GOTO ADC_START ;ПЕРЕХОД В НАЧАЛО
;-----------------------------------------------------------------
;-----------------------------------------------------------------
STOP_DGA ;ПОДПРОГРАММА ОСТАНОВКИ ДГА
BANC0
BCF PORTB,4 ;ВЫКЛЮЧИТЬ ИНДИКАТОР "АВАРИЙНОЕ ПИТАНИЕ"
BCF T1CON,T1OSCEN ;ВЫКЛЮЧИТЬ ГЕНЕРАТОР ТАЙМЕРА TMR1
BCF T1CON,TMR1ON ;ВЫКЛЮЧИТЬ ТАЙМЕР TMR1
CALL DIS_LCD ;ВЫЗОВ ПОДПРОГРАММЫ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ
;-----------------------------------------------------------------
;ЗАПИСЬ В EEPROM
MOVLW SEC_L ;ЗАПИСЬ АДРЕСА РЕГИСТРА SEC_L
;В РЕГИСТР FSR
MOVWF FSR
BANC2
CLRF EEADR ;УСТАНОВКА НАЧАЛЬНОГО АДРЕСА 00h
WRITE
BANC3
BTFSC EECON1,WR ;ПРОВЕРКА ОКОНЧАНИЯ ЗАПИСИ В EEPROM
GOTO WRITE
MOVF INDF,F ;ЧТЕНИЕ ДАННЫХ ИЗ РЕГИСТРА
;АДРЕС КОТОРОГО В FSR
BANC2
MOVWF EEDATA
BANC3
BCF EECON1,EEPGD ;ЗАПИСЬ БУДЕТ ПРОИЗВОДИТЬСЯ В EEPROM
BSF EECON1,WREN ;РАЗРЕШЕНИЕ ЗАПИСИ В EEPROM
BCF INTCON,GIE ;ЗАПРЕТ ПРЕРЫВАНИЙ
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR ;ИНИЦИАЛИЗАЦИЯ ЗАПИСИ
BCF EECON1,WREN ;ЗАПРЕТ ЗАПИСИ ВEEPROM
BANC2
INCF EEADR,F ;УВЕЛИЧИТЬ АДРЕС НА 1
MOVWF EEADR
XORLW 0x06 ;ЕСЛИ АДРЕС РАВЕН 06h
BTFSC STATUS,Z
GOTO $+3 ;ЗАКОНЧИТЬ ЗАПИСЬ
INCF FSR,F ;ИНАЧЕ ПОДГОТОВИТЬ ДАННЫЕ СЛЕДУЮЩЕГО
;РЕГИСТРА
;К ЗАГРУЗКЕ В EEDATA
GOTO WRITE ;ПОВТОРИТЬ ПРОЦЕСС СНАЧАЛА С НОВЫМ АДРЕСОМ И ДАННЫМИ
BANC0
BSF INTCON,GIE ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ
;----------------------------------------------------------------
;ОЧИСТКА СЧЕТЧИКОВ
CLRF SEC_L
CLRF SEC_H
CLRF MIN_L
CLRF MIN_H
CLRF HOUR_L
CLRF HOUR_H
RETURN
;----------------------------------------------------------------
;----------------------------------------------------------------
DIS_LCD ;ПОДПРОГРАММА ВЫКЛЮЧЕНИЯ ДРАЙВЕРА LCD
;----------------------------------------------------------------
;ВЫКЛЮЧЕНИЕ РЕЖИМА ДВОИЧНО-ДЕСЯТИЧНОГО ДЕКОДИРОВАНИЯ
BANC1
BSF SSPCON2,SEN ;СГЕНЕРИРОВАТЬ БИТ START
BTFSC SSPCON2,SEN ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START
GOTO $-1
MOVLW 0x38 ;ПЕРЕДАТЬ АДРЕС ДРАЙВЕРА
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x01 ;ПРЕРЕДАТЬ АДРЕС РЕГИСТРА УПАРВЛЕНИЯ
;ДЕКОДИРОВАНИЕМ
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x00 ;ОТКЛЮЧИТЬ ДВОИЧНО-ДЕСЯТИЧНОЕ ДЕКОДИРОВАНИЕ
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
;------------------------------------------------------------------
;ГАШЕНИЕ ИНДИКАТОРОВ
BSF SSPCON2,RSEN ;СФОРМИРОВАТЬ БИТ ПОВТОРНЫЙ СТАРТ
BTFSC SSPCON2,RSEN ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА ПОВТОРНЫЙ СТАРТ
GOTO $-1
MOVLW 0x38 ;ПЕРЕДАТЬ АДРЕС ДРАЙВЕРА
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x20 ;ПЕРЕДАТЬ АДРЕС ПЕРВОГО РЕГИСТРА ДАННЫХ
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x00 ;ОЧИСТИТЬ ПЕРВЫЙ РЕГИСТР ДАННЫХ
MOVWF SSPBUF
BTFSC SSPSTAT,BF
GOTO $-1
MOVWF SSPBUF ;ОЧИСТИТЬ ПЕРВЫЙ РЕГИСТР ДАННЫХ
BTFSC SSPSTAT,BF
GOTO $-1
MOVWF SSPBUF ;ОЧИСТИТЬ ПЕРВЫЙ РЕГИСТР ДАННЫХ
BTFSC SSPSTAT,BF
GOTO $-1
MOVWF SSPBUF ;ОЧИСТИТЬ ПЕРВЫЙ РЕГИСТР ДАННЫХ
BTFSC SSPSTAT,BF
GOTO $-1
MOVWF SSPBUF ;ОЧИСТИТЬ ПЕРВЫЙ РЕГИСТР ДАННЫХ
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
BSF SSPCON2,PEN ;СГЕНЕРИРОВАТЬ БИТ STOP
;---------------------------------------------------------------
;ОТКЛЮЧЕНИЕ МОДУЛЯ MSSP
BTFSC SSPCON2,PEN ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА STOP
GOTO $-1
BCF SSPCON,SSPEN ;ВЫКЛЮЧИТЬ МОДУЛЬ MSSP
RETURN
;----------------------------------------------------------------
;-------------------------------------------------------------------------
SET_LED ;ПОДПРОГРАММА НАСТРОЙКИ ДРАЙВЕРА LCD
BSF SSPCON,SSPEN ;ВКЛЮЧИТЬ МОДУЛЬ MSSP
BANC1
BSF SSPCON2,SEN ;СГЕНЕРИРОВАТЬ БИТ START
BTFSC SSPCON2,SEN ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START
GOTO $-1
MOVLW 0x38 ;ПЕРЕДАТЬ АДРЕС ДРАЙВЕРА
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x01 ;ПРЕРЕДАТЬ АДРЕС ПЕРВОГО РЕГИСТРА
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x0F ;ПЕРЕДАТЬ ДАННЫЕ В ПЕРВЫЙ РЕГИСТР
MOVWF SSPBUF
BTFSC SSPSTAT,BF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVLW 0x07 ;ПЕРЕДАТЬ ДАННЫЕ ВО ВТОРОЙ РЕГИСТР
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
BSF SSPCON2,PEN ;СФОРМИРОВАТЬ БИТ STOP
BANC0
RETURN
;-------------------------------------------------------------------------
;----------------------------------------------------------------
;ОБРАБОТКА ПРЕРЫВАНИЙ
ORG 0x04 ;ВЕКТОР ПРЕРЫВАНИЙ
;-----------------------------------------------------------------
;СОХРАНЕНИЕ АККУМУЛЯТОРА И РЕГИСТРА STATUS
BTFSS STATUS,RP0 ;ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО БАНКА
GOTO RP0_CLR
BCF STATUS,RP0 ;УСТАНОВИТЬ БАНК 0
MOVWF W_TEMP ;СОХРАНИТЬ АККУМУЛЯТОР
SWAPF STATUS,W
MOVWF STATUS_TEMP ;СОХРАНИТЬ РЕГИСТР STATUS
BSF STATUS_TEMP,5 ;ВОССТАНОВИТЬ ЗНАЧЕНИЕ БИТА RP0
GOTO $+4
RP0_CLR
MOVWF W_TEMP ;СОХРАНИТЬ АККУМУЛЯТОР
SWAPF STATUS,W
MOVWF STATUS_TEMP ;СОХРАНИТЬ РЕГИСТР STATUS
;-----------------------------------------------------------------
;ОПРЕДЕЛЕНИЕ ИСТОЧНИКА ПРЕРЫВАНИЯ
CLRF STATUS ;ИЧИСТИТЬ РЕГИСТР STATUS
BTFSC PIR1,CCP1IF ;ЕСЛИ ПРЕРЫВАНИЕ ОТ МОДУЛЯ CCP1
GOTO CLOCK ;ПЕРЕХОД НА ПОДПРОГРАММУ ТАЙМЕРА
BTFSC PIR1,RCIF ;ЕСЛИ ПРЕРЫВАНИЕ ОТ ПРИЕМНИКА USART
GOTO SERIAL_PRT ;ПЕРЕХОД НА ПОДПРОГРАММУ ПРИЕМА/ПЕРЕДАЧИ
;ДАННЫХ ЧЕРЕЗ USART
GOTO END_INT ;ИНАЧЕ ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ
;КОНТЕКСТА
;-----------------------------------------------------------------
CLOCK ;ПОДПРОГРАММА ТАЙМЕРА
BCF PIR1,CCP1IF ;СБРОСИТЬ ФЛАГ ПРЕРЫВАНИЯ ОТ МОДУЛЯ CCP1
;-----------------------------------------------------------------
;СЧЕТЧИК ЕДИНИЦ СЕКУНД
INCF SEC_L,F ;ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК СЕКУНД
MOVF SEC_L,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 10
XORLW 0x0A
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF SEC_L ;ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК СЕКУНД
;----------------------------------------------------------------
;СЧЕТЧИК ДЕСЯТКОВ СЕКУНД
INCF SEC_H,F ;ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК СЕКУНД
BCF STATUS,Z
MOVF SEC_H,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 6
XORLW 0x06
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF SEC_H ;ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК СЕКУНД
;-----------------------------------------------------------------
;СЧЕТЧИК ЕДИНИЦ МИНУТ
INCF MIN_L,F ;ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ
BCF STATUS,Z
MOVF MIN_L,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 10
XORLW 0x0A
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF MIN_L ;ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ
;----------------------------------------------------------------
;СЧЕТЧИК ДЕСЯТКОВ МИНУТ
INCF MIN_H,F ;ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ
BCF STATUS,Z
MOVF MIN_H,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 6
XORLW 0x06
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF MIN_H ;ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ
;-----------------------------------------------------------------
;СЧЕТЧИК ЕДИНИЦ ЧАСОВ
INCF HOUR_L,F ;ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ
BCF STATUS,Z
MOVF HOUR_L,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 10
XORLW 0x0A
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF HOUR_L ;ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ
;----------------------------------------------------------------
;СЧЕТЧИК ДЕСЯТКОВ ЧАСОВ
INCF HOUR_H,F ;ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ
BCF STATUS,Z
MOVF HOUR_H,W ;СЧЕТЧИК ДОСЧИТАЛ ДО 10
XORLW 0x0A
BTFSS STATUS,Z
GOTO LED_OUT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА
;ИНДИКАЦИЮ
CLRF HOUR_H ;ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ
GOTO LED_OUT ;ПЕРЕХОД НА ПОДПРОГРАММУ ВЫВОДА НА ИНДИКАЦИЮ
;-----------------------------------------------------------------
LED_OUT ;ПОДПРОГРАММА ВЫВОДА НА ИНДИКАЦИЮ
BANC1
;-----------------------------------------------------------------
;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РАЗДЕЛЯЮЩЕЙ ТОЧКИ
BTFSS POINT,1 ;ДЕЦИМАЛЬНАЯ ТОЧКА ВКЛЮЧЕНА
GOTO $+3
BCF POINT,1 ;ДА - ВЫКЛЮЧИТЬ ТОЧКУ
GOTO $+2
BSF POINT,1 ;НЕТ - ВКЛЮЧИТЬ ТОЧКУ
;-----------------------------------------------------------------
;ПЕРЕДАЧА ДАННЫХ
BSF SSPCON2,SEN ;СГЕНЕРИРОВАТЬ БИТ START
BTFSC SSPCON2,SEN ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START
GOTO $-1
MOVLW 0x38 ;ПЕРЕДАТЬ АДРЕС ДРАЙВЕРА
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
MOVLW 0x20 ;ПРЕРЕДАТЬ АДРЕС ПЕРВОГО РЕГИСТРА ДАННЫХ
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ
GOTO $-1
BANC0
MOVF HOUR_H,W ;ПЕРЕДАТЬ СОДЕРЖИМОЕ СЧЕТЧИКА ДЕСЯТКОВ
;ЧАСОВ
BANC1
MOVWF SSPBUF
BTFSC SSPSTAT,BF
GOTO $-1
BANC0
MOVF HOUR_L,W ;ПЕРЕДАТЬ СОДЕРЖИМОЕ СЧЕТЧИКА ЕДИНИЦ
;ЧАСОВ
BANC1
MOVWF SSPBUF
BTFSC SSPSTAT,BF
GOTO $-1
BANC0
MOVF MIN_H,W ;ПЕРЕДАТЬ СОДЕРЖИМОЕ СЧЕТЧИКА ДЕСЯТКОВ
;МИНУТ
BANC1
MOVWF SSPBUF
BTFSC SSPSTAT,BF
GOTO $-1
BANC0
MOVF MIN_L,W ;ПЕРЕДАТЬ СОДЕРЖИМОЕ СЧЕТЧИКА ЕДИНИЦ
;МИНУТ
BANC1
MOVWF SSPBUF
BTFSC SSPSTAT,BF
GOTO $-1
MOVF POINT,W ;ПЕРЕДАТЬ СОСТОЯНИЕ ДЕЦИМАЛЬНОЙ ТОЧКИ
BTFSC SSPCON2,ACKSTAT
GOTO $-1
BSF SSPCON2,PEN ;СГЕНЕРИРОВАТЬ БИТ STOP
BANC0
GOTO END_INT ;ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ КОНТЕКСТА
;-----------------------------------------------------------------
SERIAL_PRT ;ПОДПРОГРАММА ПРИЕМА/ПЕРЕДАЧИ ДАННЫХ ЧЕРЕЗ
;USART
BANC1
BCF PIE1,RCIE ;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ ОТ ПРИЕМНИКА USART
BANC0
;-----------------------------------------------------------------
;ПРОВЕРКА НА ОТСУТСТВИЕ ОШИБОК КАДРА
BTFSS RCSTA,OERR ;ПРОИЗОШЛА ОШИБКА КАДРА
GOTO $+3 ;НЕТ - ПЕРЕХОД К ИДЕНТИФИКАЦИИ КОДА ЗАПРОСА
;ПЕРЕДАЧИ ДАННЫХ
BCF RCSTA,OERR ;СБРОСИТЬ ФЛАГ ОШИБКИ КАДРА
GOTO END_INT ;ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ КОНТЕКСТА
;-----------------------------------------------------------------
;ИДЕНТИФИКАЦИЯ КОДА ЗАПРОСА ПЕРЕДАЧИ ДАННЫХ
BCF STATUS,Z
MOVF RCREG,W ;ЧТЕНИЕ ДАННЫХ ИЗ БУФЕРА ПРИЕМНИКА
BCF PIR1,RCIF ;СБРОСИТЬ ФЛАГ ПРЕРЫВАНИЯ ОТ ПРИЕМНИКА USART
XORLW CONST_COD ;СРАВНИТЬ КОД
BTFSS STATUS,Z ;КОД ВЕРНЫЙ
GOTO END_INT ;НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ
;КОНТЕКСТА
;-----------------------------------------------------------------
;ЧТЕНИЕ ДАННЫХ ИЗ EEPROM
BCF STATUS,Z
MOVLW SEC_LT ;ЗАГРУЗИТЬ АДРЕС СЧЕТЧИКА ЕДИНИЦ СЕКУНД В FSR
MOVWF FSR
BANC2
CLRF EEADR ;ОЧИСТИТЬ РЕГИСТР АДРЕСА
READ
BANC3
BCF EECON1,EEPGD ;УСТАНОВИТЬ ЧТЕНИЕ ИЗ EEPROM
BSF EECON1,RD ;НАЧАТЬ ЧТЕНИЕ
BANC2
MOVF EEDATA,W ;ПРОЧИТАТЬ РЕГИСТР ДАННЫХ
MOVWF INDF ;ЗАПИСАТЬ ДАННЫЕ В СЧЕТЧИК, АДРЕС КОТОРОГО
;В FSR
INCF EEADR,F ;ИНКРЕМЕНТИРОВАТЬ РЕГИСТР АДРЕСА
MOVF EEADR,W
XORLW 0x06 ;АДРЕС РАВЕН 0х06
BTFSC STATUS,Z
GOTO $+3 ;ДА - ЗАВЕРШИТЬ ЧТЕНИЕ EEPROM
INCF FSR,F ;НЕТ - ИНКРЕМЕНТИРОВАТЬ РЕГИСТР FSR
GOTO READ ;ПОВТОРИТЬ ЧТЕНИЕ
BCF STATUS,Z
BANC0
;-----------------------------------------------------------------
;ПЕРЕДАЧА ДАННЫХ
MOVF SEC_LT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ SEC_LT В БУФЕР ПЕРЕДАТЧИКА
MOVWF TXREG
BANC1
BSF TXSTA,TXEN ;РАЗРЕШИТЬ ПЕРЕДАЧУ
BANC0
BTFSC PIR1,TXIF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVF SEC_HT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ SEC_HT В БУФЕР ПЕРЕДАТЧИКА
MOVWF TXREG
BTFSC PIR1,TXIF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVF MIN_LT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ MIN_LT В БУФЕР ПЕРЕДАТЧИКА
MOVWF TXREG
BTFSC PIR1,TXIF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVF MIN_HT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ MIN_HT В БУФЕР ПЕРЕДАТЧИКА
MOVWF TXREG
BTFSC PIR1,TXIF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVF HOUR_LT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ HOUR_LT В БУФЕР ПЕРЕДАТЧИКА
MOVWF TXREG
BTFSC PIR1,TXIF ;ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ
GOTO $-1
MOVF HOUR_HT,W ;ПОМЕСТИТЬ СОДЕРЖИМОЕ HOUR_HT В БУФЕР ПЕРЕДАТЧИКА
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.