
- •Основные понятия и определения. Лекция №1. Микропроцессоры и микроконтроллеры. Общие сведения. Шина адреса, шина управления.
- •Что такое микропроцессор?
- •Шинная структура связей
- •Лекция №2. Архитектура микропроцессоров и микроконтроллеров. Risc и cisc система команд в мп и мк. Архитектура микропроцессорных систем
- •Типы микропроцессорных систем
- •Risc и cisc система команд в мп и мк
- •Команды пересылки данных
- •Арифметические команды
- •Логические команды
- •Команды переходов
- •Лекция №3. Внутренняя организация процессора. Назначение и функциональные особенности блоков. Быстродействие процессора
- •Классификация и структура
- •Процессорное ядро
- •Функции процессора
- •Лекция №4. Последовательность выполнения команд микропроцессором. Режимы адресации.
- •Адресация операндов
- •Методы адресации
- •Адресация байтов и слов
- •Регистры процессора
- •Система команд мп. Лекция №5. Архитектура изучаемого микроконтроллера. Назначение внутренних блоков. Микроконтроллеры семейства avr
- •Микроконтроллер aTtiny2313 фирмы Atmel
- •Архитектура микроконтроллеров семейства Tiny
- •Организация памяти
- •Память программ
- •Память данных
- •Способы адресации памяти данных
- •Прямая адресация
- •Лекция №6. Блок регистров общего назначения. Команды с непосредственной адресацией. Различные режимы адресации. Энергонезависимая память данных (eeprom)
- •Доступ к eeprom
- •Меры предосторожности
- •Счетчик команд и выполнение программы
- •Лекция №7. Система команд изучаемого микроконтроллера.
- •Лекция №8. Команды переходов и сдвига. Остальные команды.
- •Выводы микроконтроллера. Лекция №9. Описание выводов микроконтроллера.
- •Описание выводов
- •Кварцевый генератор
- •Лекция №10. Пространство ввода/вывода микроконтроллера.
- •Порт ввода/вывода в
- •Регистр направления данных порта b - ddrb
- •Альтернативные функции portb
- •Порт ввода/вывода d
- •Регистр направления данных порта b - ddrb
- •Порт d, как порт ввода/вывода общего назначения
- •Альтернативные функции порта d
- •Регистры и обработка прерываний микроконтроллера. Лекция №13. Регистр состояния и указатель стека микроконтроллера.
- •Регистр состояния - sreg
- •Указатель стека sp
- •Лекция №14. Обработка внешних прерываний в микроконтроллере.
- •Обработка внешних прерываний. Общий регистр маски прерываний gimsk
- •Общий регистр флагов прерываний
- •Регистр управления микроконтроллером - mcucr
- •Лекция №15. Обработка прерываний от таймеров/счетчиков в микроконтроллере.
- •Регистр маски прерывания от таймера/счетчика - timsk
- •Регистр флагов прерываний от таймеров/счетчиков - tifr
- •Прерывания в микроконтроллере. Лекция №16. Определитель таймеров/счетчиков. Принцип работы таймера/счетчика 0.
- •Определитель таймеров/счетчиков
- •Регистр управления таймером/счетчиком 0 - tccr0
- •Лекция №17. Режимы работы таймера/счетчика 1.
- •Регистр a управления таймером/счетчиком 1 - tccr1a
- •Таймер/счетчик 1 - tcnt1h и tcnt1l
- •Регистр совпадения a таймера/счетчика 1 - ocr1ah и ocr1al
- •Регистр захвата таймера/счетчика 1 - icr1h и icr1l
- •Таймер/счетчик в режиме шим
- •Лекция №18. Универсальный асинхронный приемо-передатчик. Принцип работы и управления.
- •Передача данных
- •Прием данных
- •Управление uart регистр ввода/вывода uart
- •Регистр состояния uart (usr)
- •Регистр управления uart (ucr)
- •Генератор скорости передачи
- •Лекция №19. Аналоговый компаратор и сторожевой таймер микроконтроллера.
- •Аналоговый компаратор регистр управления и состояния аналогового компаратора (acsr).
- •Регистр управления сторожевым таймером - wdtcr
- •Форматы представления чисел в эвм. Лекция №20. Формат чисел с фиксированной точкой и элементарные операции над ними.
- •Компьютерное представление целых чисел
- •Лекция №21. Формат чисел с плавающей точкой и элементарные операции над ними.
- •Компьютерное представление вещественных чисел
- •Цифро-аналоговые преобразователи. Лекция №22. Основные понятия и определения цифро-аналоговых преобразователей (цап). Виды погрешностей преобразования.
- •Параметры цап
- •Лекция №23. Цап на взвешивающей матрице и на матрице r-2r. Принцип работы. Достоинства и недостатки. Цап на взвешивающей матрице
- •Цап на матрице r-2r
Компьютерное представление целых чисел
Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Для представления со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное - 1.
Различие в представлении целых чисел со знаком и без знака вызвано тем, что в ячейках одного и того же размера в беззнаковом типе можно представить больше различных положительных чисел, чем в знаковом. Например, в байте (8 разрядов) можно представить беззнаковые числа от 0 до 255, а знаковые - только до 127. Поэтому, если известно заранее, что некоторая числовая величина является неотрицательной, то выгоднее рассматривать ее как беззнаковую, чем как знаковую.
Прямой код числа
Представление числа в привычной форме «знак» - «величина», при которой старший разряд ячейки отводится под знак, а остальные разряды ячейки - под запись числа в двоичной системе, называется прямым кодом двоичного числа.
Например, прямой код двоичных чисел 10012 и -10012 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.
Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код числа полностью совпадает с записью самого числа в ячейке машины. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда. Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используют так называемый дополнительный код.
Дополнительный код числа
Дополнительный код положительного числа равен прямому коду этого числа.
Дополнительный код отрицательного числа m равен 2k - |m|, где k - количество разрядов в ячейке.
Заметим, что в компьютерной k -разрядной арифметике 2k = 0, так как двоичная запись этого числа состоит из одной единицы и k нулей, а в ячейку из k разрядов может уместиться только k цифр, в данном случае они все нули. Таким образом, дополнительный код отрицательного числа - это дополнение |m| до 2k (или до нуля в k -разрядной арифметике: 2k - |m| + |m| = 0).
Как уже было сказано, при представлении неотрицательных чисел в беззнаковом формате все разряды ячейки отводятся под само число. Например, запись числа 24310 = 111100112 в одном байте при беззнаковом представлении будет выглядеть следующим образом:
При представлении целых чисел со знаком самый старший (левый) разряд отводится под знак числа, и под собственно число остается на один разряд меньше. Поэтому, если приведенное выше состояние ячейки рассматривать как запись целого числа со знаком, то для компьютера в этой ячейке записано число -13 (так как 243 + 13 = 256 = 28).
Но если это же отрицательное число записать в ячейку из 16-ти разрядов, то содержимое ячейки будет следующим:
Из приведенных примеров видно, что вид представления отрицательного числа зависит от разрядности ячейки, в которую записывается число.
С какой целью отрицательные числа записывают в виде дополнительного кода и как получить дополнительный код отрицательного числа?
Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и чисел разного знака, сводится к их поразрядному сложению.
Для компьютерного представления целых чисел обычно используется один, два или четыре байта, т.е. ячейка памяти будет состоять из восьми, шестнадцати или 32 разрядов соответственно.
Алгоритм получения дополнительного кода отрицательного числа
Для получения дополнительного k-разрядного кода отрицательного числа необходимо
1) модуль числа представить прямым кодом в k двоичных разрядах;
2) значения всех бит инвертировать: все нули заменить на единицы, а единицы на нули (таким образом получается k-разрядный обратный код исходного числа);
3) к полученному обратному коду, трактуемому как k-разрядное неотрицательное двоичное число, прибавить единицу.
Пример. Получим восьмиразрядный дополнительный код числа -5210:
00110100 - число |-52| = 52 в прямом коде
11001011 - число -52 в обратном коде
11001100 - число -52 в дополнительном коде
Напомним, что при различных значениях k вид отрицательного числа в дополнительном коде также будет различным.
Пример. Получим дополнительный код числа -5210 в шестнадцати разрядах:
0000 0000 0011 0100 — прямой код числа |-52|
1111 1111 1100 1011 — обратный код числа -52
1111 1111 1100 1100 — дополнительный код числа -52.
Диапазон значений целых чисел
Рассмотрим диапазон значений целых чисел для беззнакового представления в зависимости от разрядности ячейки. Понятно, что минимальное число, которое можно записать в k битах, будет состоять из k нулей, т.е. это число 010. Максимальное число будет состоять из k единиц. Это число (k единиц в двоичной системе счисления) в десятичной системе счисления равно 2k - 1. Действительно, запишем это двоичное число в развернутой форме:
2k-1
+ 2k-2
+ … + 22
+ 21
+ 20
=
= 2k
- 1
(здесь использована формула суммы конечной геометрической прогрессии). Таким образом, для беззнаковых чисел нижняя граница диапазона значений всегда равна нулю, а верхнюю границу диапазона допустимых значений можно подсчитать, зная количество разрядов, занимаемых данным числом.
При наличии одинакового числа разрядов в ячейке максимальное значение для знакового представления будет практически в два раза меньше, чем для беззнакового. Это связано с тем, что один разряд в знаковом представлении отводится под знак числа, тем самым для представления самого числа остается на один разряд меньше. Например, максимальное значение числа для знакового представления в 8-разрядной ячейке равно 127 (27 - 1), а беззнакового - 255 (28 - 1). Для 16-разрядной ячейки максимальное значение числа со знаком - 32767 (215- 1), максимальное значение чиела без знака - 65536(216 - 1), Минимальное отрицательное число, которое можно записать в 8-разрядной ячейке равно -128 (128 = 27).
Выпишем таблицу границ диапазонов для знаковых и беззнаковых представлений в ячейках с различной разрядностью.
Разрядность |
минимум (без знака) |
максимум (без знака) |
минимум (со знаком) |
максимум (со знаком) |
8 |
0 |
255 |
-128 |
127 |
16 |
0 |
65535 |
-32768 |
32767 |
32 |
0 |
2147483647 |
-2147483648 |
4294967295 |
При представлении чисел с фиксированной запятой все разряды ячейки, кроме знакового разряда, если он есть, служат для изображения разрядов числа. Причем каждому разряду ячейки соответствует всегда один и тот же разряд числа. Именно поэтому такое представление получило название с фиксированной запятой, так как фиксируется место запятой перед определенным разрядом (для целых чисел запятая находится после младшего разряда, т.е. вне разрядной сетки). Такая система упрощает выполнение арифметических действий, но сильно ограничивает диапазон чисел, которые можно записать в ячейку при таком представлении.
Выполнение арифметических операций над числами с фиксированной запятой
Система команд МК позволяет относительно легко осуществлять операции над целыми числами (сложение, вычитание и т.д.). Однако в большинстве реальных задач необходимо хранить и обрабатывать дробные числа. Для этого в формат числа вводится «виртуальная» запятая, отделяющая целую и дробную часть двоичного числа (N . M), где N – один байт целой части числа, а M – один байт дробной. При вычислениях необходимо выбрать такой формат чисел с фиксированной запятой, чтобы при максимальной величине операндов не происходило переполнение разрядной сетки (кроме переполнения при вычитании (сложении) в доп. коде, которое отбрасывается).
Сложение и вычитание
При сложении и вычитании чисел относительное положение запятой не изменяется. Перед использованием стандартной процедуры целочисленного сложения или вычитания необходимо произвести «выравнивание» операндов. Если для вычислений нужно сформировать дополнительный код числа, то следует это делать после выравнивания операндов. (NN.M+N.MM=NN.MM, 0.MM+N.0=N.MM)
Пример. сложить 7,2510 + 1,510 в формате 1 байт под целую часть и один – под дробную.
7,2510 = 00000111 . 01000000
1,510 = 00000001 . 10000000, при сложении получим
8,7510 = 00001000 . 11000000
Пример. Вычесть из 8,7510 число 1,510 в формате 1 байт под целую часть и один – под дробную.
Сначала выравниваем операнды, а затем выписываем доп. код для отрицательного числа (-1,5).
8,7510 = 00001000 . 11000000
1,510 = 00000001 . 10000000, обр. код: 11111110 . 01111111, доп. код: 11111110 . 10000000
складываем:
8,7510 = 00001000 . 11000000
-1,510 = 11111110 . 10000000 (в доп. коде)
получим:
7,2510 = 1 00000111 . 01000000 (отбрасываем 1-цу переполнения в соответствии с правилами вычитания чисел в доп. коде).
Умножение
При умножении двух целых чисел с фиксированной запятой положение «виртуальной» запятой меняется и его необходимо отслеживать. Зная форматы операндов нужно определить положение запятой в формате результата. NN.M N.MM = NNN.MMM, 0.MM N.M = N.MMM и т.д.
Пример. умножить 7,510 на 1,510 в формате 1 байт под целую часть и один – под дробную.
7,510 = 00000111 . 10000000
1,510 = 00000001 . 10000000, при умножении получим
00000111 . 10000000
00000001 . 10000000
__________________
00000111 10000000
+ 00000111 10000000
________________________________
00000000 00001011 01000000 00000000
Деление
При делении двух чисел с фиксированной запятой сначала необходимо определить (задать) сколько знаков после запятой будет содержать результат. Если результат должен содержать k цифр после запятой, то делимое следует сдвинуть влево k раз. Это относится и к случаю, когда делимое меньше делителя. NNNN.000 : NN = NN.MMM (k знаков после запятой), 0.MMM : NN.M = 0.MMMMM, NNNN.000 : N.MM = NNN.M и т.д.
Пример. разделить 1010 = 0102 на 410 = 1002. (k=2)
1010002:1002 (делимое сдвинули влево два раза)
101000 | 100
100 | 10 . 10 2 = 2.510.
10
- 0
100
- 100
00
- 0
0
Алгоритм деления: сравниваем временный результат (ВР) с делителем (Д). Если ВР<Д, то сдвигаем 1 раз влево ВР и делимое как единое целое, а в результат вдвигаем лог.0 в мл. бит. Если ВРД, то вычитаем Д из ВР, а затем сдвигаем 1 раз влево ВР и делимое как единое целое, а в результат вдвигаем лог.1 в мл. бит.
временный результат | делимое комментарии
00000000 | 101000 ВР<Д, => сдвигаем (результат - _ _ _ _ _ _ _ _)
00000001 | 01000 ВР<Д, => сдвигаем (результат - _ _ _ _ _ _ _ 0)
00000010 | 1000 ВР<Д, => сдвигаем (результат - _ _ _ _ _ _ 0 0)
00000101 | 000 ВРД, => вычитаем и…
- 100 |
00000001 | 000 … и сдвигаем (результат - _ _ _ _ _ 0 0 1)
00000010 | 00 ВР<Д, => сдвигаем (результат - _ _ _ _ 0 0 1 0)
00000100 | 0 ВРД, => вычитаем и…
- 100 |
00000000 | 0 … и сдвигаем (результат - _ _ _ 0 0 1 0 1)
00000000 | ВР<Д, => сдвигаем (результат - _ _ 0 0 1 0 1 0)
отсчитываем два знака (k=2) справа у результата и ставим запятую. Получим 10.102 = 2.510.
При представлении чисел с фиксированной запятой все разряды ячейки, кроме знакового разряда, если он есть, служат для изображения разрядов числа. Причем каждому разряду ячейки соответствует всегда один и тот же разряд числа. Именно поэтому такое представление получило название с фиксированной запятой, так как фиксируется место запятой перед определенным разрядом (для целых чисел запятая находится после младшего разряда, т.е. вне разрядной сетки). Такая система упрощает выполнение арифметических действий, но сильно ограничивает диапазон чисел, которые можно записать в ячейку при таком представлении.