Регистры состояния и управления
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

К регистрам состояния и управления процессором относятся следующие регистры: STATUS, OPTION_REG, PCL, FSR, PCLATH, INTCON, PIR1, PIE1, PIR2, PIE2. Большинство из этих регистров для удобства программирования отображены во всех банках памяти данных.

 

Регистр STATUS содержит флаги состояния АЛУ, флаги причин сброса микроконтроллера и биты управления банками памяти данных. Распределение разрядов регистра приведено в таблице 2.

                                                                                                            Таблица 4

Номера битов 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 - не было переноса. Заем имеет инверсное значение.

                                                                            Таблица 5.

Номер банка и пределы адресов 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.

                                                                                                                                                                             

                                                                                                           Таблица 6

Номера битов 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

 

                           Таблица 7.

Значение коэффициента Для 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:

 

                                                                                                           Таблица 8.          

Номера битов 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.

 

                                                                                                                         

                                                                                                             Таблица 9

Номера битов 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 – прерывание запрещено.

CCP1 IE – разрешение прерывания от модуля CCP1:

= – прерывание разрешено,

=0 – прерывание запрещено.

TMR2 IE – разрешение прерывания по переполнению таймера TMR2

=1 - прерывание разрешено,

= 0 - прерывание запрещено.

TMR1 IE – разрешение прерывания по переполнению таймера TMR1:

=1 – прерывание разрешено,

=0 – прерывание запрещено.

Регистр PIE2 – содержит маски прерываний от функциональных модулей микроконтроллера. Обозначения и распределение разрядов приведено в таблице 8.

 

 

                                                                                                               Таблица 10

Номера битов 7 6 5 4 3 2 1 0
Обозначения сигналов - - - EEIE BCLIE _ - CCP1IE

 

EEIE  -разрешение прерывания по окончанию записи в EEPROM данных:

= 1 – прерывание разрешено,

=0 – прерывание запрещено.

BCLIE – разрешение прерывания при возникновении коллизий на шинном интерфейсе I2С :

= 1 – прерывание разрешено,

=0 - прерывание запрещено.

CCP1 IE – разрешение прерывания от модуля CCP2:

=1 – прерывание разрешено,

= 0 – прерывание запрещено.

Остальные разряды не используются и читаются как 0.

 

 

Регистр PIR1 – содержит биты флагов прерываний от периферийных модулей. Обозначения и распределение разрядов приведено в таблице9.

                                                                                                                        

                                                                                                       Таблица 11

Номера битов 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.

CCP1 F – флаг прерывания от модуля CCP1 ( условия прерываний см. в разделе Модуль CCP1).

TMR2 IF – флаг прерывания по переполнению таймера TMR2:

= 1 – переполнение наступило (сбрасывается программно),

= 0 – переполнения таймера TMR2 не было.

TMR1 IF – флаг прерывания от таймера TMR1:

=1 – переполнение таймера произошло (сбрасывается программно),

=0 – переполнения таймера не было.

Регистр PIE2 – содержит маски прерываний от функциональных модулей микроконтроллера. Обозначения и распределение разрядов приведено в таблице 10.

 

 

                                                                                                               Таблица 12

Номера битов 7 6 5 4 3 2 1 0
Обозначения сигналов - - - EEIE BCLIE _ - CCP1IE

EEIE  -разрешение прерывания по окончанию записи в EEPROM данных:

= 1 – прерывание разрешено,

=0 – прерывание запрещено.

BCLIE – разрешение прерывания при возникновении коллизий на шинном интерфейсе I2С :

= 1 – прерывание разрешено,

=0 - прерывание запрещено.

CCP1 IE – разрешение прерывания от модуля CCP2:

=1 – прерывание разрешено,

= 0 – прерывание запрещено.

Остальные разряды не используются и читаются как 0.

 

Регистр PIR2 - содержит флаги прерываний от функциональных модулей. Обозначения и распределение разрядов приведено в таблице 11.

 

                                                                                                             Таблица 13

Номера битов 7 6 5 4 3 2 1 0
Обозначения сигналов - - - EEIF BCLIF _ - CCP1IF

 

EEIF – флаг прерывания по окончанию записи в память EEPROM:

= 1 – запись завершена и разряд должен быть сброшен программно,

=0 – запись не завершена или не была начата.

BCLIF – флаг прерывания при возникновении коллизии на шине I2C:

= 1- на шине взникла коллизия, 0 – коллизий не обнаружено.

CCP1 IF – флаг прерывания от модуля CCP2:

В режиме захвата: 1 – выполнен захват значения таймера TMR1 (сброс должен быть выполнен программно),

=0 – захвата не было.

В режиме сравнения:

= 1 – значение таймера TMR1 достигло заданной величины, (сброс осуществляется программно),

= 0 – значение таймера не достигло заданной величины.

 

Примечание. Флаги прерываний от всех перечисленных устройств устанавливаются по окончании цикла работы конкретного устройства независимо от того разрешено прерывание или нет.

 

Порты ввода-вывода.

Для связи микроконтроллера с внешними устройствами и системами служат порты ввода-вывода. Микроконтроллер PIC16F873 имеет три порта, именуемые PORTA, PORTB, PORTC. Другие микроконтроллеры имеют другой состав, например, микроконтроллер PIC16F874 кроме перечисленных портов, имеет еще два порта: PORTD, PORTE. Порты ввода-вывода предназначены либо для ввода сигналов от каких либо внешних источников, либо для вывода сигналов на другие устройства. Все выводы всех портов представляют собой универсальные двунаправленные каналы, которые могут быть настроены как на ввод, так и на вывод информации. Некоторые выводы мультиплицированы с каналами функциональных блоков микроконтроллера и в случае их использования в этих блоках каналы портов не являются универсальными каналами ввода вывода. Назначение мультиплицированных выводов будет рассматриваться при изучении конкретных функциональных блоков. Однако порядок настройки портов на вход или выход не зависит от места использования канала. Рассмотрим их подробнее.

PORTA  представляет собой шестиразрядный порт на регистре специального назначения PORTA по адресу 05h.(в микроконтроллере PIC16F874 – восьмиразрядный). Обозначения разрядов приведены в таблице 12. Направление передачи информации задается установкой соответствующих разрядов регистра TRISA (адрес 85h): при записи в разряды регистра TRISA «1» соответствующий вывод порта А настраивается на ввод информации, при этом выходной буфер переводится в третье состояние, при записи «0» - на вывод – уровень сигнала - TTL. При использовании порта на вывод информации операции производятся по циклу «чтение – модификация – запись», т.е. сначала производится чтение с выходного буфера, затем изменение содержимого и запись в защелку порта.

                                                                                                               Таблица 14

Номера битов 7 6 5 4 3 2 1 0
Обозначения выводов - - RA5 RA4 RA3 RA2 RA1 RA0

Один из выводов - RA4 - имеет на входе триггер Шмитта, а на выходе открытый сток. Все остальные выводы имеют на входе TTL-буфер, а на выходе полнофункциональные КМОП - буферы.

Примечание. В микроконтроллере PIC16F887 PORTA может работать как в аналоговом режиме, так и в цифровом. Для перевода порта в цифровой режим необходимо с регистр специального назначения ANSEL записать 0.

PORTB представляет собой 8 - ми разрядный внешний порт на регистре специального назначения PORTB (адрес 06h). Выводы порта также могут быть настроены как на вход, так и на выход путем записи в соответствующие разряды регистра TRISB (адрес 86h): лог. «1» при настройке выводов на вход и лог. «0» при настройке вывода на выход. Обозначения разрядов порта приведены в таблице 13 .

 

                                                                                                              Таблица 15.

Номера битов 7 6 5 4 3 2 1 0
Обозначения выводов RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

 

Отличительной особенностью порта В является наличие на всех выводах  

подтягивающих резисторов, которые могут быть подключены к выводам в случае необходимости путем записи лог. «1» в разряд – RBPU (7бит) регистра OPTION_ REG.  Подтягивающие резисторы автоматически отключаются, если  соответствующие выводы переводятся в режим выхода.

Примечание. PORTB также может работать в аналоговом и цифровом режиме, и для переключения порта в цифровой режим необходимо записать «0» в регистр специального назначения ANSELH.

 

PORTC представляет собой 8 – разрядный внешний порт на регистре специального назначения PORTC (адрес 7h). Как и порты А, В, порт С может быть настроен как на вход, так и на выход путем записи в соответствующие разряды регистра TRISC ( адрес 87h). Обозначения разрядов PORTC приведены в таблице 14 .

                                                                                                              Таблица 16.

Номера битов 7 6 5 4 3 2 1 0
Обозначения выводов RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0

Примечания:

1. В микроконтроллерах типа PIC16F874, PIC16F887 имеются также внешние порты PORTD и PORTE, которые могут быть настроены на вход или на выход с помощью записи в регистры TRISD и TRISE аналогично портам А , В, С.

2. Большинство выводов всех портов мультиплицированы с выходами различных функциональных блоков, о чем будет идти речь при рассмотрении конкретных функциональных блоков.

Использование и программирование портов можно рассмотреть на примере решения булева уравнения, описывающего фрагмент электроавтоматики станка.

 

Пример программирования работы фрагмента   электроавтоматики станка с ЧПУ.

 Рассмотрим пример устройства управления подсистемой обеспечения процесса резания смазочно-охлаждающей жидкостью (СОЖ) на станках с ЧПУ. Схема устройства состоит из силовой и логической части.

3х380 в 50 Гц       А           В         С         N
АВ
Кп
Кп
Кп
М
РТ
РТ

                                                                                                                  

 

Рис. 8. Принципиальная схема силовой части  блока управления подсистемой СОЖ.

На схеме:

АВ – автоматический выключатель,

М - приводной двигатель насоса подачи СОЖ,

Кп - контакты электромагнитного пускателя,

РТ - катушки теплового реле.

 

Работает схема следующим образом.

После включения автоматического выключателя АВ питающее напряжение – 3х380 в через замкнутые контакты пускателя Кп подается на асинхронный двигатель привода насоса М. Двигатель имеет два вида защиты: динамическую защиту за счет уставки автоматического выключателя АВ и тепловую защиту за счет теплового реле. Включение электромагнитного пускателя осуществляется логической схемой блока управления.

 

Кнс  Кнп
П1 Р1                   Р2 Кн1 Р3 РТ
Кп
Кп1
--Е

 

Рис. 9. Принципиальная схема логической части блока управления подсистемой СОЖ.

На схеме:

+Е, -Е - напряжение питания схемы,

 П1 - переключатель режимов работы блока: ручной / автоматический,

 Р1 - контакты пускового реле при автоматическом режиме работы,

 Р2 – контакты реле давления в системе СОЖ,

 Кн1 – концевой выключатель защитного кожуха станка,

 Р3 – контакты температурного реле СОЖ,

 РТ – контакты теплового реле,

Кнс – кнопка СТОП при ручном управлении,

Кнп – кнопка ПУСК при ручном управлении,

Кп1 – контакты электромагнитного пускателя,

Кп - катушка электромагнитного пускателя.

Работает схема следующим образом.

При автоматическом режиме работы (переключатель П1 в верхнем положении) замыкается контакт Р1 и ток через нормально замкнутый контакт Р2,при закрытом защитном кожухе (контакт Кн1 замкнут), нормально замкнутые контакты Р3 и РТ проходит через катушку пускателя Кп, вызывая его срабатывание и включение двигателя насоса СОЖ. Останавливается схема размыканием контакта Р1 сигналом из системы ЧПУ.

При ручном режиме (переключатель П1 в нижнем положении ) ток через нормально закрытый контакт кнопки Кнс и нажатой кнопке Кнп проходит на катушку пускателя по описанной выше схеме. После отпускания кнопки Кнп, ее контакты блокируются контактами пускателя Кп1. Останавливается схема нажатием кнопки Кнс.

 Алгоритм работы схемы в обоих режимах можно описать следующим булевым уравнением:

 

Кп = Р2 * Кн * Р3 * Рт * ( П1 * R1 + П1 * Кнс * Кнп + П1 * Кнс * Кп1 ) (1).

 

Для решения этого уравнения , т.е. управления подсистемой СОЖ разрабатываем устройство на основе микроконтроллера типа PIC16F873, так как количество сигналов, участвующих в управлении не более 13, кроме того повторяющиеся сигналы – П1- могут быть заменены одним сигналом. Принципиальная схема блока управления показана на рис.1.9.

 

02 03 04 05 06 07   21 22 23 24 25 26 27 28  
+5v R1 01
C1 C2 
Q1
09   10   20   19 08  
PIC16F873                           RA0 MCLR1             RA1                           RA2                           RA3                           RA4                                             RA5   OSC1                RB0                           RB1 OSC2                RB2                           RB3 Vdd                   RB4                           RB5  Vss                   RB6  Vss                   RB7    
Кc
Кп
+24v     R2 Кнп   R4 Кнс   R10 Кн1

 

 

Рис. 10. Принципиальная схема бока управления.

 

Работает схема следующим образом. Для работы микроконтроллера необходим автономный источник питания, выдающий напряжение постоянного тока +5в, подаваемый на входы Vdd и Vss микросхемы. На элементах Q1, C1, C2 собран генератор тактовых импульсов, а на элементах  R1, Кс – схема внешнего сброса микроконтроллера. Связь микроконтроллера с исполнительными элементами логической схемы осуществляется через порты  PORTA,  PORTB в соответствии с таблицей 15.

 

 Таблица 15. Распределение сигналов логической схемы по разрядам портов связи микроконтроллера.

Сигнал П1 Р2 Кн Р3 РТ R1 Кнс Кнп Кп Кн1
контакт RB1 RB2 RB3 RB4 RB5 RB6 RA1 RA4 RA0 RB7

 

После распределения сигналов уравнение (1) можно переписать в формате языка высокого уровня, например, на языке СИ:

 

RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3&&RB1&&RA1&&RA4) || (RB2&&RB3&&RB1&&RA1&&RA0).                                                (2)

 

Булево уравнения (2) представляет собой функцию управления фрагментом электроавтоматики. Для решения этого уравнения пишем программу его решения на языке высокого уровня – СИ.

Программа имеет следующий вид:

 

#define XTAL_FREQ 4MHZ       

 

#define byte       unsigned char

#define word       unsigned int

 

#include     <pic.h>

#include   <stdio.h>

__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);

 

void main() {

 

TRISA = 0x10;

TRISB= 0xFF;

 

for (; !RA0 ;) {                //цикл программы работы фрагмента

 

RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3 RB1&&RA1&&RA4)|| (RB2&&RB3&& RB1&&RA1&&RA0);                                                    

}

                     }      // конец main

 

 

Дата: 2019-04-23, просмотров: 259.