Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Микропроцессорное управление устройствами преобразования электрической энергии и передачи электротехнической информации. Учебное пособие
.pdf
которого записан в регистре FSR, необходимо обратиться к регистру INDF.
Для начинающих это звучит достаточно непонятно. Для пояснения работы регистров представлен рис. 3.11.
Рис. 3.11. Алгоритм косвенной адресации
41

4. МИКРОКОНТРОЛЛЕР СРЕДНЕГО УРОВНЯ PIC16F877
Основные характеристики
PIC16F877 I/P ― 8-разрядный микроконтроллер, выпускаемый фирмой
Microchip Technology.
PIC16F877 I/P представляет собой микросхему с 40 выводами (рис. 4.1), из
которых 32 предназначены для передачи информации от внешнего устройства
либо к внешнему устройству. Необходимые данные, переменные, результаты
несложных расчетов и счетчики циклов хранятся в ОЗУ и теряются при выключении питания. Чтобы избежать потери данных при этом, можно использовать 256 ячеек энергонезависимой памяти данных.
Основные характеристики PIC16F877 I/P:
1. Объем ПЗУ ― 8192 слова по 14 бит.
2. Объем ОЗУ ― 368 байт (РОН).
3. Объем энергонезависимой памяти данных ― 256 байт.
4. Рабочая частота ― от 0 до 20 МГц.
5. Минимальное время выполнения одной команды ― 200 нс.
6. Система команд содержит 35 простых команд (высокоскоростная RISC-
архитектура).
Рис. 4.1. Расположение выводов PIC16F877
42

Порт А ― 6 разрядов, Порт В ― 8, Порт С ― 8, Порт D ― 8, Порт Е ― 3.
Электрическое соединение выводов:
1. VDD подключается к источнику питания (+5В).
2. VSS подключается к общему проводу, имеющему нулевой потенциал.
3. MCLR используется для внешнего сброса, он подсоединен к +5 В,
внешний сброс не предусмотрен.
4. К OSC1, OSC2 подключается внешний кварц, задающий тактовую час-
тоту внутреннего тактового генератора. Для повышения стабильности работы
кварца, задающего тактовую частоту, служат конденсаторы C1, C2.
Структура оперативной памяти представлена на рис. 4.2.
Рис. 4.2. Четыре банка оперативной памяти
43

В PIC16F877 программа и данные хранятся в разных областях памяти и
имеют раздельные шины адреса для доступа к ним (гарвардская архитектура).
Все команды выполняются за один машинный цикл, исключая команды переходов, выполняющиеся за 2 цикла.
ОЗУ организовано в виде четырех страниц памяти (банков) по 128 адресов
в каждой. Первые 32 адреса 0-й и 1-й страниц, а также первые 16 адресов 2-й и
3-й страниц используются для обращения к регистрам специального назначения. Остальная часть адресного пространства закреплена за ячейками памяти
(регистрами общего назначения), предназначенными для хранения данных
программы.
4.1. ВСТРОЕННЫЙ АЦП
В составе PIC16F877 имеется встроенный АЦП (рис. 4.3).
Рис. 4.3. АЦП как встроенное устройство в МК:
Rs ― внутреннее сопротивление источника сигнала) не более 10 кОм
Для стабилизации напряжения на запоминающем конденсаторе требуется
для PIC процессоров примерно 20 мкс. Само время преобразования занимает
1,6…6,4 мкс на бит. То есть минимально все время преобразования равно для
10 разрядного кода примерно 30…40 мкс.
Модуль аналого-цифрового преобразования (АЦП) имеет восемь каналов у
40/44-выводных микросхем.
Источник верхнего и нижнего опорного напряжения может быть программно выбран с выводов VDD, VSS, RA2 или RA3.
44

Допускается работа модуля АЦП в SLEEP-режиме микроконтроллера, при
этом в качестве источника тактовых импульсов для АЦП должен быть выбран
RC генератор.
Для управления АЦП в микроконтроллере используется 4 регистра:
регистр результата ADRESH (старший байт);
регистр результата ADRESL (младший байт);
регистр управления ADCON0 (рис. 4.4);
регистр управления ADCON1 (рис. 4.4).
Рис. 4.4. Регистры управления АЦП
Регистр ADCON0 используется для настройки работы модуля АЦП, а с
помощью регистра ADCON1 устанавливается, какие входы микроконтроллера
будут использоваться модулем АЦП и в каком режиме (аналоговый вход или
цифровой порт ввода/вывода). В регистре ADRESH: ADRESL сохраняется
10-разрядный результат аналого-цифрового преобразования (рис. 4.5). Ко-
45

гда преобразование завершено, результат преобразования записывается в регистр ADRESH: ADRESL, после чего сбрасывается флаг GO/-DONE
(ADCON0<2>) и устанавливается флаг прерывания ADIF.
Для получения корректного результата преобразования необходимо выбрать источник тактового сигнала АЦП, обеспечивающий время TAD не менее
1,6 мкс. На 20 мГц работаем с частотой Fosc/32.
Рис. 4.5. Пояснения к процедуре выравнивания
Рекомендованная последовательность действий для работы с АЦП:
1. Настроить модуль АЦП:
настроить выводы как аналоговые входы или цифровые каналы вво-
да/вывода , а также правило выравнивания результата (ADCON1);
выбрать входной канал АЦП (ADCON0);
выбрать источник тактовых импульсов для АЦП (ADCON0).
2. Включить модуль АЦП (ADCON0). Бит 0 в 1.
3. Настроить прерывание от модуля АЦП (если необходимо).
4. Выдержать паузу, необходимую для зарядки конденсатора CHOLD.
5. Начать аналого-цифровое преобразование: установить бит GO/-DONE в
1 (ADCON0).
6. Ожидать окончания преобразования ― ожидать пока бит GO/-DONE не
будет сброшен в '0 или ожидать прерывание по окончанию преобразования
(Бит 6 в регистре PIR1 в 1).
7. Считать результат преобразования из регистров ADRESH: ADRESL,
сбросить бит ADIF в '0', если работаем в режиме прерываний .
8. Для следующего преобразования необходимо выполнить шаги начиная с
пункта 2.
Время преобразования одного бита определяется как время TAD. Мини-
мальное время ожидания перед следующим преобразованием должно составлять не менее 2TAD. Для 20 мГц / 32 это 3,2 мкс.
В режиме работы с прерыванием используются регистры PIR, PIE, IN-
TCON (рис. 4.6).
46

Рис. 4.6. Действия с битами регистров при работе АЦП в режиме прерываний
П ри ме ч ан ие :
1. Регистры ADCON1, TRISA и TRISE отвечают за настройку выводов
АЦП. Если выводы микросхемы настраиваются как аналоговые входы, то при
этом должны быть установлены соответствующие биты в регистрах TRIS.
2. Бит GO/-DONE и бит включения АЦП должны устанавливаться разными
командами.
Пример. Считывать аналоговую информацию без прерываний с вывода
RA0/AN0 (ножка 2 микросхемы), остальные выводы портов RA и RE — цифровые входы. Частота преобразования = Fosc/32.
Пример программы:
LIST p = 16F877A
#include p16f877a.inc
__CONFIG 0x03F72 ; конфиг. HS генератор 20 мГц
REGL equ 0x22
REGH equ 0x23
COUNT1 equ 0x21
org 0
goto Star
Start ; регистры TRISA TRISE по умолчанию настроены на ввод,
bsf STATUS,RP0
movlw b' 10001110'
movwf ADCON1
bcf STATUS,RP0
Loop_0
movlw b'1000 0001'
movwf ADCON0 ; Частота F/32, вход ― AN0,АЦП вкл., ожидание
MOVLW .33
MOVWF COUNT1
Loop_1
DECFSZ COUNT1,1 ; Ждем 20 мкс ( 1/20 × 4 × 3 × x = 20 x = 33)
GOTO Loop_1
47

bsf ADCON0, 2 ; Начать преобразование
Loop_2
btfsc ADCON0, 2 ; Ждем конца преобразования
GOTO Loop_2
bsf STATUS, RP0 ; Переходим в банк 1
movf ADRESL, 0 ; младшие разряды в аккумулятор
bcf STATUS, RP0 ; Переходим в банк 0
movwf REGL ; младшие разряды в REGL
movf ADRESH, 0 ; старшие разряды в аккумулятор
movwf REGH ; старшие разряды в REGH
; Ждем 2TAD = 1,6 × 2 мкс (или программно, или выполняем любые
действия)
GOTO Loop_0
END
Пример. Осуществлять контроль нахождения тока в коридоре «верхний
предел ― TOKW, нижний предел ― TOKN», измеряемая величина ― TOK
(рис. 4.7).
Рис. 4.7. Алгоритм допускового контроля
48

П ри ме ч ан ия :
T2CON
Х 0 0 0 0
0/1 1 1
CCP2CON
X
X
Длина
импульса,
мл, 1
Длина
импульса,
мл, 0
Режим ШИМ
1
1 1 1
CCPR2L
Старшие разряды длительности импульса
9 8 7
6 5 4 3 2
PR2
Код периода (0-7 биты)
1. Используем команду вычитания Subwf (F ― W) если С = 1, то результат
положительный, если С = 0, то ― отрицательный.
2. Используем команды условного перехода BTFSC или BTFSS.
4.2. CCP (ЗАХВАТ, СРАВНЕНИЕ, ШИМ)
В PIC16F877 есть два модуля ШИМ, будем пользоваться вторым. Им
управляют следующие регистры:
1. Регистр управления таймером TMR2 ― T2CON, где записывается ко-
эффициент деления таймера и бит включения:
2. Регистр включения режима ШИМ и записи двух младших разрядов для
10-битного времени длительности импульса CCP2CON.
3. Регистр записи старших разрядов длительности импульса CCPR2L:
4. Регистр записи периода PR2:
Период ШИМ = ( PR2 + 1) × 4 × Tosc × KделTMR2.
Длительность импульса = (ССPR2L + биты 4 и 5 ССP2CON) × Tosc ×
KделTMR2.
Максимальная длительность = 0,8 мс (при коде 11 1111 1111), Кдел = 16,
Tosc = 20 МГц.
Итак: (PR2 + 1) × 4 × T × K = 1024 × T × K. Отсюда PR2 = 1024/4 – 1 = 255.
Диапазон периода ШИМ ― 0,8 мс, 0,2 мс, 0,05 мс, то есть 1,25 кГц, 5 кГц ,
20 кГц.
49

5. PORTC на выход или, по крайней мере, бит RC1 на выход (pin16):
TRISC
X X X X X X 0
X
Рекомендуемая последовательность действий:
1) установить PR2;
2) TRISC на выход;
3) включить таймер с заданным коэффициентом деления;
4) установить длительность импульса;
5) включить режим ШИМ.
4.3. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ СИ
ДЛЯ МИКРОКОНТРОЛЛЕРОВ С ПОМОЩЬЮ СРЕДЫ
«MikroC PRO for PIC»
Синтаксис
Целочисленные типы данных (int). Всего их может быть шесть: short int,
unsigned short int, int, unsigned int, long int, unsigned long int. Все они имеют
свой собственный размер занимаемой памяти и диапазон принимаемых значений. В зависимости от компилятора, размер занимаемой памяти и диапазон
принимаемых значений могут изменяться.
Приставки целочисленных типов данных:
Short — приставка укорачивает тип данных;
Long — приставка удлиняет тип данных;
Unsigned (без знака) — приставка увеличивает диапазон положительных
значений в два раза, при этом диапазон отрицательных значений в таком типе
данных храниться не может.
Так что, по сути, мы имеем один целочисленный тип для представления
целых чисел — это тип данных int.
Благодаря приставкам short, long, unsigned появляется некоторое разнооб-
разие типов данных int, различающихся размером занимаемой памяти и (или)
диапазоном принимаемых значений.
Для компилятора mikroC PRO for PIC:
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
