Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Микроконтроллеры PIC фирмы Microchip для начинающих выпуск №6


РАССЫЛКА Микроконтроллеры PIC фирмы Microchip для начинающих
Ведущий: Алексей (pont_a@mail.ru)


Доброго времени суток, дамы и господа!!

Сегодня в  выпуске мы рассмотрим биты конфигурации микроконтроллеров серии PIC18, на примере микроконтроллера PIC18F452! Также,  я дам несколько примеров кодов на ассемблере с использованием различной адресации данных! Эти коды, возможно, Вам понадобятся для будущей собственной разработки электронных устройств!  

Что такое – биты конфигурации микроконтроллера? Это набор специальных битов, которые прошиваются программатором, вместе с программой. Они необходимы для конфигурирования микроконтроллера!

Набор битов конфигурации у разных типов микроконтроллеров PIC может различаться! Поэтому, обязательно, надо читать datasheet на микроконтроллер, который Вы выбрали для разработки своего устройства!   

Открываем datasheet на микроконтроллер PIC18F452.
Находим пункт 19.0 SPECIAL FEATURES OF THE CPU. В нем – подпункт 19.1 Configuration Bits. Как видим из таблицы TABLE 19-1, все конфигурационные биты, расположены в 11-ти байтах.

Адрес и имя регистра

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Значение по умолчанию

300001h

CONFIG1H

OSCSEN

FOSC2

FOSC1

FOSC0

--1- -111

300002h

CONFIG2L

BORV1

BORV0

BOREN

PWRTEN

---- 1111

300003h

CONFIG2H

WDTPS2

WDTPS1

WDTPS0

WDTEN

---- 1111

300005h

CONFIG3H

CCP2MX

---- ---1

300006h

CONFIG4L

DEBUG

LVP

STVREN

1--- -1-1

300008h

CONFIG5L

CP3

CP2

CP1

CP0

---- 1111

300009h

CONFIG5H

CPD

CPB

11-- ----

30000Ah

CONFIG6L

WRT3

WRT2

WRT1

WRT0

---- 1111

30000Bh

CONFIG6H

WRTD

WRTB

WRTC

111- ----

30000Ch

CONFIG7L

EBTR3

EBTR2

EBTR1

EBTR0

---- 1111

30000Dh

CONFIG7H

EBTRB

-1-- ----

Теперь, подробно рассмотрим каждый регистр в отдельности:

  1. CONFIGURATION REGISTER 1 HIGH (CONFIG1H: BYTE ADDRESS 300001h)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

OSCSEN – бит разрешения переключения на альтернативный источник системной частоты из программы микроконтроллера. Обычно, альтернативным источником выступает Таймер 1, на вход которого можно завести часовой кварц (32,768 кГц).  
0 – разрешено переключение частоты.
1 – запрещено переключение.

4

Биты не используются и всегда читаются, как 0

3

2

FOSC – биты выбора режима генератора системной частоты микроконтроллера. Доступно восемь различных режимов.

1

0

 Биты FOSC (FOSC2, FOSC1, FOSC0):

  • 000 LP(Low Power)-режим. Подключение низкочастотного кварца. До 200 кГц. Этот режим используется для разработки электронных устройств с низким энергопотреблением.
  • 001XT-режим. В этом режиме генератор может формировать системные частоты от 200кГц до 4 МГц, в зависимости от кварца. 
  • 010 HS(High Speed)-режим. Высокоскоростной режим. В этом режиме генератор может формировать системные частоты от 4 до 25 МГц, в зависимости от кварца.
  • 011 –  RC(External Resistor/Capacitor)-режим. Частота системного генератора задается внешней RC-цепочкой. Максимальная частота, формируемая генератором 4 МГц. Данный режим удобен тем, что не надо покупать кварц или микросхему, для формирования частоты. Но стабильность системной частоты будет намного ниже, потому что станут сказываться температурный дрейф (влияние температуры на параметры резистора и конденсатора) и скачки по напряжению. Цепочка подключается на  пин OSC1, а на пин OSC2 микроконтроллер выдает системную частоту/4. В этом режиме RA6(6-ой бит PORTA) не используется. Вместо него, подключен выход OSC2.   
  • 100 EC(External Clock)-режим. В этом режиме системная частота формируется внешним генератором и подается на вход OSC1. Частота может быть до 40МГц.  На пин OSC2 микроконтроллер выдает системную частоту/4. В этом режиме RA6(6-ой бит PORTA) не используется. Вместо него, подключен выход OSC2. Этот режим используется, если на плате есть еще микросхемы, для которых необходимо сформировать системную частоту.
  • 101 ECIO(External Clock)-режим. В этом режиме системная частота формируется внешним генератором и подается на вход OSC1. Частота может быть до 40МГц.  В этом режиме RA6 используется, как один из пинов ввода/вывода. OSC2 отключен.
  • 110 HS(HS oscillator with PLL enabled)-режим.  Этот режим аналогичен режиму HS, только входная частота умножается на 4. Например, кварц на входе формирует частоту 10МГц. А, реальная частота, которая пойдет на ядро – 40МГц.
  • 111 RCIO(External Resistor/Capacitor)-режим. Частота системного генератора задается внешней RC-цепочкой. В этом режиме RA6 используется, как один из пинов ввода/вывода. OSC2 отключен.

Если еще нужна информация по режимам, то читайте в datasheet пункт 2.0 OSCILLATOR CONFIGURATIONS.

На рисунке отображены примеры использования различных режимов генератора:

примеры использования режимов генератора системной частоты

  1. CONFIGURATION REGISTER 2 LOW (CONFIG2L: BYTE ADDRESS 300002h)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

BORV – порог срабатывания схемы сброса по просадке напряжения питания

2

1

BOREN – бит разрешения схемы сброса по просадке напряжения питания. Обязательно включайте эту схему! Это поможет избежать проблем, связанных со скачками напряжения. При которых, микроконтроллер может работать некорректно.
0 – схема отключена
1 – схема включена

0

PWRTEN – бит, разрешающий включать таймер при подаче на микроконтроллер питания. Т.е. этот таймер делает задержку, перед началом исполнения кода, на 72 мс, чтобы смог стабилизироваться  генератор системной частоты и напряжение питания.
0 – таймер включен
1 – выключен

Биты BORV (BORV1, BORV0):

  • 00 – Vbor = 4,5B. Если напряжение питания микроконтроллера станет меньше 4,5 Вольт, то схема BOR сбросит микроконтроллер.  
  • 01 – Vbor = 4,2B.
  • 10 – Vbor = 2,7B.
  • 11 – Vbor = 2,5B.
  1. CONFIGURATION REGISTER 2 HIGH (CONFIG2H: BYTE ADDRESS 300003h)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

WDTPS2:WDTPS0: конфигурация постскалера таймера Watchdog (период без постскалера = 18мс)
111 = 1:128  (программируемый период = 128*0,018=2,3сек)
110 = 1:64  (программируемый период = 64*0,018=1,152сек)
101 = 1:32   и т.д.
100 = 1:16
011 = 1:8
010 = 1:4
001 = 1:2
000 = 1:1  (программируемый период = 0,018сек. Постскалер отключен)

2

1

0

WDTEN – бит, разрешающий включать таймер Watchdog.  Этот таймер используют, чтобы избежать зависаний микроконтроллера. Сбрасывается он специальной командой: CLRWDT. Если эта команда не выполнится в течение запрограммированного периода, то таймер Watchdog сбросит микроконтроллер. Обязательно используйте этот таймер, особенно, когда только учитесь программировать!
1 – таймер включен
0 – выключен, но можно будет включить из программы.

  1. CONFIGURATION REGISTER 3 HIGH (CONFIG3H: BYTE ADDRESS 300005h)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

2

1

0

CCP2MX – этот бит мультиплексирует вход/выход второго устройства захвата/сравнения CCP2. Если CCP2 будет запрограммировано на использование внешнего входа или выхода, только тогда будет значимым этот бит.
1 – вход/выход CCP2 выведен на пин RC1 (1-ый бит PORTC).
0 – вход/выход CCP2 выведен на пин RB3.

  1. CONFIGURATION REGISTER 4 LOW (CONFIG4L: BYTE ADDRESS 300006h)

№ бита

Описание

7

DEBUG – этот бит разрешает или нет режим внутрисхемной отладки микроконтроллера. Т.е. отладки,  когда PIC уже припаян на плате.
0 – режим отладки разрешен. RB6 и RB7 используются для отладчика.
1 – режим отладки выключен. RB6 и RB7 используются, как пины ввода/вывода.

6

Биты не используются и всегда читаются, как 0

5

4

3

2

LVP – этот бит разрешает низковольтное программирование микроконтроллера
0 – запретить низковольтное программирование.
1 – разрешить низковольтное программирование.

1

Бит не используется и всегда читается, как 0

0

STVREN – этот бит разрешает или нет сброс микроконтроллера при переполнении стека или при потере значения в стеке, когда нужно прочитать из стека, а там ничего нет.  Этот бит лучше всегда устанавливайте!
1 – сбрасывать микроконтроллер в такой ситуации.
0 – не сбрасывать микроконтроллер.

Прежде, чем мы продолжим рассмотрение дальнейших битов конфигурации, я хочу рассказать, что память программ микроконтроллера PIC18F452 делится на следующие блоки:

    • Boot Block (0x000000-0x0001FF) – загрузочный блок;
    • Block0 (0x000200-0x001FFF) – блок 0;
    • Block1 (0x002000-0x003FFF) – блок 1;
    • Block2 (0x004000-0x005FFF) – блок 2;
    • Block3 (0x006000-0x007FFF) – блок 3;
  1. CONFIGURATION REGISTER 5 LOW (CONFIG5L: BYTE ADDRESS 300008h)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

CP3(Code Protection) – бит защиты кода, находящегося в блоке 3 памяти программ
0 – защита включена
1 – защита отключена  

2

CP2 – бит защиты кода, находящегося в блоке 2 памяти программ
0 – защита включена
1 – защита отключена

1

CP1 – бит защиты кода, находящегося в блоке 1 памяти программ
0 – защита включена
1 – защита отключена

0

CP0 – бит защиты кода, находящегося в блоке 0 памяти программ
0 – защита включена
1 – защита отключена

  1. CONFIGURATION REGISTER 5 HIGH (CONFIG5H: BYTE ADDRESS 300009h)

№ бита

Описание

7

CPD – бит защиты данных, хранящихся в энергонезависимой памяти данных (EEPROM). Это такая память данных, в которой, после отключения питания, данные не теряются.
0 – защита включена
1 – защита отключена

6

CPB – бит защиты кода, находящегося в загрузочном блоке памяти программ
0 – защита включена
1 – защита отключена

5

Биты не используются и всегда читаются, как 0

4

3

2

1

0

Под защитой понимается – дальнейшая невозможность прочтения данных и кода программы, какими либо внешними устройствами, т.е. программаторами. Эти биты включаются, чтобы избежать «пиратского» копирования написанной Вами программы или сохраненных данных из микроконтроллера.    

  1. CONFIGURATION REGISTER 6 LOW (CONFIG6L: BYTE ADDRESS 30000Ah)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

WRT3 – бит защиты от записи блока 3 памяти программ
0 – защита включена
1 – защита отключена  

2

WRT2 – бит защиты от записи блока 2 памяти программ
0 – защита включена
1 – защита отключена

1

WRT1 – бит защиты от записи блока 1 памяти программ
0 – защита включена
1 – защита отключена

0

WRT0 – бит защиты от записи блока 0 памяти программ
0 – защита включена
1 – защита отключена

  1. CONFIGURATION REGISTER 6 HIGH (CONFIG6H: BYTE ADDRESS 30000Bh)

№ бита

Описание

7

WRTD – бит защиты от записи данных, хранящихся в энергонезависимой памяти данных (EEPROM).
0 – защита включена
1 – защита отключена

6

WRTB – бит защиты от записи загрузочного блока памяти программ
0 – защита включена
1 – защита отключена

5

WRTC – бит защиты от записи битов конфигурации микроконтроллера
0 – защита включена
1 – защита отключена

4

Биты не используются и всегда читаются, как 0

3

2

1

0

Под защитой от записи подразумевается – невозможность записать командами ассемблера TBLWT* каких либо данных в защищенные блоки программной памяти или в EEPROM.

  1. CONFIGURATION REGISTER 7 LOW (CONFIG7L: BYTE ADDRESS 30000Сh)

№ бита

Описание

7

Биты не используются и всегда читаются, как 0

6

5

4

3

EBTR3 – бит защиты от чтения блока 3 памяти программ
0 – защита включена
1 – защита отключена  

2

EBTR2 – бит защиты от чтения блока 2 памяти программ
0 – защита включена
1 – защита отключена

1

EBTR1 – бит защиты от чтения блока 1 памяти программ
0 – защита включена
1 – защита отключена

0

EBTR0 – бит защиты от чтения блока 0 памяти программ
0 – защита включена
1 – защита отключена

  1. CONFIGURATION REGISTER 7 HIGH (CONFIG7H: BYTE ADDRESS 30000Dh)

№ бита

Описание

7

Бит не используется и всегда читается, как 0

6

EBTRB – бит защиты от чтения загрузочного блока памяти программ
0 – защита включена
1 – защита отключена

5

Биты не используются и всегда читаются, как 0

4

3

2

1

0

Под защитой от чтения подразумевается – невозможность чтения командами ассемблера TBLRD* памяти программ, расположенной в блоках, отличных от блока, где расположена команда чтения. Т.е. читать можно только в границах блока, если установлена эта защита. Например, если код функции чтения программной памяти расположен в блоке 1 и бит EBTR2=0 (установлена защита от чтения блока 2), а мы пытаемся прочитать этой функцией значение по адресу 0x004200 (блок 2), то прочитанные данные в регистре TABLAT будут недостоверны.

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

;схема сброса по провалу напряжения питания включена и порог равен 2,5 Вольта
CONFIG     BOR=ON, BORV=25
;Watchdog таймер включен и постскалер у него равен 128. 
CONFIG     WDT=ON, WDTPS=128
Полное описание параметров этой директивы расположено в папке, куда установлена Mplab. В папке: \Microchip\MPASM Suite\ лежат файлы на каждый тип микроконтроллера с расширением INC.  В них и описаны параметры этой директивы. Для нашего микроконтроллера файл будет называться P18F452.INC.

Теперь к примерам:
Объявим несколько переменных и констант.
tempa  equ 0x00     ; переменная tempa расположена в access bank по адресу 0x00
tempb equ  0x80    ; переменная tempb расположена не в access  bank, все зависит от значения BSR 
count equ 0x01      ; переменная count расположена в access bank по адресу 0x01
ab equ 0          ; признак, что переменная находиться в access bank                  
bb equ 1          ; признак, что адрес необходимо считать с использованием регистра BSR
rw equ ab        ; rw=0. Результат размещается в регистр-аккумулятор WREG
rf equ bb         ; rf=1.  Результат размещается в регистр FREG

Пример работы с косвенной адресацией:
Этот код записывает в банк 3 значения по возрастанию: от 0 до 255, а в банк 2 по убыванию: от 255 до 0.
LFSR 0, 0x200          ; в FSR0 заносим адрес первой ячейки памяти данных банка 2           
LFSR 1, 0x3FF         ; в FSR1 заносим адрес последней ячейки памяти данных банка 3     
SETF  count, ab         ; count=255, адрес count вычисляется без регистра BSR
Loop_met:                             ; метка (адрес) перехода. 
MOVFF  count, INDF0        ; значение count заносится в ячейку по адресу, записанному в FSR0
MOVFF  POSTINC0, POSTDEC1 ; из ячейки с адресом FSR0 переписывается значение в ячейку по адресу FSR1. Затем: FSR1=FSR1-1, FSR0=FSR0+1
DECFSZ count, rf, ab ; если count=0, то пропускаем следующую команду 
BRA Loop_met   ;  если count не 0, то переходим на метку

Примеры работы с прямой адресацией:

MOVLW  0x33                     ; WREG=0x33
MOVWF  tempa, ab             ; tempa=WREG, переменная tempa – расположена в access bank

MOVLW  0x33                     ; WREG=0x33
MOVWF  tempb, bb             ; запись неверна, т.к. в регистре BSR неизвестно, что записано. Поэтому, запись пройдет в неизвестную  ячейку памяти данных

MOVLW  0x33                     ; WREG=0x33
MOVLB   0                            ; BSR=0;        
MOVWF  tempb, bb             ; запись верна, значение WREG запишется в ячейку памяти данных с адресом 0x080

MOVLW  0x33                     ; WREG=0x33
MOVLB   5                           ; BSR=5;        
MOVWF  tempb, bb             ; запись верна, значение WREG запишется в ячейку памяти данных с адресом 0x580

На сегодня мы закончим! Следующий выпуск будет посвящен только примерам кодов на ассемблере! А после Нового года, начнем учиться создавать проект в Mplab.
 
Полный архив рассылки Вы можете прочитать на нашем сайте!

Желаю Вам удачи! До скорой встречи!


С уважением, Алексей pont_a@mail.ru
Cайт разработчиков 2AplusA http://2aplusa.ru


В избранное