
- •Программирование цифровой техники и микроконтроллеров управления
- •Алматы 2012
- •1 Микроконтроллеры в современном мире
- •1.1 Краткая история развития микроконтроллеров
- •1.2 Задачи и роль микроконтроллеров
- •2 Выполнение арифметических операций в мп
- •2.1 Системы счислений
- •2.2 Двоичная арифметика
- •2.3 Дополнительный код
- •2.4 Знаковый разряд
- •3 Регистры общего и специального назначения
- •3.1 Регистры portc и trisc
- •3.2 Регистр Status
- •3.3 Фиксированная (абсолютная) адресация
- •4 Косвенная адресация. Логика
- •4.1 Косвенная адресация
- •4.2 Логические функции
- •5 Маскирование. Стек
- •5.1 Маскирование
- •5.2 Счетчик команд
- •5.3 Стек
- •6 Конвейер и подпрограмма задержки
- •6.1 Конвейер
- •6.2 Программа задержки
- •6.3 Расчет времени задержки
- •7 Выполнение умножения и деления
- •7.1 Умножение и деление при помощи сдвига
- •7.2 Инструкции условных переходов
- •7.3 Целочисленное умножение
- •7.4 Целочисленное деление
- •7.5 Умножение на дробное число
- •8 Программирование клавиатуры. Дешифратор
- •8.1 Клавиатура
- •8.2 Фрагменты программы
- •8.3 Дешифратор
- •8.4 Компаратор
- •9 Основные элементы цифровой техники
- •9.1 Сумматор
- •9.2 Арифметико-логическое устройство
- •9.3 Бистабильные схемы
- •9.4 Триггеры и регистры
- •10 Структура микроконтроллера. Индикатор
- •10.1 Применение операций сдвига
- •10.2 Цифровой индикатор
- •10.2 Структурная схема мк
- •11 Прерывания и сторожевой таймер
- •11.1 Прерывания
- •11.2 Подсчет посетителей с помощью прерываний
- •11.3 Сторожевой таймер
- •12 Фактор времени и аналоговый мир
- •12.1 Модуль таймера tmr1
- •12.2 Применение таймера tmr1
- •12.3 Аналоговый мир
- •Приложение а Список некоторых сокращений
- •Список литературы
- •Содержание
- •050013, Алматы, Байтурсынова, 126
3 Регистры общего и специального назначения
Цель лекции: знакомство с регистрами микроконтроллера, с влиянием арифметических операций на биты регистра Status, с абсолютной адресацией.
Краткое содержание лекции. Регистры специального назначения (РСН) и регистры общего назначения (РОН). Представление подключения технологического оборудования как двоичного числа. Контроль операций с помощью регистра Status. Фиксированная адресация.
3.1 Регистры portc и trisc
Информация в микроконтроллере хранится в регистрах (file), состоящих из 8 разрядов (бит). Они делятся на регистры общего назначения (РОН), которые может использовать программист для хранения переменных, и регистры специального назначения (РСН), выполняющие определенные функции управления работой микроконтроллера.
У микроконтроллеров имеются выводы для подключения внешних устройств. Информация с этих выводов сохраняется в специализированной области памяти. Выводы объединены в функциональные группы-регистры РСН, например: PORTA, PORTB, PORTC, PORTD. В результате выполнения программы на выводы порта либо будет подаваться напряжение, либо нет. Содержание регистра порта, а также нумерация разрядов порта показана на рисунке 3.1. Наличие напряжения будем обозначать цифрой 1, отсутствие - цифрой 0, хотя часто обозначают и наоборот.
|
Все выводы регистра нумеруются, начиная с нуля, справа налево, и называются разрядами или битами. К выводам порта подключаются приборы и устройства, |
Рисунок 3.1- Схема регистра |
управляющие технологическим процессом, или кнопки и датчики для ввода информации в МК. С их помощью можно подключить, например, вентилятор, конвейер, насос подачи реагента и т.д. Если на соответствующем выводе порта будет напряжение (обозначаемое цифрой 1), то устройство будет включено. Представленные на рисунке 3.1 набор нулей и единиц формально считают числом в двоичной системе счисления. Положение цифры в числе называют разрядом. Это же число в 16-й системе будет A3h.
Рисунок 3.2 – Схема подключения оборудования
РСН TRISC поразрядно определяет направление потока информации через регистр PORTC. Если в каком-то разряде регистра TRISC записана “1”, то информация от периферийного устройства через регистр PORTC поступает в ЦПУ. Например, на рисунке 3.2 от кнопки Кн, конечного выключателя Кв. Если в каком-то разряде регистра TRISC записан “0”, то информация от ЦПУ через регистр PORTC поступает на периферийное устройство, например, на пускатели К1 и К2, сирену S1, лампочку L2.
3.2 Регистр Status
Регистр специального назначения Status играет большую роль при выполнении математических и логических операций. Он контролирует результаты операций: был ли перенос, получился ли нулевой результат и другие операции. На основе этого контроля выполняется ветвление алгоритма и контроль правильности полученных результатов. Его биты RP0, RP1 определяют, с адресами какого банка работает программа (банков четыре).
В таблице 3.1 показано расположение и имена битов регистра Status, которые используются для контроля арифметических и логических операций, а также для выбора банков и других целей.
Т а б л и ц а 3.1 – Биты регистра Status
Номера бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Имена бит |
IRP |
RP1 |
RP0 |
-TO |
-PD |
Z |
DC |
C |
В таблице 3.1 приняты следующие обозначения:
IRP - бит выбора банка при косвенной адресации (IRP=1 - выбор банка 2 или банка 3, IRP=0 - выбор банка 0 или 1);
RP1, RP0 - биты выбора банка при непосредственной адресации (т.е. разряды 5 и 6). Их значения для выбора банков показаны в таблице 3.2;
TO - флаг переполнения сторожевого таймера;
PD - флаг включения питания;
Z (zero)- флаг нулевого результата. Записывается “1” при нулевом результате арифметической или логической операции;
DC - флаг десятичного переноса или заема. Записывается “1”, если был перенос из младшего полубайта регистра в старший полубайт, актуально при выполнении команд сложения и вычитания в двоично-десятичной системе;
C (carry) - флаг переноса или заема. Записывается “1”, если был перенос из старшего бита регистра для команд сложения и вычитания. Вычитание, как известно, выполняется с помощью сложения уменьшаемого и вычитаемого, которое представлено в дополнительном коде.
К отдельным битам регистра можно обращаться по имени или по номеру. Запись BTFSC STATUS, Z эквивалентна записи BTFSC STATUS, 2.
Т а б л и ц а 3.2 – Выбор номера банка 5 и 6 битами (RP1 и RP0)
RP1(первый бит номера банка) |
RP0 (нулевой бит номера банка) |
Номер банка (десятичная система) |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
2 |
1 |
1 |
3 |
Примечание. RP1 и RP0 образуют разряды двоичного числа |
После рассмотрения назначения бит регистра Status понятно, почему его очистка приводит к результату, показанному в таблице 3.3.
Т а б л и ц а 3.3 – Значения регистра Status после команды CLRF
IRP |
RP1 |
RP0 |
-TO |
-PD |
Z |
DC |
C |
0 |
0 |
0 |
1 |
1 |
1 |
1 или 0 |
1 или 0 |
Рассмотрим влияние арифметических операций на биты регистра Status.
Т а б л и ц а 3.4 – Математические примеры на сложение
Сложение чисел 128+20 |
Сложение чисел 240+20 |
||
а) Десятичная система |
б) Двоичная система |
в) Десятичная система |
г) Двоичная система |
128 + 20 148 |
10000000 +00010100 10010100 |
240 + 20 260 |
11110000 +00010100 100000100 (равно 4!) |
В примерах а) и б) таблицы 3.4 все нормально, результаты реальны, т.к. 14810=100101002. В примерах в) и г) также результаты совпадают, поскольку 26010=1000001002. Однако поскольку в регистре всего 8 бит, то самая старшая единица уйдет в перенос в бит Carry, и в результате формально получим, что 240+20=4 поскольку регистр переполнился. В примере б) бит С=0, в примере г) бит С=1. Таким образом, если в регистре Status бит С=1 при сложении, то было переполнение регистра и результат неверен.
Т а б л и ц а 3.5 – Математические примеры на вычитание
Вычитание чисел 16-4 |
Вычитание чисел 4-16 |
||
а) Десятичная система |
б) Двоичная система |
в) Десятичная система |
г) Двоичная система |
16 - 4 12 |
10010000 + 11111100 100001100 |
4 - 16 -12 |
00000100 + 11110000 11110100 |
П р и м е ч а н и е: курсивом выделены числа в дополнительном коде. |
В окне наблюдения (watch) в первом случае мы увидим, что результат равен 12, при этом бит переноса передается в Carry. Во втором случае в окне наблюдения увидим, что результат равен 244, при этом бит Carry равен нулю. Таким образом, если в регистре Status бит С=0, то результат вычитания неверно отражается в окне наблюдения, поскольку, в действительности, он находится в дополнительном коде. Если в регистре Status бит С=1, то результат вычитания верно отражается в окне наблюдения.