- •1.1 Цель работы
- •1.2 Общие сведения
- •1.3 Области применения
- •1.4 Номенклатура микроконтроллеров семейства pic16f8хх
- •1.5 Технические характеристики микроконтроллера pic16f877
- •1.6 Архитектура микроконтроллера pic16f877
- •1.7 Основные регистры специального назначения
- •1.7.1 Регистр status
- •1.7.3 Регистр intcon
- •1.7.2 Регистр option_reg
- •1.7.4 Регистр pie1
- •1.7.5 Регистр pir1
- •1.7.6 Регистр pie2
- •1.7.7 Регистр pir2
- •1.7.8 Регистр pcon
- •1.7.9 Регистры pclath и pcl
- •1.7.10 Вычисляемый переход
- •1.7.11 Стек
- •1.7.12 Страницы памяти программ
- •1.7.13 Косвенная адресация, регистры indf и fsr
- •1.8 Порты ввода/вывода
- •1.8.1 Регистры portа и trisa
- •1.8.2 Регистры portb и trisb
- •1.8.3 Регистры portc и trisc
- •1.8.4 Регистры portd и trisd
- •1.8.5 Регистры porte и trise
- •1.9 Eeprom память данных и flash память программ
- •1.9.1 Регистры eecon1, eecon2
- •1.9.2 Чтение из eeprom памяти данных
- •1.9.3 Запись в eeprom память данных
- •1.10 Модуль таймера tmr0
- •1.10.1 Прерывания от tmr0
- •1.10.2 Использование внешнего источника тактового сигнала для tmr0
- •1.10.3 Предделитель
- •1.11 Модуль таймера tmr1
- •1.11.1 Работа tmr1 в режиме таймера
- •1.11.2 Работа tmr1 в режиме счетчика
- •1.11.3 Работа tmr1 в режиме синхронного счетчика
- •1.11.4 Работа tmr1 в режиме асинхронного счетчика
- •1.11.5 Чтение/запись tmr1 в асинхронном режиме
- •1.11.6 Генератор tmr1
- •1.11.7 Сброс tmr1 триггером модуля сср
- •1.11.8 Сброс регистров tmr1 (tmr1h, tmr1l)
- •1.11.9 Предделитель tmr1
- •1.12 Прерывания
- •1.12.1 Внешнее прерывание с входа rb0/int
- •1.12.2 Прерывание по переполнению tmr0
- •1.12.3 Прерывание по изменению уровня сигнала на входах rb7:rb4
- •1.13 Система команд
1.7 Основные регистры специального назначения
1.7.1 Регистр status
В регистре STATUS (адрес 03h, 83h, 103h или 183h) содержаться флаги состояния АЛУ, флаги причины сброса микроконтроллера и биты управления банками памяти данных.
Регистр STATUS может быть адресован любой командой, как и любой другой регистр памяти данных. Если обращение к регистру STATUS выполняется командой, которая воздействует на флаги Z, DC и С, то изменение этих трех битов командой заблокирована. Эти биты сбрасываются или устанавливаются согласно логике ядра микроконтроллера. Команды изменения регистра STATUS также не воздействуют на биты –ТО и –PD. Поэтому, результат выполнения команды с регистром STATUS может отличаться от ожидаемого. Например, команда CLRF STATUS сбросит три старших бита и установит бит Z (состояние регистра STATUS после выполнения команды: 000uu1uu, где u – не изменяемый бит).
При изменении битов регистра STATUS рекомендуется использовать команды, не влияющие на флаги АЛУ (SWAPF, MOVWF, BCF и BSF). Описание команд смотрите в разделе 1.13.
Примечание: Флаги С и DC используются как биты заема и десятичного заема соответственно, например, при выполнении команд вычитания SUBLW и SUBWF.
Ниже приводится назначение каждого из 8 битов регистра. Здесь и далее используются следующие обозначения:
R – чтение бита;
W – запись бита;
U – не реализовано, читается как «0»;
-n – значение после POR;
-x – неизвестное значение после POR.
Регистр STATUS (адрес 03h, 83h, 103h или 183h)
R/W–0 |
R/W–0 |
R/W–0 |
R–1 |
R–1 |
R/W–x |
R/W–x |
R/W–x |
IRP |
PR1 |
PR0 |
–TO |
–PD |
Z |
DC |
C |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит З |
Бит 2 |
Бит 1 |
Бит 0 |
Бит 7: |
IRP: Бит выбора банка при косвенной адресации 1 = банк 2, 3 (100h-1FFh) 0 = банк 0, 1 (000h – 0FFh) |
Бит 6: Бит 5: |
RP1:RP0: Биты выбора банка при непосредственной адресации 00 = банк 0 (000h – 07Fh) 01 = банк 1 (080h – 0FFh) 10 = банк 2 (100h – 17Fh) 11 = банк 3 (180h – 1FFh) |
Бит 4: |
–ТО: Флаг переполнения сторожевого таймера 0 = после переполнения WDT 1 = после POR или выполнения команд: CLRWDT, SLEEP. |
Бит 3: |
–PD: Флаг включения питания 0 = после выполнения команды SLEEP 1 = после POR или выполнения команды CLRWDT |
Бит 2: |
Z: Флаг нулевого результата 0 = не нулевой результат выполнения арифм. или логической операции 1 = нулевой результат выполнения арифм. или логической операции |
Бит 1: |
DC: Флаг десятичного переноса/заема (для команд ADDWF, ADDWL, SUBWF, SUBWL), заем имеет инверсное значение. 0 = не было переноса из младшего полубайта 1 = был перенос из младшего полубайта |
Бит 0: |
С: Флаг переноса/заема (для команд ADDWF, ADDWL, SUBWF, SUBWL), заем имеет инверсное значение 0 = не было переноса из старшего бита 1 = был перенос из старшего бита |
Примечание: Флаг заема имеет инверсное значение. Вычитание выполняется путем прибавления дополнительного кода второго операнда. При выполнении команд сдвига (RRF, RLF) бит С загружается старшим или младшим битом сдвигаемого регистра.
