Автор работы: Пользователь скрыл имя, 01 Ноября 2012 в 20:12, дипломная работа
Освещение играет немаловажную роль как на производстве, так и в быту. От него зависит как сохранность здоровья персонала, так и непосредственно продуктивность его труда. Неправильное освещение может привести к серьезному ухудшению зрения, повышению утомляемости и, как следствие, снижение эффективности любой деятельности. В помещениях, где выполняются любые виды работ, и прилегающих территориях необходимо во-первых соблюдать определенные правила организации, и во-вторых — следить за уровнем освещенности, а так же уровнем пульсации светового потока от различных источников. Коэффициент пульсации освещенности (Кп) является характеристикой относительной глубины колебаний освещенности в результате изменения во времени светового потока источников света. Контроль уровня пульсации — очень важная организационная мера, т. к. несоблюдение требований по уровню коэффициента пульсации приводит к повышенной утомляемости, ухудшению зрения, и, как следствие, к ухудшению производственных показателей.
btfsc STATUS, 2 ;перед выводом на экран
goto znos3 ;первый символ проверяется
;на соответствие нулю
movf X4, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
goto znosall1
znos3 movlw 0x30 ;чтобы не выводить на экран 01, 02, 03 и т.д.
subwf X3, 0 ;вместо 1, 2, 3 соответственно
btfsc STATUS, 2 ;перед выводом на экран
goto znos2 ;первый символ проверяется
;на соответствие нулю
znosall1 movf X3, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
goto znosall2
znos2 movlw 0x30 ;чтобы не выводить на экран 01, 02, 03 и т.д.
subwf X2, 0 ;вместо 1, 2, 3 соответственно
btfsc STATUS, 2 ;перед выводом на экран
goto znos1 ;первый символ проверяется
;на соответствие нулю
znosall2 movf X2, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
znos1 movf X1, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
movlw 0xBB ;л
movwf M_byte
call in_port
call zapis
call pause1
movlw 0xBA ;к
movwf M_byte
call in_port
call zapis
call pause1
clrf EminH
movf kpuls, W
movwf EminL
call bintodec
movlw 0xCB ;выбор позиции символа на экране
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 znkp1 ;первый символ проверяется
;на соответствие нулю
movf X2, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
znkp1 movf X1, W
movwf M_byte
call in_port
bsf PORTB, 1
call zapis
call pause1
movlw 0x25 ;%
movwf M_byte
call in_port
call zapis
call pause1
return
;фунция измерения
izm call adc ;считать значение из АЦП
movf ADRESH, W ;и записать его
movwf EminH ;и в минимум
movwf EmaxH ;и в максимум
bsf STATUS, 5
movf ADRESL, W
bcf STATUS, 5
movwf EminL
movwf EmaxL
movlw 0x00 ;количество измерений - 256
movwf X3
clrf M_byte
bsf STATUS, 5
bsf STATUS, 6
bcf INTCON, 7 ;на время измерения запрещены все прерывания
bcf STATUS, 5 ;
bcf STATUS, 6
loop1 call adc ;начало цикла измерений
bsf STATUS, 5 ;каждый результат
movf ADRESL, W ;складывается с предыдущим и записывается в одну переменную
bcf STATUS, 5 ;
addwf M_byte, 1 ;на которую выделено 3 байта
btfss STATUS, 0 ;проверка бита переноса
goto $+17
btfss osv2, 7
goto $+15
btfss osv2, 6
goto $+13
btfss osv2, 5
goto $+11
btfss osv2, 4
goto $+9
btfss osv2, 3
goto $+7
btfss osv2, 2
goto $+5
btfss osv2, 1
goto $+3
btfsc osv2, 0
incf osv1
btfsc STATUS, 0 ;если бит переноса установлен в 1,
incf osv2, 1 ;значение следующего байта увеличивается на 1
movf ADRESH, W
addwf osv2, 1
btfsc STATUS, 0
incf osv1, 1
call minmax ;полученный результат записывается либо в минимум,
metka1 nop ;либо в максимум, либо пропускается
call pause3
movlw 1
subwf X3, 1
btfss STATUS, 2 ;проверка условия выхода из цикла измерений
goto loop1
movlw 8
movwf M_byte
minus decf osv2 ;вычитаем из полученных значений величину смещения,
movlw 1 ;подамаемого на вход ОУ
subwf M_byte
btfss osv2, 7
goto $+15
btfss osv2, 6
goto $+13
btfss osv2, 5
goto $+11
btfss osv2, 4
goto $+9
btfss osv2, 3
goto $+7
btfss osv2, 2
goto $+5
btfss osv2, 1
goto $+3
btfsc osv2, 0
decf osv1
btfss STATUS, 2
goto minus
bsf STATUS, 5
bsf STATUS, 6
bsf INTCON, 7 ;на время измерения запрещены все прерывания
bcf STATUS, 5 ;
bcf STATUS, 6
clrf X3
clrf X4
bcf STATUS, 0
movf EminL, W ;минимум
subwf EmaxL, 0 ;вычитается из максимума
movwf X4
btfss STATUS, 0
decf X3, 1
movf EminH, W
subwf EmaxH, 0
addwf X3
movlw 0x31 ;и полученная разность умножается на 50
movwf M_byte
movf X3, W
movwf X1
movf X4, W
movwf X2
movlw 0x00
movwf kpuls
btfsc X3, 2 ;если она не равна 0
goto x50
btfsc X3, 1
goto x50
btfsc X4, 7
goto x50
btfsc X4, 6
goto x50
btfsc X4, 5
goto x50
btfsc X4, 4
goto x50
btfsc X4, 3
goto x50
btfsc X4, 2
goto x50
btfsc X4, 1
goto x50
btfss X4, 0
goto metka3
x50 movf X2, W
addwf X4, 1
btfsc STATUS, 0
incf X3
movf X1, W
addwf X3, 1
movlw 1
subwf M_byte
btfss STATUS, 2
goto x50
;чтобы получить коэффициент пульсации, нужно
;разность максимума и
;удвоенное среднее значение (среднее арифметическое) всех измерений
;и умножить на 100%
;т.к. разность максимума и минимума уже умножена на 50,
;то данный результат для
;необходимо разделить на одно
среднее значение всех
;т.к. цикл измерений
;и результат каджого нового
измерения записывался в
;под которую отведено 3 байта,
;то среднее арифметическое из проведенных измерений
;является записанным в
;что аналогично сдвигу влево на 8 разрядов
;или делению на 256
;функция деления (подсчета
div movf X3, W
xorwf osv1, 0
movwf X1
btfsc X1, 7
goto srav17
btfsc X1, 6
goto srav16
btfsc X1, 5
goto srav15
btfsc X1, 4
goto srav14
btfsc X1, 3
goto srav13
btfsc X1, 2
goto srav12
btfsc X1, 1
goto srav11
btfsc X1, 0
goto srav10
goto srav2
srav17 btfsc osv1, 7
goto metka3
goto kpp1
srav16 btfsc osv1, 6
goto metka3
goto kpp1
srav15 btfsc osv1, 5
goto metka3
goto kpp1
srav14 btfsc osv1, 4
goto metka3
goto kpp1
srav13 btfsc osv1, 3
goto metka3
goto kpp1
srav12 btfsc osv1, 2
goto metka3
goto kpp1
srav11 btfsc osv1, 1
goto metka3
goto kpp1
srav10 btfsc osv1, 0
goto metka3
goto kpp1
srav2 movf X4, W
xorwf osv2, 0
movwf X1
btfsc X1, 7
goto srav27
btfsc X1, 6
goto srav26
btfsc X1, 5
goto srav25
btfsc X1, 4
goto srav24
btfsc X1, 3
goto srav23
btfsc X1, 2
goto srav22
btfsc X1, 1
goto srav21
btfsc X1, 0
goto srav20
srav27 btfsc osv2, 7
goto metka3
goto kpp1
srav26 btfsc osv2, 6
goto metka3
goto kpp1
srav25 btfsc osv2, 5
goto metka3
goto kpp1
srav24 btfsc osv2, 4
goto metka3
goto kpp1
srav23 btfsc osv2, 3
goto metka3
goto kpp1
srav22 btfsc osv2, 2
goto metka3
goto kpp1
srav21 btfsc osv2, 1
goto metka3
goto kpp1
srav20 btfsc osv2, 0
goto metka3
goto kpp1
kpp1 movf osv2, W
subwf X4
btfss STATUS, 0
decf X3
movf osv1, W
subwf X3
movlw 0x01
addwf kpuls
goto div
;функция получения значения из АЦП:
adc bcf STATUS, 6
bsf STATUS, 5
movlw 10000001b
movwf ADCON1
bcf STATUS, 5
movlw 11000001b
movwf ADCON0
do_conv bsf ADCON0, 2 ;установить бит в 1 -> инициировать операцию конвертации АЦП
wait_eoc btfsc ADCON0, 2 ;подождать пока бит установится в 0
goto wait_eoc ;
return
;функция определения минимума/
;начальное условие - и в минимум и в максимум записано только что
;полученное значение из АЦП
;каждое следующее значение из цикла измерений сравнивается с предыдущим
minmax bcf STATUS, 5
bcf STATUS, 6
movf EminH, W
xorwf ADRESH, 0 ;сравнить новое значение с предыдущим минимумом
movwf X1 ;с помощью побитового исключающего ИЛИ
btfsc X1, 1
goto minh1
btfsc X1, 0
goto minh0
movf EminL, W
bsf STATUS, 5
xorwf ADRESL, 0
bcf STATUS, 5
movwf X2
btfsc X2, 7
goto minl7
btfsc X2, 6
goto minl6
btfsc X2, 5
goto minl5
btfsc X2, 4
goto minl4
btfsc X2, 3
goto minl3
btfsc X2, 2
goto minl2
btfsc X2, 1
goto minl1
btfsc X2, 0
goto minl0
minh1 btfsc EminH, 1 ;если новое измерение меньше, чем предыдущий минимум
call adctomin ;то записать это значение в минимум
goto metka2
minh0 btfsc EminH, 0
call adctomin
goto metka2
minl7 btfsc EminL, 7
call adctomin
goto metka2
minl6 btfsc EminL, 6
call adctomin
goto metka2
minl5 btfsc EminL, 5
call adctomin
goto metka2
minl4 btfsc EminL, 4
call adctomin
goto metka2
minl3 btfsc EminL, 3
call adctomin
goto metka2
minl2 btfsc EminL, 2
call adctomin
goto metka2
minl1 btfsc EminL, 1
call adctomin
goto metka2