Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе
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) ; A¬A+(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).
Адрес первого обработчика
составляется из полного слова ICW2 (старший байт) и битов 7,6,5 слова ICW1
(старшие три бита младшего байта адреса).
В нашем случае старший
байт равен 00Н, младший байт равен 0010 0000 = 20Н.
Обработчики имеют начальные адреса: 0020H, 0024H, 0028H,
002CH, 0030H, 0034H (6 обработчиков).
Процедура INI_PIC
инициализирует контроллер.
Листинг 6: инициализация программируемого
контроллера прерываний
; – – – переслать 38H
в порт 0CH и 0 в порт 0DH
INI_PIC LD A,
#38 ;
OUT (#0C),
A ;
XOR A ;
OUT (#0D), A ;
Инициализация
переменных системы
В системе за некоторыми
ячейками памяти закреплена функция хранения переменных. Например, подсчитанный
суммарный объем древесины VS в двоичном формате хранится в отдельных двух байтах
памяти с адресами V_SUM, V_SUM+1.
Требуют инициализации
только две переменные (инициализируются нулем):
VS (2 байта) – начальный адрес V_SUM;
Время (4 байта) – начальный адрес TIME.
Ясно, что эти имена
(V_SUM и TIME) лишь условные обозначения (также, как, например, имена меток в
листингах программ). При переводе в машинный код эти имена транслируются в
двухбайтный адрес.
Листинг 7: инициализация ячеек суммарного
объема и времени
; – – – начальное
обнуление объема и времени
INI_VAR XOR A ;
LD (V_SUM),
A ;
LD (V_SUM+1),
A ;
LD (V_SUM+2),
A ;
LD (TIME),
A ;
LD (TIME+1),
A ;
LD (TIME+2),
A ;
LD (TIME+3), A ;
… ;
следует продолжение переходит к основному циклу работы (описание см. в п.4.4).
Арифметические
подпрограммы
Микропроцессорной системе
необходимо “уметь” выполнять арифметические операции: сложение, вычитание,
умножение, деление и косинус. В этом же разделе приведем и неарифметические
процедуры для осуществления индикации: преобразования данных в
двоично-десятичный код и в семисегментный.
Основным форматом чисел в
МП системе является двухбайтный формат с фиксированной точкой вида 1байт , 1байт . Формат
беззнаковый, предполагается, что числа положительны. Одно число умещается в
одной регистровой паре. Минимальное представимое число – 0,01H=1/256=3,9×10-3, максимальное – FF,FFН=256,996.
Общие правила для всех
вычислительных процедур:
-
программист
вызывающей программы сам следит, чтобы операнды и результат не выходили за
пределы представления и чтобы при вычитании не образовалось отрицательных
величин;
-
операнды при
сложении, вычитании, умножении, делении хранятся в регистровых парах HL и DE,
результат в HL. Процедура косинуса получает операнд и выводит результат в паре
HL.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 |