ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
428169 Топик полностью
mazur (29.07.2013 09:44 - 09:56, просмотров: 499) ответил mazur на Пока делаю так: шаг увеличивается в задачах созданием дополнительных счетчиков в ОЗУ и инкрементированием с заданным шагом. Вообще интересный вопрос. Спасибо что подняли его. Уже появилась идея. Массив таймеров из трехбайтных блоков остается.
Не, много времени уйдет на обработку таймеров. Шаг в таймерах и так задается. Максимальное время 65535 мс, если шаг счета таймера 1 мс. В большинстве случаев этого достаточно. Если требуется больший шаг, выставляем дискретность в параметрах таймера, в задачах считаем дискретные шаги. .equ PROC_HEAT_DELAY = 150 Set_Timer Par_Timer_Proc_Heat_Init Set_State _PROC_HEAT_INIT_2 ret Proc_Heat_Init_2: Proc_Timer Par_Timer_Proc_Heat_Init Par_Timer_Proc_Heat_Init: par_timer ST_PROC_HEAT, 1<<ST_UNLOCK_FLG, PROC_HEAT_DELAY Так я делал с шагом 100 мс, из старого проекта. FORG_TIMER: // Дополнительный счетчик в задаче. .byte 1 FORG_VALUE_BUF: // Заданное значение в настройках. .byte 1 Proc_Weld_Forg: Proc_Timer Param_Timer_Weld // Таймер, шаг 100 мс. sbrs r16,n_ST_TIME_OUT ret ldd r16,Y+DISP_FORG_TIMER // Счетчик ldd r17,Y+DISP_FORG_VALUE_BUF // Заданное значение в настройках. inc r16 std Y+DISP_FORG_TIMER,r16 cp r16,r17 brlo Proc_Weld_Forg_End rcall LED1_OFF ldd r16,Y+DISP_MODE_WELD_BUF sbrs r16,n_MODE_WELD rjmp Proc_Weld_Set_Wait_Run ldd r16,Y+DISP_PAUSE_VALUE_BUF cpi r16,0 breq Proc_Weld_Set_Wait_Run Set_State _PROCESS_WELDING,_PROC_WELD_PAUSE Proc_Weld_Forg_End: ret Param_Timer_Weld: // № в массиве, биты статуса, время таймера. par_timer ST_PROC_WELD, 1<<ST_UNLOCK_FLG, ST_0_1_s