скачать рефераты

скачать рефераты

 
 
скачать рефераты скачать рефераты

Меню

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

орт вывода на индикаторы (8 байт). В эти ячейки программа заносит семисегментный код, выводимый на индикаторы. Сигналы выборки кристаллов индикаторов в схеме - CS3# (самый левый индикатор)…CS10# (самый правый).

Есть одна особенность индикации. На индикаторы возможен вывод объема V или текущего времени - должно зависеть от кнопок управления индикацией на панели оператора. Пусть эти величины в семисегментном коде хранятся в разных ячейках памяти (каждая по 8 байт). Процессор, выполняя управляющую программу, то и дело копирует их содержимое в порт. Ячейку V - в порт (03..0A), а ячейку времени - в порт (13..1A).

Как говорилось ранее, при обращении к портам дешифруются лишь младшие 4 бита с шины адреса. Поэтому и в том, и в другом случае обращение идет к одним и тем же физическим индикаторам. Дополнительной дешифрации, зависимой от кнопок управления индикации, подвергается бит A4 адреса. Если A4=1, значит, процессор пытается индицировать время, при этом нажатая кнопка “время” разрешает прохождение сигналов выборки кристалла. А в отжатом положении сигналы выборки не пройдут, и индикация не состоится. Аналогично нажатая кнопка “V” разрешает адресацию к индикаторам при A4=0.

Этот вариант “двойной адресации” свою относительную сложность искупает экономией лишних 8-ми регистров, которые понадобились бы, если делать отдельные порты вывода для V и для времени.

Порт ввода статуса фотоэлементов. Этот порт (адрес 0B) необходим для использования при первоначальном тестировании, когда система проверяет готовность фотоэлементов (контролирует выходы Фэл1 и Фэл2 на ноль). Во время работы содержимое порта несет смысл статуса обработки и помогает разобраться, на какой стадии своего движения находится бревно.

В порте действительно несут информацию только 2 бита: D0 - о состоянии Фэл1 (ноль на выходе Фэл1 или единица), D1 - о статусе Фэл2. Ноль свидетельствует об успешном прохождении света от лампы к светоприемнику фотоэлемента, единица - о том, что свет не проходит.

Порт контроллера прерываний (адреса 0C и 0D). Используется для адресации регистров контроллера: сигналы CS12# и CS13#, объединенные по ИЛИ, подаются на его вход выбора кристалла.

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

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

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

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

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

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 программируемого контроллера прерываний (запросы принимаются по переходу 01). Используется режим работы ПКП с фиксированными приоритетами прерываний. Максимальный приоритет имеет запрос 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 вправо (0DCY)

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

SRL D ;

SRL D ;

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

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

SRL E ;

SRL E ;

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

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

LD L, D ;

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

; цикл вывода на индикаторы

E_RAM1 LD A, #79; Aсемисегментный код символа “E”

OUT (#0A), A ; в 1-й слева индикатор

OUT (#1A), A ;

LD A, #06 ; A“1”

OUT (#09), A ; во 2-й индикатор

OUT (#19), A ;

XOR A ; A“ ” (пусто)

OUT (#08), A ; в 3-й

OUT (#18), A ;

OUT (#07), A ; в 4-й

OUT (#17), A ;

LD A, D ; выводим DBEC на индикаторы 5678

OUT (#06), A ;

OUT (#16), A ;

LD A, B ;

OUT (#05), A ;

OUT (#15), A ;

LD A, E ;

OUT (#04), A ;

OUT (#14), A ;

LD A, C ;

OUT (#03), A ;

OUT (#13), A ;

JR E_RAM1 ; переход на начало цикла

Тест ПЗУ

Тест ПЗУ состоит в вычислении контрольной суммы ПЗУ, т.е. суммы всех байтов в ПЗУ без учета переполнения суммы, и сравнении полученной суммы с известным эталонным значением. Несовпадение свидетельствует о явной неисправности ПЗУ, совпадение не обязательно говорит об его исправности (могут быть, хотя маловероятно, две компенсирующие друг друга ошибки).

Для этого теста (чтобы знать эталон, с которым сравнивать) надо иметь все подпрограммы ПЗУ. Однако сейчас мы только на стадии заполнения постоянной памяти. Предлагается следующий путь: в составленной ниже программе теста ПЗУ вычисляем контрольную сумму и сравниваем ее с нулем. А после того, как запрограммируем ПЗУ полностью, последнюю ячейку ПЗУ (17FFН) оставим свободной и занесем в нее число, дополняющее сумму всего ПЗУ без последней ячейки до нуля.

Получив в сумме всех ячеек ПЗУ не ноль, программа тестирования вызывает зацикленную подпрограмму E_ROM, имея в регистре E число 2, характеризующее код ошибки.

Листинг 3: Тест ПЗУ

; - - - вычисление контрольной суммы ПЗУ

TST_ROM XOR A ; A=0

LD H, A ;

LD L, A ; HL=0

TST_ROM1 ADD A, (HL) ; AA+(HL)

INC HL ; увеличить адрес ПЗУ на 1

LD B, A ; сохранить сумму A на время

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

CP #08 ;

LD A, B ; восстановить сумму A

JR NZ, TST_ROM1;

OR A ; если конец ПЗУ, проверить A на ноль

LD E, 2 ;

JP NZ, E_ROM ;если не ноль, то ошибка ПЗУ

… ; иначе тест ПЗУ успешен, продолжаем тесты

Подпрограмма E_ROM выводит на два самых левых индикатора условный код ошибки ПЗУ (“E2”), а остальные индикаторы гасит. Индикация такой ошибки говорит о необходимости проверки и перепрограммирования микросхемы ПЗУ.

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

; - - - обработка ошибки ПЗУ (код “E2”)

E_ROM LD A, #79 ; A“E”

OUT (#0A), A ;

LD A, E ; Aкод ошибки (2)

OUT (#09), A ;

XOR A ; A“0”

LD C, #08 ;

LD D, #18 ;

LD B, 6 ; счетчик

E_ROM1 OUT (C), A ; последние шесть индикаторов гасим

OUT (D), A ;

DEC C ;

DEC D ;

DJNZ E_ROM1 ;

JR E_ROM ;

Тест фотоэлементов

Перед началом работы нужно проверить прохождение света от ламп к фотоэлементам. Если один из фотоприемников не чувствует света, это значит, что или перегорела лампа фотоэлемента, или в момент пуска бревно уже лежит между фотоэлементами и его длина не может быть измерена, или повредился канал от фотоэлемента к процессору. В обоих случаях микропроцессорная система не начнет свою работу (т.к. нет возможности отличить второй случай от остальных). При обнаружении такой ошибки на индикаторы выводится признак ошибки фотоэлемента в виде условного кода “E3”.

В программе этого теста читается порт ввода статуса фотоэлементов (адрес 0B) и проверяются на ноль два его младших бита. Если хотя бы один не равен нулю, то происходит переход на обработчик ошибки. Причем для обработки ошибки можно использовать ту же процедуру E_ROM, перед вызовом загрузив в регистр E код ошибки 3 (экономия памяти).

Листинг 5: тест фотоэлементов

; - - - проверка двух младших битов порта ФЭЛ на 0

TST_FEL IN A, (#0B) ; прочесть слово статуса ФЭЛ

AND 3 ; наложить на него маску 000000112

LD E, 3 ;

JP NZ, E_ROM ; если не ноль, то ошибка

… ; иначе продолжаем тесты

Инициализация программируемого контроллера прерываний

Для инициализации контроллера надо переслать ему два управляющих слова ICW1 и ICW2, первое по адресу 0CН (A0=0), второе - по адресу 0DН (A0=1).

Пересылаются следующие управляющие слова:

Рис. 6 Применяемые управляющие слова инициализации ПКП

Слово ICW1 установит одиночный (без каскадного соединения) режим работы ПКП (бит 1), 4-хбайтный интервал для начальных адресов обработчиков прерываний (бит 2).

Биты 5-7 слова ICW1 вместе со всем словом ICW2 сообщат контроллеру, что первый обработчик (запроса IR0) начинается с адреса 0020Н.

Контроллер накладывает определенные ограничения на расположение обработчиков в памяти. Первое из них в том, подпрограммы обработки прерываний должны располагаться по порядку, начиная с адреса обработчика запроса IR0, и с постоянным интервалом, т.е. образовывать в памяти таблицу. Интервал расположения может составлять 4 байта (если бит 2 ICW1 равен единице, как в нашем случае), или 8 байт (если бит 2 равен нулю). При постоянном интервале адреса всех обработчиков определятся расположением первого (IR0).

Страницы: 1, 2, 3, 4