[an error occurred while processing this directive]
|
красная – «включить нагреватель», и синяя - «выключить нагреватель». Тогда подпрограмма, которая периодически вызывается (раз в минуту, например), должна определить, какая метка встретится первой, если двигаться по циферблату ПО ЧАСОВОЙ СТРЕЛКЕ, начиная с текущего времени. Если красная, то мы находимся в зоне выключенного нагревателя и нужно подать команду выключения. Если синяя – то в зоне включенного нагревателя и нужно подать команду включения.
Алгоритм можно свести к вычислению разности двух значений времени. Если делать это в двоично-десятичном виде, то разность можно получить так:
;Input: R6,R5 = TM_H,TM_M
;Input: R4,R3 = Tn_H,Tn_M
;Out: R4,R3 = TM_H,TM_M - Tn_H,Tn_MSUB_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