і
АВТОМАТИКА
І
su b i
jn z
%с7,1
$1
; Вычесть сч етч и к цикл а.
; Цикл не заверш ен, продолжить.
. .
Сложить
расчитанную на
этап е обработки паузы сумму с общей
Обработчики преры ваний.
;
суммой измерений и проверить изменение температуры .
add
%Ь5, %Ь7
; Складываем младший байт ра считанно го
; измерения.
; Распространяем перенос.
adk-
4L4
add
%Ь4, %Ь6
; Складываем стараний байт ра считанного
; измерения.
Обработчик прерываний от
сторож евого тайм ера. Обработчик
su b i
%Ь1,1
; Вычитаем сч етч и к числа измерений.
используется для организации динамической индикации
jn z
$2
; Циклы измерения п е га еще не
информации. Единственная
е го функция - п ер езап уск
; зако н ч ил ись.
. .
сторожевого тайм ера. Собственно отображение при этом
m ovl
%Ь1,32
; Цикл закончился - начать новый.
производится в фоновом процессе (при возникновении
m ovl
%Ь0,5
; Теперь подсчи а н о о значение делим
прерывания от таймера команда w a it заверш ает р а б о т у ). Такое
; на 32
построение сделано для т о г о , чтобы сократи ть время ожидания
$3:
sh ra
%Ь4
; Сдвигаем (арифме ич ески) значение.
обработчика прерываний от пор та А (п оско льку прерывания от
r r c
%Ь5
сторожевого таймера немаскируемы е, о тр аб о тка динамической
su b i
%Ь0,1
; Вычитаем с ч етч и к цикл а.
индикации в обработчике
i n t i может сущ ественно с к зз а ть с я на
jn z
S3
; Цикл сдвига еще не закончился.
точн ости съема показаний
с датчи ка тем п ер атур ы ).
/
Определить направление
изменения температуры .
sub
%ЬЗ,%Ь5
; Расчитываем разницу с предыдущим
i n t i :
push
#D
Сохранить р е ги с тр D
; накопителем .
Id r
#D ,18h
Сегм ент D - регистры сторожевого
sbc
%Ь2
таймера
sub
%Ь2, %Ь4
m ovl
%d5, OAAh
Выдать характерны й код в
j s
$5
; Разница меньше нуля - температура
сторожевой таймер.
; у п а л а .
m ovl
% d5,01010101b
Зап устить новый цикл счета
add
%Ь2, %ЬЗ
; П роверить, ч то оба байта
таймера
pop
#D
Восстановить р е ги с т р .
j z
S4
; н у л ев ы е .
. .
; П оказания н е изменились - ячейку
r t i
Завершение обработки прерывания.
m ovl
m ovl
%аб,4
%а4, DEC_DOWN
; направления не т р о гать !
; Начинаем с последней ячейки.
; Температура пад ает.
jmp
$4
Обработчик прерываний от порта А . По фронту прерывания (0 /1 )
$5:
movl
%аб, 0
/ Начинаем с первой ячейки.
считывает содержимое интервального таймере, по спаду (1 /0 ) -
m ovl
%a4,DEC_UP
; Р азника больше нуля - температура
также
считывает показание
и производит р е сч е т. Показание
; поднялась.
считается усреднении« за 32 цикла измерения, чтобы исключить
$4:
mov
%Ь2, %Ь4
; Заменить старый накопитель новым.
проблемы неверного счета,
документации по ТМР04.
Формула расчета темперетуры взята из
mov
%ЬЗ, %Ь5
Определить цвет ин ди като р а, которым выводить зн ач ен и я .
b tt h
%Ь4, ООООЮООЬ
; Число меньше куля?
in t 6 :
m ovl
% d4,00001000b
Особенность конвейера команд!
j z
$6
m ovl
% d4,00001100b
Таймер надо обрабатывать ОЧЕНЬ
n o t
%Ь4
; Изменить зн а к числа (общ еизвестная
быстро, иначе наб егает до 5 град,
ошибки!
n o t
%Ь5
; формула)
mov
%c7, %d5
С читать младший байт тайм ер а.
a d d l
%Ь5,1
mov
%c6,%d5
С читать старший байт тайм ер а.
adc
%Ь4
movl
%d4, 00000001b
Снова зап ус ти ть интервальный
m ovl
% аЗ,Т COLD
; Число отображать синим
таймер на с ч е т.
; индикато ром .
b t t l
% dl,00001000b
Сейчас начался импульс (0 /1 ) ?
jmp
$7
jn z
onR ise
Да - выполнить деление и ар счет по
$6:
m ovl
% аЗ,Т COMFORT
; Считаем , ч то отображать надо
формуле.
cmpl
%Ь5,2 5
; "комфортным".
; Вышло ли число за 25гр ад
Этап
заверш ения импульса
- сложить расчитан ное на этапе
js
$7
; Пока н е т .
. .
завериения паузы п оказан ие и (при необходимости)
преобразовать е го в "цифровой" вид.
m ovl
%аЗ, Т_НОТ
; Вышло - число отображаем красным.
o n F a ll: movl
%c0,0
П одготовить множимое.
;
Преобразовать величину
температуры в две цифры (по таблице,
mov
% c l, %c6
;
т . к .
памяти все равно
* в а го н !)
mov
%c2, %c7
$7
mov
%Ь0, %Ь5
; Сохранить значение температуры .
add
%Ь0, %Ь5
; Е го нало умножить на 2!
;
Умножить длину импульса на 400 * 16 * 25 = 16 * (1 + 8 + 16)
mdah
%Ь4, d ig it s
; З агр у зи ть адрес таблицы
movl
% c6,4
Будет 4 цикла сдвига
(умножение на 16)
m dal
%Ь5,d ig it s
; преобразований
$0:
s h l
%c2
Сдвинуть р е зу л ь та т на 1 разряд.
add
%Ь5, %Ь0
; Дубовый способ преобразования - по
r l c
%cl
; таблице готовы х значений!
r l c
%c0
adc
%Ь4
su b i
% c 6,l
Вычесть с ч етч и к ци кл а.
m tp r
# 6 ,%Ь5
; З агр у зи ть 1Я1 значением адреса
jn z
$0
Цикл не заверш ен, п р о д о л ж и ть .
..
; пары цифр.
mov
%c3,%c0
П ереписать полученные р езул ьтат во
m tp r
# 7 ,%Ь4
множимое.
mov
%а0, %d7
; З ан ести старшую цифру в ячейки
mov
%c4, %cl
; р е зу л ь т а т а .
mov
%c5, %c2
mov
% a l, %d7
; З ан ести младшую цифру в ячейки
m ovl
% c7,2
Следующий у ч а с то к будет пройден
; р е зу л ь та та.
дважды .
. .
movl
%Ь4,0
; О чистить накопитель для новых
movl
% c6,3
Будет 3 цикла сдвига
; ц и кл о в .
(умножение на 8)
movl
%Ь5,0
S I:
s h l
%c2
Сдвинуть р е зу л ь та т на 1 разряд.
$2:
jmp
e n d ln t6
r l c
%cl
r l c
%c0
;
Э тап
ваверш ения паузы
- р а с ч и т а т ь зн а ч ен и е по формуле
su b i
% c 6,l
Вычесть с ч етч и к ци кл а.
;
T »
235
- (< 4 0 0 *Т м > /Т п ) . Т а ко е равделенм е д е л ае тся
jn z
$1
Цикл не заверш ен, п р о д о л ж и ть .
..
;
для тоге , чтобы сократить время реботы обреботчика прерываний
add
%c5,%c2
Сложить младшие байты р езул ьтата
;
(фактически работа распределяется на два в а х о д а ).
и множимого.
onR ise:
mov
%с0,%с6
; П еренести делитель в рабочие
adc
%c4
Р аспространить п е р е н о с .
; ячейки, умножив е го при этом на 256!
adc
%c3
mov
% с !, %с7
adc!
%c4, %cl
Сложить средние байты р езул ьтата
m ovl
%с2,0
и множимого.
s h l
%с2
; Сдвигаем делитель еще на 1
adc
%c3
Распространить п е р е н о с .
; позицию!
add
%c3,%c0
Сложить старшие байты р езул ьтата
r l c
%с1
и множимого.
r l c
%с0
movl
% c 6 ,l
следующий сдвиг - всего на 1 разряд
m ovl
%Ь6,0
; Обнуляем будущий р езул ьтат
(получится умножение на 16)
; деления.
________________________ 1
7
1
Радиолюбитель - 0 4 /2 0 0 5 |
предыдущая страница 6 Радиолюбитель 2005-04 читать онлайн следующая страница 8 Радиолюбитель 2005-04 читать онлайн Домой Выключить/включить текст