Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
46
Добавлен:
21.02.2014
Размер:
1.62 Mб
Скачать

5 Разработка алгоритма работы микропроцессорной

СИСТЕМЫ

В соответствии с расшифровкой и анализом задания, начертим блок-схему главного алгоритма работы МПС (рисунок 26).

- ввод в ЦП двоичных кодов с цифровых датчиков

- вычисление значения функции f1(X1, X2, X3)

- условие на результат вычисления.

- ввод в ЦП двоичных кодов с выходов АЦП и клавиатуры

- вычисление значения функции f2(NU1, NU2, К)

- условие на результат вычисления.

- выдача управляющего сигнала y2 или y3

- вывод из ЦП управляющего сигнала y1

- сброс управляющего сигнала y1

- задержка

- ввод в ЦП двоичного кода с выхода АЦП NU3

- вычисление функции Y4

- выдача шестнадцатеричного значения Y4 на дисплей

- проверка состояния тумблера «СТОП» на пульте управления.

- выдача значения Y4 на ЦАП

Рисунок 26 – Блок-схема главного алгоритма работы МПС

В

- выдача сигнала «Гашение и преобразование» на АЦП

- чтение с АЦП сигнала готовности данных

- после готовности данных чтение значения из шины адрес/данные и возврат АЦП в исходное состояние

соответствии с описанием микросхемы (пункт 4.1), составим блок-схему опроса АЦП (рисунок 27) и выдачи информации на ЦАП (рисунок 28).

Рисунок 27 – Алгоритм опроса АЦП

- отключение ЦАП от системной шины

- выдача стробирующего импульса для выдачи сигнала Y4 на вход объекта

- подключение микросхемы с системной шине

- выдача необходимого значения на шину адрес/данные

Рисунок 27 – Алгоритм выдачи информации на ЦАП

Доступ к параллельному порту осуществляется по аналогии с доступом к внешней памяти, причем адрес указывает на конкретный порт (таблица 9). Блок-схема алгоритма получения четырехбитного значения (0-F) с клавиатуры показана на рисунке 28.

- в аккумулятор помещаем значение первой строки клавиатуры (сигнал низкого уровня)

- запись инвертированного сигнала на старшую тетраду порта С

- чтение младшей тетрады порта С

- проверка на нажатие клавиши в данной строке, если нет – сдвигаем аккумулятор влево и проверяем, не была ли эта строка последней, переходим к следующей строке

- если клавиша нажата, инверсируем значение R4, преобразуем номер бита в значение для R4 и A, сдвигаем влево аккумулятор на 2 бита, складываем значения A и R4

Рисунок 28 – Алгоритм опроса клавиатуры

6 Разработка управляющей программы для мк

В соответствии с блок-схемами, представленными в разделе 5, составим управляющую программу для микроконтроллера К1816ВЕ48 на языке Assembler. Начало программы – в адресе 10h, а в адресе пуска микроконтроллера 00h находится безусловный переход на данный адрес. Временной интервал для счетчика – 1 мкс (соответствует кварцу в 1МГц).

ORG 0h

JMP 0010h

ORG 10h

;инициализация портов ввода/вывода

MOV R0,03h; адрес регистра слова состояния параллельного интерфейса (А0=1; A1=1)

MOV A,81h; (10000001b) – слово состояния, соответствующее первому режиму (статический), выводу из портов ВА и ВВ, старшая тетрада ВС выводится, младшая вводится.

MOVX @R0,A

START:

;ввод с цифровых датчиков

;X1

ANL P1,10h ; выделение четвертого бита порта Р1

MOV R0,A ;сохранение полученных значений в регистре R0

;X2 инверсное

IN A,P1;

CPL A; инверсия содержимого

ANL P1,20h; выделение пятого инверсного бита порта Р1 ()

RR A;

ANL A,R0; вычисление конъюнкции (X1&¬X2)

MOV R0,A

;X3

ANL P1,40h; выделение шестого бита порта P1

RR A

RR A

ANL A,R0; вычисление второй конъюнкции (X1&¬X2&X3)

;проверка условия: функция f1 равна нулю, когда результат в аккумуляторе равен нулю.

JZ NOT_Y1

MOV A,01h; нулевой бит (Y1)

OUTL P1,A; вывод Y1=1

MOV A,50h; 50h=80 мкс

CALL ZADERJKA

MOV A,00h; обнулить порт

OUTL P1,A; вывод Y1=0

;опрос NU1

MOV A,10h; установить четвертый бит порта Р2 (C0 NU1)

OUT P2,A

OPROS_NU1:

ANL P1,80h; чтение седьмого бита порта P1 (RAD)

JZ OPROS_NU1; опрашиваем АЦП, пока не появился сигнал готовности

INS A,BUS; считывание данных в R1

MOV R1,A

;опрос NU2

MOV A,20h; установить пятый бит (С0 NU2)

OUT P2,A

OPROS_NU2:

ANL P1,80h

JZ OPROS_NU2

INS A,BUS

MOV R2,A

MOV A,00h; восстановление z-состояния шины (отключение АЦП)

OUT P2,A

;чтение с клавиатуры

MOV R3,08h; 1000b

OPROS_KEYB:

MOV A,R3

CPL A

; вывод на параллельный интерфейс строки

MOV R0,02h; A1=1 A0=1 – адрес порта ВС

MOVX @R0,A

MOVX A,@R0

;проверка хотя бы на одну единицу (клавиша нажата)

CPL A

ANL A,0Fh

JNZ PRESS; переход, если нажата клавиша

MOV A,R3

RL A

MOV R3,A

JNC OPROS_KEYB; если не перенос, опрос следующей строки

JMP END_KEYB

;если нажата клавиша, вычисляем ее код (A-номер столбца, R3 – номер строки, результат – в А)

PRESS:

XCH A,R3; обмен А с R3

;нахождение старших двух бит

MOV R4,04h; значение строки

STROKA:

DEC R4

RL A

JNC STROKA

MOV A,R4

RL A

RL A; сдвиг результирующего значения строки на 2 бита влево

MOV R4,A

; нахождение младших двух бит

MOV A,R3

STOLBEC:

INC R4

RR A

JNZ STOLBEC

MOV A,R4

END_KEYB:

; вычисление f2

ADD A,R1; K+NU1

MOV R1,A

;вычитание производим через обратный код:

MOV A,R2

CPL A

ADD A,R1; K+NU1-NU2

MOV R0,A; R0=NU

MOV A,35h; где 35h=Q

CPL A

ADD A,R0

JC MORE; NU>Q – вариант «нет» по блок-схеме

;условие выполняется, y2 c задержкой 125 мкс

MOV A,02h; первый бит порта Р1 (Y2)

OUTL P1,A

MOV A,7D; 125 мкс=7Dh

CALL ZADERJKA

JMP END_IF

MORE:

;условие не выполняется, y3 c задержкой 75 мкс

MOV A,04h; второй бит P1 (Y3)

OUTL P1,A

MOV A,4Bh; 4Bh=75 мкс

CALL ZADERJKA

END_IF:

;сброс порта З1

MOV A,00h

OUTL P1,A

;опрос NU3

MOV A,40h; установить шестой бит порта Р2 (C0 NU3)

OUT P2,A

OPROS_NU3:

ANL P1,80h; чтение седьмого бита порта P1 (RAD)

JZ OPROS_NU3; опрашиваем АЦП, пока не появился сигнал готовности

Соседние файлы в папке кп nd