- •П.С. Довгий, в.И. Скорубский
- •Содержание
- •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.1.1. Беззнаковые целые численные данные.
Десятичная и двоичная системы счисления позиционные однородные являются формальным способом записи количества. Методы преобразования чисел из одной системы в другую изменяют только форму записи целых чисел, в которой сохраняется информация о количестве
Информация (количество) в записи (m)-разрядного целого десятичного числа
m-1
(2.1) N= ∑ aidi = am-110m-1 + am-210m-2 + ….+ a110 + a0=
i=0
= (…((0+ am-1 )10 + am-2 )10 +.. + a1)10 + a0
где ai -двоично-десятичная цифра, d=10, m-количество разрядов в записи десятичного числа. Запятая фиксирована в машинном формате после младшего разряда.
Ввод двухразрядного целого десятичного числа с 8-разрядного порта (m=2, n=8)
(,) (,)
Рис. 2.1. Формат двоично-десятичного целого числа в порте.
Соотношение между числом разрядов двоичного формата (n) и десятичного (m) –разрядного задается условием 2n>10m или n= ]m*3.33[
влияет на выбор разрядности программной модели ЭВМ .
Десятичные числа преобладают в машинных вычислениях в экономике, где используется двоично-десятичный формат переменной длины с естественной запятой (System Z фирмы IBM), но могут быть использованы и форматы с фиксированной точкой (точность – одна копейка).
Машинные преобразования и вычисления с целыми числами сохраняют точность(масштаб) M=1, но ограничены диапазоном, который определяется разрядностью двоичного формата (n). Если диапазон превышает допустимый, то всегда можно увеличить абсолютную погрешность масштабированием N/M (М > 1) и перейти в диапазон целых значений с меньшей точностью (большим масштабом). В большинстве существующих ЭВМ для вычислений с фиксированной точкой используются форматы целых двоичных чисел и целая арифметика (есть исключения – MCU68000, где используется целый и дробный форматы ).
Если используется фиксированный формат 4m=n для промежуточного хранения десятичных данных и обработки двоичных данных, то 2n>10m и в преобразовании 2/10 может возникать переполнение.
Машинные преобразования целого 10/2 могут быть выполнены пересчетом количества N в двоичной системе по обобщенной рекуррентной формуле схемы Горнера [1], где i=(m-1)…0
(2.3.) Si+1= Si10 + a m-i , {S0=0,.., Sm=N } (следует из 2.1.) или
по формуле с общим членом ряда
Si+1= Si + Biai , Bi+1=10Bi , B0=1, S0=0, i=0,..m-1
Программа в С51 при вводе 2-хразрядного десятичного N=a1a0 формула 2.1. имеет вид N= a1 *10 + a0 При выводе a1=N/10, a0= rest(a/10)
#include <reg51.h> //файл адресации регистров MCS51
main()
{ P2= (P1>>4)*10 + (P1&0x0f); //ввод 2/10 числа с порта Р1, выделение со сдвигом старшей тетрады, вывод двоичного числа в Р2
P3=((P2/10)<<4) | (P2%10);
}
Рекуррентная формула (2.3.) может быть переписана в виде рекурсивной функции [ ] и непосредственно представлена рекурсивной программой (см. раздел 2.4.3.)
(2.4) S(i+1)=S(i)*10 + a m – i-1 i=0 - m, S(0)=0;
Обратное машинное преобразование 2/10 в двоичной системе может быть выполнено методом “цифра за цифрой” в обратной рекурсии.
Пусть на последнем шаге при переводе 10/2 получено двоичное число
N=Sn =Sn10 + a0. Если Sn известно, то неизвестное a0 – остаток от целого деления Sn-1=Sn/10. На следующем шаге a1 – остаток при целом делении
Sn-2= Sn-1/10. Следовательно, ai+1 – остаток целого делении Si-1=Si/10. В остатках ai+1=Si%10 будут получены последовательно цифры a0,a1,....an-1
Задание к разделу 2.1.
1. Выполнить прямое 10/2 и обратное 2/10 преобразования
для десятичного формата m=2. Двоично-десятичное число вводится через входной порт, преобразуется в двоичное, для контроля преобразуется в двоично-десятичное и выводится через выходной порт.
2. выполнить преобразования ввода при m=4 в форматы с фиксированной и плавающей точкой в С51 – контроль результата в окне Visial.
3. Записать прямое вычисление рекурсивной функции и вычислить при m=4.
4. сравнить листинги Ассемблера А51 и С51 для циклической и рекурсивной программ..