Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп лек прог ЦТ и МК 2.doc
Скачиваний:
30
Добавлен:
01.05.2015
Размер:
897.54 Кб
Скачать

3 Лекция 3. Регистры общего и специального назначения

Цель лекции: знакомство с регистрами микроконтроллера, с влиянием арифметических операций на биты регистра Status, с абсолютной адресацией.

3.1 Регистры PORTCиTRISC

Информация в микроконтроллере хранится в регистрах (file), состоящих из 8 разрядов (бит). Они делятся на регистры общего назначения (РОН), которые может использовать программист для хранения переменных, и регистры специального назначения (РСН), выполняющие определенные функции управления работой микроконтроллера.

У микроконтроллеров имеются выводы для подключения внешних устройств. Информация с этих выводов сохраняется в специализированной области памяти. Выводы объединены в функциональные группы-регистры РСН: PORTA, PORTB, PORTC, PORTD. В результате выполнения программы на выводы порта либо будет подаваться напряжение, либо нет. Содержание регистра порта, а также нумерация разрядов порта показана на рисунке 3.1. Наличие напряжения будем обозначать цифрой 1, отсутствие - цифрой 0, хотя часто обозначают и наоборот.

Все выводы регистра нумеруются, начиная с нуля, справа налево, и называются разрядами или битами. К выводам порта подключаются приборы и устройства,

Рисунок 3.1- Схема регистра

управляющие технологическим процессом, или кнопки и датчики для ввода информации в МК. С их помощью можно подключить, например, вентилятор, конвейер, насос подачи реагента и т.д. Если на соответствующем выводе порта будет напряжение (обозначаемое цифрой 1), то устройство будет включено. Представленные на рисунке 3.1 набор нулей и единиц формально считают числом в двоичной системе счисления. Положение цифры в числе называют разрядом.

Рисунок 3.2 – Схема подключения оборудования

РСН TRISCпоразрядно определяет направление потока информации через регистрPORTC. Если в каком-то разряде регистраTRISCзаписана “1”, то информация от периферийного устройства через регистрPORTCпоступает в ЦПУ. Например, от кнопки, конечного выключателя, датчика уровня. Если в каком-то разряде регистраTRISCзаписан “0”, то информация от ЦПУ через регистрPORTCпоступает на периферийное устройство, например, пускатель, сирену, лампочку, кнопку, конечный выключатель, см. рисунок 3.2.

3.2 Регистр Status

Регистр специального назначения Status играет большую роль при выполнении математических и логических операций. Он контролирует результаты операций: был ли перенос, получился ли нулевой результат и другие операции. На основе этого контроля выполняется ветвление алгоритма и контроль правильности полученных результатов. Его биты IPR, 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 приняты следующие обозначения:

  1. IRP - бит выбора банка при косвенной адресации (IRP=1 - выбор банка 2 или банка 3, IRP=0 - выбор банка 0 или 1);

  2. RP1, RP0 - биты выбора банка при непосредственной адресации (т.е. разряды 5 и 6). Их значения для выбора банков показаны в таблице 3.2;

  3. TO - флаг переполнения сторожевого таймера;

  4. PD - флаг включения питания;

  5. Z (zero)- флаг нулевого результата. Записывается “1” при нулевом результате арифметической или логической операции;

  6. DC - флаг десятичного переноса или заема. Записывается “1”, если был перенос из младшего полубайта регистра в старший полубайт, актуально при выполнении команд сложения и вычитания в двоично-десятичной системе;

  7. 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 образуют разряды двоичного числа

Внимание! Символьное имя S обозначает регистр Status.

После рассмотрения назначения бит регистра Status понятно почему его очистка приводит к результату, показанному в таблице 3.3.

Т а б л и ц а 3.3 – Значения регистра Status после команды CLRF STATUS

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

+ 00010100

11110100

П р и м е ч а н и е: курсивом выделены числа в дополнительном коде.

В окне наблюдения (watch) в первом случае мы увидим, что результат равен 12, при этом бит переноса передается в Carry. Во втором случае в окне наблюдения увидим, что результат равен 244, при этом бит Carry равен нулю. Таким образом, если в регистре Status бит С=0, то результат вычитания неверно отражается в окне наблюдения, поскольку, в действительности, он находится в дополнительном коде. Если в регистре Status бит С=1, то результат вычитания верно отражается в окне наблюдения,

3.3 Фиксированная (абсолютная) адресация.

Чтобы выполнить какие-либо действия с информацией в регистре, его имя или адрес должны быть указаны в команде. Будучи составной частью кода команды, 7-битный адрес операнда (регистра) является «фиксированным и поэтому не может быть изменен во время выполнения программы.

Хотя явное задание этих адресов может показаться очевидным способом для указания местоположения объекта в памяти данных, существует ряд ситуаций, в которых такое указание неудобно.

В качестве примера, иллюстрирующего эту недостаточную гибкость, предло­жим, что мы хотим очистить содержимое всех регистров данных 0-го банка, т.е. регистров h'20'…h'7F'. Очевидным решением этой задачи будет многократное (96 раз) использование команды clrf (очистка регистра), как показано в программе:

Clrf h’20’; очищаем регистр по адресу h’20’.

Clrf h’21’; очищаем регистр по адресу h’21’.

. . . .

Clrf h’7E’; очищаем регистр по адресу h’7E’.

Clrf h’7F’; очищаем регистр по адресу h’7F’.

Несмотря на то, что этот код вполне работоспособен, он чрезвычайно неэф­фективен. Каждая из 96 команд выполняет одну и ту же операцию, хотя и для дру­гого адреса.