- •П.С. Довгий, в.И. Скорубский
- •Содержание
- •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. Вычисления
Пример вычислений выражения y=x*(k+z)/0.1 в дробных.числах.
В большинстве существующие MCU реализуют только целую арифметику и дробные должны быть приведены к целым в масштабе, сохраняющем абсолютную погрешность в младшем разряде целого формата. Чтобы удобно было следить за погрешностью вычислений, примем одинаковые масштабы и
форматы c фиксированной точкой перед старшим десятичным разрядом. В следующем примере – масштаб m=102
char kk=25,zz=8; //реальные числа kk=0.25 и zz=0.08)
main()
{ char yy, xx=40; //реальное число xx=0,40
yy=xx*(kk+zz)/10; // yy=132 в масштабе m2=104
с абсолютной погрешностью 10-4
значение дробное 0,0132
}
Для упрощения вычислений целесообразно проверить возможность использование двоичных (2n) масштабов - в данном случае 28
Float kk=0.25, zz=0.08, xx=0,40;
char kk=0x100*kk, zz=0x100*zz; //kk=0x40, zz=0x14
main()
{ char yy, xx=0x100*xx; //xx=0x66
yy=xx*(kk+zz)/0x1a //0x100*0.1=0x1a
// yy=0x84 в масштабе 216
или 132 в масштабе 104
значение дробное 0,0132
}
Здесь вычисления усложняются при вводе с плавающей точкой.
Однако если входные данные подготовлены в виде масштабируемых целых,то
ее можно упростить
char kk=0x40, zz=0x14;
main()
{ char yy, xx=0x66;
y=((xx*(kk+zz)) >>8)*0xA
// yy=0x84 в масштабе 28
или 132 в масштабе 104
значение дробное 0,0132
}
Если рассмотреть ассемблерный вариант программы, то он будет проще
в несколько раз
mov a,kk
add a,zz ;kk+zz
mov b,xx
mul ab ;xx*(kk+zz) в масштабе 216
mov a,#0xA
mul ab ;yy в масштабе 28
mov yy
Распространенные функции вычисляются по формулам разложения в ряд Тейлора, который в большинстве случаев сходится в диапазоне дробного аргумента 0-1.0.
В лабораторных работах предлагается сравнить программы, реализующие методы вычислений для дробных чисел с плавающей точкой , c фиксированной точкой в форматах целых с масштабированием и дробных без масштабирования, а также показать эффективность выбора двоичных масштабов.
Вычисления с плавающей точкой выполняются только в Си.
Вычисления с фиксированной точкой для целых с оптимальным масштабом в Си и Макроассемблере.
3.1. Вычисление функции с плавающей точкой.
FP- машинный формат позволяет использовать полулогарифмическую запись числа при вычислениях и , следовательно, возможность обработки чисел на
ЭВМ в широком диапазоне с автоматическим изменением масштаба, с постояннной отнсительной погрещностью и переменной абсолютной .
Однако FP-формат не всегда приемлем в вычислениях и проектировании ЭВМ:
сложные алгоритмы преобразования – высокая сложность аппаратуры и большие затраты времени при вычислениях
постоянная относительная погрешность, зависящая только от разрядности мантиссы ∂ = 2(-n) (двоичная (n)-разрядная мантисса, округление усечением). В макро-микро-мире абсолютная погрешность при 24-битовой мантиссе может изменяться в недопустимом интервале
[2(-32)2(-24) =2(-56) <= ∆ <=[2322(-24) <= 28 ]
С фиксированной точкой и программа проще и время вычислений сокращается, что и предполагается показать в лабораторных работах при вычислении функций .
Пример.
Используя библиотечную функцию из библиотеки math.h языка С51, вычислить значения sin(x) в диапазоне аргумента 0-360о. При компиляции в Кейл записать параметры программы – объем требуемой памяти данных и объем программы.
C использованием Логического Анализатора получить временные диаграммы и измерить среднее время вычисления функции.
Схема вывода значений функции через порт. - псевдо Цифро-аналоговое графическое преобразование выполняет Анализатор. В окне Анализатора как на экране цифрового осциллографа могут быть измерены временные параметры графика функции и абсолютные значения в масштабе 28
Р3 Sin(x)
ЦАП
Окно
Анализатора
Рис.2.7. Схема работы Анализатора.
При выводе через порт P3 учитывается, что значение должно быть целым, положительным и не более 28.
#include <reg51.h>
#include <math.h>
float x;
unsigned char xdata y[100],i;
main()
{
/* цикл формирования значений в массиве
вычисления с плавающей точкой – в том числе и масштабные преобразование и перевод в целые
*/
i=0;
for(x=0; x<6.28 ;x+=0.0628)
y[i++]=P3=sin(x)*100+100; //масштабное преобразование переводит дробное в целое с точностью 2 знака после запятой и смещает в положительную область значений
}
Для точного измерения собственно времени вычисления sin(x) без учета промежуточных преобразований целых в float и обратно использовать вывод признаков через порт P2.
Например, вычислить sin(30°) и измерить время вычисления .
Командой LA P2 значение в Анализатор передается через порт P2
Реальное время вычислений контролируется Симулятором и синхронизировано частотой работы компьютера.
