- •Микропроцессорные системы
- •Лабораторная работа №2 Реализация логических функций
- •Задания на лабораторную работу:
- •Порядок выполнения работы
- •Общий алгоритм подготовки программного обеспечения:
- •Часть 2.1
- •Часть 2.2
- •Часть 2.3
- •Часть 2.4
- •Оценки времени выполнения программ, полученные с помощью отладчика:
Порядок выполнения работы
Подготовить программы на Ассемблере, реализующие заданную логическую функцию с использованием выше описанных методов. Значения аргументов функции целесообразно вводить, например, с битов порта Р0.0–Р0.3. Результат вывести в порт Р1: если функция принимает значение "1", байт индикации имеет значение FFh, в противном случае - 00h.
С помощью кросс-отладчика проверить правильность этих программ и оценить время вычисления функции различными методами для фиксированной комбинации входных переменных.
Общий алгоритм подготовки программного обеспечения:
Для подготовки исходного текста программы на входном языке, может использоваться любой редактор, формирующий текстовый файл в коде ASCII. В настоящем цикле лабораторных работ в целях глубокого изучения архитектуры ОМК в качестве входного языка используется язык ассемблера. Для трансляции исходного текста программы в объектный код в данном цикле лабораторных работ используется ассемблер ASM51. На этапе трансляции выявляются и должны быть исправлены синтаксические ошибки в исходном тексте. При разработке достаточно сложных многомодульных программ используется также редактор связей (линкер), который позволяет включать в исполняемую программу независимо разработанные и библиотечные модули.
Часть 2.1
ASM:
$mod52
;(x1 XOR x2)&(!x3 OR x4)
M1:
MOV A,P0;читаем данные с порта
SETB C
MOV C,ACC.0;читаем первый бит данных
;если он 0,то сбросим флаг переноса С
JC R1_1
MOV R1,#0h;запишем в X1 значение 0
JMP FINR1
R1_1:
MOV R1,#1h;запишем в X1 значение 1
FINR1:
RR A
SETB C
MOV C,ACC.0
JC R2_1
MOV R2,#0h;запишем в X2 значение 0
JMP FINR2
R2_1:
MOV R2,#1h;запишем в X2 значение 1
FINR2:
RR A
SETB C
MOV C,ACC.0
JC R3_1
MOV R3,#0h;запишем в X3 значение 0
JMP FINR3
R3_1:
MOV R3,#1h;запишем в X3 значение 1
FINR3:
RR A
SETB C
MOV C,ACC.0
JC R4_1
MOV R4,#0h;запишем в X4 значение 0
JMP FINR4
R4_1:
MOV R4,#1h;запишем в X4 значение 1
FINR4:
MOV A,R1
XRL A,R2;(x1 XOR x2)
MOV R0,A
MOV B,R3
CPL B
MOV A,B;!x3
ORL A,R4;(!x3 OR x4)
ANL A,R0;(x1 XOR x2)&(!x3 OR x4)
JB ACC.0,OUTIS1
MOV P1, #0h
JMP M1
OUTIS1:
MOV P1, #0ffh
JMP M1
END
Часть 2.2
ASM:
$mod52
;(x1 XOR x2)&(!x3 OR x4)
M1:
MOV A,P0;читаем данные с порта
SETB C
MOV C,ACC.0;читаем первый бит данных
;если он 0,то сбросим флаг переноса С
JC X1_1
;в X1 значение 0
SETB C
MOV C,ACC.1
JC X2_1
;в X2 значение 0
JMP OUTIS0;вывод false
X2_1:
;в X2 значение 1
SETB C
MOV C,ACC.2
JC X3_1
;в X3 значение 0
JMP OUTIS1;вывод true
X3_1:
;в X3 значение 1
SETB C
MOV C,ACC.3
JC X4_1
;в X4 значение 0
JMP OUTIS0;вывод false
X4_1:
;в X4 значение 1
JMP OUTIS1;вывод true
X1_1:
;в X1 значение 1
SETB C
MOV C,ACC.1
JNC X2_1
JMP OUTIS0;вывод false
OUTIS0:
MOV P1, #0h
JMP M1
OUTIS1:
MOV P1, #0ffh
JMP M1
END
Часть 2.3
ASM:
$mod52
ORG 0h
M1:
MOV A,#0
MOV DPTR,#init;Устанавливаем указатель DPTR на начало данных
MOV DPH, #11h;в старший байт регистра DPTR загрузим значение 11h
MOV DPL, P0;а в младший байт регистр DPTR – содержимое порта P0
MOVC A, @A+DPTR;Чтение данных из CSEG по адресу (A)+(DPTR)
MOV B,A
MOV C,B.0;проверяем, что содержится в выбранной нами с порта ячейке таблицы
JC result
MOV P1,#0
JMP M1
result:
MOV P1,#0ffh
JMP M1
ORG 1100h
init:
DB 0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0
END