можно ли как-то просто организовать в Keil-ском C51 прерывания по таймеру с одного таймера: 0,5мсек для вызова п/программ с временем выполнения < 0,5 мсек, 50 мсек - для п/п < 50 мсек 1 сек - для п/п < 1 сек Чтобы обеспечить их паралельное выполнение.
Раньше было что-то такое
Hand_Timer3:
; проверки повторности вхождения, стека, ; сбросы флагов прерываний, watchdog-а, ; проталкивание в стек регистров lcall Call_RetI ; разрешение новых прерываний
; ввод данных с АЦП, счетных (внешних импульсов) входов в буфер ; управление выходами с точностью 0,5 мсек (например ; фазовое управление тиристорами) ; отсчет задержек в 0,5 мсек
inc c50msec CJNE c50msec,#100,End_Interrupt ; 50 мсек mov c50msec,#0
; проверка повторного вхождения на этот уровень ; первичная обработка введенных данных (фильтрация), управление ; медленными устройствами (модуляция ЖКИ, пускатели), ; обработка дребезга кнопок и тому подобное ; вычисления управляющих воздействий регуляторов (ПИ,ПИД) ; отсчет задержек в 50 мсек
inc cSecond CJNE cSecond,#20,End_Interrupt ; 1 sec mov cSecond,#0 ; ; проверка повторного вхождения на этот уровень ; отсчет времени, отсчет задержек в секундах
End_Interrupt:
; восстановление регистров из стека
ret
Call_RetI: RetI ; разрешение повторных прерываний
|