Автор работы: Пользователь скрыл имя, 01 Ноября 2012 в 20:12, дипломная работа
Освещение играет немаловажную роль как на производстве, так и в быту. От него зависит как сохранность здоровья персонала, так и непосредственно продуктивность его труда. Неправильное освещение может привести к серьезному ухудшению зрения, повышению утомляемости и, как следствие, снижение эффективности любой деятельности. В помещениях, где выполняются любые виды работ, и прилегающих территориях необходимо во-первых соблюдать определенные правила организации, и во-вторых — следить за уровнем освещенности, а так же уровнем пульсации светового потока от различных источников. Коэффициент пульсации освещенности (Кп) является характеристикой относительной глубины колебаний освещенности в результате изменения во времени светового потока источников света. Контроль уровня пульсации — очень важная организационная мера, т. к. несоблюдение требований по уровню коэффициента пульсации приводит к повышенной утомляемости, ухудшению зрения, и, как следствие, к ухудшению производственных показателей.
goto nekn3 ;то следующие действия пропускаются
btfss WMODE, 5 ;если выбран MODE1,
goto $+6 ;то следующие действия пропускаются
bsf WMODE, 0 ;выбрать MODE1
bcf WMODE, 1
bcf WMODE, 2 ;обнулить управляющие биты
bcf WMODE, 3
goto nekn3
bcf WMODE, 0 ;выбрать MODE2, если был выбран MODE1
bsf WMODE, 1 ;
bsf WMODE, 5 ;выбран MODE2
bsf WMODE, 4 ;сбросить счетчик просмотренных результатов
nekn3 nop
btfss PORTB, 4 ;если не нажата кнопка ОЧИСТИТЬ ПАМЯТЬ
goto nekn4 ;то следующие действия пропускаются
bsf WMODE, 6 ;установить бит, инициирующий вызов функции очистки памяти
bsf WMODE, 0 ;перейти в MODE1
bcf WMODE, 1
nekn4 nop
bcf PORTB, 5 ;записать 0 в источники прерываний
bcf PORTB, 6 ;чтобы исключить несоответствие
bcf PORTB, 7 ;и выйти из прерывания
bsf STATUS, 5
bsf STATUS, 6
bcf INTCON, 0 ;сбросить флаг прерывания
bcf STATUS, 5
bcf STATUS, 6
movf STATUS_TMP ;восстановить значения основных регистров
movwf STATUS
movf W_TMP, W
retfie ;выход из прерывания и возвращение в main
main nop
goto start
table addwf PCL
retlw 0x4f ;О
retlw 0x63 ;c
retlw 0xB3 ;в
retlw 0x65 ;e
retlw 0xe6 ;щ
retlw 0x65 ;e
retlw 0xbd ;н
retlw 0xbd ;н
retlw 0x6f ;o
retlw 0x63 ;c
retlw 0xbf ;т
retlw 0xc4 ;ь
retlw 0x3a ;:
retlw 0xa8 ;П
retlw 0x79 ;у
retlw 0xbb ;л
retlw 0xc4 ;ь
retlw 0x63 ;с
retlw 0x61 ;а
retlw 0xe5 ;ц
retlw 0xb8 ;и
retlw 0xc7 ;я
retlw 0x3a ;:
retlw 0xb8 ;и
retlw 0xb7 ;з
retlw 0xbc ;м
retlw 0x63 ;с
retlw 0x6f ;o
retlw 0x78 ;х
retlw 0x70 ;р
retlw 0xbe ;п
retlw 0x70 ;р
retlw 0x65 ;e
retlw 0xe3 ;д
retlw 0x63 ;с
retlw 0xbb ;л
retlw 0x65 ;e
retlw 0xe3 ;д
retlw 0x4f ;О
retlw 0xb6 ;ж
retlw 0xb8 ;и
retlw 0xe3 ;д
retlw 0x61 ;а
retlw 0xbd ;н
retlw 0xb8 ;и
retlw 0x65 ;е
retlw 0x43 ;С
retlw 0x6f ;o
retlw 0x78 ;х
retlw 0x70 ;р
retlw 0x61 ;а
retlw 0xbd ;н
retlw 0x65 ;е
retlw 0xbd ;н
retlw 0x6f ;o
;******** ИНИЦИАЛИЗАЦИИЯ КОНТРОЛЛЕРА
LCD***************************
start movlw 00000111b ;
movwf Cmcon ;выключить компараторы и включить эти пины как цифровые входы/выходы
clrf PORTB ;инициализация защелок порта А
clrf PORTD ;инициализация защелок порта В
bcf STATUS,6 ;
bsf STATUS,5 ;Перейти в 1-й банк (установить в 1 5-й бит регистра STATUS).
movlw 11111000b ;Записать конфигурацию порта B в аккумулятор (W).
movwf TRISB ;Скопировать конфигурацию порта B из W в регистр TrisA
movlw 00000000b ;Записать конфигурацию порта D в аккумулятор (W).
movwf TRISD ;Скопировать конфигурацию порта D из W в регистр TRISB.
bcf STATUS,5 ;Перейти в 0-й банк (установить в 0 5-й бит регистра STATUS).
;******** ИНИЦИАЛИЗАЦИЯ ЖКИ ************
;******** Пауза более 30 мс + FUNCTION SET ******************************
movlw 00111000b ;DB7...DB0=
movwf M_byte ;записать это значение в байт сообщения
call in_port ;запись в порт
bcf PORTB, 1 ;RS=0
bcf PORTB, 2 ;RW=0
call pause3
call zapis ;
;******** Пауза более 39 мкс ******************************
call pause1
;******** Продолжение инициализации
DISPLAY ON/OFF MODE ******************************
movlw 00001110b ;DB7...DB0=
movwf M_byte ;записать это значение в байт сообщения
call in_port ;запись в порт
call zapis ;
;******** Пауза более 39 мкс **************************
call pause1
;******** Продолжение инициализации
DISPLAY CLEAR ******************************
movlw 00000001b ;DB7...DB0=
movwf M_byte ;записать это значение в байт сообщения
call in_port ;запись в порт
call zapis ;
;******** Пауза более 1,53 мс ******************************
call pause2
;******** Продолжение инициализации
ENTRY MODE SET ******************************
movlw 00000110b ;DB7...DB0=
movwf M_byte ;записать это значение в байт сообщения
call in_port ;запись в порт
call zapis ;
;******** Пауза более 1,53 мс ******************************
call pause2
call pause1
;******** Продолжение инициализации
DISPLAY ON/OFF CONTROL SET ******************************
movlw 00001100b ;DB7...DB0=
movwf M_byte ;записать это значение в байт сообщения
call in_port ;запись в порт
call zapis ;
;******** Пауза более 39 мкс **************************
call pause1
;******** Инициализация дисплея
;******** Вывод ************************
movlw 0 ;обнулить
movwf shift ;счетчик просмотренных результатов
bsf STATUS, 5
bsf STATUS, 6
movlw 10001000b ;разрешены только прерывания по изменению сигнала на RB4:RB7
movwf INTCON ;выводы RB5, RB6 и RB7 соответствуют кнопкам КНОПКА1, КНОПКА2 и РЕЖИМ соотв.
bcf STATUS, 5
bcf STATUS, 6
;если память очищена, и в
ней нет ни одного значения,
в т.ч. номера первой
;который хранится в нулевой ячейке памяти EEPROM,
;в эту ячейку записывается значение 1
movlw 0x2100
call dataread
movwf M_byte
movlw 0xFF
subwf M_byte, 0
btfsc STATUS, 2
goto clrmem
movlw 0x01 ;если в нулевой ячейке памяти
subwf M_byte ;записано 01 (память пуста)
btfsc STATUS, 2 ;установить бит
bsf WMODE, 7 ;означающий, что память пуста, в 1
bsf WMODE, 0 ;при включении выбрать режим
bcf WMODE, 1 ;MODE1
waiti nop ;ожидание,
btfsc WMODE, 6 ;если пользователь захотел очистить память,
goto clrmem ;очистить память
btfsc WMODE, 7 ;если память очищена, то перейти
goto MODE1 ;в MODE1
btfsc WMODE, 0 ;переход в режим MODE1
goto MODE1 ;если 0 бит WMODE = 1
btfsc WMODE, 1 ;переход в режим MODE2
goto MODE2 ;если 1 бит WMODE = 1
goto waiti
;
MODE1 nop
bcf WMODE, 6
clrf osv1
clrf osv2
clrf kpuls
bcf WMODE, 5 ;выбран MODE1
movlw 00000001b ;очистить экран
movwf M_byte ;
bcf PORTB, 1
call in_port ;
call zapis ;
bsf PORTB, 1
call pause3
call defaultprint ;вывести слова "Освещенность" и "Пульсация"
call knmode1 ;вывести названия кнопок в MODE1
waitizm btfsc WMODE, 5 ;если вдруг пользователь захочет перейти в другой режим,
goto waiti ;перейти в цикл ожидания выбора режима
btfsc WMODE, 6 ;если пользователь захочет очистить память
call clrmem ;очистить память
btfss WMODE, 2 ;ожидание нажатия кнопки "изм",
goto waitizm ;которая инициирует процесс измерения
call printwait
call izm ;измерение
metka3 nop
call nprintwait
call output ;вывод на экран
bcf WMODE, 2 ;сброс флага инициации измерения в 0
bcf WMODE, 3
waits btfsc WMODE, 5 ;если пользователь захочет перейти в другой режим,
goto waiti ;перейти в цикл ожидания выбора режима
btfsc WMODE, 6 ;если пользователь захочет очистить память
goto waiti ;очистить память
btfsc WMODE, 2 ;если пользователь нажмет кнопку измерения
goto MODE1 ;вернуться в начало MODE1
btfss WMODE, 3 ;ожидание нажатия кнопки "сохр"
goto waits ;которая инициирует сохранение результата в память
call tomem ;сохранить результат
bcf WMODE, 3 ;сбросить флаг инициации сохранения в 0
bcf WMODE, 7 ;память не пуста
call printsaved ;вывести сообщение о том, что измерение сохранено
bcf WMODE, 0 ;сбросить флаг выбора режима
goto waiti ;и перейти в режим ожидания
MODE2 nop
bsf WMODE, 5 ;выбран MODE2
movlw 00000001b ;очистить экран
movwf M_byte ;
bcf PORTB, 1
call in_port ;
call zapis ;
call pause3
call knmode2 ;вывести названия кнопок в MODE2
call defaultprint ;вывести слова "Освещенность" и "Пульсация"
btfsc WMODE, 4 ;если бит сброса счетчика просмотренных результатов установлен в 1,
clrf shift ;сбросить счетчик просмотренных сообщений
bcf WMODE, 4 ;обнулить флаг
call frommem ;вывод результатов из памяти на экран
movlw 0
movwf M_byte
DivAdr movlw 1
addwf M_byte
movlw 3 ;подсчет номера измерения
subwf ADDR, 1
btfss STATUS, 2
goto DivAdr
movlw 0
movwf EminH
movf M_byte, W
movwf EminL
call bintodec ;результат нужно вывести в десятичном виде
movlw 0x9e ;выбор позиции символа на экране
movwf M_byte
call in_port
bcf PORTB, 1
call zapis
call pause1
movlw 0x30 ;чтобы не выводить на экран 01, 02, 03 и т.д.
subwf X2, 0 ;вместо 1, 2, 3 соответственно
btfsc STATUS, 2 ;перед выводом на экран
goto znnom1 ;первый символ проверяется
;на соответствие нулю
movf X2, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
znnom1 movf X1, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
bcf WMODE, 1 ;сбросить флаг выбора режима
goto waiti ;и перейти к циклу ожидания выбора режима
clrmem bsf STATUS, 5
bsf STATUS, 6
bcf INTCON, 7
bcf STATUS, 5
movlw 0x2100
movwf EEADR
movlw 0x01
movwf EEDATA
call datawrite
call pause3
bsf WMODE, 7
bsf STATUS, 5
bsf STATUS, 6
bsf INTCON, 7
bcf STATUS, 5
bcf STATUS, 6
goto MODE1 ;после очистки памяти программа возвращается в MODE1
;функция вывода значений на экран
output movf osv1, W ;старший байт
movwf EminH
movf osv2, W ;младший байт
movwf EminL
call bintodec ;представить в десятичной форме
movlw 0x8e ;выбор позиции символа на экране
movwf M_byte
call in_port
bcf PORTB, 1
call zapis
call pause1
movlw 0x30 ;чтобы не выводить на экран 01, 02, 03 и т.д.
subwf X4, 0 ;вместо 1, 2, 3 соответственно