- •Введение.
- •1.1. Основные характеристики.
- •1.2. Структурная схема микроконтроллера.
- •1.3. Блоки памяти.
- •1.4. Регистры состояния и управления.
- •1.5. Порты ввода-вывода.
- •2.0.Функциональные модули микроконтроллера pic16f873.
- •2.1. Таймеры.
- •2.1.2. Модуль таймера tmr1.
- •2.1.3. Модуль таймера tmr2.
- •2.2. Модуль сср.
- •2.2.2. Режим сравнения.
- •2.2.3. Режим широтно-импульсного преобразователя (шим).
- •2.3. Модуль ацп.
- •2.3.1.Работа модуля осуществляется в следующей последовательности:
- •2.3.2.Временные требования к работе модуля ацп.
- •2.3.4. Последовательность преобразования аналогового сигнала.
- •2.3.5. Выравнивание результата преобразования.
- •2.3.6. Работа модуля ацп в sleep режиме.
- •2.3.7. Пример программирования модуля ацп.
- •2.4.Универсальный синхронно – асинхронный приемопередатчик (usart).
- •2.4.1.Режим асинхронного полного дуплекса.
- •2.4.1.1. Асинхронный передатчик usart.
- •2.4.1.2. Асинхронный приемник модуля usart.
- •2.5.Модуль ведущего синхронного последовательного порта (mssp).
- •2.5.1. Режим ведомого i2c.
- •2.5.1.1.Прием данных.
- •2.5.1.2. Передача данных.
- •2.5.1.3.Поддержка общего вызова.
- •2.5.1.4.Работа в sleep режиме.
- •2.5.2. Режим ведущего i2c.
- •2.5.3. Подключение абонентов к шине i2c.
- •2.6. Прерывания.
- •2.7. Сторожевой таймер.
- •2.8. Система команд микроконтроллера.
- •Incf Прибавить 1 к содержимому регистра f.
- •Incfsz Прибавить 1 к регистру f, пропустить, если 0.
- •Iorlw Побитное «или» регистра w и константы k.
- •Iorwf Побитное “или» регистров w, f.
- •Xorlw Побитное «Исключающее или» константы и регистра w.
- •Xorwf Побитное «исключающее или» регистров w,f.
1.4. Регистры состояния и управления.
К регистрам состояния и управления процессором относятся следующие регистры: STATUS, OPTION_REG, PCL, FSR, PCLATH, INTCON, PIR1, PIE1, PIR2, PIE2. Большинство из этих регистров для удобства программирования отображены во всех банках памяти данных.
Регистр STATUS содержит флаги состояния АЛУ, флаги причин сброса микроконтроллера и биты управления банками памяти данных. Распределение разрядов регистра приведено в таблице 2.
Таблица 2
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
IRP
RP1
RP0
-TO
-PD
Z
DC
C
IRP – бит выбора банка памяти при косвенной адресации: 1 – банки 2,3; 0 – банки 0,1.
PR1:PR0 – биты выбора банков памяти данных при непосредственной адресации (см. таблицу 3).
-TO - бит флага переполнения сторожевого таймера: = 0 после переполнения.
-PD - бит флага после включения питания: = 0 при включении режима SLEEP.
Z – бит флага нулевого результата = 1 при нулевом результате арифметической или логической операции.
DC – бит флага десятичного переноса / заема для команд ADDWF, ADDWL, SUBWF, SUBWL – см. систему команд микроконтроллера): = 1 – был перенос из младшего полубайта, = 0 – не было переноса. Заем имеет инверсное значение.
C – бит флага переноса / заема (для команд ADDWF, ADDWL, SUBWF, SUBWL) : = 1 – был перенос из старшего бита, = 0 - не было переноса. Заем имеет инверсное значение.
Таблица 3.
-
Номер банка и пределы адресов
RP0
RP1
Банк 0 адреса: 000h - 07Fh
0
0
Банк 1 адреса: 080h - 0FFh
1
0
Банк 2 адреса: 100h - 17Fh
0
1
Банк 3 адреса: 180h - 1FFh
1
1
Регистр OPTION_REG предназначен для управления предварительным делителем импульсов сторожевого таймера или таймера TMR0. Распределение разрядов приведено в таблице 4.
Таблица 4
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
-RBPU
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
-RBPU – бит включения подтягивающих резисторов на входах PORTB.
INTEDG – бит выбора фронта сигнала на входе внешнего прерывания:
=1 – прерывание по переднему фронту сигнала,
= 0 – по заднему фронту.
TOCS – выбор тактового сигнала для таймера TMR0:
=1 внешний тактовый сигнал с вывода RA4,
= 0 – внутренний тактовый сигнал.
TOSE – выбор фронта входного сигнала со входа RA4 для приращения таймера TMR0:
=1- приращение по заднему фронту,
= 0 – приращение по переднему фронту.
PSA - выбор режима подключения предварительного делителя:
= 1 - предделитель включен перед сторожевым таймером
=– предделитель включен перед таймером TMR0.
PS2: PS0 – установка коэффициента предделителя в соответствии с таблицей 45
Таблица 5.
-
Значение коэффициента
Для
TMR0
Для
WDT
000
1:2
1:1
001
1:4
1:2
010
1:8
1:4
011
1:16
1:8
100
1:32
1:16
101
1:64
1:32
110
1:128
1:64
111
1:256
1:128
Регистр INTCON - предназначен для хранения масок и флагов прерываний. Обозначение и распределение разрядов приведено в таблице 6:
6
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
GIE
PEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
GIE – глобальное разрешение прерываний:
=1 – разрешены все незамаскированные прерывания,
= 0 – все прерывания запрещены.
PEIE – разрешение прерываний от периферийных модулей микроконтроллера: =1 – разрешены незамаскированные прерывания от периферийных модулей,
= 0 – запрещены прерывания от периферийных модулей.
TOIE – разрешение прерывания при переполнении таймера TMR0: 1 – прерывание разрешено, 0 – прерывание запрещено.
INTE – разрешение внешнего прерывания:
=1- прерывание разрешено,
=0 – прерывание запрещено.
RBIE – разрешение прерывания по входам RB7:RB4 PORTB:
=1 – прерывание разрешено,
=0 – прерывание запрещено.
TOIF - флаг переполнения таймера TMR0:
= 1 – переполнение было (сброс программно),
= 0 – переполнения не было.
INTF – флаг внешнего прерывания INT:
= 1 – было условие внешнего прерывания на выводе RB0/INT,
= 0 – внешнего прерывания не было.
RBIF- флаг прерывания по изменению уровня сигналов на входах RB7:RB4 PORTB:
=1 – зафиксировано изменение уровня сигнала ( сбрасывается программно),
=0 – изменения уровня сигнала не было.
Регистр PIE1 – содержит биты разрешения прерываний от функциональных модулей. Обозначения и распределение разрядов приведены в таблице 7.
Таблица 7
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
PSPIE - разрешение прерывания от ведомого параллельного порта (для МК типа PIC16F874, PIC16F877):
= 1 прерывание разрешено,
=0 – прерывание запрещено.
ADIE – разрешение прерывания по окончанию преобразования в АЦП:
=1- прерывание разрешено,
= 0 – прерывание запрещено.
RCIE – разрешение прерывания от приемника USART:
=1 – прерывание разрешено,
=0 – прерывание запрещено.
TXIE – разрешение прерывания от передатчика USART:
= 1 – прерывание разрешено,
= 0 – прерывание запрещено.
SSPIE – разрешение прерывания от синхронного последовательного порта:
=1- прерывание разрешено,
=0 – прерывание запрещено.
CCP1IE – разрешение прерывания от модуля CCP1:
= – прерывание разрешено,
=0 – прерывание запрещено.
TMR2IE – разрешение прерывания по переполнению таймера TMR2
=1 - прерывание разрешено,
= 0 - прерывание запрещено.
TMR1IE – разрешение прерывания по переполнению таймера TMR1:
=1 – прерывание разрешено,
=0 – прерывание запрещено.
Регистр PIE2 – содержит маски прерываний от функциональных модулей микроконтроллера. Обозначения и распределение разрядов приведено в таблице 8.
Таблица 8
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
-
-
-
EEIE
BCLIE
_
-
CCP1IE
EEIE -разрешение прерывания по окончанию записи в EEPROM данных:
= 1 – прерывание разрешено,
=0 – прерывание запрещено.
BCLIE – разрешение прерывания при возникновении коллизий на шинном интерфейсе I2С :
= 1 – прерывание разрешено,
=0 - прерывание запрещено.
CCP1IE – разрешение прерывания от модуля CCP2:
=1 – прерывание разрешено,
= 0 – прерывание запрещено.
Остальные разряды не используются и читаются как 0.
Регистр PIR1 – содержит биты флагов прерываний от периферийных модулей. Обозначения и распределение разрядов приведено в таблице9.
Таблица 9
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
RSPIF – флаг прерывания от ведомого параллельного порта (для МК типа PIC16F874, PIC16F877):
=1 – произошла операция чтения или записи (сбрасывается программно),
=0 – операции чтения или записи не происходило.
ADIF – флаг прерывания от периферийного модуля АЦП:
= 1 – преобразование завершено,
= 0 – преобразование незавершенно.
RSIF – флаг прерывания от приемника USART:
=1 – буфер приемника USART полон,
=0 – буфер приемника пуст.
TXIF – флаг прерывания от передатчика USART:
= 1 – буфер передатчика USART пуст,
= 0 – буфер передатчика полон.
SSPIF – флаг прерывания от модуля MSSP:
=1 – выполнено одно из условий прерывания от модуля MSSP (об условиях прерывания см. раздел. Модуль MSSP),
=0 – не выполнено ни одно из условий прерывания от модуля MSSP.
CCP1F – флаг прерывания от модуля CCP1 ( условия прерываний см. в разделе Модуль CCP1).
TMR2IF – флаг прерывания по переполнению таймера TMR2:
= 1 – переполнение наступило (сбрасывается программно),
= 0 – переполнения таймера TMR2 не было.
TMR1IF – флаг прерывания от таймера TMR1:
=1 – переполнение таймера произошло (сбрасывается программно),
=0 – переполнения таймера не было.
Регистр PIE2 – содержит маски прерываний от функциональных модулей микроконтроллера. Обозначения и распределение разрядов приведено в таблице 10.
Таблица 10
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
-
-
-
EEIE
BCLIE
_
-
CCP1IE
EEIE -разрешение прерывания по окончанию записи в EEPROM данных:
= 1 – прерывание разрешено,
=0 – прерывание запрещено.
BCLIE – разрешение прерывания при возникновении коллизий на шинном интерфейсе I2С :
= 1 – прерывание разрешено,
=0 - прерывание запрещено.
CCP1IE – разрешение прерывания от модуля CCP2:
=1 – прерывание разрешено,
= 0 – прерывание запрещено.
Остальные разряды не используются и читаются как 0.
Регистр PIR2 - содержит флаги прерываний от функциональных модулей. Обозначения и распределение разрядов приведено в таблице 11.
Таблица 11
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения сигналов
-
-
-
EEIF
BCLIF
_
-
CCP1IF
EEIF – флаг прерывания по окончанию записи в память EEPROM:
= 1 – запись завершена и разряд должен быть сброшен программно,
=0 – запись не завершена или не была начата.
BCLIF – флаг прерывания при возникновении коллизии на шине I2C:
= 1- на шине взникла коллизия, 0 – коллизий не обнаружено.
CCP1IF – флаг прерывания от модуля CCP2:
В режиме захвата: 1 – выполнен захват значения таймера TMR1 (сброс должен быть выполнен программно),
=0 – захвата не было.
В режиме сравнения:
= 1 – значение таймера TMR1 достигло заданной величины, (сброс осуществляется программно),
= 0 – значение таймера не достигло заданной величины.
Примечание. Флаги прерываний от всех перечисленных устройств устанавливаются по окончании цикла работы конкретного устройства независимо от того разрешено прерывание или нет.