Внимание!!!
Идет тестирование!!!
В качестве выходных ключей использованы оптопары с детектором ноля МОС3061 в паре с симисторами ВТА137-800
Принцип работы.
При первом включеннии загораются все три лампы.Если в течении 3-ох секунд выключить-включить выключатель произойдет включение 2-ух ламп. Если в течении следующих 3-ох секунд выключить-включить выключатель произойдет включение 1-ой лампы. Если же после включения пройдет больше 3-ох секунд,то следующий цикл включения-выключения запустит опять все 3-и лампы.
Промежуточные данные при выключении сохраняются в EEPROM и определяют как будет вести себя устройство при следующем включении.Выносливость ячеек EEPROM cогласно документации MICROCHIP - 1 000 000 циклов стирания /записи
В перспективе добавление дистанционного управления.
Схема демонстрирующая принцип работы устройства:
Схема всего лиш имитация, вместо светодиодов будут применятся оптопары в спарке с симисторами.
Пока лишь исходник.Который проверен.Конечно все это добро будет совершенствоваться и естественно проверятся в "метале".О чем мы будем Вам писать.
Но уже сейчас,судя по макетке устройство вполне работоспособное!!!
;***********************************************************************************************
; Lustra.V2.asm
; Управление люстрой.Версия 2 для pic12f629.
;===============================================================================================
LIST p=12F629 ; Установка типа микроконтроллера.
__CONFIG 01FE4h ; Бит защиты выключен, WDT выключен,
ERRORLEVEL -302 ; внутр.генератор
;===============================================================================================
; Определение положения регистров специального назначения.
;===============================================================================================
IntCon equ 0Bh ; Регистр IntCon
Status equ 03h ; Регистр Status.
EEData equ 9Ah ; EEPROM - данные
EECon1 equ 9Ch ; EECON1 - банк1.
EEAdr equ 9Bh ; EEPROM - адрес
EECon2 equ 9Dh ; EECON2 - банк1.
Cmcon equ 19h ; Регистр Cmcon - компаратора
TrisiO equ 05h ; Регистр выбора направления работы выводов порта O.
GPIO equ 05h ; Регистр управления защелками порта O.
;===============================================================================================
; Определение названия и положения регистров общего назначения.
;===============================================================================================
SecH equ 2Dh ; Старший байт таймера.
SecL equ 2Eh ; Младший байт таймера.
SecF equ 2Fh ; Самый старший байт таймера.
;===============================================================================================
; Определение места размещения результатов операций.
;===============================================================================================
W equ 0 ; Результат направить в аккумулятор.
F equ 1 ; Результат направить в регистр.
;===============================================================================================
org 2100h ; Обращение к EEPROM памяти данных.
DE 00h ; Записать в ячейки с адресами .0, .1,
; числа 03h, 0h, соответственно.
;===============================================================================================
org 0 ; Начать выполнение программы
goto Start ; с подпрограммы START.
;***********************************************************************************************
;***********************************************************************************************
; РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ
;***********************************************************************************************
Start clrf IntCon ; Запретить все прерывания.
bsf Status,5 ; Перейти в 1-й банк (установить в 1 5-й бит
; регистра Status).
movlw .0 ; Записать константу .0 в аккумулятор (W).
movwf TrisiO ; Скопировать .0 из W в регистр TrisB.
; Весь PortВ установлен на выход
;-----------------------------------------------------------------------------------------------
bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит
; регистра Status).
clrf GPIO ; инициализация защелок (нули на всех защелках)
movlw .7 ; биты 0..2 поднять
movwf Cmcon ; компаратор выключен, GP0, GP1, GP2 - цифровые вх/вых
movlw 3Fh ; Записать в регистр W константу 06h
movwf GPIO ; Скопировать 06h из W в регистр GPIO.
; Включаем HL1.
;===============================================================================================
; Чтение данных из EEPROM
;===============================================================================================
; Считывание содержимого байта с адресом 01h и запись его в акаммулятор W.
;-----------------------------------------------------------------------------------------------
bsf Status,5 ; Переход в 1-ый банк.
movlw 0 ; Записать в регистр W константу 00h.
movwf EEAdr ; Скопировать 00h из регистра W в регистр EEAdr.
bsf EECon1,0 ; Инициализировать чтение.
movf EEData,W ; Скопировать число из ячейки EEPROM с адресом 01h в регистр W.
bcf Status,5 ; Переход в нулевой банк.
;-----------------------------------------------------------------------------------------------
bcf Status,2 ; опустим флаг Z в ноль
XORLW 00h ; проводим сравнение
btfsc Status,2 ; делаем бит-проверку Z-флага по условию
; если Z=1, то выполняется следующая инструкция, иначе пропускается
goto Metka_1 ; переход на Metka_1
bcf Status,2 ; опустим флаг Z в ноль
XORLW 04h ; проводим сравнение
btfsc Status,2 ; делаем бит-проверку Z-флага по условию
; если Z=1, то выполняется следующая инструкция, иначе пропускается
goto Metka_3 ; переход на Metka_3
;===============================================================================================
; Запись данных в EEPROM.
;===============================================================================================
bsf Status,5 ; Переход в первый банк.
movlw 0 ; Записать в регистр W константу 00h.
movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr.
movlw 00h ; Записать в регистр W константу 00h.
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h.
call Zapis
;--------------------------------------------------------------------------------------------
bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит
; регистра Status).
movlw 06h ; Записать в регистр W константу 06h
movwf GPIO ; Скопировать 06h из W в регистр GPIO.
; Включаем HL1.
goto PP
;--------------------------------------------------------------------------------------------
Metka_1
;===============================================================================================
; Запись данных в EEPROM.
;===============================================================================================
bsf Status,5 ; Переход в первый банк.
movlw 00h ; Записать в регистр W константу 00h.
movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr.
movlw 04h ; Записать в регистр W константу 04h
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h.
call Zapis
;----------------------------------------------------------------------------------------------
bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит
; регистра Status).
movlw 00h ; Записать в регистр W константу .7
movwf GPIO ; Скопировать константу .7 из регистра W в регистр GPIO.
; Включаем HL1,HL2,HL3.
goto PP
;--------------------------------------------------------------------------------------------
Metka_3
;===============================================================================================
; Запись данных в EEPROM.
;===============================================================================================
bsf Status,5 ; Переход в первый банк.
movlw 0 ; Записать в регистр W константу 00h.
movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr.
movlw 02h ; Записать в регистр W константу .1
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h.
call Zapis
;-----------------------------------------------------------------------------------------------
bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит
; регистра Status).
movlw 04h ; Записать в регистр W константу .3
movwf GPIO ; Скопировать .3 из W в регистр GPIO.
; Включаем HL1,HL2.
PP
;-----------------------------------------------------------------------------------------------
; Задержка.
;-----------------------------------------------------------------------------------------------
movlw .254 ; Записать в регистр W константу .254
movwf SecH ; Скопировать .254 из W в регистр Sec.
movlw .254 ; Записать в регистр W константу .254
movwf SecL ; Скопировать .100 из W в регистр Sec.
movlw .15 ; Записать в регистр W константу .254
movwf SecF ; Скопировать .100 из W в регистр Sec
Pause_1 decfsz SecL,F ; Декремент содержимого регистра Sec с помещением резуль-
; тата декремента в этот же регистр.
goto Pause_1 ; Если этот результат не=0, то осуществляется переход
; в ПП Pause_1 ("закольцовка" в этой ПП).
; Если =0, то программа исполняется далее.
decfsz SecH,F ; Декремент содержимого регистра Sec с помещением резуль-
; тата декремента в этот же регистр.
goto Pause_1 ; Если этот результат не=0, то осуществляется переход
; в ПП Pause_1 ("закольцовка" в этой ПП).
; Если =0, то программа исполняется далее.
decfsz SecF,F ; Декремент содержимого регистра Sec с помещением резуль-
; тата декремента в этот же регистр.
goto Pause_1 ; Если этот результат не=0, то осуществляется переход
; в ПП Pause_1 ("закольцовка" в этой ПП).
; Если =0, то программа исполняется далее.
;===============================================================================================
; Запись данных в EEPROM.
;===============================================================================================
bsf Status,5 ; Переход в первый банк.
movlw 00h ; Записать в регистр W константу 00h.
movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr.
movlw 00h ; Записать в регистр W константу 00h.
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 00h.
call Zapis
;-----------------------------------------------------------------------------------------------
; "Вечное кольцо"
;-----------------------------------------------------------------------------------------------
Stopor_1 goto Stopor_2
Stopor_2 goto Stopor_1
;-----------------------------------------------------------------------------------------------
Zapis bsf EECon1,2 ; Разрешить запись.
movlw 055h ; Обязательная
movwf EECon2 ; процедура
movlw 0AAh ; при записи.
movwf EECon2 ; ----"----
bsf EECon1,1 ; ----"----
bcf EECon1,2 ; Запретить запись.
return
;--------------------------------------------------------------------------------------------
;*******************************************************************************************
end ; Конец программы.
Продолжение следует !!!!!!