Подпрограмма выключения драйвера lcd

Страницы работы

16 страниц (Word-файл)

Фрагмент текста работы

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 В БУФЕР ПЕРЕДАТЧИКА

Похожие материалы

Информация о работе