DEC R0 // уменьшаем значение режима для последующего сравнения с нулём
MOV A, R0 // переносим в аккумулятор (для команды условного перехода)
JZ M_PredNabor // если режим "полоскание" переходим к установке режима "отжим" чтобы не стирать дважды
DEC R0 // уменьшаем значение режима для последующего сравнения с нулём
MOV A, R0 // переносим в аккумулятор (для команды условного перехода)
JZ M_BezOtzhima // если режим "без отжима" (10, уже равен 00) переходим
SJMP M_OTZHIM // если режим "отжим" (11, уже равен 01) переходим
M_BezOtzhima:
Mov R0, #11111111B // устанавливаем любое значение кроме выбранных режимов, для того чтобы в последствии пропустить этап «отжим»
SJMP M_NABOR // пропускаем установку режима "отжим" и переходим к стирке
M_PredNabor:
MOV R0, #00000011B // Устанавливаем режим "отжим"
Блок набора воды:
M_NABOR :
ANL P0, #0B // гасим светодиоды
SETb P0.0 // включаем светодиод "набор воды"
SETb P1.2 // включение насоса
MOVR2, #10B// запись времени работы в данном режиме
CALLTIMER// включение таймера
CLR P1.2 // по истечению заданного времени залива происходит отключение насоса
Блок нагрева воды:
ANL P0, #00000000B // гасим светодиоды
JBP2.2, M_TEMP// проверка температурного режима
MOVR3, #11110B// записали температуру 30 градусов
M_TEMP:
MOVR3, #111100B// записали температуру 60 градусов
SETbP0.1 // включем светодиод "нагрев воды"
SETbP1.0 // включаем тэн
Считываем показания датчика температуры:
CALLACPCONF// конфигурирование ацп
M_NSTEP:
MOVA, ADCOH//старшие биты
SWAPA// обмен тетрад
ANLA, #0F0H// получили старший полубайт
MOVR5, A// временно записываем в R5
MOVA, ADC0L// считываем младший байт
SWAPA// обмен тетрад
ANLA, #0FH// получили младший полубайт
ADDA, R5// суммирование полубайт
CJNEA, R3, M_NSTEP // если требуемая температура достигнута идем дальше, если нет проверяем снова
CLRP1.0 // выключили тэн
Блок вращения барабана при стирке:
ANL P0, #0B // гасим светодиоды
SETb P0.2 // включаем светодиод "стирка"
MOV P1, #10000000B // Установка скорости оборотов (режим 000)
SETb P1.7 //включение двигателя (старший бит=1)
MOVR2, #100100B// запись времени работы в данном режиме
CALLTIMER// Включение таймера
CLR P1.7 // выключение двигателя по истечении времени
Блок выпуска воды:
ANL P0, #0B // гасим светодиоды
SETb P0.3 // включем светодиод "выпуск воды"
SETb P1.3 // открытие клапана
MOVR2, #10B// запись времени работы в данном режиме
CALL TIMER // вызываем процедуру работы таймера
CLR P1.3 // закрытие клапана по истечении времени
CJNE R0, #0B, M_PredNabor // если первый режим (первые два бита порта P2 равны нулю) то переход
CJNE R0, #11111111B, M_END // если режим «быстрая стирка» то переход к окончанию работы
Блок отжима (проходит во всех режимах работы кроме режима «быстрой стирки»):
M_OTZHIM:
ANL P0, #0B // гасим светодиоды
SETb P0.4 // включаем светодиод "отжим"
MOV A, P2 // передача скорости двигателя в аккумулятор
ANL A, #01110000B // обнуление ненужных битов (оставляем только те, которые используются двигателем)
MOV P2, A
SETb P1.7 // включение двигателя
MOVR2, #1001000B// запись времени работы в данном режиме
CALLTIMER// включение таймера
CLR P1.7 // выключение двигателя по истечении времени
Блок окончания работы :
M_END:
ANL P0, #0B // гасим светодиоды
SETb P0.5 // включаем светодиод "конец работы"
CLR P2.3 // открыли замок