рефераты рефераты
Главная страница > Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе  
Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе


Подсистема прерываний

МП система должна периодически опрашивать датчики и оперативно реагировать на изменение их состояния. Один из вариантов опроса – МП в цикле управляющей программы опрашивает все датчики, анализирует их состояние; инициатива при вводе-выводе информации принадлежит микропроцессору. Второй вариант – опрос по прерываниям: само внешнее устройство, приготовив данные, подает к МП сигнал прерывания и тот считывает эти данные, выполняя процедуру обработки прерывания. Очевидно, что для нашей системы второй вариант преимуществен: медленно меняющийся диаметр лучше считывать по внешней периодической синхронизации (например, Ѕ Гц), чем в каждом цикле управляющей программы. Сигналы с фотоэлементов (точнее, их перепады, после которых надо производить старт/стоп таймеров), которые похожи на “исключительные ситуации”, также логичнее обрабатывать по прерываниям. Наконец, прерывания помогают организовать программно часы реального времени и таймеры T1 и T2, экономя на микросхемах. Недостаток только один: приходится усложнять систему, вводя программируемый контроллер прерываний (ПКП).

Опишем прерывания в МП системе.

1)  IRQ0. Прерывание возникает по перепаду 0-1 на выходе фотоэлемента Фэл1. Обработчик должен сбросить и запустить таймеры T1 и T2.

2)  IRQ1. Возникает по перепаду 1-0 на Фэл2 и означает, что измерения закончены, бревно полностью вышло из области действия датчиков. Обработчик должен рассчитать объем бревна Vi, суммарный объем VS и сформировать сигнал отбраковки.

3)  IRQ2. Появляется по сигналу готовности данных на АЦП. Обработчик вводит 2 байта диаметра.

4)  IRQ3. Источником служит генератор на 16 Гц. Обработчик делает инкремент часов реального времени и условный инкремент таймеров (анализируя информацию статуса):

Если слово статуса ФЭЛ равно:
Инкремент T1 xxxxxx01
Инкремент T2 xxxxxx01 или xxxxxx11
Нет инкремента иначе (xxxxxx00 или xxxxxx10)

5)  IRQ4 и 6) IRQ5. Сигналы приходят от кнопок “+Час” и “+Мин” на панели оператора. Обработчик незамедлительно инкрементирует часы (минуты) реального времени.

6)  Казалось бы, перепады на выходах фотоэлементов равноценны, и перепады сигналов 1-0 на Фэл1 и 0-1 на Фэл2 стоило бы тоже обрабатывать по прерываниям. Но это не нужно. Обработчики этих прерываний несли бы одну функцию: стоп того или другого таймера. А по прерыванию IRQ3 делается условный инкремент таймеров, т.е. таймер не надо останавливать, он остановится сам собой, когда сигналы с фотоэлементов придут в определенное сочетание (см. таблицу).

Сигналы запросов IRQi приходят на входы IR0–IR5 программируемого контроллера прерываний (запросы принимаются по переходу 0®1). Используется режим работы ПКП с фиксированными приоритетами прерываний. Максимальный приоритет имеет запрос IR0, минимальный – запрос IR5. На этом распределении приоритетов, кстати, основан выбор номеров для прерываний: чтобы прерывания, функционально более важные (от фотоэлементов и АЦП) имели больший приоритет, чем прерывания, несущие декоративный смысл (от часов и кнопок управления часами).

По выходу INT контроллер передает процессору запрос на прерывание. Процессор формирует сигналы подтверждения прерывания, приходящие на вход INTA контроллера.

Рассмотрим подключение остальных выводов. Контроллер будет работать в одиночном (не каскадном) режиме – это контролирует вывод SP=0 микросхемы.

На вход выбора кристалла CS подается дешифрованный адрес. На вход A0 подается нулевой разряд адреса. Выводы каскадирования CAS0–CAS2 остаются неподключенными. Выводы D0–D7 подключены к шине данных.

Перед работой ПКП нужно инициализировать. Управляющая программа делает это во время самотестирования системы. При инициализации нужно сообщить контроллеру адреса процедур обработки прерываний.

 

Программная часть микропроцессорной системы

Тестирующие программы

Тестовые программы запускаются сразу по включении питания микропроцессорной системы перед началом работы. Это тест ОЗУ, ПЗУ, тест фотоэлементов, инициализация программируемого контроллера прерываний, инициализация переменных системы.

Тест ОЗУ

Тест ОЗУ состоит в проверке всех ячеек ОЗУ на запись и верное считывание байтов 00Н и FFН. Если для какой-то ячейки совпадение записанного и прочитанного значений не состоялось, происходит переход на подпрограмму E_RAM, в регистровой паре HL при этом адрес неисправной ячейки.

Листинг 1: тест ОЗУ

; – – – тест ОЗУ (адреса 0800…17FF)

                   TST_RAM LD     HL, 0800    ; HL¬начало области ОЗУ

                   TST_RAM1         XOR A                ; A=0

                   LD     (HL), A                 ; записать 0 в ячейку памяти

                   LD     A, (HL)                 ; прочитать эту ячейку

                   OR    A                ;

                   JP      NZ, E_RAM         ; если в ячейке не ноль, то выход

                   CPL                      ; инвертировать A (A=FF)

                   LD     (HL), A                 ; записать FF в ячейку памяти

                   LD     A, (HL)                 ; прочитать эту ячейку

                   INC   A                ; если прочитано A=FF, то A=FF+1=0

                   JP      NZ, E_RAM         ; иначе выход

                   INC   HL              ; к следующему адресу

                   LD     A, H            ; проверить на достижение конца ОЗУ

                   CP     #18             ;

                   JR     NZ, TST_RAM1  ; конец цикла

                   …                         ; тест ОЗУ успешен, продолжение тестов

Подпрограмма E_RAM – это бесконечный цикл вывода на индикаторы признака ошибки ОЗУ (строки “Е1”) и адреса неисправной ячейки (например, “Е1 12AF”). Естественно, при этом дальнейшее выполнение управляющей программы и функционирование системы отменяется (поэтому переход на E_RAM выполняется командой JP, а не CALL). По адресу можно определить, какая именно (из двух) микросхема памяти подлежит замене.

Независимый от кнопок управления индикацией вывод на индикаторы семисегментным кодом производится через 8-байтный порт вывода 03..0A и через порт 13..1A одновременно (см. п.3.3). Адрес 0A (он же 1A) соответствует самому левому индикатору, адрес 03 (он же 13) – самому правому.

Декодирование из двоичного в семисегментный код делается с помощью массива перекодировки длиной 16 байт, расположенного в ПЗУ по начальному адресу 0700Н:

0700           3F 06 5B 4F 66 6D 7D 07      ; “0”–“7”

0708           7F 6F 77 7C 39 5E 79 71        ; “8”–“F”

Для декодирования шестнадцатиричной цифры в семисегментный код достаточно извлечь из массива элемент с индексом, равным этой цифре.

Важно то, что процедура E_RAM не обращается к памяти ни напрямую, ни через стек – она хранит все свои данные в регистрах и записывает только в порты индикаторов.

Листинг 2: процедура E_RAM, вызываемая после ошибки ОЗУ

; – – – обработка ошибки ОЗУ (код “E1”)

E_RAM      EX    DE, HL       ; адрес-операнд из HL перенести в DE

LD     H, #07        ; H¬старший байт адреса таблицы кодов

LD     A, E            ;

AND #0F             ; выделяем младшую тетраду в E

LD     L, A            ; извлекаем элемент с этим номером из массива

LD     C, (HL)       ; в регистр C

                             ; теперь C=код, посылаемый на 8-й индикатор

LD     A, D            ;

AND #0F             ; выделяем младшую тетраду в D

LD     L, A            ;

LD     B, (HL)       ; теперь B=код, выводимый на 6-й индикатор

SRL   D                ; четырежды сдвигаем D вправо (0®D®CY)

SRL   D                ; заполняя старшие биты нулями

SRL   D                ;

SRL   D                ;

SRL   E                 ; четырежды сдвигаем E вправо (0®D®CY)

SRL   E                 ; заполняя старшие биты нулями

SRL   E                 ;

SRL   E                 ;

LD     L, E             ; теперь необходимости в наложении маски нет

LD     E, (HL)       ; E=код, выводимый на 7-й индикатор

LD     L, D            ;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

рефераты
Новости