bout resistors <#" center">
Додаток Лістинг основного функціонального файлу (Main. asm).
Main:
wdr
; *********** Виявлення переходу мережевої напруги через нуль *****************
clr Temp; Підготовка регістрів, використовуваних у цій процедурі, а також у процедурі ADC_SAMPLING.
cpse Temp, rCh1OffTime; Якщо значення яскравості каналу дорівнює нулю, то після виявлення переходу фази він не увімкнеться.
sbr rOutChannels, 1 <
clr rTotalVoltage1_3; Очищення накопичувача напруги першого каналу.
clr rTotalVoltage2_3; Очищення накопичувача напруги другого каналу.
ldi Temp, 255
PhaseDetect:; Визначення фази мережі.
mov Tmp, Temp; Збереження попереднього результату вимірювання.
in Temp, ADCH; Якщо вхідна напруга ще не почало підвищуватися,
cpc Temp, Tmp; значить перехід фази мережі через нуль не настав.
brlo PhaseDetect; У цьому випадку слід продовжити вимірювання.
out pMainOut, rOutChannels; Як тільки напруга стала підвищуватися, відбувається виведення стану каналів в порт.
clr Tmp; Скидання регістра Tmp, використовуваного далі при операції складання з прапором переносу.
; ************************** Стабілізація яскравості ************* *****************
ADCSampling:
mul Temp, Temp; Отримання квадрата виміряного напруги.
cp rTotalVoltage1_3, rCh1OffTime; Якщо накопичене напруження зрівнялося із заданим,
brlo PC +4
cbr rOutChannels, 1 <
nop; вирівняти тривалість виконання процедури ADCSampling (щоб виключити
rjmp PC +4; мерехтіння ламп), і перейти до наступного каналу.
add rTotalVoltage1_1, R0; Якщо накопичене напруження ще не досягло заданого,
adc rTotalVoltage1_2, R1; справити послідовне підсумовування попереднього і
adc rTotalVoltage1_3, Tmp; поточного результату вимірювання напруги.
cp rTotalVoltage2_3, rCh2OffTimePC +4 rOutChannels, 1 <
out pMainOut, rOutChannels; Незалежно від величини накопичених напружень, стан каналів виводиться в порт після кожного вимірювання.
...