Структурная схема микроконтроллера.




 

На рис.1.1 показаны структурные схемы микроконтроллеров PIC17F873 и PIC16F877.

 


Для связи с внешними устройствами микроконтроллер PIC16F873 имеет три порта PORTA, PORTB, PORTC (микроконтроллеры типа PIC16F877 дополнительно имеют PORTD и PORTE). Ядро микроконтроллера имеет в своем составе минимально необходимый набор элементов для реализации микро-ЭВМ и ряд законченных функциональных блоков для реализации элементов управления различными техническими устройствами.

К первой группе относятся:

- арифметико-логическое устройство – процессор – ALU,

- рабочий регистр W, играющий роль аккумулятора,

- порты связи с внешними устройствами (PORTA,....PORTE),

- регистр состояния процессора – STATUS,

- счетчик команд – PC,

- регистр косвенной адресации – FSR,

- 8-ми уровневый стек,

- память программ типа FLASH,

- память данных типа RAM,

- тактовый генератор импульсов,

- устройство сброса по включению питания – POR,

- устройство сброса по снижению питания – BOR,

- сторожевой таймер – WDT,

- таймер ожидания запуска тактового генератора,

- таймер сброса PWRT,

- устройство для внутрисхемной отладки программ – ICD,

- устройство низковольтного программирования – LVP.

 

Ко второй группе относятся:

- модуль 10-разрядного АЦП,

- модуль программируемого таймера TMR0,

- модуль программируемого таймера TMR1,

- модуль программируемого таймера TMR2,

- модуль электрически перепрограммируемого ПЗУ – EEPROM,

- многофункциональные модули CCP1 и CCP2,

- синхронный последовательный порт MSSP,

- универсальный асинхронно-синхронный порт USART.

В микроконтроллерах типа PIC16F877 имеется модуль параллельного порта.

Рассмотрим работу отдельных элементов и блоков микроконтроллера.

Блоки памяти.

Рис.1.3. Организация памяти программ в микроконтроллере PIC 16F873.

В рассматриваемом микроконтроллере есть два вида памяти трех типов. Первый вид – это память программ типа FLASH, объемом 4К четырнадцатиразрядных слов (в микроконтроллерах PIC16F876 – 8K). Организация памяти программ приведена на рис.1.3. Память предназначена для хранения программы работы микроконтроллера, управляется счетчиком команд – РС. В состав памяти входит восьмиуровневый аппаратный стек, недоступный для записи и чтения программистом, четыре вектора сброса (адреса 0000 -0003 h), и один вектор прерывания с адресом 0004h. Остальная область FLASH- памяти разделена на две (четыре для PIC16F876) страницы с адресами 0005h – 07FFh и 0800h – 0FFFh. Карта распределения памяти данных приведена на рис. 1.4. и 1.5.

Память данных разделена на четыре банка: банк 0, банк 1, банк 2, и банк 3. Первые два банка с адресами 00h – 7Fh и 80h – FFh представляют собой ОЗУ статического типа, т.е. при выключении питания информация разрушается. Вторые два банка с адресами 100h – 17Fh и 180h – 1FFh представляют собой ППЗУ типа EEPROM, поэтому после выключения питания информация сохраняется. Активизация (выбор) требуемого банка осуществляется установкой разрядов регистра специального назначения STATUS в соответствии с таблицей 1

 

Таблица 1.

Разряды: PR1:PR0 Банк
   
   
   
   

 

Ячейки всех банков памяти данных в верхней части адресов зарезервированы под регистры специального назначения, остальные ячейки представляют собой регистры общего назначения. Некоторые регистры специального назначения в зависимости от частоты использования могут отображаться в нескольких банках, например регистр STATUS отображается во всех четырех банках и т.п.

 
 

 


Рис.1.2. Назначение выводов микроконтроллеров PIC16F873, PIC16F876.

 

 
 

 


Рис.1.2. Назначение выводов микроконтроллеров PIC16F887.


  1. Регистры состояния и управления.

 

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

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

Таблица 2

Номера битов                
Обозначения сигналов 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    
Банк 1 адреса: 080h - 0FFh    
Банк 2 адреса: 100h - 17Fh    
Банк 3 адреса: 180h - 1FFh    

 

Регистр OPTION_REG предназначен для управления предварительным делителем импульсов сторожевого таймера или таймера TMR0. Распределение разрядов приведено в таблице 4.

Таблица 4

Номера битов                
Обозначения сигналов -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
  1:2 1:1
  1:4 1:2
  1:8 1:4
  1:16 1:8
  1:32 1:16
  1:64 1:32
  1:128 1:64
  1:256 1:128

 

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

Номера битов                
Обозначения сигналов 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

Номера битов                
Обозначения сигналов 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

Номера битов                
Обозначения сигналов - - - EEIE BCLIE _ - CCP1IE

 

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

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

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

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

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

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

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

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

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

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

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

Номера битов                
Обозначения сигналов 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

Номера битов                
Обозначения сигналов - - - EEIE BCLIE _ - CCP1IE

 

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

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

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

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

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

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

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

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

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

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

 

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

 

Таблица 11

Номера битов                
Обозначения сигналов - - - EEIF BCLIF _ - CCP1IF

 

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

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

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

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

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

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

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

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

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

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

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

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

 


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

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

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

Таблица 12

Номера битов                
Обозначения выводов - - RA5 RA4 RA3 RA2 RA1 RA0

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

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

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

 

Таблица 13.

Номера битов                
Обозначения выводов RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

 

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

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

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

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

Таблица 14.

Номера битов                
Обозначения выводов RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0

Примечания:

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

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

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-02-25 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: