- •П.С. Довгий, в.И. Скорубский
- •Содержание
- •2.Высокоуровневая программная модель в с51.
- •2.1. Организация памяти и размещение информации в с51
- •4) Расширенная память данных
- •2.2.Типы и форматы данных в с51
- •2.3. Ввод-вывод в с51
- •2.5. Управление программой.
- •3.1. Структура Памяти, команды обмена данными.
- •Idata sfr Data Sfr
- •2.4.2. Ввод-вывод в а51
- •2.4.4 Арифметические и логические операции.
- •2) Беззнаковая арифметика
- •3) Десятичная арифметика
- •4) Логика поразрядная 8 битовая
- •5) Битовые операции
- •3.1.1. Беззнаковые целые численные данные.
- •3.1.2. Дробные численные данные.
- •5. В mcs51 доступна простая десятичная арифметика – предлагается составить программу преобразования двух разрядной десятичной дроби
- •3.2. Двоичная арифметика
- •3.2.2.Умножение знаковое в с51
- •3.2.3. Беззнаковое деление
- •3. Вычисления
- •3.1. Вычисление функции с плавающей точкой.
- •График функции в окне Анализатора.
- •3.2. Вычисление функции с фиксированной точкой в целых числах и выбор масштабов.
- •3.3. Макроассемблер
- •3.4. Вычисление функции с фиксированной точкой в дробных числах.
- •3.3. Иерархия памяти эвм.
- •1) Прямой доступ к данным
- •2) Косвенный доступ к данным по адресу через адрес-указатель
- •3.4. Битовые данные.
- •1) Доступ к битам в с51
- •2) Адресация к битам в Ассемблере
- •3.5. Система прерывания.
- •Void Ex00(void) interrupt 0 using 1
- •3.5.1. Подсчет внешних прерываний
- •1) Программа в с51
- •Внутренние прерывания при переполнении таймеров.
- •3.5.2. Часы реального времени..
- •Intt0() interrupt 0
- •2.5.4. Широтно-импульсная модуляция (шим).
- •Xrl a,{ri,@rj,#d,ad} xchd a,@rj a(3-0)@rj(3-0)
- •Xrl ad,{#d,a} swap a a(3-0)a(7-4)
- •Open -
- •Save - все остальные имеют стандартное назначение
- •Окно Загрузчика (Debug)
- •Вопросы по курсу лабораторных работ к зачету и экзамену.
- •Кафедра вычислительной техники
3.3. Макроассемблер
Ассемблер А51 является макроассемблером и позволяет заменить повторяющиеся небольшие фрагменты текста (3-5 команд ассемблера) одной ссылкой с параметрами –макрокомандой.
Структура макроопределения
<имя макрокоманды> macro <список формальных параметров>
<тело макроопределения – список ассемблерных команд с параметрами)
endm
В программе используются макрокоманды с именем, обозначенным в MACRO, и фактическими параметрами, для которых имеет смысл подстановка в теле макроопределения.
Компилятор заменяет эти ссылки соответствующим отредактированным текстом (макроопределением). Размер текста программы сокращается, уровень программирования возрастает.
Учитывая ограниченный доступ к различным типам памяти, можно расширить список команд.
rsadd macro ri, SS ; SS-имя в памяти Data
mov a,ri
add a, SS
mov ri,a
endm
ssadd macro S1, S2 ; Si-имя в памяти Data
mov a,S1
add a, S2
mov S1,a
endm
Программа вычислений в макроассемблере
mov S1,a
mov S2,#55
rsadd r1,S1
ssadd S2,S1
Для 8-разрядной машины можно ввести 16-битовые команды – добавлением к списку команд (макрокоманд) типа RR(регистр-регистр), SS(память-память), RS(регистр-память), 16-битовой арифметики.
Макрокоманды (макроподстановки) сокращают текст программы и позволяют использовать систему команд, более подходящую к алгоритму решаемой задачи и опять же с целью сокращения текста программы. К сожалению, в предлагаемых работах макрокоманды приходится применять к уже полученному тексту программы на Ассемблере, как бы на этапе оптимизации длины этого текста.
Макрокоманды не следует путать с подпрограммами и функциями, повторное применение которых всегда влияют на сокращение длины программы, но время вычисления возрастает за счет сохранения и восстановления контекста.
3.4. Вычисление функции с фиксированной точкой в дробных числах.
Функция задана разложением в ряд Тейлора
sinx ~ x/1 – x3/3! + x5/5! – x7/7!
Выберем аргумент в диапазоне дробных чисел 0- 0.99 радиан.
Масштабирование выполняется после ввода и преобразования десятичных чисел в двоичную систему в 8-разрядном формате умножением на m=28. Дробное число приводится к целому. Деление заменяем умножением на дробный коэффициент в масштабе, например, 1/6 *28=42
y=x*x/28
sinx ~ x*(0xff- y/6*(0xff-y/20*(0xff-y/42)/28)/28)/28
x*(0xff- y*42/28 *(0xff-y*13/28 *(0xff-y*6/28)/28)/28)/28
При вычитании в формате байта используем приближенное значение единицы 0xff. Если вычитаемое не равно нулю, можно добавить единицу для повышения точности.
Объем программы 51 байт и среднее время вычисления 0.04 мс
В тексте выделены повторяющиеся фрагменты, которые могут быть обобщены макрокомандой
Задания.
Для заданных функций разработать программу вычисления функции с плавающей точкой, вывести график, измерить среднее время вычисления одного значения и объем программы.
Разработать программы вычисления с фиксированной точкой в С51 и в макроассемблере. Вычисление функции - в целых 8-разрядных числах в диапазоне аргумента 0 – 1.0 и с использованием макрокоманд и подпрограмм.
В дробных числах разработать программу вычислений в Ассемблере
Измерить среднее время вычислений и объем программы. Привести гистограммы изменения этих параметров для трех рассмотренных способов (две программы в Си и две в макроассемблере).
Варианты Задания по разделу 2.2.
1. 1/(1-x) ~ 1 + x + x2 + x3 + -1<x<1 (сходимость ряда)
2. 1/(1+x) ~ 1 – x + x2 - x3 + -1< x<1
3. (1+x)0.5 ~ 1 + x/2 – x2/(2*4) + 1*3*x3/(2*4*6) -1*3*5*x4/(2*4*6*9) -1<=x<=1
ax ~ 1 + (lna)/1*x + (lna)2 x2/2! + (lna)3 x3/3! + при всех x
a>1; lna(10*a/10) = ln10 + ln(a/10) =ln10 + ln(1-(1-a/10))
4. a=2
5. a=1/2
6. cosx ~ 1 – x2/2! + x4/4! – x6/6! + при всех х
7. tgx ~ x + x3/3 +2x5/15 + 17x7/315 +62x9/2835 -π /2 < x < π /2
8. ctgx ~ 1/x – (x/3 +x3/45 + 2x5/945 + 2x7/4725 + …) -π < x < π
9. ln(1+x) ~ x – x2/2 + x3/3 –x4/4 + x5/5 + -1 <x <1
10. ln(1-x) ~ -x – x2/2 - x3/3 - x4/4 - x5/5 – -1 <x <1
11. arcsin(x) ~ x + x3/(2*3) + 1*3*x5/(2*4*5) + 1*3*5x7/(2*4*6*7) + -1 <x <=1
12. arctg(x) ~ x – x3/3 + x5/5 – x7/7 + -1 <x <=1
13. (1-x)0.5 ~ 1 - x/2 – x2/(2*4) - 1*3*x3/(2*4*6) -1*3*5*x4/(2*4*6*9) -1 <=x <=1
14. (1+x)1/3 ~ 1 + x/3 -2x2/(3*6) + 2*5*x3/(3*6*9) -1 <=x <=1
15. (1+x)3/2 ~ 1 + 3x/2 + 3x2/(2*4) – 3x3/(2*4*6) +9x4/(2*4*6*8) -1 <=x <=1
16. arsh(x) ~ x - x3/(2*3) + 1*3*x5/(2*4*5) - 1*3*5x7/(2*4*6*7)
ch(x) ~ 1 + x2/2! + x4/4! + x6/6! +
sh(x) ~ x/1 + x3/3! + x5/5! + x7/7! +
Si(x) ~ x – x3/(3*3!) + x5/(5*5!) – x7/(7 *7!)+
Ci(x) ~ 1 – x2/(2*2! + x4/(4*4! – x6/(6*6! +