Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе
IR3_H3 POP AF ;
POP HL ;
POP BC ;
RETI ;
Обработчик IRQ4 (от
кнопки “+Час”)
Функция обработчика –
увеличить на единицу часы реального времени (ячейка TIME+3).
Листинг 20: обработчик запроса IRQ4
; – –
– инкремент часов
IR4_H PUSH HL ;
PUSH AF ;
LD HL,
TIME+3;
INC (HL) ;
инкремент часов
LD A,
(HL) ;
CP 24 ;
JR C, IR4_H1 ;
XOR A ;
если счетчик часов=24
LD (HL),
A ; то обнулить часы и минуты
DEC HL ;
LD (HL),
A ;
IR4_H1 POP AF ;
POP HL ;
RETI
Обработчик IRQ5 (от
кнопки “+Мин”)
Функция обработчика –
увеличить на единицу минуты реального времени (ячейка TIME+2).
Листинг 21: обработчик запроса IRQ5
; – –
– инкремент минут
IR5_H PUSH HL ;
PUSH AF ;
LD HL,
TIME+2;
INC (HL) ;
инкремент минут
LD A,
(HL) ;
CP 60 ;
JR C, IR5_H1 ;
XOR A ;
если счетчик минут=60
LD (HL),
A ; то обнуление минут
INC HL ;
и инкремент часов
INC (HL) ;
LD A,
(HL) ; с проверкой часов на 24
CP 24 ;
JR C, IR5_H1 ;
XOR A ;
если счетчик часов=24
LD (HL),
A ; то обнулить и часы
IR4_H1 POP AF ;
POP HL ;
RETI
Обработчик IRQ1 (от
фотоэлемента Фэл2)
Обработчик IRQ1 выполняет
самую важную функцию. Его задача – вычислить объем бревна. Последовательность
следующая: вычисляем диаметр бревна, длину, вычисляем объем Vi,
находим объем VS.
Для вычисления диаметра
все значения, прежде считанные в массив напряжений с АЦП, усредняются:
суммируются и делятся на количество (D_NUM). При суммировании может произойти
переполнение суммы (а она двухбайтная), чтобы этого не было, массив разбивается
на группы по 16 измерений в каждой. Если осталась остаточная группа с числом
меньше 16, то она отбрасывается. В каждой из них подсчитывается среднее, затем
рассчитывается искомое как среднее средних.
Из среднего напряжения
находится угол
a= .
Затем находим диаметр d=0,625
– 0,5cos a=00,A0H
– 00,80Hcos a.
Занести его в ячейку DIAM (2 байта в памяти). Сравнить диаметр с допустимыми пределами
[0,2..0,5]=[0,33H..0,8H]. Если он выходит за эти пределы,
то выдать на отбраковку (порт 02H) единицу.
Объем Vi
находится как Vi=(p/4)d2×T1/T2=0,C9H×d2×T1/T2.
Листинг 22: обработчик запроса IRQ1
; – – – найти объем
бревна и суммарный объем
; усреднение всех
напряжений с датчика диаметра в массиве по адресу 1000H
IR1_H PUSH AF ;
PUSH BC ;
PUSH DE ;
PUSH HL ;
LD L,
(D_NUM) ;
LD H,
(D_NUM+1) ;
LD B,
4 ; делим D_NUM на 16
IR1_H1 SRL H ;
RR L ;
DJNZ IR1_H1 ;
LD C,
L ; в результате C=число групп по 16
PUSH BC ;
сохранить С в стеке
LD HL,
#1000 ;
LD DE,
0 ; DE – начальная сумма групп
PUSH DE ;
отправить ее в стек, C станет второй в стеке
PUSH DE ;
DE – начальная сумма отдельной группы,
;
отправить®в стек, сумма
групп вторая в стеке
;
C – третья в стеке
IR1_H4 LD B, 16 ;
IR1_H2 LD E,
(HL) ; читаем в DE элемент массива
INC HL ;
LD D,
(HL) ;
INC HL ;
EX (SP), HL ; текущую сумма в
HL, текущий адрес в стеке
ADD HL, DE ;
EX (SP), HL ;
новая сумма в стеке, текущий адрес в HL
DJNZ IR1_H2 ;
; в итоге сумма
одной группы по 16 – в стеке
; начальный
адрес следующей группы – в HL
POP DE ;
LD B, 4 ;
находим среднее одной группы,
IR1_H3 SRL D ;
деля сумму в DE на 16
RR E ;
DJNZ IR1_H3 ;
POP HL ; берем из стека
сумму групп
ADD HL, DE ;
PUSH HL ;
снова отправляем в стек: сначала сумму групп
PUSH DE ;
затем сумму одной группы
DEC C ;
С – счетчик групп
JR NZ,
IR1_H4 ; следующая группа…
POP HL ;
POP HL ;
извлечь найденную сумму групп
POP BC ;
извлечь счетчик групп C
LD D, C ;
DE=C.0
LD E,
0 ;
CALL DIV ; делим
сумму групп на число групп
; теперь HL=Ud=среднее
всего массива напряжений датчика
; следующий шаг
– нахождение угла a,
cos a, d
LD D, 4 ; DE=491H
LD E, #91 ;
LD B, H ;
сохранить Ud в BC
LD C, L ;
EX DE, HL ;
CALL MINUS ;
HL=491H-Ud
EX HL,
DE ;
LD H,
B ;
LD L,
C ;
CALL DIV ;
HL= Ud/(491H-Ud)
LD D,
0 ;
LD E,
#4F ;
CALL MUL ;
HL=a
CALL COS ;
HL=cos a
LD D,
0 ;
LD E,
#80 ;
CALL MUL ;
HL=0,5cos a
LD D,
0 ;
LD E,
#A0 ;
EX HL,
DE ;
CALL MINUS ;
HL=0,625-0,5cos a=d
LD (DIAM), HL ;
занести диаметр в память
; формируем
сигнал отбраковки
LD A, L ;
CP #33 ;
JR NC,
IR1_H5 ; если d>20, то идем дальше
LD A, 1 ;
иначе в порт отбраковки записать 1
OUT (#02), A ;
JR IR1_OUT ;
и выход, не считая объем
IR1_H5 LD A, L ;
CP #80 ;
JR C,
IR1_H6 ; если d<50, то идем дальше
LD A, 1 ;
иначе в порт отбраковки записать 1
OUT (#02), A ;
; дальше
находим Vi, VS
IR1_H6 LD L,
(T1) ;
LD H,
(T1+1) ;
LD E,
(T2) ;
LD D,
(T2+1) ;
CALL DIV ;
HL=T1/T2
LD E,
(DIAM) ;
LD D,
(DIAM+1) ;
PUSH DE ;
CALL MUL ;
HL=T1×d/T2
POP DE ;
CALL MUL ;
HL=T1×d2/T2
LD D,
0 ;
LD E,
#C9 ;
CALL MUL ;
HL=(p/4)T1×d2/T2=Vi
EX HL,
DE ;
LD L,
(V_SUM) ;
LD H,
(V_SUM+1) ;
CALL PLUS ;
HL=VS
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 |