|
Это значение мо-
жет быть считано из порта и сравнено с образцовой температурой.
Значение образцовой температуры может задаваться пользователем.
Для простоты давайте будем считать это значение постоянной вели-
чиной с именем ref_temp. Программа adjust_temp, предназначенная
управлять температурами, задана в листинге 5-2. Отметим, что эта
программа содержит только важные части программы. Менее сущест-
венные подробности (такие, как объявление и инициализация пере-
менных) здесь не показаны.
- 5-21 -
образцовая
температура
преобразова- преобразова-
тели тели
от датчика ---------¬ ----------¬ ----------¬ к наг-
температур ¦ ¦ ¦ ¦ ¦ ¦ рева-
-----------¦ ¦--¦ ¦--¦ ¦--телю
L--------- ¦ ¦ L----------
от датчика ---------¬ ¦компьютер¦ ----------¬ к сигна-
огня(дыма) ¦ ¦ ¦ ¦ ¦ ¦ лу тре-
-----------¦ ¦--¦ ¦--¦ ¦--воги
L--------- ¦ ¦ L----------
от таймера реального ¦ ¦ ----------¬ к венти-
времени ¦ ¦ ¦ ¦ лю оро-
------------------------¦ ¦--¦ ¦--шения
¦ ¦ L---------- газонов
L----------
Рис. 5-10. Упрощенная система управления домашним
хозяйством
Листинг 5-2. Программа adjust_temp
----------------------------------------------------------------
adjust_temp:
; delta- для избежания колебаний температур
; ref_temp- значение образцовой температуры
; temp_port- порт, через который выводится
; информация по управлению
температурой
; inc_cod- сегмент программы для повышения
температуры
; dec_code- сегмент программы для снижения
температуры
; read_port- порт, через который ведется
; считывание значений текущей
температуры
in al,read_port ; считать температуру в AL
mov bl,ref_temp ; получить ref_temp в BL
mov cl,bl ; BL будет использоваться позднее
sub cl,delta ; ref_temp - delta в CL
cmp al,cl ; текущая температура меньше
; ref_temp - delta ?
jl increase ; тогда увеличить температуру
add bl,delta ; ref_temp + delta в BL
cmp al,bl ; текущая температура больше
; ref_temp + delta ?
jg decrease ; тогда уменьшить температуру
ret ; сделано
decrease:
mov al,dec_code ; dec_code
out temp_port,al ; temp_port
ret
increase
mov al,inc_code ;inc_cod подлежит выводу в
out temp_port,al ; temp_port
ret
----------------------------------------------------------------
- 5-22 -
Отметим, что нагревание не меняется, когда температура оста-
ется в пределах диапазона от ( ref_temp - delta) до (ref_ temp +
delta), как это показано на рисунке 5-11. Здесь значение delta
представляет собой маленькую величину допуска (например, в одном
градусе 1F * и он используется для избежания температурных коле-
баний.
------------------------------
* Один градус по Фаренгейту (1F) приблизительно равен по Цель-
сию 0,56 градуса (0,56 C) (Примеч. переводчика.)
Образцовая температура
(ref_temp)
¦
низкая темпера- ¦ высокая темпера-
тура ¦-delta--¦--delta-¦ тура
-----------------+----------+----------+-------------------
повышение температура уменьшение
температуры не меняется температуры
Рис. 5-11.
|