close

Вход

Забыли?

вход по аккаунту

?

Malakhanov 0D5C4FA19F

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное
образовательное учреждение высшего образования
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
МОДУЛЬ ТАЙМЕРА 0
МИКРОКОНТРОЛЛЕРОВ MICROCHIP
СЕРИИ PIC18
Методические указания
к выполнению лабораторной работы
Санкт-Петербург
2017
Составители: кандидат технических наук, доцент Р. Н. Малаханов;
К.М. Романов
Рецензент – кандидат технических наук, доцент В. К. Пономарёв
Знакомят с устройством интегрированного модуля таймера 0 микроконтроллеров фирмы Microchip серии PIC18 и принципами его
программного управления.
Содержат описание лабораторной работы по дисциплинам «Дискретные информационно-измерительные системы», «Цифровые вычислительные устройства и микропроцессоры» и «Микропроцессорная техника в приборах, системах и комплексах».
Предназначены для студентов всех форм обучения по направлению 12.03.01 «Приборостроение» специальности «Авиационные приборы и измерительно-вычислительные комплексы».
Подготовлены кафедрой аэрокосмических измерительно-вычислительных комплексов и рекомендованы к изданию редакционно-издательским советом Санкт-Петербургского государственного университета аэрокосмического приборостроения.
Публикуется в авторской редакции.
Компьютерная верстка Н. Н. Караваевой
Сдано в набор 16.10.17. Подписано к печати 16.11.17. Формат 60 × 84 1/16.
Усл. печ. л. 1,57. Тираж 50 экз. Заказ № 480.
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
© Санкт-Петербургский государственный
университет аэрокосмического
приборостроения, 2017
ЛАБОРАТОРНАЯ РАБОТА
1. Методические указания
Цель работы заключается в ознакомлении со структурой интегрированного модуля Таймера 0 микроконтроллера (МК) фирмы
Microchip серии PIC18 и принципами его программного управления.
В дальнейшем для краткости интегрированный модуль Таймера
0 будем называть просто Таймер 0.
По своему функциональному устройству и программному управлению модули Таймеров 0 микроконтроллеров серии PIC18 выполнены одинаково для всех семейств [1-3].
Основные термины и определения
Цифровой счётчик (англ. Counter) – это последовательное устройство, предназначенное для счета входных импульсов и хранения их
числа в двоичном коде. Импульсы, поступающие на вход счётчика
для их последующего подсчёта, называются счётными импульсами.
В цифровых схемах счетчики могут выполнять следующие операции:
– предварительная установка числа в двоичном коде;
– хранение числа посчитанных импульсов в двоичном коде;
– запись нового числа в двоичном коде;
– чтение хранящегося числа в двоичном коде;
– инкремент (увеличение на единицу) или декремент (уменьшение на единицу) хранящегося числа в двоичном коде при поступлении на вход счётчика очередного импульса.
Основным параметром счётчика является модуль счёта. Модуль
счёта – это максимальное число импульсов, после прихода которых
счётчик устанавливается в исходное состояние. Каждый импульс,
кратный модулю счёта, снова устанавливает счётчик в исходное
3
состояние. Если N является модулем счёта счётчика, то количество
счётных импульсов, которое он может посчитать, равно N – 1.
Сигналом переполнения (англ. Overflow) счётчика называется
сигнал или импульс, который генерирует счётчик после прихода на
его вход счётного импульса с номером N. Сигнал переполнения счётчика также называют сигналом окончания счёта.
По значению модуля счёта счетчики подразделяются на [4]:
– двоичные, модуль счета которых равен целой степени числа два;
– двоично-кодированные, в которых модуль счёта может принимать любое значение.
По направлению счета счетчики подразделяют на простые и реверсивные. Простые счётчики, в свою очередь, подразделяются на:
– суммирующие, выполняющие операцию инкремента хранящегося числа при поступлении очередного счётного импульса на вход
счётчика;
– вычитающие, выполняющие операцию декремента хранящегося числа при поступлении очередного счётного импульса на вход
счётчика.
Реверсивные счётчики могут работать как суммирующие, так и
как вычитающие. Режим работы счётчика определяется управляющим сигналом.
Цифровой таймер (англ. Timer) – это устройство, которое по истечении заданного промежутка времени генерирует электрический
импульс. Этот импульс ещё называют тиком (англ. Tick) таймера.
Время срабатывания таймера – это длительность временного интервала между двумя электрическими импульсами таймера (его тиками). Время срабатывания таймера ещё называют периодом или
интервалом срабатывания таймера. В микропроцессорной технике
таймеры строятся, как правило, на основе счётчиков и сигнал переполнения счётчика является тиком таймера.
Для увеличения модуля счёта и времени срабатывания таймера используются схемы последовательного соединения счётчиков.
В этом случае выходной сигнал переполнения первого счётчика подаётся на счётный вход второго счётчика. Рассмотрим пример последовательного подключения двух счётчиков с модулями счёта
N = 4. На вход первого счётчика поступает импульсный сигнал S1
(рис. 1). Сверху над каждым импульсом приведён его порядковый
номер. По оси абсцисс под каждым импульсом указано значение
первого счётчика после прихода на его вход этого импульса. Счётчик может посчитать N – 1 = 3 импульсов. После прихода импульса,
кратного модулю счёта N = 4, счётчик переполняется (его значение
4
5
Рис. 1. Диаграммы работы схемы последовательного соединения счётчиков
устанавливается равным нулю) и генерирует импульс переполнения. Импульсы переполнения первого счётчика образуют сигнал S2,
который поступает на вход второго счётчика. По оси абсцисс под
каждым импульсом сигнала S2 указано значение второго счётчика
после прихода на его вход этого импульса. После прихода импульса,
кратного модулю счёта, второй счётчик переполняется и генерирует
импульс переполнения и из таких импульсов формируется сигнал S3.
Из сравнения сигналов S1 и S2 следует, что счётчик производит деление частоты входного сигнала в N раз (в данном случае в четыре
раза). Из сравнения сигналов S1 и S3 следует, что схема из двух последовательно соединённых счётчиков производит деление частоты входного сигнала на число, равное произведению модулей счёта счётчиков (в данном случае N ⋅ N = 16). Если таймер строится на
основе одного (первого) счётчика, то сигнал S2 является выходным
сигналом таймера; период следования импульсов сигнала S2 представляет собой время срабатывания таймера. Если таймер строится
на основе двух последовательно соединённых счётчиков, то сигнал
S3 представляет собой выходной сигнал таймера и его время срабатывания будет N⋅ N ⋅ ТИ = 16ТИ, где ТИ – период следования импульсов сигнала S1.
Модуль Таймера 0
Таймер 0 предназначен для выполнения следующих функций:
– счёта количества импульсов, поступивших на его вход;
– формирования временных интервалов с различной длительностью.
Функциональные схемы Таймера 0 приведены на рис. 2. В состав
Таймера 0 входят следующие элементы:
– схема «исключающего ИЛИ»;
– мультиплексор для выбора источника входного сигнала;
– программируемый предделитель;
– мультиплексор для подключения программируемого предделителя;
– схема синхронизации с внутренним тактовым сигналом;
– 16-разрядный счётчик TMR0, в состав которого входит 8-разрядный счётчик TMR0L;
– 8-разрядный регистр TMR0H;
– два буфера для записи и чтения.
Для программного управления Таймером 0 предназначен регистр T0CON (Timer 0 Control), формат которого приведён на рис. 3.
6
7
T0CKI pin
T0CKI pin
PSA
T0PS2:T0PS0
T0CS
T0SE
FOSC/4
PSA
T0PS2:T0PS0
T0CS
T0SE
FOSC/4
1
0
1
0
3
Programmable
Prescaler
3
1
0
Programmable
Prescaler
1
0
(2 TCY Delay)
Sync with
Internal
Clocks
(2 TCY Delay)
Sync with
Internal
Clocks
8
TMR0L
8
8
8
TMR0H
8
TMR0
High Byte
8
TMR0L
8
Internal Data Bus
Write TMR0L
Read TMR0L
Set
TMR0IF
on Overflow
Internal Data Bus
Set
TMR0IF
on Overflow
Рис. 2. Функциональные схемы Таймера 0: а – в 8-разрядном режиме; б – в 16-разрядном режиме.
Internal Data Bus – внутренняя шина данных. T0CKI pin – вывод RA4/T0CKI/C1OUT (шестой вывод МК)
б)
а)
Рис. 3. Формат регистра T0CON
Для включения Таймера 0 (подачи на него электрического питания) следует установить седьмой бит TMR0ON в регистре T0CON.
Если Таймер 0 не используется, то его можно выключить для уменьшения потребляемой мощности посредством сброса бита TMR0ON.
Таймер 0 содержит суммирующий 16-разрядный счётчик TMR0,
который в свою очередь состоит из двух последовательно соединённых 8-разрядных суммирующих счётчиков TMR0L (TMR0 Low)
и «TMR0 High Byte» (рис. 2, б). Сигнал переполнения счётчика
TMR0L поступает на вход счётчика «TMR0 High Byte». Этот режим работы называется 16-разрядным режимом работы Таймера 0
[1–3]. Из двух счётчиков может использоваться только TMR0L
(рис. 2, а), тогда этот режим работы называется 8-разрядным режимом работы Таймера 0. Выбор режима работы определяется шестым
битом T08BIT регистра T0CON: при установке бита Таймер 0 рабо8
тает в 8-разрядном режиме, а при его сбросе – в 16-разрядном. Регистр TMR0L является доступным для операций записи и чтения,
а регистр «TMR0 High Byte» – недоступным для операций записи
и чтения.
Регистр TMR0H (TMR0 High) представляет собой регистр, который через буферы записи и чтения подключён к счётчику «TMR0
High Byte». Такая схема позволяет избежать ошибок при поочерёдном считывании младшего (TMR0L) и старшего байтов счётчика
TMR0 в 16-разрядном режиме работы Таймера 0.
Рассмотрим пример неправильного считывания значения счётчика TMR0 при поочерёдном считывании младшего и старшего
байтов при отсутствии регистра TMR0Н. Пусть изначально значение счётчика TMR0 равно 03FFh (TMR0L = FFh). При чтении
старшего байта будет считано значение 03h. За время считывания
старшего байта на вход счётчика TMR0 поступит очередной счётный импульс и его значение станет 0400h. После этого будет произведено чтение младшего байта TMR0L и получено значение 00h.
Объединив оба считанных байта получим значение 0300h, хотя на
самом деле значение счётчика TMR0 равно 0400h. Если изменить
последовательность считывания байтов: сначала младший, а затем старший, то результат чтения всё равно будет неправильным:
будет считано значение 04FFh. При последовательной записи младшего и старшего байтов в счётчик TMR0 результат также будет неправильным. Для исключения ошибок следует производить чтение
или запись младшего (TMR0L) и старшего байтов счётчика TMR0
одновременно. Для этого и предназначен регистр TMR0Н. При программном чтении значения счётчика TMR0L одновременно производится считывание старшего байта «TMR0 High Byte» счётчика
TMR0 и его значение записывается в регистр TMR0Н. При записи
16-разрядного значения в счётчик TMR0 следует предварительно
записать его старший байт в регистр TMR0Н, а затем программно
записать младший байт в регистр TMR0L. Одновременно с записью
значения младшего байта в счётчик TMR0L произойдёт и запись
значения старшего байта счётчика TMR0 из регистра TMR0Н.
Входным сигналом Таймера 0 может быть внешний сигнал, поступающий на вход микроконтроллера RA4/T0CKI/C1OUT, или
внутренний сигнал с частотой Fosc/4, поступающий от встроенного модуля генератора тактовых импульсов (ГТИ) микроконтроллера. Выбор источника входного сигнала определяется пятым битом T0CS (Timer 0 Clock Source Select – выбор источника тактовых
импульсов Таймера 0) регистра T0CON. При установке бита T0CS
9
Таймер 0 подсчитывает количество импульсов, поступающих на
вход RA4/T0CKI/C1OUT микроконтроллера. Обозначение в названии вывода T0CKI является сокращением от англ. Timer 0 Clock
Input. В дальнейшем для сокращения названия вывода вместо его
полного названия RA4/T0CKI/C1OUT будет использоваться только
его часть T0CKI. При сбросе бита T0CS на вход Таймера 0 поступают
тактовые импульсы с частотой Fosc/4 от модуля ГТИ микроконтроллера. Сигнал T0CS является управляющим сигналом для первого
мультиплексора модуля Таймера 0 (рис. 2). К внешнему сигналу,
поступающему на вход T0CKI, предъявляются следующие требования: для правильной работы Таймера 0 должна быть возможность
осуществления его синхронизации с сигналом с частотой Fosc. Синхронизация производится схемой синхронизации, обозначенной на
рис. 2 как «Sync with Internal Clock». Схема синхронизации приводит к задержке, которая составляет два командных цикла Tcy
(Tcy = 4/Fosc).
Если в качестве источника входного сигнала Таймера 0 выбран
вывод микроконтроллера T0CKI (бит T0CS установлен), то инкремент суммирующего счётчика TMR0 может происходить как по
фронту, так и по срезу счётных импульсов, поступающих на вход
T0CKI. Если четвёртый бит T0SE (Timer 0 Source Edge Select – выбор
вида активного изменения уровня для Таймера 0) регистра T0CON
установлен, то инкремент будет производится по срезу импульсов,
иначе – по фронту. Сигнал T0SE является входом схемы «исключающего ИЛИ» (рис. 2), которая и предназначена для выбора активного изменения уровня входного сигнала. Если в качестве входного
сигнала Таймера 0 выбран внутренний сигнал с выхода модуля ГТИ
(бит T0CS сброшен), то бит T0SE не влияет на работу Таймера 0.
Программируемый предделитель, обозначенный на рис. 2 как
«Programmable Prescaler», представляет собой 8-разрядный суммирующий счётчик и предназначен для деления частоты входного сигнала Таймера 0. Сигнал PSA (Prescaler Assignment – присоединение предделителя) управляет мультиплексором для подключения
предделителя. Если в делении частоты нет необходимости, то следует отключить предделитель посредством установки третьего бита
PSA в регистре T0CON. Тогда модуль счёта Таймера 0 будет равен 28,
если Таймер 0 работает в 8-разрядном режиме, и 216, если Таймер 0
работает в 16-разрядном режиме. Для деления частоты следует
сбросить бит PSA. Тогда предделитель будет производить деление
частоты входного сигнала и импульсы переполнения предделителя через схему синхронизации будут поступать на счётный вход
10
счётчика TMR0. Коэффициенты деления частоты входного сигнала
предделителя определяются программно битами T0PS2:T0PS0 регистра T0CON и приведены на рис. 3. Например, для деления частоты входного сигнала на восемь следует в этих битах установить значение 0102 и тогда модуль счёта предделителя M будет равен M = 23.
Если Таймер 0 работает в 8-разрядном режиме, то его модуль счёта
будет равен M ⋅ 28 = 23 ⋅ 28 = 211; если Таймер 0 работает в 16-разрядном режиме, то соответственно M ⋅ 216 = 23 ⋅ 216 = 219. Таким образом,
предделитель позволяет увеличить модуль счёта и интервал срабатывания Таймера 0. Максимальное значение модуля счёта Таймера
0 составляет 28 ⋅ 216 = 224 (модуль счёта предделителя M = 28; Таймер
0 работает в 16-разрядном режиме).
Значение предделителя недоступно для записи и чтения. Если
предделитель подключён, то запись любого значения в счётчик
TMR0 приводит к сбросу предделителя, но коэффициент деления
предделителя при этом не изменяется.
Флаг прерывания TMR0IF (Timer 0 Interrupt Flag) устанавливается в регистре INTCON при переполнении счётчика TMR0.
В 8-разрядном режиме это будет происходить после прихода на
вход счётчика TMR0 каждого 256 счётного импульса (переход от
значения счётчика TMR0L = FFh = 255 к 00h), а в 16-разрядном режиме – после прихода каждого 65536 счётного импульса (переход
от значения FFFFh = 65535 к 0000h). Флаг TMR0IF должен сбрасываться программно. Если прерывания от Таймера 0 разрешены, то
будет произведён переход на подпрограмму обработки прерывания
(ПОП). Разрешение или запрещение прерывания производится соответственно установкой или сбросом пятого бита TMR0IE (Timer 0
Interrupt Enable) в регистре INTCON. Приоритет прерывания устанавливается вторым битом TMR0IР (Timer 0 Interrupt Priority) в регистре INTCON2.
Производитель МК указывает, что Таймер 0 может работать
в двух режимах: счётчика и таймера [1-3]. Выбор режима определяется битом T0CON<T0CS>. В режиме счётчика Таймер 0 производит подсчёт импульсов на входе T0CKI микроконтроллера,
а в режиме таймера на его вход подаются импульсы от встроенного
модуля ГТИ с частотой Fosc/4. Но фактически Таймер 0 одновременно работает как счётчик и как таймер: он считает входные импульсы как счётчик и в случае переполнения последнего выдает сигнал
переполнения, который фиксируется посредством установки бита
INTCON<TMR0IF>, и этот сигнал одновременно является сигналом срабатывания (тиком) таймера.
11
Расчёт периода срабатывания Таймера 0
Без подключения предделителя инкремент счётчика TMR0 происходит после прихода на его вход счётного импульса с периодом
Т = 1/F,
(1)
если используется внешний сигнал с частотой следования импульсов F на входе T0CKI микроконтроллера (бит T0CON<T0CS> установлен), и
Т = 4/Fosc, (2)
если входным сигналом Таймера 0 является сигнал модуля ГТИ
(бит T0CON<T0CS> сброшен).
В 8-разрядном режиме работы Таймера 0 переполнение счётчика TMR0L произойдёт после поступления на его вход 28 импульсов
с периодом следования Т = 1/F, значит время τ между импульсами
переполнения будет τ = 28Т. В 16-разрядном режиме работы время
между импульсами переполнения составит τ = 216Т.
Если предделитель подключён, то он производит деление частоты F входного сигнала в М раз и период следования импульсов с выхода предделителя увеличивается до Т = М/F. В 8-разрядном режиме
работы Таймера 0 инкремент счётчика TMR0L будет происходить
после прихода на его вход каждого счётного импульса с периодом
Т = М/F с выхода предделителя и время между импульсами переполнения составит τ = 28Т = 28M/F. В 16-разрядном режиме работы
Таймера 0 импульсы переполнения счётчика TMR0L поступают на
вход счётчика «TMR0 High Byte» и являются счётными импульсами для него. Счётчик «TMR0 High Byte» переполнится после поступления на его вход 28 импульсов переполнения счётчика TMR0L.
В итоге счётчик TMR0 может посчитать 216 импульсов с периодом
следования Т = М/F. Время между импульсами переполнения счётчика TMR0 составит τ = 216Т = 216M/F.
Общая формула для периода срабатывания Таймера 0 определяется выражением
τ = NM/F = 2mM/F = 2m/Fk = 2mMT,
(3)
где N = 2m – модуль счёта счётчика TMR0; m = 8 для 8-разрядного
и m = 16 для 16-разрядного режимов работы Таймера 0; k = 1/М –
коэффициент деления предделителя; F – частота входного сигнала
Таймера 0. Если предделитель не используется, то в формуле (3) следует принять М = 1.
12
Пример 1. Пусть Fosc = 5 МГц и на вход Таймера 0 поступают импульсы от модуля ГТИ, тогда период срабатывания Таймера 0 без
использования предделителя (M = 1) в соответствии с (2) и (3) в 8-разрядном режиме (m = 8) будет равен
=
τ 28=
T 28
4
= 28
FOSC
4
= 0,2 ìñ,
5 ⋅ 106
а в 16-разрядном режиме (m = 16)
4
4
=
τ 216
=
T 216 = 216 =
52,4 ìñ.
FOSC
5 ⋅ 106
Пример 2. Пусть на вход Таймера 0 подаётся импульсный сигнал
с вывода микроконтроллера T0CKI с частотой F = 2,5 МГц, тогда период срабатывания Таймера 0 в 8-разрядном режиме в соответствии
с (1) и (3) будет равен
τ = 28Т = 28/F = 28/(2,5 ⋅ 106) = 0,1 мс,
а в 16-разрядном режиме
τ = 216Т = 216/F = 216/(2,5 ⋅ 106) = 26,2 мс.
Пример 3. Пусть Fosc = 5 МГц, коэффициент деления предделителя k = 1/M = 1/8 (на рис. 3 обозначен как «010 = 1:8») и на вход
Таймера 0 поступают импульсы от модуля ГТИ, тогда период срабатывания Таймера 0 в соответствии с (2) и (3) в 8-разрядном режиме
будет равен
4
=
τ 28 MT= 28 ⋅ 8
= 1,64 ìñ,
5 ⋅ 106
а в 16-разрядном режиме
T 216 ⋅ 8
=
τ 216 M=
4
= 0,42 ñ.
5 ⋅ 106
Пример 4. Пусть на вход Таймера 0 подаётся импульсный сигнал
с вывода микроконтроллера T0CKI с частотой F = 2,5 МГц, тогда период срабатывания Таймера 0 в 8-разрядном режиме в соответствии
с (1) и (3) будет равен
τ = 28МТ = 28 ⋅ 8/2,5 ⋅ 106 = 0,82 мс,
а в 16-разрядном режиме
τ = 216МТ = 216 ⋅ 8/2,5 ⋅ 106 = 0,21 с.
13
Если полученное по формуле (3) значение периода срабатывания Таймера 0 не удовлетворяет предъявляемым требованиям, то
применяется следующий способ получения необходимого периода
срабатывания: после каждого срабатывания Таймера 0 в счётчик
TMR0 программно записывается число K и тогда прерывание Таймера 0 произойдёт после прихода N-K счётных импульсов. Период
срабатывания Таймера 0 будет равен τ = (N – K)МТ.
Значение К рассчитывается по формуле
 12

− τ

=
K 2m + INT  Fosc
,  MT 
(4)
где
τ – необходимый период срабатывания Таймера 0; функция
INT[ ⋅ ] возвращает целую часть аргумента, например, INT[3,78] = 4;
m = 8 для 8-разрядного и m = 16 для 16-разрядного режимов работы
Таймера 0. Если предделитель не используется, то при расчётах следует принять М = 1.
Если τ >> 12/Fosc, то слагаемое 12/Fosc при расчётах можно не
учитывать и формула (4) упростится:
 τ 
K = 2m − INT 
.  MT 
(5)
В 8-разрядном режиме работы наибольшее значение периода срабатывания Таймера 0 при установленном наибольшем модуле предделителя M = 28 рассчитывается по формуле
τmax = 216T.
(6)
Если τ ≤ τmax, то можно использовать 8-разрядный режим работы
Таймера 0 и устанавливать параметр m в соответствии с условием
 8, τ ≤ τmax
m=
.
16, τ > τmax
(7)
Периоды срабатывания τ ≤ τmax могут быть получены как в 8-разрадном, так и в 16-разрядном режимах работы Таймера 0; периоды
срабатывания τ > τmax могут быть получены только в 16-разрядном
режиме.
Модуль счёта предделителя рассчитывается по формуле
M=
14
τ
,
2 T m
(8)
и далее округляется в большую сторону до ближайшего доступного
целого значения модуля счёта предделителя, приведённого в битах
T0PS<2:0> на рис. 3.
Методическая погрешность формирования временного интервала Таймером 0 определяется выражением
δ = MT/2.
(9)
Пример 5. Необходимо настроить Таймер 0 таким образом, чтобы период его срабатывания был τ = 110,3 мкс. Частота тактирования МК Fosc = 20 МГц. Входным сигналом Таймера 0 является сигнал с частотой Fosc/4.
По формуле (2) находим период следования импульсов входного
сигнала
Т = 4/20 ⋅ 106 = 0,2 ⋅ 10-6 с.
Наибольшее значение периода срабатывания Таймера 0 в 8-разрядном режиме работы в соответствии с (6)
τmax = 216 ⋅ 0,2 ⋅ 10–6 = 13,1 мс.
Вследствие того, что τ < τmax, то Таймер 0 может работать в 8-разрядном режиме и в соответствии с (7) устанавливаем параметр m = 8.
Модуль счёта предделителя в соответствии с (8)
=
M
110,3 ⋅ 10−6
= 2,15.
28 ⋅ 0,2 ⋅ 10−6
Округляем полученное значение в большую сторону до ближайшего доступного целого значения модуля счёта предделителя М = 4.
В соответствие с (4) рассчитываем значение K
 12

− 110,3 ⋅ 10−6 

6
8
=
− INT [137,13] 119.
K 28 + INT  20 ⋅ 10=
 2=
4 ⋅ 0,2 ⋅ 10−6




Программы, которые производят генерацию меандра с длительностью τ = 110,3 мкс на выводе RD0 порта D, приведены в:
листинге 1 – на языке программирования Си;
листинге 2 – на языке программирования ассемблер.
В обеих программах основной рабочий цикл является пустым и
генерация меандра производится в ПОП с высоким приоритетом.
15
После переполнения счётчика TMR0L происходит переход на ПОП
и пока происходит её выполнение, счётчик TMR0L продолжает считать импульсы, т.е. МК и Таймер 0 работают параллельно во времени. За время выполнения ПОП счётчик TMR0L посчитает определённое количество импульсов, которое соответствует длительности выполнения ПОП, поэтому для учёта этого времени следует
сложить значение счётчика TMR0L с рассчитанным числом K, что
и производится в ПОП.
Листинг 1
#include <p18f4520.h>
#pragma conаfiig OSC=EC, WDT=OFF, LVP=OFF
void InterruptHandlerHigh(void);
void main (void)
{
TRISD=0; // Настройка порта D на выход
LATD=0;
// Включение приоритетной системы прерываний
RCONbits.IPEN=1;
// Запрет прерываний с высоким приоритетом
INTCONbits.GIEH=0;
// Настройка Таймера 0
INTCONbits.TMR0IF=0; // Сброс флага прерывания
// Разрешение прерываний от Таймера 0
INTCONbits.TMR0IE=1;
// Присвоение прерыванию от Таймера 0 высокого
// приоритета
INTCON2bits.TMR0IP=1;
TMR0L=119;
// Поразрядная настройка Таймера 0
T0CONbits.T08BIT=1; // 8-разрядный режим работы
// На вход Таймера 0 подаётся импульсный сигнал с
// выхода внутреннего ГТИ
T0CONbits.T0CS=0;
T0CONbits.PSA=0; // Подключение предделителя
// Задание коэффициента деления 1:4
T0CONbits.T0PS2=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS0=1;
T0CONbits.TMR0ON=1;//Включение и запуск Таймера 0
// Вместо настройки по разрядам можно сразу
// произвести конфигурацию Таймера 0 посредством
// записи байта конфигурации в регистр T0CON
16
T0CON=0b11010001; // или T0CON=0xD1;
// Разрешение прерываний с высоким приоритетом
INTCONbits.GIEH=1;
while (1)
{
}
}
#pragma code HighVector=8
void HighISR(void)
{
_ asm goto InterruptHandlerHigh _ endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void)
{
// Если прерывание от Таймера 0 произошло
if(INTCONbits.TMR0IF)
{
PORTDbits.RD0=!PORTDbits.RD0;
TMR0L += 119;
INTCONbits.TMR0IF=0;
}
}
Листинг 2
include “p18f4520.inc”
config WDT=off, LVP=off, OSC=EC
ResetVect org 0
bra 0x2A
HighVector code 8
goto HighVectorISR
code 0x2A
clrf TRISD
clrf LATD
; Запрещение прерываний с высоким приоритетом
bcf INTCON, GIEH
; Включение приоритетной системы прерываний
bsf RCON, IPEN
; Настройка Таймера 0
bcf INTCON, TMR0IF; Сброс флага прерывания
17
; Установка высокого приоритета для Таймера 0
bsf INTCON2, TMR0IP
; Разрешение прерывания от Таймера 0
bsf INTCON, TMR0IE
movlw .119
movwf TMR0L
movlw 0xD1 ; Настройка и запуск Таймера 0
movwf T0CON
; Разрешение прерываний с высоким приоритетом
bsf INTCON, GIEH
Loop
bra Loop
HighVectorISR
; Проверка того, что прерывание произошло от Таймера 0
btfss INTCON, TMR0IF
bra $ + .10 ; Прерывание не от Таймера 0
btg LATD, 0
movlw .119
addwf TMR0L, 1, 0
bcf INTCON, TMR0IF
retfie ; Возврат из ПОП
end
Пример 6. Необходимо настроить Таймер 0 таким образом, чтобы период его срабатывания был τ = 20 мкс. Частота тактирования
МК Fosc = 20 МГц.
Рассчитанные значения Т и m остаются такими же как и в примере 5.
Модуль счёта предделителя в соответствии с (8)
=
M
20 ⋅ 10−6
= 0,39.
28 ⋅ 0,2 ⋅ 10−6
Округляем полученное значение М в большую сторону до ближайшего доступного значения М = 1.
В соответствие с (4) рассчитываем значение K
 12

− 20 ⋅ 10−6 

6
8
=
− INT [97] 159.
K 28 + INT  20 ⋅ 10 =
 2=
0,2 ⋅ 10−6




18
В программе из листинга 1 следует заменить операторы:
– T0CON = 0b11010001; на T0CON = 0b11011000; (предделитель не
используется);
– TMR0L=119; на TMR0L=159;
– TMR0L += 119; на TMR0L += 159; (в ПОП).
Те же самые изменения следует сделать и в программе, приведённой в листинге 2.
Те же самые временные интервалы из примеров 5 и 6 можно получить и в 16-разрядном режиме работы Таймера 0.
Пример 7. Необходимо настроить Таймер 0 для работы в 16-разрядном режиме таким образом, чтобы период его срабатывания был
τ = 110,3 мкс. Тактовая частота МК Fosc = 20 МГц.
Значение периода Т остаётся таким же как и в примере 5.
Модуль счёта предделителя в соответствии с (8)
=
M
110,3 ⋅ 10−6
= 0,008.
216 ⋅ 0,2 ⋅ 10−6
Округляем полученное значение М в большую сторону до ближайшего доступного значения М = 1.
В соответствие с (4) рассчитываем значение K
 12

− 110,3 ⋅ 10−6 

6
16
− INT [548,5] 64987.
K 216 + INT  20 ⋅ 10=
 2=
0,2 ⋅ 10−6




Число 64987 в шестнадцатиричном представлении равно FDDBh.
Это число следует записывать в счётчик TMR0 следующим образом:
сначала в регистр TMR0H записывается старший байт числа FDh,
а затем в регистр TMR0L – младший байт числа DBh.
В программах в листингах 1 и 2 следует произвести следующие
изменения:
– в регистр T0CON записать значение 100110002 = 98h;
– при настройке Таймера 0 в регистры TMR0H и TMR0L записать значения FDh и DBh соответственно;
– заменить тексты ПОП: в листинге 1 на подпрограмму
void InterruptHandlerHigh(void)
{
if(INTCONbits.TMR0IF)
{
19
}
},
PORTDbits.RD0=!PORTDbits.RD0;
TMR0H=0xFD;
TMR0L += 0xDB;
INTCONbits.TMR0IF=0;
а в листинге 2 на подпрограмму
HighVectorISR
btfss INTCON, TMR0IF
bra $ + .10 ; Прерывание не от Таймера 0
btg LATD, 0
movlw 0xFD
movwf TMR0H
movlw 0xDB
addwf TMR0L, 1, 0
bcf INTCON, TMR0IF
retfie.
Из сравнения текстов ПОП в листингах 1 и 2 и приведённых выше
в тексте следует, что отличие заключается в добавлении команды
TMR0H = FDh; для языка программирования Си и двух команд
movlw 0xFDh
movwf TMR0H
для языка программирования ассемблер. Эти команды увеличивают время выполнения ПОП на два командных цикла Tcy.
Методическая погрешность формирования временного интервала в 16-разрядном режиме работы Таймера 0 в соответствии с (9)
будет равна δ = T/2 = 0,2 ⋅ 10-6/2 = 0,1мкс, а в 8-разрядном режиме (см.
пример 5) δ = 4 ⋅ 0,2 ⋅ 10-6/2 = 0,4мкс. Таким образом, использование
16-разрядного режима работы Таймера 0 незначительно (на два командных цикла Tcy) увеличивает длительность выполнения ПОП,
но при этом уменьшается методическая погрешность формирования периода срабатывания Таймера 0.
2. Порядок проведения лабораторной работы
1. Предварительно создайте на жёстком диске компьютера новую рабочую папку, в которой будут находиться файлы создаваемой
программы. Для выполнения лабораторной работы на персональном компьютере должны быть установлены следующие программные приложения фирмы Microchip: среда разработки MPLAB IDE
и компиляторы языка Си MPLAB MCC18 или MPLAB XC.
20
2. В соответствии со своим вариантом, полученным у преподавателя, разработайте алгоритм работы программы МК. Варианты
индивидуальных заданий приведены в табл. 1.
3. В соответствии с разработанным алгоритмом работы программы МК разработайте программы на языках программирования Си
и ассемблер.
4. Соберите лабораторную установку, электрическая принципиальная схема которой приведена на рис. 4. Перечень элементов приведён в табл. 2.
5. Произведите компиляцию программы на языке Си и выполните процедуру программирования МК.
6. Убедитесь в правильности работы разработанной на языке
программирования Си программы для МК.
7. Повторите пункты 5 и 6 для программы на языке программирования ассемблер.
8. Рассчитайте методическую погрешность формирования периода срабатывания Таймера 0.
9. Составьте отчёт о выполненной лабораторной работе.
Таблица 1
Варианты индивидуальных заданий
Вариант
τ, с
Тип ГТИ
Fosc
Приоритет
прерывания
Выводы МК
1
0,5
Внутренний
8 МГц
Низкий
RD2
2
1
Внутренний
2 МГц
Высокий
RD3
3
2
Внутренний
125 кГц
Низкий
RD7
4
3
Внутренний
31,25 кГц
Высокий
RD0
5
0,5
Внутренний
16 МГц
Низкий
RD6
6
1
Внутренний
1 МГц
Высокий
RD5
7
2
Внутренний
500 кГц
Низкий
RD4
8
3
Внутренний
250 кГц
Высокий
RD1
9
0,5
Внутренний
4 МГц
Низкий
RD0, RD7
10
1
Внутренний
31 кГц
Высокий
RD1, RD6
11
2
Внутренний
32 МГц
Низкий
RD2, RD5
12
2
Внешний
5 МГц
Высокий
RD3, RD4
13
1
Внешний
25 МГц
Низкий
RD2, RD4
14
0,5
Внешний
40 МГц
Высокий
RD3, RD6
21
Рис. 4. Электрическая принципиальная схема лабораторной установки
Таблица 2
Перечень элементов
Обозначение
Наименование
КолиПримечание
чество
DD1
Микросхема PIC18F4520-I/P
1
С1, С2
Конденсатор К10-17Б 0,1 мкФ Y5V
±5%
2
G1
Кварцевый генератор АСН-40.000MHz
1
Abracon,
40 МГц
HL1…HL8
Индикатор единичный L-7104CGCK
8
Kingbright
Резисторы
R1
C1-4 0,25 Вт 10 кОм ±5%
1
R2…R9
C1-4 0,25 Вт 150 Ом ±5%
8
X1
WAGO 256 2.5
1
X2
Розетка TJ4-6P6C тип 4
1
Разъёмы
22
Microchip
Разработанные программы должны формировать на выводах
МК, которые указаны в столбце «Выводы МК» табл. 1, меандр с длительностью τ. В столбце «Приоритет прерывания» указан приоритет
прерывания, который должен иметь Таймер 0. Если в столбце «Тип
ГТИ» указан:
– «Внутренний», то следует для тактирования МК использовать
внутренние генераторы INTOSC или INTRC встроенного модуля ГТИ;
– «Внешний», то следует в качестве входного сигнала Таймера 0
использовать сигнал от внешнего ГТИ, подключаемого ко входу
T0CKI.
В качестве примера в листинге 3 приведена программа на языке программирования Си, которая выполняет вариант № 11 из
табл. 1. Параметры настройки Таймера 0, рассчитанные по формулам (2), (7), (8) и (5), соответственно равны Т = 125 нс; m = 16; M = 28;
K = 3036 = 0BDCh.
Листинг 3
#include <p18f4520.h>
#pragma config OSC=INTIO7, WDT=OFF, LVP=OFF
void InterruptHandlerLow(void);
void main (void)
{
TRISD=LATD=0;
OSCCON=0b01110000; // 8 МГц
OSCTUNEbits.PLLEN=1; // x4
// Включение приоритетной системы прерываний
RCONbits.IPEN=1;
// Запрет прерываний с высоким приоритетом
INTCONbits.GIEH=0;
// Настройка Таймера 0
// Разрешение прерываний от Таймера 0
INTCONbits.TMR0IE=1;
INTCONbits.TMR0IF=0; // Сброс флага прерывания
// Присвоение прерыванию от Таймера 0 низкого
// приоритета
INTCON2bits.TMR0IP=0;
TMR0H=0x0B; TMR0L=0xDC;
T0CON=0b10000111;
// Разрешение прерываний с высоким приоритетом
INTCONbits.GIEH=1;
// Разрешение прерываний с низким приоритетом
INTCONbits.GIEL=1;
23
while (1)
{}
}
#pragma code LowVector=0x18
void LowISR(void)
{
_ asm goto InterruptHandlerLow _ endasm
}
#pragma code
#pragma interrupt InterruptHandlerLow
void InterruptHandlerLow(void)
{
if(INTCONbits.TMR0IF)
{
PORTDbits.RD2=!PORTDbits.RD2;
PORTDbits.RD5=!PORTDbits.RD5;
TMR0H=0x0B;
TMR0L += 0xDC;
INTCONbits.TMR0IF=0;
}
}
3. Оформление отчёта
Отчёт должен быть оформлен в соответствии с требованиями
нормоконтроля и должен содержать:
– цель работы;
– задание на лабораторную работу;
– электрическую принципиальную схему лабораторной установки;
– блок-схемы алгоритмов программ;
– тексты программ на языках программирования Си и ассемблер;
– расчёты параметров, необходимых для правильной работы
Таймера 0;
– расчёт методической погрешности формирования периода срабатывания Таймера 0;
– выводы о проделанной работе.
24
Контрольные вопросы
1. Для чего предназначены счётчик, таймер и предделитель?
2. Для чего применяется последовательное соединение счётчиков?
3. В каких случаях происходит генерация сигнала переполнения
Таймера 0?
4. Для чего предназначен регистр TMR0H?
5. Какими функциональными узлами Таймера 0 можно управлять программно?
25
Библиографический список
1. Microchip PIC18F2420/2520/4420/4520 Data Sheet [Электронный ресурс] : 24/40/44-Pin Enhanced Flash Microcontrollers with 10Bit A/D and nanoWatt Technology / Microchip Technology Inc. – Revision E. Последнее изменение October 2008. – Электрон. техн. описание микроконтроллеров семейства PIC18F2420/2520/4420/4520
(6,19 Mbytes). – [Б.м.]: Microchip Technology Inc., 2008. – Режим доступа: http://ww1.microchip.com/downloads/en/DeviceDoc/39631E.
pdf, свободный. – Загл. с экрана. – Яз. англ. – Код электрон. документа в каталоге производителя DS39631E.
2. Microchip PIC18F2XK20/4XK20 [Электронный ресурс]:
24/40/44-Pin Flash Microcontrollers with nanoWatt XLP Technology / Microchip Technology Inc. – Revision H. Последнее изменение
06/2015. – Электрон. техн. описание микроконтроллеров семейства
PIC18F2XK20/4XK20 (3,71 Mbytes). – [Б.м.]: Microchip Technology Inc., 2015. – Режим доступа: http://ww1.microchip.com/downloads/en/DeviceDoc/40001303H.pdf, свободный. – Загл. с экрана. –
Яз. англ. – Код электрон. документа в каталоге производителя
DS40001303H.
3. Microchip PIC18F8722 Family Data Sheet [Электронный ресурс]:
64/80-Pin, 1-Mbit Enhanced Flash Microcontrollers with 10-Bit A/D
and nanoWatt Technology / Microchip Technology Inc. – Revision C.
Последнее изменение October 2008. – Электрон. техн. описание микроконтроллеров семейства PIC18F8722 (6,65 Mbytes). – [Б.м.]: Microchip Technology Inc., 2008. – Режим доступа: http://ww1.microchip.com/downloads/en/DeviceDoc/39646c.pdf, свободный. – Загл.
с экрана. – Яз. англ. – Код электрон. документа в каталоге производителя DS39646C.
4. Опадчий, Ю. Ф. Аналоговая и цифровая электроника. Полный курс [Текст] : учеб. для вузов / Ю. Ф. Опадчий, О. П. Глудкин,
А. И. Гуров ; под ред. О. П. Глудкина. – М.: Горячая линия – Телеком, 2005. – 768 с.: ил. – ISBN 5-93517-002-7.
26
СОДЕРЖАНИЕ
Лабораторная работа................................................................
1. Методические указания......................................................... Основные термины и определения.......................................... Модуль Таймера 0................................................................ Расчёт периода срабатывания Таймера 0.................................. 2. Порядок проведения лабораторной работы............................... 3. Оформление отчёта............................................................... Контрольные вопросы............................................................... Библиографический список....................................................... 3
3
3
6
12
20
24
25
26
27
Документ
Категория
Без категории
Просмотров
0
Размер файла
929 Кб
Теги
0d5c4fa19f, malakhanov
1/--страниц
Пожаловаться на содержимое документа