Часть2 (Рябов В.Т. - Комплексная разработка механических, электронных и программных компонентов ТО), страница 21
Описание файла
Файл "Часть2" внутри архива находится в папке "Рябов В.Т. - Комплексная разработка механических, электронных и программных компонентов ТО". PDF-файл из архива "Рябов В.Т. - Комплексная разработка механических, электронных и программных компонентов ТО", который расположен в категории "". Всё это находится в предмете "системы автоматического управления (сау) (мт-11)" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "системы автоматического управления (сау) (мт-11)" в общих файлах.
Просмотр PDF-файла онлайн
Текст 21 страницы из PDF
Текст программного обеспечения контроллера ШД, выполняемого под управлением диспетчерапроцессовORG 0;-------зона векторов прерываний МК----------------------------------LJMP 2Bh; вход в диспетчерORG 0Bh; вектор прерываний таймера Т/C0LJMP 0D0h; переход к подпрограмме прерывания Т/C0ORG 2Bh; -------начальная настройка МК----------------------------------------MOV SP,#64h; перенос вершины стекаMOV 24h,#0FCh ; настройка Т/С0, установка начальныхMOV 25h,#82h; значений регистров для «тика» в 1 мсMOV TH0,24h; перенос начальных значенийMOV TL0,25hв регистры Т/С0MOV TMOD,#11h ; задание режимов Т/С0MOV TCON,#10h ; задание режимов Т/С0MOV IE,#82h; разрешение прерываний от Т/С0CLR A; обнулениеMOV 20h,A; регистра статусов квантовMOV 21h,A; регистра флагов квантовMOV 26h,A; регистра управления очередью квантовLCALL 0162h; переход к начальной настройке пользователяORG 4Fh;--------начало петли диспетчера процессов--------------------------PR0: JNB 21h.0h,PR1; если флаг нулевого кванта не установлен, переход к PR1JNB 20h.0h,PR1; если статус нулевого кванта не установлен, переход к PR1CLR 21h.0h; иначе очистить флаг квантаLCALL 149h; запустить нулевой квантJNB 26h.0h,PR0; если очередь квантов на круговая, переход в начало петлиPR1: JNB 21h.1h,PR2; анализ состояния первого кванта и так далее до метки PR7JNB 20h.1h,PR2CLR 21h.1hLCALL 014ChJNB 26h.0h,PR0PR2: JNB 21h.2h,PR3JNB 20h.2h,PR3CLR 21h.2hLCALL 14FhJNB 26h.0h,PR0PR3: JNB 21h.3h,PR4JNB 20h.3h,PR4CLR 21h.3hLCALL 0152hJNB 26h.0h,PR0PR4: JNB 21h.4h,PR5JNB 20h.4h,PR5CLR 21h.4hLCALL 0155hJNB 26h.0h,PR0PR5: JNB 21h.5h,PR6JNB 20h.5h,PR6CLR 21h.5hLCALL 0158h72JNB 26h.0h,PR0PR6: JNB 21h.6h,PR7JNB 20h.6h,PR7CLR 21h.6hLCALL 015BhJNB 26h.0h,PR0PR7: JNB 21h.7h,PR0JNB 20h.7h,PR0CLR 21h.7hLCALL 015EhJNB 26h.0h,PR0SJMP PR0; ----конец петли диспетчера, переход на начало----------------ORG 0D0h;------подпрограмма обработки прерываний таймера Т/С0----CLR EA; запретить прерыванияPUSH PSW; сохранить в стеке слово состояния процессораPUSH ACC; сохранить в стеке аккумуляторSETB RS0; задать первый банк регистров МКMOV TH0,24h; восстановить в счетном регистре таймераMOV TL0,25h; начальные значенияDJNZ 23h,FL0; если счетный регистр малых тиков не ноль, переход к FL0;----обработка задержек всех квантов с большой и малой разрядностью задержек---------DJNZ R0,FH1; уменьшить задержку кванта 0 и переход к FН1, если не 0SETB 21h.0h; если задержка обнулена, установить флаг кванта 0FH1: DJNZ R1,FH2; уменьшить задержку кванта 1 и переход к FН2, если не 0SETB 21h.1h; если задержка обнулена, установить флаг кванта 1FH2: DJNZ R2,FH3; и т.д.
до метки ENTSETB 21h.2hFH3: DJNZ R3,FH4SETB 21h.3hFH4: DJNZ R4,FH5SETB 21h.4hFH5: DJNZ R5,FH6SETB 21h.5hFH6: DJNZ R6,FH7SETB 21h.6hFH7: DJNZ R7,EHTSETB 21h.7hEHT: SJMP ENDTM;-------------конец обработки «большого тика»------------------;----обработка задержек квантов только с малой разрядностью задержек--------------------FL0: JB 22h.0h,FL1; если задержка кванта - в больших тиках, переход к FL1DJNZ R0,FL1; иначе уменьшить задержку и переход к FL1, если не нольSETB 21h.0h; если задержка обнулена, установить флаг кванта 0FL1: JB 22h.1h,FL2; и т.д. до метки ENDTMDJNZ R1,FL2SETB 21h.1hFL2: JB 22h.2h,FL3DJNZ R2,FL3SETB 21h.2hFL3: JB 22h.3h,FL4DJNZ R3,FL4SETB 21h.3hFL4: JB 22h.4h,FL573DJNZ R4,FL5SETB 21h.4hFL5: JB 22h.5h,FL6DJNZ R5,FL6SETB 21h.5hFL6: JB 22h.6h,FL7DJNZ R6,FL7SETB 21h.6hFL7: JB 22h.7h,ENDTMDJNZ R7,ENDTMSETB 21h.7h;-------------конец обработки «малого тика»------------------ENDTM:POP ACC; восстановить аккумуляторPOP PSW; и слово состояния процессораSETB EA; разрешить прерыванияRETI;возврат из прерывания;------------------------векторы квантов пользователя-------------------------------------------ORG 149hLJMP STEP; имя кванта0ORG 14ChLJMP KLAV; имя кванта1ORG 14Fh;LJMP NANE2; имя кванта2ORG 152h;LJMP NAME3; имя кванта3ORG 155h;LJMP NAME4; имя кванта4ORG 158h;LJMP NAME5; имя кванта5ORG 15Bh;LJMP NAME6; имя кванта6ORG 15Eh;LJMP NAME7; имя кванта7ORG 162hLJMP START ; имя стартовой программы пользователя;----------------------стартовая программа пользователя-----------------------------------------START: MOV R3,#0Ch; 00001100 в ФАЗУMOV R2,#0Ah; 00001010 в МАСКУMOV P1,R3; фазу в портCLR 20h.0h; снять статус кванта STEPMOV R1,#20h; задержка кванта STEP 32 - тикаMOV 08h,R1; переписать ее в регистр задержек кванта STEPSETB 20h.1h; установить статус кванта KLAVMOV 09h,#80h; записать 128 в регистр задержек кванта KLAVMOV 28h,#0FFh; клавиши не нажималисьMOV 22h,#00; все задержки в коротких тикахRET; возврат из подпрограммы;----------------------------кванты пользователя----------------------------------------------------STEP: CLR A; очистить аккумуляторORL A,P1; фазу в аккумуляторXRL A,R2; исключающее ИЛИ фазы и маскиMOV P1,A; результат в порт Р1XRL 02h,#0Fh; исключающее ИЛИ маски и 0Fh74MOV 08h,R1; установить задержку кванту из R1MOV R3,A; новую фазу в R3RET; возврат из подпрограммы.;-------------------------------------------------KLAV---------------------------------------------------------KLAV:ORL P1, #0F0h; запись единиц в старшую тетраду порта Р1;-------------------------------------------Опрос кнопки К1------------------------------------------------P1_7:JB P1.7, N_P1_7 ; если К4 не нажата, переход к метке N_P1_7; иначе продолжаемJNB 28h.7h, P1_6 ; если была нажата (сочетание 00), опрос К3LCALL PUSK_STOP ; иначе (сочетание 10), запуск «PUSK_STOP»INV7:CPL 28h.7h; инверсия прошлого состояния кнопки К4SJMP P1_6; безусловный переход к метке P1_6 (опрос К3)N_P1_7:JB 28h.7h,P1_6; если не была нажата (сочетание 11) опрос К3SJMP INV7; иначе (сочетание 01) инверсия прошлого; состояния кнопки К4;-------------------------------------------Опрос кнопки К2------------------------------------------------P1_6:JB P1.6,N_P1_6; если К3 не нажата, переход к метке N_P1_6JNB 28h.6h,P1_5 ; если была нажата (сочетание 00), опрос К2LCALL REVERS; иначе (сочетание 10), запуск «REVERS»INV6:CPL 28h.6h; инверсия прошлого состояния кнопки К3SJMP P1_5; безусловный переход к метке P1_5 (опрос К2)N_P1_6:JB 28h.6h,P1_5; если не была нажата (сочетание 11) опрос К2SJMP INV6; иначе (сочетание 01) инверсия прошлого состояния К3;-------------------------------------------Опрос кнопки К3------------------------------------------------P1_5:JB P1.5,P1_4; если К2 не нажата переход к анализу К1LCALL FASTER; иначе, запуск подпрограммы FASTER;-------------------------------------------Опрос кнопки К4------------------------------------------------P1_4:JB P1.4,EKL; если К1 не нажата – выход из кванта опроса кнопокLCALL SLOWLY; иначе, запуск подпрограммы SLOWLYEKL:RET; возврат из подпрограммы KLAV;---------------------------Подпрограммы реакции на нажатие кнопок------------------------------;--------------------Реакция на нажатие К4 «Вкл-Выкл»-----------------------------------------------PUSK_STOP: CPL 20h.0h;инверсия статуса кванта STEPMOV P1,#0F0h; обнулили младшую тетраду Р1 (сняли питание с ШД)JNB 20h.0h,ENDPS ; если статус – ноль, выход из подпрограммыMOV P1,R3; иначе записать в Р1 хранимое в R3 состояние фаз ШДENDPS:RET; выход из подпрограммы PUSK_STOP;--------------------Реакция на нажатие К3 «Реверс»---------------------------------------------------REVERS:XRL 02,#0Fh;инверсия битов младшей тетрады переменной MASKARET;выход из подпрограммы REVERS;--------------------Реакция на нажатие К2 «Медленнее»---------------------------------------------SLOWLY:INC R1;инкремент R1 (задержки кванта STEP)RET;выход из подпрограммы SLOWLY;--------------------Реакция на нажатие К1 «Быстрее»-------------------------------------------------FASTER:DEC R1;декремент R1 (задержки кванта STEP)RET;выход из подпрограммы FASTER;--------------------------------------------------------------------------------------------------------------END; конец программы.