- •П.С. Довгий, в.И. Скорубский
- •Содержание
- •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)
- •Вопросы по курсу лабораторных работ к зачету и экзамену.
- •Кафедра вычислительной техники
График функции в окне Анализатора.
2.8. График функции в окне Анализатора.
Объем программы – 1.7 Кбайт, среднее время вычисления одного значения 3.45 мс.
3.2. Вычисление функции с фиксированной точкой в целых числах и выбор масштабов.
Рассматриваем применение вычислений функций с фиксированной точкой как необходимые для ЭВМ, в которых основной машинный формат целый или дробный. Функции как и в библиотеке match.c для FP, представлены рядами Тейлора.
Некоторые приближения реально не применяются для вычислений и имеют смысл как учебные для демонстрации применения рекурсивных вычислений. Например, 1/(1+x) включают две простые операции, но в приближениях используется также полиномиальная формула со строгим неравенством в определении диапазона сходимости..
Функции в задании представлены разложением в ряд Тейлора, например,
(2.8) sinx ~ x/1 – x3/3! + x5/5! – x7/7! + при всех х
Вычисления выполняются по схеме Горнера[1] с числом членов ряда 3-4 или по формуле с общим членом ряда, а при большом числе членов ряда – по рекуррентной формуле.
Схема Горнера приводится к рекуррентным формулам
sinx ~ x/1 – x3/3! + x5/5! – x7/7! = x(1-x2/6(1-x2/20(1-x2/42)) =S
рекуррентная формула
Si+1= 1-x2/ai*Si
S0=1; i=0,1,2
S3=xS2
Выберем аргумент в диапазоне дробных чисел 0- 0.99 радиан.
Система команд ЭВМ поддерживает вычисления с целыми числами. Для применения этих же команд арифметики выполняется Масштабирование дробных значений, которое переводит диапазон дробных в диапазон целых
x’= x*m;
Для сохранения масштаба результата используем следующие преобразования
sinx’~ x’ – x’3/m2/3! + x’5/m4/5! – x’7 /m6/7!
Вычисления c целыми по схеме Горнера
(2.9) sinx’~ x’(m – x’2/m/6(m - x’2/m/20(m – x’2/m/42)/m))/m)/m
рекуррентная формула
Si+1 = m - A*Si/(m*(i+1)*(i+2)), A= x2/m, i=1,2,3
или по формуле c общим членом ряда S~ x – S1 +S2 –S3
Si+1 = Si* A/(m*(i+1)*(i+2)), A= x2/m
Выбор масштаба.
Величину масштаба ограничивает заданная точность вычислений и размер формата данных. Например, для 8-разрядных вычислений и точности 2 знака после запятой
102 ≤ m ≤ 28
a)Вычисления с масштабом m=100 в Си занимает 1.2 мс и объем программы 219 байт.
При вычислениях по формуле 2.9. требуется подпрограмма целого деления
Для упрощения вычислений целесообразно выбирать масштаб m=28
b) При m=28
x*(0x100 – x*x/28/6*(0x100 + x*x/28/20*(0x100 – x*x /28/42)/ 28)/ 28 )/ 28
Диапазон x=[0-1] с масштабом [28-1] представим в диапазоне x=[0-255]
Деление на 28 заменяем простым сокращением 16-битового формата до 8-битового.
#include <reg51.h>
unsigned int x,y, sin;
main()
{
while(1)
for(x=0; x<=0x100; x++)
{ y=(x*x)>>8;
sin=(y/20*(0x100-y/42))>>8;
sin= (y/6*(0x100-sin))>>8;
P3=sin= (x*(0x100-sin))>>8;
}
}
Объем программы 260 байт, среднее время вычисления 0.25 мс
Выполнить вычисления с масштабами m=100, 128,256 — сравнить время вычислений и объем программ и вычисления с выбранным масштабом реализовать в Макроассемблере.