[an error occurred while processing this directive]
Предположим, на циферблате есть две метки:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Леонид Иванович 27 января 2003 г. 23:53
В ответ на: Вот и я о том же отправлено sos 27 января 2003 г. 17:06

красная – «включить нагреватель», и синяя - «выключить нагреватель». Тогда подпрограмма, которая периодически вызывается (раз в минуту, например), должна определить, какая метка встретится первой, если двигаться по циферблату ПО ЧАСОВОЙ СТРЕЛКЕ, начиная с текущего времени. Если красная, то мы находимся в зоне выключенного нагревателя и нужно подать команду выключения. Если синяя – то в зоне включенного нагревателя и нужно подать команду включения.

Алгоритм можно свести к вычислению разности двух значений времени. Если делать это в двоично-десятичном виде, то разность можно получить так:


;Input: R6,R5 = TM_H,TM_M
;Input: R4,R3 = Tn_H,Tn_M
;Out: R4,R3 = TM_H,TM_M - Tn_H,Tn_M

SUB_T: CLR C
MOV A,#5AH
SUBB A,R3
ADD A,R5
DA A
JC SU1
CJNE A,#60H,$+3H
CPL C
JNC SU2
SU1: ADD A,#40H
DA A
SETB C
SU2: MOV R3,A
PUSH PSW
CLR C
MOV A,#23H
SUBB A,R4
JNB AC,SU3
SUBB A,#06H
SU3: POP PSW
ADDC A,R6
DA A
CJNE A,#24H,$+3H
JC SU4
ADD A,#76H
DA A
SU4: MOV R4,A
RET


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru