SUBB A, R0;контрольное вычитание
JZEXIT;если все стаканчики заполнены на выход
MOTOR:
MOVDPTR, #N_MOTOR_COUNT;загружаем адрес ячейки с количеством оборотов ротора мотора
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество оборотов ротора мотора
MOVR1, A;сохраняем это число в R1
NEXT_ROUND:
MOVDPTR, #N_STEP;загружаем адрес ячейки с количеством шагов
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество шагов
MOVR2, A;сохраняем это число в R2
MOVDPTR, #STEPS;загружаем адрес ячейки с последовательностью шагов
NEXT_STEP:
MOVR6, DPH;сохраняем адрес в регистрах R6 и R7, они пригодятся позже
MOVR7, DPL
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе очередной шаг
MOVP1, A;вывод в очередного шага в порт P1
MOVDPTR, #TH_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTH0, A;загружаем время задержки в TH0
MOVDPTR, #TL_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTL0, A;загружаем время задержки в TH0
CALLTIMER;вызов процедуры опроса таймера
MOVDPH, R6;выгружаем из R6 и R7 адрес ячейки текущего шага
MOVDPL, R7
INCDPTR;получение адреса ячейки следующего шага
DECR2;декремент количества шагов
MOVA, R2;пересылка в аккумулятор для контроля
JNZNEXT_STEP;если не все шаги пройдены - продолжаем
DECR1;декремент количества поворотов ротора
MOVA, R1;пересылка в аккумулятор для контроля
JNZNEXT_ROUND;если не все обороты сделаны - продолжаем
MOVP1, #0H;закончили работу с двигателем
PUMP:
SETBP1.3;включение насоса
MOVDPTR, #TH_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTH0, A;загружаем время в TH0
MOVDPTR, #TL_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTL0, A;загружаем время в TL0
CALLTIMER;вызов процедуры опроса таймера
CLRP1.3;выключить насос
INCR0;инкремент количества заполненных стаканчиков
MOVDPTR, #TH_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTH0, A;загружаем время паузы в TH0
MOVDPTR, #TL_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTL0, A;загружаем время паузы в TL0
CALLTIMER;вызов процедуры опроса таймера
JMPNEXT_GLASS;переходим к заполнению следующего стаканчика
EXIT:
END