Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mcs51_1 / Пособие ч1.doc
Скачиваний:
37
Добавлен:
21.03.2016
Размер:
957.44 Кб
Скачать

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 для циклической и рекурсивной программ..

Соседние файлы в папке mcs51_1