Рябов В.Т. - Разработка и отладка программного обеспечения микропроцессорной системы управления на базе однокристальных микроЭВМ, страница 6
Описание файла
PDF-файл из архива "Рябов В.Т. - Разработка и отладка программного обеспечения микропроцессорной системы управления на базе однокристальных микроЭВМ", который расположен в категории "". Всё это находится в предмете "системы автоматического управления (сау) (мт-11)" из 8 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "системы автоматического управления (сау)" в общих файлах.
Просмотр PDF-файла онлайн
Текст 6 страницы из PDF
Запускаются синхрокванты из пультовой петли диспетчера.Листинг подпрограммы прерываний таймера приведен ниже. Эта подпрограмма размещена в резидентной памяти программ. В крайнем левом столбце приведен адрес начальной ячейки памяти каждой команды, далее код команды и операнды, если они нужны. Далееидет мнемоническое обозначение команды на ассемблере и комментарии, отделенные отмнемоники точкой с запятой.Подпрограмма прерывания состоит из четырех основных частей. Первая, вводная частьзапрещает все другие прерывания на время ее выполнения. Затем, сохраняет в стеке состояние основной программы, чтобы в нее можно было без проблем вернуться и определяет, неокончился ли вместе с малым и большой тик:00D0 C2AFCLREA;запретить прерывания00D2 C0D0PUSH PSW;сохранить слово состояния процессора в стеке00D4 C0E0PUSH ACC;сохранить аккумулятор процессора в стеке00D6 D2D3SETB RS0;установить первый банк регистров В100D8 85248C MOVTH0,24;восстановить начальное состояние00DB 85258A MOVTL0,25;регистров Т/С0- 17 -;уменьшить ячейку 23 на единицу и если не;0 – в 103:Именно последняя команда этого фрагмента определяет, не окончился ли большой тик.Если он окончился, будет выполняться вторая часть подпрограммы, уменьшающая на единицу задержки времени как в больших, так и малых тиков и выставляющая флаги тех квантов, у которых задержка окончилась.
Далее приведен один из восьми сходных фрагментовэтой части, описывающий декремент и последующий анализ задержки нулевого кванта. Вследующем фрагменте, начинающемся с адреса 00Е5, обрабатываются параметры нулевогокванта и так далее:00E1 D802 DJNZ R0,00E5;уменьшить задержку кванта (R0)на единицу, если;не 0 – в E5: (к первому кванту)00E3 D208 SETB 21.0;если задержка окончена, установить флаг FPR0Третья часть подпрограммы выполняется, если только тик короткий. Начинается она садреса 103h и также состоит из восьми однородных фрагментов.
Начальный фрагмент приведен далее:0103 201004 JB 22.0, 010A;если тик кванта длинный – в 10A:0106 D802DJNZ R0,010A;уменьшить R0 на единицу и если не 0 – в 10A:0108 D208SETB 21.0;если задержка окончена, установить флаг FPR0010A ...... ... ...;далее следующий фрагментЗавершающая, четвертая часть обеспечивает правильный возврат из прерывания.013B D0E0POPACC; восстановить аккумулятор013D D0D0POPPSW;и слово состояния процессора013F D2AFSETB EA;разрешить прерывания0141 32RETI;возврат из прерыванияПодпрограмма, если Вы посмотрите на ее полный текст, может показаться громоздкой инеуклюжей. С помощью цикла ее можно было бы описать гораздо компактнее. Но короткаяпрограмма и быстрая программа далеко не одно и тоже.Основная программа «Диспетчер» размещена в памяти программ с нулевого адреса до162h, т.е.
занимает 353 байта в десятичном исчислении. Зона младших адресов занята векторами аппаратных прерываний. Здесь по вектору прерывания таймера ТС0 адресуется подпрограмма обработки 00D0, которую мы только что рассмотрели. Далее следует начальнаянастройка контроллера:0000 02002B LJMP 002B;зона векторов... ...... ...;аппаратных000B 0200D0 LJMP 00D0;прерываний устройств... .........;микроконтроллера;------------Начальная настройка микроконтроллера------------002B 758164 MOVSP,#64;перенос вершины стека002E 7524FC MOV24,#FC;настройка Т/С0, установка начальных0031 752582 MOV25,#79;значений регистров для счета в 1 мс0034 85248C MOVTH0,24;перенос начальных значений0037 85258A MOVTL0,25;в регистры Т/С0003A 758911 MOVTMOD,#11;задание режимов Т/С0003D 758810 MOVTCON,#10;задание режимов Т/С00040 75A882 MOVIE,#82;разрешение прерываний от Т/С00043 E4CLRA;обнуление0044 F520MOV20,A;регистра статусов квантов0046 F521MOV21,A;регистра флагов квантов0048 F526MOV26,A;регистра типа очереди0048 120162 LCALL 0162;переход к П/П начальной настройки;пользователя00DE D52322DJNZ23,0103- 18 -По тексту программы разберитесь, в каком режиме будет работать таймер?Далее следует так называемая пультовая петля диспетчера.
Начинается она с ячейки004Fh, а заканчивается ячейкой 00ВFh. В ней микроконтроллер постоянно будет крутиться,пока работает, покидая ее лишь на обработку прерываний таймера или на выполнение квантов пользователя и, всякий раз, возвращаясь назад в точку, из которой он пультовую петлюпокинул.В пультовой петле последовательно проверяются условия запуска каждого из синхроквантов, начиная с нулевого. Текст программы на ассемблере с комментариями приведен далее:PR0:JNB 21h.0h,PR1JNB 20h.0h,PR1CLR 21h.0hLCALL 149hJNB 26h.0h,PR0;если не установлен флаг PR0 – в PR1:;если не установлен статус PR0 – в PR1:;иначе, очистить флаг PR0;идти к вектору PR0 (запустить квант);если приоритет не круговой – в начало петли (PR0:)Здесь с метки PR1: начинается проверка следующего кванта, а с метки PR0: – петля диспетчера.
В последней ячейке пультовой петли содержится безусловный переход в ее начало.Пультовая или фоновая петля диспетчера ведет очередь квантов с жестким или круговымприоритетом. При жестком приоритете, при одновременном выполнении условий запуска((FPR)*(SPR)=1), предпочтение отдается кванту с минимальным номером. При круговомприоритете предпочтение отдается кванту, следующему за только что выполненным и далеепо кругу пультовой петли. Обычно круговой приоритет выбирают в случаях, когда естьопасность постоянного захвата процессорного времени каким либо частым квантом.Обсудим, как запускать квант. Где он будет находится в памяти, диспетчер знать неможет, ведь кванты пользователя «накладываются» на готовый отлаженный универсальныйдиспетчер, который хранится в неизменяемой части памяти программ. В то же время, команда вызова подпрограммы кванта пользователя LCALL требует указания конкретного адресаее начала.Для вызова подпрограмм с изменяемым адресом начала используют таблицу векторовподпрограмм, схожую по организации с таблицей векторов прерываний.
Эту таблицу размещают в изменяемой части памяти программ и состоит она из 8-и триад байтов. В триаду длякаждого кванта после его создания вписывается переход на известный уже адрес его начала,как это показано для первого кванта.0149 00NOP;вектор кванта PR0014C 02002B LJMP 0F00;вызов кванта PR1, размещенного по адресу F00:...014F 00NOP0152 00NOP ;вектор кванта PR3...;вектор кванта PR2...0155 00…и так далее.NOP ;вектор кванта PR4- 19 -6.
ЛАБОРАТОРНАЯ РАБОТА «НАСТРОЙКА И ИСПОЛЬЗОВАНИЕДИСПЕТЧЕРА ПРОЦЕССО» начале раздела приведено краткое справочное руководство по использованию диспетчера процессов для создания управляющих программ, способных работать в жестком реальном времени.6.1. Диспетчер процессов. Краткое описание архитектурыДиспетчер предназначен для управления восемью синхроквантами, выполнение которыхможно жестко привязать к реальному времени с дискретой (тиком) в 1мс и может быть дополнен для управления рядом интерквантов, выполнение которых инициируется внешнимисобытиями, фиксируемыми по изменению состояния выводов свободного порта микроконтроллера. Очередность выполнения квантов определяется описанными в них задержкамивремени. При совпадении моментов запуска нескольких квантов, предпочтение отдаетсякванту с минимальным номером.
Имеется возможность менять стратегию диспетчирования,переходя от приоритетной очереди к круговой (см. ячейку 26h).В таблице 3 приведены адреса резидентной памяти данных, в которой затонированы байты, определяющие работу диспетчера. Эти адреса пользователь может использовать в своихквантах для настройки диспетчирования.Таблица 3.Распределение резидентной памяти микроконтроллера под диспетчер задачАдрес00h01h02h03h04h05h06h07h08h09h0Ah0Bh0Ch0Dh0Eh0Fh10…1FhСодержимое ячейки памятиR0 пользователяR1 пользователяR2 пользователяR3 пользователяR4 пользователяR5 пользователяR6 пользователяR7 пользователяR0 таймера – задержка 0-го кванта в тикахR1 таймера - задержка 1-го кванта в тикахR2 таймера - задержка 2-го кванта в тикахR3 таймера - задержка 3-го кванта в тикахR4 таймера - задержка 4-го кванта в тикахR5 таймера - задержка 5-го кванта в тикахR6 таймера - задержка 6-го кванта в тикахR7 таймера - задержка 7-го кванта в тиках15 свободных байт пользователя (второй и третий банки регистров)20h Статус квантов21h Флаги квантов22h РазрядностьзадержекСтатус7-гоквантаСтатус6-гоквантаСтатус5-гоквантаСтатус 4-гоквантаСтатус 3-гоквантаСтатус 2-гоквантаСтатус 1-гоквантаСтатус 0-гоквантаSPR7SPR6SPR5SPR4SPR3SPR2SPR1SPR0Флаг 7-гоквантаФлаг 6-гоквантаФлаг 5-гоквантаФлаг 4-гоквантаФлаг 3-гоквантаФлаг 2-гоквантаФлаг 1-гоквантаФлаг 0-гоквантаFPR7FPR6FPR5FPR4FPR3FPR2FPR1FPR0Квант 7Квант 6Квант 5Квант 4Квант 3Квант 2Квант 1Квант 0R_PR7R_PR6R_PR5R_PR4R_PR3R_PR2R_PR1R_PR023h24h25h26h24h..63h64h....7FhСчетный регистр числа малых тиковРегистр значения старшего байта TH0 счетчика ТС0Регистр значения младшего байта TL0 счетчика ТС0Регистр типа очереди квантовБайты пользователяСтек системы и пользователяСтек системы и пользователя- 20 -1-ый банк регистров – таймерный.