
- •ВВЕДЕНИЕ
- •Библиографический список
- •Приложение 1. Схема лабораторного макета
- •Приложение 2. Краткое описание набора инструкций PIC16
- •ADDLW – Сложение рабочего регистра W и константы k
- •ADDWF – Сложение рабочего регистра W и регистра f
- •ANDLW – Побитное «И» рабочего регистра W и константы k
- •ANDWF – Побитное «И» рабочего регистра W и регистра f
- •BCF – Очистка бита b регистра f
- •BSF – Установка бита b регистра f в единицу
- •BТFSC – Условный переход при нулевом бите b регистра f
- •BТFSS – Условный переход при единичном бите b регистра f
- •CALL – Вызов подпрограммы
- •CLRF – Обнуление регистра f
- •CLRW – Обнуление рабочего регистра W
- •CLRWDT – Сброс сторожевого таймера
- •COMF – Инверсия регистра f
- •DECF – Декремент регистра f
- •DECFSZ – Декремент регистра f и пропуск в случае нулевого результата
- •GOTO – Переход по адресу
- •INCF – Декремент регистра f
- •INCFSZ – Декремент регистра f и пропуск в случае нулевого результата
- •IORLW – Побитное «ИЛИ» W и константы k
- •IORWF – Побитное «ИЛИ» W и регистра f
- •MOVF – Пересылка регистра f
- •MOVLW – Пересылка константы k
- •MOVWF – Пересылка из регистра W в регистр f
- •NOP – Простой
- •RETFIE – Возврат из подпрограммы с включением прерываний
- •RETLW – Выход из подпрограммы с загрузкой в регистр W константы k
- •RETURN – Выход из подпрограммы
- •RLF – Циклический сдвиг регистра f влево через флаг переноса С
- •RRF – Циклический сдвиг регистра f вправо через флаг переноса С
- •SLEEP – Перейти в спящий режим
- •SUBLW – Вычитение W из константы k
- •SUBWF – Вычитание W из регистра f
- •SWAPF – Обмен местами ниблов в регистре f
- •XORLW – Побитное «Исключающее ИЛИ» W и константы k
- •XORWF – Побитное «Исключающее ИЛИ» W и регистра f
Федеральное агентство железнодорожного транспорта Уральский государственный университет путей сообщения
Кафедра «Автоматика, телемеханика и связь на железнодорожном транспорте»
И. А. Дубров М. Ю. Белошицкий
А. Н. Попов
ОСНОВЫ МИКРОПРОЦЕССОРНОЙ ТЕХНИКИ
Екатеринбург Издательство УрГУПС
2012
Федеральное агентство железнодорожного транспорта Уральский государственный университет путей сообщения
Кафедра «Автоматика, телемеханика и связь на железнодорожном транспорте»
И. А. Дубров М. Ю. Белошицкий
А. Н. Попов
ОСНОВЫ МИКРОПРОЦЕССОРНОЙ ТЕХНИКИ
Учебно-методическое пособие по дисциплинам «Основы микропроцессорной техники», «Программирование периферийных контроллеров» для студентов специальностей
190402 – «Автоматика, телемеханика и связь на железнодорожном транспорте», 190901 – «Системы обеспечения движения поездов» всех форм обучения
Екатеринбург Издательство УрГУПС
2012
УДК 656.259.12 Д79
|
Дубров, И. А. |
|
Д79 |
Основы |
микропроцессорной техники: учеб.-метод пособие. |
|
/ И. А. Дубров, |
М. Ю. Белошицкий, А. Н. Попов. – Екатеринбург : |
|
Изд-во УрГУПС, 2012. – 99,[1] с. |
|
|
В пособии |
описана архитектура, принцип действия и система команд |
микроконтроллеров семейства PIC-micro, изложены методические указания к выполнению лабораторных работ для обучения основам программирования на
языке Ассемблер в интегрированной среде разработки MPLAB. |
|
|||||
|
Пособие предназначено для студентов специальностей 190402 – «Автома- |
|||||
тика, |
телемеханика |
и |
связь |
на |
железнодорожном |
транспорте |
и 190901 – «Системы обеспечения движения поездов» всех форм обучения. |
|
УДК 656.259.12
Печатается по решению редакционно-издательского совета университета.
Авторы: И. А. Дубров, старший преподаватель кафедры «Автоматика, телемеханика и связь на ж.-д. транспорте», УрГУПС
А. Н. Попов, ассистент кафедры «Автоматика, телемеханика и связь на ж.-д. транспорте», УрГУПС
М. Ю. Белошицкий, ассистент кафедры «Автоматика, телемеханика и связь на ж.-д. транспорте», УрГУПС
Рецензент: А. А. Новиков, профессор кафедры «Автоматика, телемеханика и связь на ж.-д. транспорте», УрГУПС
© Уральский государственный университет путей сообщения (УрГУПС), 2012
|
Оглавление |
|
ВВЕДЕНИЕ……………………............................................................................................4 |
||
ЛАБОРАТОРНАЯ РАБОТА 1 Изучение интегрированной среды разработки MPLAB |
...5 |
|
ЛАБОРАТОРНАЯ РАБОТА 2 Изучение запоминающих устройств микроконтроллеров |
||
|
PIC-micro ........................................................................ |
21 |
ЛАБОРАТОРНАЯ РАБОТА 3 Изучение работы параллельных портов |
|
|
|
микроконтроллеров PIC-micro....................................... |
31 |
ЛАБОРАТОРНАЯ РАБОТА 4 |
Изучение работы последовательных портов |
|
|
микроконтроллеров PIC-micro....................................... |
40 |
ЛАБОРАТОРНАЯ РАБОТА 5 |
Изучение работы таймеров микроконтроллеров PIC- |
|
|
micro................................................................................ |
54 |
ЛАБОРАТОРНАЯ РАБОТА 6 |
Изучение работы аналого-цифрового преобразователя |
|
|
микроконтроллеров PIC-micro....................................... |
69 |
ЛАБОРАТОРНАЯ РАБОТА 7 |
Изучение работы модуля захвата/сравнения/ШИМ |
|
|
микроконтроллеров PIC-micro....................................... |
78 |
Библиографический список …............................................................................................85 |
||
Приложение 1. Схема лабораторного макета .................................................................... |
86 |
|
Приложение 2. Краткое описание набора инструкций PIC16 .......................................... |
87 |
|
Приложение 3. Список команд PIC16 и их подробное описание ..................................... |
88 |
3
|
|
|
|
ВВЕДЕНИЕ |
|
|
|
|
||
В настоящее время в устройствах железнодорожной автоматики, |
|
|||||||||
телемеханики и связи применяется большое количество различных |
|
|||||||||
микропроцессоров и микроконтроллеров. В зависимости от |
решаемых |
|
||||||||
задач они могут иметь |
отличия в архитектуре, наборе периферийных |
|
||||||||
устройств, производительности, системе команд и т. д. |
|
|
|
|
||||||
В данном курсе при выполнении лабораторных работ используется 8- |
|
|||||||||
разрядный |
|
универсальный |
микроконтроллерPIC16F873A |
фирмы |
|
|||||
Microchip, построенный по гарвардской архитектуре и включающий в себя |
|
|||||||||
весь необходимый набор периферийных модулей, таких, как системный |
|
|||||||||
монитор, |
запоминающие |
устройства, |
порты ввода-вывода, |
таймеры, |
|
|||||
аналого-цифровой преобразователь, схемы захвата и сравнения, широтно- |
|
|||||||||
импульсный модулятор, аналоговые компараторы. |
|
|
|
|
||||||
Все микроконтроллеры фирмы Microchip имеют сокращенный набор |
|
|||||||||
команд (RISC). В частности, микроконтроллер PIC16F873A имеет всего 35 |
|
|||||||||
уникальных |
команд, |
что |
обуславливает легкость |
в |
изучении основ |
|
||||
программирования |
данного |
микроконтроллера. Подробное |
|
описание |
|
|||||
системы команд микроконтроллера приведено в прил. 4. |
|
|
|
|
||||||
Для |
написания, |
компиляции, тестирования и |
отладки |
программ |
|
|||||
используется интегрированная среда разработкиMPLAB, позволяющая |
|
|||||||||
использовать языки программирования Ассемблер и . КромеСи того, |
|
|||||||||
MPLAB |
позволяет |
|
имитировать |
работу |
микроконтроллера |
на |
||||
персональном |
компьютере (симулятор |
MPLAB-SIM), |
либо |
с |
помощью |
|
||||
программатора-отладчика PICkit-2 загружать разрабатываемую программу |
|
впамять реального микроконтроллера.
Сцелью практического изучения программирования микропроцессоров и микроконтроллеров на кафедре«Автоматика, телемеханика и связь на ж.-д. транспорте» разработаны специализированные лабораторные
макеты, позволяющие изучать работу как вычислительного ядра микроконтроллера, так и большинства входящих в него периферийных
модулей. Принципиальная |
электрическая |
схема |
макета |
приведена |
в прил. 1. |
|
|
|
|
4
ЛАБОРАТОРНАЯ РАБОТА 1
Изучение интегрированной среды разработки MPLAB
Цель работы: |
ознакомиться с лабораторным макетом по ОМТ и |
средой разработки MPLAB. |
|
Лабораторный макет по ОМТ включает в себя демонстрационную |
|
плату, построенную |
на микроконтроллереPIC16F873A, программатор- |
отладчик PICkit 2 и персональный компьютер с установленной программой MPLAB. В одном корпусе макета расположены два комплекта аппаратуры (два рабочих места).
Структурная схема макета приведена на рис. 1.1. Она состоит из микроконтроллера PIC16F873A, с подключенными к нему периферийными
устройствами, программатора-отладчика PICkit 2 и |
персонального |
компьютера. |
|
В состав периферийных устройств входят: |
|
–кнопка SA1 «RESET» (сброс);
–кнопки SA2..SA6, подключенные к входам параллельного порта микроконтроллера;
–потенциометр R1, подключенный к входу аналого-цифрового преобразователя микроконтроллера;
–пьезокерамический звукоизлучатель BZ1;
–светодиоды HL1...HL6, подключенные к выходам параллельного порта микроконтроллера;
– микроамперметр |
PV1, подключенный |
к |
выходу |
широтно- |
импульсного модулятора микроконтроллера; |
|
|
|
|
– драйвер последовательного интерфейса RS-232C (микросхема DD2 |
||||
типа ILX232N), |
предназначенный для |
согласования |
уровней |
сигналов на выводах последовательного порта микроконтроллера и персонального компьютера;
– светодиоды HL8 «TXD» и HL9 «RXD», индицирующие передачу
либо прием информации по последовательному порту. |
|
|
Программатор-отладчик PICkit 2 предназначен |
для |
записи |
исполняемого двоичного кода программы во внутреннююFLASH память микроконтроллера в режиме программирования и для чтения содержимого энергонезависимой памяти данных, регистров общего и специального назначения, а также для управления работой программы в режиме отладки.
Принципиальная электрическая схема приведена непосредственно на лицевой панели макета и в прил. 1.
5

|
|
Рис. 1.1. Структурная схема макета |
|
|
|
|
|
||||
Интегрированная |
среда |
разработкиMPLAB |
IDE |
для |
|
||||||
микроконтроллеров PIC-micro фирмы Microchip Technology Incorporated |
|
||||||||||
позволяет писать, отлаживать и оптимизировать текст программы. MPLAB |
|
||||||||||
IDE включает в себя текстовый редактор, компилятор с языка Ассемблер |
|
||||||||||
MPASM, |
компановщик |
объектных |
файлов(линковщик) |
|
MPLINK, |
|
|||||
компановщик библиотек MPLIB, менеджер проектов, симулятор MPLAB- |
|
||||||||||
SIM и |
другие |
необходимые |
программы. Кроме того, в |
MPLAB |
|
||||||
обеспечивается |
поддержка |
аппаратных средств |
программирования |
и |
|||||||
отладки, таких, как PICkit, MPLAB ICD, MPLAB ICE, разработки самой |
|
||||||||||
фирмы Microchip |
и сторонних разработчиков. Структурная |
схема |
|
||||||||
обработки информации в MPLAB приведена на рис. 1.2. Исходный текст |
|
||||||||||
программы на языке Ассемблер должен быть сохранен в файле(файлах) с |
|
||||||||||
расширением .asm. При компиляции |
программы |
в |
машинные |
коды |
с |
||||||
помощью |
программы MPASM |
генерируются |
объектные |
файлы |
с |
расширением .о. Компановщик MPLINK соединяет имеющиеся объектные файлы в файл с шестнадцатеричными машинными кодами и имеющий расширение .hex, при этом происходит выделение областей памяти каждому из фрагментов исходной программы, присвоение конкретных адресов меткам и т. д.
6

Рис. 1.2. Структурная схема обработки информации в MPLAB |
|
|
|||||||||||
В |
формируемый hex-файл |
могут |
включаться готовые фрагменты |
||||||||||
программы, хранящиеся в библиотечных файлах с расширением .lib. Кроме |
|||||||||||||
hex-файла |
MPLINK |
генерирует |
файл |
с |
полным |
текстом |
программы |
||||||
(листинг), имеющий расширение .lst, файл с планом распределения памяти |
|||||||||||||
программ |
с |
расширением.map |
и |
файл – отчет |
об |
обнаруженных |
при |
||||||
компиляции ошибках с расширением .err. Программа в шестнадцатеричных |
|||||||||||||
кодах |
(hex-файл) |
может быть |
загружена |
в |
программный |
имитатор |
|||||||
(симулятор) микроконтроллера или с помощью аппаратного программатора |
|||||||||||||
непосредственно |
|
во |
внутреннююFLASH |
память |
реального |
||||||||
микроконтроллера. В лабораторном макете доступны оба варианта отладки |
|||||||||||||
программы, |
но |
при |
отладке |
|
на симуляторе |
отсутствует |
возможность |
работы с реальными устройствами, подключаемыми к микроконтроллеру. Для создания библиотечных модулей из готовых объектных файлов
используется редактор библиотек MPLIB. |
|
|
|
|
||
Структура |
исходного |
текста |
программы |
на |
языке |
Ассемблер |
представляет из себя таблицу(см. табл. 1.1). Колонки таблицы должны разделяться символами пробела или табуляции. Каждая строка программы содержит одну ассемблерную команду, преобразуемую компилятором MPASM в исполняемый машинный ,кодлибо директиву (указание)
ассемблеру или линковщику, называемую псевдокомандой. Псевдокоманды
вмашинные коды не транслируются.
Впервой колонке размещается метка, представляющая из себя символьное обозначение адреса данной команды в памяти программ микроконтроллера. Метка должна обязательно начинаться с буквы и с самого начала строки, а заканчиваться двоеточием. Метки предназначены
7
для того, чтобы удобно ссылаться на то или иное место программы, например писать
GOTO start
вместо
GOTO 0x0002
Вторая колонка содержит мнемонический код ассемблерной команды (псевдокоманды).
Третья колонка – данные, которые обрабатываются в данной команде, называемые операндами. Если команда использует несколько операндов, то они разделяются запятой, если команда не использует операндов, третья колонка остается пустой.
Четвертая колонка является необязательной и содержит текстовый комментарий к данной команде. Комментарий начинается с символа (точка с запятой). Содержимое комментария игнорируется компилятором и не влияет на работу программы.
Пример исходного текста программы на языке Ассемблер Таблица 1.1
Метка: |
Мнемокод |
Операнды |
|
;Комментарии |
|
|
|
|
|
|
#include |
p16f873a.inc |
|
|
|
ORG |
H'001' |
;начальный адрес программы |
|
|
|
|
|
;начало цикла |
M100: |
|
|
|
;проверка портов |
|
BTFSC |
PORTB,5 |
;скачек, если нажата кнопка SA2 |
|
|
GOTO |
M210 |
;переход к гашению HL2 |
|
|
BSF |
PORTC,0 |
;включаем HL2 |
|
|
GOTO |
M220 |
;переход к проверке SA3 |
|
|
· · · · · · · · · · · · · · · · · · · · · · · · · · |
|
||
|
BTFSC |
PORTB,1 |
;скачек, если нажата кнопка SA5 |
|
|
GOTO |
M320 |
;переход |
|
|
BTFSC |
PORTB,0 |
;скачек, если нажата кнопка SA6 |
|
|
GOTO |
M320 |
;переход |
|
|
BCF |
PORTA,3 |
;выдаем паузу на PORTA,3 |
|
M320: |
BTFSC |
PORTB,5 |
;скачек, если нажата кнопка SA2 |
|
|
|
|
|
|
8
|
|
|
|
Продолжение табл. 1.1 |
Метка: |
Мнемокод |
|
Операнды |
;Комментарии |
|
|
|
|
|
|
GOTO |
M600 |
;переход к проверке АЦП |
|
|
BTFSC |
PORTB,4 |
;скачек, если нажата кнопка SA3 |
|
|
GOTO |
M600 |
;переход к проверке АЦП |
|
|
BCF |
PORTA,2 |
;выдаем паузу на PORTA,2 |
|
M600: |
|
|
|
;проверка АЦП и ШИМ |
|
MOVF |
ADRESH,W |
;считываем значение с АЦП |
|
|
MOVWF |
CCPR1L |
;переписываем в регистр CCP1 |
|
|
MOVLW |
B'00000101' |
;включение и запуск АЦП |
|
|
MOVWF |
ADCON0 |
;программируем регистр АЦП 0 |
|
|
|
|
|
;выдержка времени |
|
MOVLW |
H'FF' |
;| |
|
|
MOVWF |
H'20' |
;| |
|
M940: |
DECFSZ |
H'20',F |
;| |
|
|
GOTO |
M940 |
;| |
|
|
GOTO |
M100 |
;конец цикла |
|
|
END |
|
|
Применение оконного интерфейса в современных версияхMPLAB существенно упростило процесс создания программы. Преобразование
файлов в необходимый формат и вызов |
соответствующих программ |
|||
происходит |
автоматически, практически |
без |
участия |
программиста. |
Интерфейс MPLAB схож с интерфейсом другихWindows приложений и легок в освоении.
Скриншот основного окна MPLAB приведен на рис. 1.3.
9

Рис. 1.3. Основное окно MPLAB: 1 – панель меню, 2 – панель инструментов, 3 – рабочая область и 4 – строка состояния
На |
панели |
инструментов |
доступны |
шесть |
групп, |
кнопо |
||
повторяющих основные функции текстового меню: |
|
|
|
|
||||
– стандартная, |
включающая |
|
кнопки |
|
управления |
,файлами |
||
редактирования, печати и др.; |
|
|
|
|
|
|
||
– менеджер проектов; |
|
|
|
|
|
|
||
– контрольная сумма; |
|
|
|
|
|
|
||
– отладки, включающая |
кнопки |
управления |
выполнением |
|||||
программы; |
|
|
|
|
|
|
|
–управления программатором-отладчиком PICkit 2;
–ресурсов устройства, используемых при отладке программы.
На рабочей области основного окнаMPLAB размещаются окна с открытыми файлами, всплывающие меню, диалоговые окна и другая информация.
Строка состояния отображает текущие настройки системы и основные данные разрабатываемой программы.
10

Методика выполнения работы
1. Создание нового проекта
Выбрать пункт меню Project › New... либо щелкнуть левой клавишей
мыши |
по |
соответствующей |
кнопке |
на |
панели |
инструментов. В |
появившемся диалоговом окне, скриншот которого приведен на рис. 1.4., |
||||||
необходимо |
ввести название |
программы |
и |
путь к , |
гдепапке будут |
сохраняться рабочие файлы проекта. Путь к папке и название программы должны использовать только латинские буквы, цифры и не содержать пробелов. Щелкнуть по клавише OK.
Рис. 1.4. Диалоговое окно «Новый проект»
2. Создание файла с исходным текстом программы
Выбрать пункт менюFile › New, либо нажать соответствующую кнопку на панели инструментов. В рабочей областиMPLAB откроется окно текстового редактора(см. рис. 1.5.), с помощью которого можно набирать текст своей программы. В первой лабораторной работе можно скопировать через буфер обменаWindows в это окно текст готовой программы, например из файла test_all.asm.
Сохранить (File › Save As...) исходный текст программы в рабочей папке проекта в файле с расширением .asm.
11

Рис. 1.5. Окно текстового редактора MPLAB
3. Добавление файла к проекту
Открыть окно менеджера проектов(View › Project) (см. рис. 1.6.). Щелкнуть правой клавишей мыши по папкеSource Files и выбрать пункт выпадающего меню Add Files.... При этом откроется диалоговое окно открытия файла, приведенное на рис. 1.7. Необходимо выбрать нужный файл и нажать клавишу Открыть.
12

Рис. 1.6. Окно менеджера проектов
Рис. 1.7. Окно добавления файла в проект
13

4. Компиляция исходного текста программы в машинные коды
Перед компиляцией программы необходимо указатьMPLAB тип используемого микроконтроллера. Для этого необходимо выбрать пункт меню Configure › Select Device... и в открывшемся диалоговом окне(рис. 1.8.) выбрать тип устройства. В данном случае это PIC16F873A.
|
Рис. 1.8. Окно выбора микроконтроллера |
|
||
Доступ |
к |
конфигурационной |
ячейке |
микроконтролл |
осуществляется через меню Configure › Configuration bits. Вид окна битов |
||||
конфигурации |
приведен |
на рис. 1.9. Поскольку в |
лабораторном |
макете в |
качестве источника тактового сигнала используется высокочастотный кварцевый резонатор, то в первой строке в колонкеSetting необходимо выбрать пункт HS Oscillator (см. рис. 1.9). Содержимое остальных пунктов данного окна можно оставить без изменения.
Альтернативным |
способом |
настройки конфигурационных ячеек |
является настройка |
директивами |
в исходном . Напримеркоде, для |
14

выполнения вышеописанной настройки(использование кварцевого генератора в качестве тактового) в начале исходного текста достаточно разместить следующую директиву:
__CONFIG _HS_OSC;
При этом флажок «Configuration Bits set in code» в окне Configuration Bits должен быть установлен.
Для преобразования исходного текстового файла шестнадцатеричный hex-файл необходимо выбрать пункт менюProject ›
Make, либо щелкнуть по соответствующей кнопке на панели инструментов.
При этом в рабочей папке проекта будут созданы выходные файлы с расширениями .o, .hex, .lst, .map, .err.
Рис. 1.9. Окно битов конфигурации
Просмотреть содержимое этих файлов можно в окне текстового редактора MPLAB (File › Open..., либо кнопка на панели инструментов).
Ход выполнения компиляции и сообщения об обнаруженных ошибках отображаются в выходном окне MPLAB (рис. 1.10).
15

Рис. 1.10. Выходное окно MPLAB
5. Запись кода программы во внутреннююFLASH память микроконтроллера
Для программирования микроконтроллера и отладки программы в
лабораторном |
макете |
применяется |
программатор-отладчикPICkit 2, |
|
||||
который должен быть подключен кUSB порту персонального компьютера. |
|
|||||||
Указание MPLAB об |
использовании PICkit 2 как |
отладчика дается через |
|
|||||
пункт меню Debugger › Select Tool › PICkit 2. После подключения PICkit |
|
|||||||
становятся |
доступными |
команды |
программирования |
в |
меню |
|||
соответствующие им кнопки на панели инструментов. Запись программы в |
|
|||||||
память микроконтроллера осуществляется командойDebugger › Program, |
|
|||||||
чтение памяти программ – Debugger › Read, а чтение энергонезависимой |
|
|||||||
памяти данных – |
Debugger |
› Read |
EEDATA. |
Результат |
успешного |
|
программирования микроконтроллера или возникшие при этом ошибки отображаются в выходном окне MPLAB.
16

6. Отладка (выполнение) программы
Запуск выполнения программы возможен в нескольких режимах. Для
этого |
предусмотрены |
соответствующие команды в меню и кнопки на |
||||||||||||||
панели |
инструментов. |
Debugger › Run запускает программу в режиме |
||||||||||||||
реального |
времени. При |
частоте |
кварцевого |
резонатора4 |
МГц время |
|||||||||||
выполнения одной команды составляет ровно1 мкс. Debugger › Animate |
||||||||||||||||
запускает |
программу |
в |
режиме |
мультипликации. Время |
выполнения |
|||||||||||
команды |
составляет |
примерно0,5 |
|
с, |
что |
позволяет |
|
наблюдать |
ход |
|||||||
выполнения |
программы. |
Debugger › |
Step Into |
приводит к выполнению |
||||||||||||
одной |
очередной |
команды |
в |
|
основной |
программе |
и |
вложенны |
||||||||
подпрограммах. Debugger |
› |
Step |
Over |
работает |
аналогично, |
но |
без |
|||||||||
выполнения подпрограмм. Очередная выполняемая команда обозначается |
||||||||||||||||
курсором |
в |
виде |
зеленой |
стрелки, расположенной |
слева |
от |
текста |
|||||||||
программы. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выполнение программы может быть остановлено командой Debug- |
||||||||||||||||
ger › Halt, |
а |
также |
при помощи предварительно установленной точки |
|||||||||||||
останова, задаваемой в команде меню Debugger › Breakpoints... или путем |
||||||||||||||||
двойного щелчка правой клавишей мыши по нужной строке исходного |
||||||||||||||||
текста программы. Точка останова отображается в виде красного кружка с |
||||||||||||||||
буквой |
В |
|
слева |
от |
|
текста |
программы. Неактивные |
точки |
останова |
отображаются в виде красной окружности.
Во время отладки можно наблюдать изменения, производимые программой в памяти микроконтроллера и его встроенных периферийных
устройствах. Для этого необходимо открыть соответствующее |
окно в |
рабочей области MPLAB. |
|
Команда View › Disassembly Listing открывает одноименное |
окно |
(рис. 1.12), в котором отображается содержимое памяти программ в виде машинных кодов и мнемонических обозначений команд. View › EEPROM открывает окно энергонезависимой памяти данных(рис. 1.11). View › File Registers открывает окно памяти данных (рис. 1.13). View › Hardware Stack открывает окно аппаратного стека(рис. 1.14). View › Program memory – окно памяти программ (рис. 1.15). и др.
Рис. 1.11. Окно энергонезависимой памяти данных
17

Рис. 1.12. Окно дизассемблера
Рис. 1.13. Окно памяти данных
18

Рис. 1.14. Окно аппаратного стека
Рис. 1.15. Окно памяти программ
19
Содержание отчета
В отчете необходимо привести скриншот(скриншоты) основного окна программы MPLAB для различных этапов написания и отладки программы (по заданию преподавателя).
Контрольные вопросы
1.Назначение программы MPLAB.
2.Что содержит в себе asm-файл? hex-файл?
3.Какое окно вы вызовете для просмотра ячеек энергонезависимого ПЗУ?
4.В процессе отладки вам необходимо наблюдать состояние бита3 ячейки памяти по адресу 0x73. Ваши действия.
5.Представьте, что ваша программа занимается реккурентным вычислением (для реализации которого нужно использовать цикл).
По окончании вычисления его результат выводится на устройства
ввода/вывода. |
В |
процессе |
отладки |
вам |
необходим |
проконтролировать результат вычисления. Чем вы воспользуетесь: |
|
||||
точками останова либо анимацией? |
|
|
|
||
6. В лабораторной |
работе была |
рассмотрена |
конфигурационная |
ячейка настройки тактового генератора. Какие еще существуют конфигурационные ячейки? Каково их назначение?
7.Перечислите источники тактовой частоты микроконтроллера и укажите два способа их выбора в MPLAB.
20

ЛАБОРАТОРНАЯ РАБОТА 2
Изучение запоминающих устройств микроконтроллеров PIC-micro
Цель работы: изучение работы и программирование памяти микроконтроллера PIC16F873A.
Всостав микроконтроллераPIC16F873A входят четыре вида
запоминающих |
устройств: 14-разрядная |
FLASH память |
программ, |
||
объемом |
4096 слов, |
192 ячейки 8-разрядной статической |
оперативной |
||
памяти |
данных, |
128 |
ячеек 8-разрядной |
энергонезависимой EEPROM |
памяти данных и восьмиуровневый аппаратный стек.
FLASH память программ
Память программ предназначена для хранения кода исполняемой программы и неизменяемых данных, т. е. констант. Чтение и запись информации из FLASH памяти программ осуществляются аналогично чтению и записи информации в энергонезависимуюEEPROM память данных и будут рассмотрены ниже. Запись программы во FLASH память осуществляется с помощью программатора-отладчикаPICkit 2, для этого используются три вывода микроконтроллера: PGD – вход данных, PGC – вход синхронизации иPGM – вход выбора режима низковольтного программирования.
Карта памяти программ микроконтроллера PIC16F873A приведена на рис. 2.1.
Рис. 2.1. Организация FLASH памяти программ |
|
|
|||
Оперативная память данных – регистровый файл |
|
|
|||
Оперативная |
память |
данных |
предназначена |
для |
хранени |
информации, с которой работает микроконтроллер.
Чтение и запись информации в память данных производится самим микроконтроллером при выполнении любой команды, имеющей в качестве операнда регистр общего или специального назначения. При обращении к
21

памяти данных возможны два способа адресации: прямая и косвенная. При прямой адресации адрес ячейки памяти указывается непосредственно в операнде команды. При косвенной адресации фактический адрес ячейки памяти помещается в регистр адресаFSR, а в самой команде в качестве операнда указывается физически не реализованный регистр INDF.
Рис. 2.2. Организация оперативной памяти данных
Вся память данных распределена между регистрами общего и специального назначения и разделена на четыре банка. Первые 32 ячейки в каждом банке зарезервированы под РСН, а 96 ячеек банка 0 и банка 1 занимают РОН. Выбор активного банка осуществляется изменением
22

соответствующих разрядов регистраSTATUS: RP0 и RP1 при прямой адресации, или IRP при косвенной.
Карта оперативной памяти данных приведена на рис. 2.2.
Следует отметить, что обращение к РСН в программе возможно как путем указания их фактического шестнадцатеричного адреса, так и путем указания их символьного имени. В последнем случае в состав исходного текста программы необходимо включить директиву Ассемблера#include p16f873a.inc, подключающую файл соответствия символьных обозначений числовым значениям адресов для данного микроконтроллер. Символьными именами можно обозначать и отдельные биты РСН.
Энергонезависимая память данных EEPROM
Энергонезависимая EEPROM память данных предназначена для хранения информации, которая должна сохраняться даже при отключении электропитания микроконтроллера. EEPROM память может быть перезаписана большее количество раз по сравнениюFLASH.с Минимальное число циклов стирание/записьEEPROM составляет 100 тысяч, а FLASH памяти – всего 1 тысяча.
Карта памяти EEPROM приведена на рис. 2.3.
Рис. 2.3. Организация энергонезависимой памяти данных EEPROM
Для чтения и записи информации EEPROMв |
память |
данных |
и во |
|||||
FLASH |
память |
программ |
используются |
регистры |
специального |
|||
назначения: EEDATA – регистр |
данных (младший байт данных при |
|||||||
обращении к 14-разрядной памяти |
программ), EEDATH – старший |
байт |
||||||
данных |
при |
обращении |
к памяти программ, EEADR – регистр адреса |
|||||
(младший байт адреса при обращении к4К памяти программ), EEADRH – |
||||||||
старший байт адреса при обращении к памяти программ, EECON1 – |
||||||||
первый регистр управления EEPROM (FLASH), EECON2 – второй регистр |
||||||||
управления |
EEPROM |
(FLASH), |
INTCON – |
регистр |
управления |
прерываниями, PIE2 – второй регистр разрешения прерываний иPIR2 – второй регистр флагов прерываний.
Для чтения данных из EEPROM необходимо выполнить следующую последовательность действий:
– записать адрес необходимой ячейки памяти в регистр EEADR;
23
–сбросить в «0» бит EEPGD в регистре EECON1;
–инициировать операцию чтения путем установки в«1» бита RD в регистре EECON1;
–считать полученные данные из регистра EEDATA.
Чтение данных изFLASH памяти программ осуществляется аналогично, последовательность действий при этом немного сложней:
– записать младший байт адреса необходимой ячейки в регистр EEADR, а старший – в регистр EEADRH;
–установить в «1» бит EEPGD в регистре EECON1;
–инициировать операцию чтения путем установки в«1» бита RD в регистре EECON1;
–сформировать выдержку времени длительностью два машинных цикла, например путем выполнения двух холостых команд NOP;
–считать младший байт полученных данных из регистраEEDATA, а
старший – из регистра EEDATH.
Последовательность действий при записи информации EEPROMв следующая:
1.Проверить состояние битаWR в регистре EECON1 и убедиться, что он равен«0», те есть в настоящий момент не производится запись в EEPROM либо FLASH.
2.Записать адрес нужной ячейки в регистр EEADR.
3.Записать данные в ячейку EEDATA.
4.Сбросить в «0» бит EEPGD в регистре EECON1.
5.Установить в «1» бит WREN в регистре EECON1, разрешив запись
вEEPROM.
6.Запретить прерывания, если они были разрешены.
7.Выполнить обязательную последовательность из пяти команд.
– записать значение H'55' в регистр EECON2 (две команды, сначала запись в W, затем в EECON2).
– записать значение H'AA' в регистр EECON2 (две команды, сначала запись в W, затем в EECON2).
– установить в «1» бит WR в регистре EECON1.
8.Разрешить прерывания, если это необходимо.
9.Сбросить в «0» бит WREN в регистре EECON1.
10.По окончании цикла записи автоматически сбрасывается «0»в
бит WR регистра EECON1 и взведется в«1» флаг прерывания EEIF в регистре PIR2 (сбрасывается программно).
Несмотря на то, что флаг прерывания взводится после окончания каждого цикла записи обработка прерываний будет инициирована только в том случае если они разрешены установкой«1»в битов GIE и PEIE регистра INTCON и не маскированы (бит EEIE в регистре PIE2 взведен).
24

Стек
Стеком называется область оперативной памяти, организованная по
принципу «первым |
вошел – |
последним |
вышел». В |
микроконтроллерах |
|||
PIC16 стек используется исключительно для хранения адресов возврата из |
|||||||
подпрограмм. |
В |
отличие |
от |
других |
микропроцессоров |
||
микроконтроллеров, в микроконтроллерах PIC16 запись данных на стек не |
|||||||
предусматривается. Выбор очередной свободной ячейки стековой памяти |
|||||||
осуществляется автоматически, указатель стека программно не доступен. |
|||||||
Стек имеет всего восемь 13-разрядных ячеек статической |
|||||||
оперативной |
памяти (рис. |
2.4.), |
следовательно, |
в |
программе для |
||
микроконтроллера |
PIC16 не |
должно |
быть более |
восьми вложенных |
подпрограмм, с учетом обработчиков (драйверов) прерываний.
Рис. 2.4. Организация стековой памяти
Порядок выполнения работы
В данной лабораторной работе необходимо разработать и отладить программу, реализующую обращение к определенным областям памяти микроконтроллера PIC16F873A. Конкретное задание выдается преподавателем.
В качестве примера рассмотрим следующее задание: необходимо разработать программу, заполняющую все регистры общего назначения банка 0 возрастающими двоичными числами, начиная с h'00', и копирующую эти данные в EEPROM.
1. Постановка задачи
Представим исходную словесную форму задания в аналитическом виде. Для этого обозначим буквойN число, записываемое в очередной регистр, буквой F адрес регистра, а буквой E – адрес ячейки EEPROM.
Поскольку адреса РОН в банке 0 |
начинаются с H'20', |
а заканчиваются |
|
H'7F', то можно записать, что F |
|
[H'20', H'7F']. Соответственно в этот |
|
массив памяти поместятся числа отH'00' до H'5F', или N |
[H'00', H'5F']. |
||
|
|
|
|
При копировании в EEPROM будут задействованы ячейки с адресамиE [H'00', H'5F']. Также можно записать: [F0]=0, [Fi]=Ni, [Fi+1]=Ni+1, [Ei]=[Fi].
25
Впоследних формулах квадратные скобки обозначают, что буквами F
иE обозначены не адреса ячеек памяти, а содержимое ячеек памяти с этими адресами.
2. |
Разработка алгоритма программы |
|
|
|
|
|
||||
Укрупненный алгоритм программы приведен на рис. 2.5. |
|
|
|
|||||||
В первом блоке алгоритма производятся предварительные настройки |
|
|||||||||
Ассемблерной программы: ссылки на включаемые в |
основной |
текст |
|
|||||||
файлы, задание начального адреса программы, распределение РОН и т. д. |
|
|
||||||||
Блоки со второго по седьмой описывают запись возрастающих чисел |
|
|||||||||
в банк 0 регистрового файла. |
|
|
|
|
|
|
||||
Во втором |
и |
третьем блоке задаются начальные значения адреса |
|
|||||||
ячейки оперативной памяти данных и число, записываемое в эту ячейку. |
|
|
||||||||
В четвертом блоке производится собственно запись числа в ячейку |
|
|||||||||
памяти. |
|
|
|
|
|
|
|
|
|
|
В |
пятом |
и |
шестом блоках производится вычисление адреса |
|||||||
следующей ячейки и следующего числа(в данном примере это просто |
|
|||||||||
увеличение на единицу). |
|
|
|
|
|
|
|
|||
В седьмом блоке алгоритма производится сравнение числа с его |
|
|||||||||
конечным значением. Следует учесть, что в данном примере сравнение |
|
|||||||||
происходит после |
увеличения числа, поэтому в качестве конечного |
|
||||||||
значения взято число 60, а не 5F. Если число не достигло своего конечного |
|
|||||||||
значения, то программа возвращается к записи этого числа в очередную |
|
|||||||||
ячейку (блок 4, М10:), если же результат сравнения положительный, то |
|
|
||||||||
программа |
переходит |
к |
копированию информации из |
ОЗУEEPROMв |
|
|
||||
(блоки с восьмого по тринадцатый). |
|
|
|
|
|
|||||
В восьмом и девятом блоках задаются начальные значения адресов |
|
|||||||||
ячеек оперативной памяти данных и EEPROM. |
|
|
|
|
|
|||||
В |
десятом |
|
блоке |
производится |
копирование |
информации |
из |
|||
очередной ячейки ОЗУ в EEPROM. |
|
|
|
|
|
|||||
В одиннадцатом и двенадцатом адреса ячеек ОЗУEEPROMи |
|
|
||||||||
увеличиваются на единицу. |
|
|
|
|
|
|
|
|||
В |
тринадцатом |
блоке производится |
сравнение |
адреса |
ячейки |
EEPROM с конечным значением, увеличенным на единицу. Если адрес ячейки не достиг своего конечного значения, то программа возвращается к блоку 10 (М20:), иначе – переход к концу программы.
26

Рис. 2.5. Блок-схема алгоритма программы
27
3. Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
; предварительные настройки |
|
|||
|
#include |
p16f873a.inc |
|
|
|
CONFIG |
_HS_OSC |
; |
|
|
ORG |
H'000' |
;вектор сброса |
|
CNT |
EQU |
H'A0' |
;определение регистра счетчика |
|
|
|
|
;с адресом А0 (банк 1) |
|
; запись возрастающих чисел в ОЗУ |
||||
|
BCF |
STATUS,RP1 ; ┬ выбираем банк регистров 1 |
||
|
BSF |
STATUS,RP0 ; ┘ |
||
|
MOVLW |
H'20' |
;загрузка в рабочий регистр адреса |
|
|
|
|
;первого РОН в банке 0 |
|
|
MOVWF FSR |
;записываем начальный адрес |
||
|
|
|
;в регистр косв. адресации |
|
|
CLRF |
CNT |
;обнуляем регистр счетчик |
|
M10: |
MOVF |
CNT,W |
;загружаем значение счетчика в рабочий регистр |
|
РОН |
MOVWF INDF |
;сохраняем очередной отсчет в косвенно адресуемый |
||
INCF |
FSR,F |
;увеличение адреса РОН |
||
|
||||
|
|
|
;в регистре косвенной адресации |
|
|
INCF |
CNT,F |
;увеличение счетчика на 1 |
|
|
MOVF |
CNT,W |
;загружаем новое значение счетчика |
|
|
|
|
;в рабочий регистр |
|
|
XORLW |
H'60' |
;сравниваем его с последним значением +1 |
|
|
BTFSS |
STATUS,Z |
;если совпадают, то скачек через одну команду |
|
|
GOTO |
M10 |
;если не совпадают, то возврат |
|
|
|
|
;к записи следующей ячейки |
|
;копирование из ОЗУ в EEPROM |
|
|||
|
MOVLW |
H'20' |
;загрузка в рабочий регистр |
|
|
|
|
;адреса первого РОН в банке 0 |
|
|
MOVWF FSR |
;записываем начальный адрес |
||
|
|
|
;в регистр косв. адресации |
|
|
CLRF |
CNT |
;обнуляем регистр счетчик адреса EEPROM |
|
M20: |
BSF |
STATUS,RP1 |
; ┬ выбираем банк регистров 3 |
|
|
BSF |
STATUS,RP0 |
; ┘ |
|
|
BTFSC |
EECON1,WR ; ┬ проверка окончания предыдущей |
||
|
|
|
; │ записи в EEPROM |
|
|
GOTO |
M20 |
; ┘ |
|
|
BCF |
STATUS,RP1 |
; ┬ выбираем банк регистров 1 |
|
|
BSF |
STATUS,RP0 |
; ┘ |
|
|
MOVF |
CNT,W |
;загружаем значение счетчика в рабочий регистр |
|
|
BSF |
STATUS,RP1 |
; ┬ выбираем банк регистров 2 |
|
|
BCF |
STATUS,RP0 |
; ┘ |
|
|
MOVWF |
EEADR |
;сохраняем адрес очередной ячейки в регистре адреса |
|
|
MOVF |
INDF,W |
;считываем данные из очередного РОН |
28
|
|
|
;в рабочий регистр |
|
|
|
||
|
MOVWF EEDATA |
;и сохраняем их в регистре данных EEPROM |
||||||
|
BSF |
STATUS,RP1 ; ┬ выбираем банк регистров 3 |
||||||
|
BSF |
STATUS,RP0 ; ┘ |
|
|
|
|
|
|
|
BCF |
EECON1,EEPGD |
;выбираем EEPROM |
|
||||
|
BSF |
EECON1,WREN |
;разрешаем |
запись |
|
|||
|
BCF |
INTCON,GIE ;запрещаем прерывания |
|
|
||||
|
MOVLW |
H'55' |
; ┐ |
|
|
|
|
|
|
MOVWF |
EECON2 |
; │ |
|
|
|
|
|
|
MOVLW |
H'AA' |
; ├ обязательная последовательность из пяти команд |
|||||
|
MOVWF |
EECON2 |
; │ |
|
|
|
|
|
|
BSF |
EECON1,WR ; ┘ |
|
|
|
|
|
|
|
BCF |
EECON1,WREN |
;запрещаем |
запись |
|
|||
|
BCF |
STATUS,RP1 ; ┬ выбираем банк регистров 1 |
||||||
|
BSF |
STATUS,RP0 ; ┘ |
|
|
|
|
|
|
|
INCF |
FSR,F |
;увеличение адреса РОН |
|
||||
|
|
|
;в регистре косвенной адресации |
|||||
|
INCF |
CNT,F |
;увеличение счетчика на 1 |
|
||||
|
MOVF |
CNT,W |
;загружаем новое значение счетчика |
|||||
|
|
|
;в рабочий регистр |
|
|
|
||
|
XORLW |
H'60' |
;сравниваем его с последним значением +1 |
|||||
|
BTFSS |
STATUS,Z |
;если |
совпадают то |
скачек |
через одну команду |
||
|
GOTO |
M20 |
;если нет, то переход к копированию |
|||||
|
|
|
;очередной ячейки |
|
|
|
||
M30: |
GOTO |
M30 |
;зацикливаемся здесь |
|
|
|||
|
END |
|
;конец программы |
|
|
|
||
|
4. Трансляция |
исходного |
текста |
программы в машинные |
||||
|
коды |
|
|
|
|
|
|
|
|
Процесс |
создания |
нового |
проекта |
и |
компиляции программы |
подробно описан в лабораторной работе 1.
5. Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1. Необходимо учесть, что состояние ячеек энергонезависимой EEPROM памяти данных отображается только после выполнения команды Debugger › Read EEDATA.
6. Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
29
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему |
||||||
алгоритма и текст программы на языке Ассемблер с исправлениями, |
||||||
возникшими на этапе отладки. |
|
|
|
|
|
|
|
Контрольные вопросы |
|
|
|
||
1. Какие |
виды |
памяти |
присутствуют |
в |
микроконтроллер |
|
PIC16F873A? |
|
|
|
|
|
|
2. Деление |
памяти |
данных |
на |
банки |
создает |
определенные |
неудобства |
при |
конструировании |
программ: программисту |
|||
приходится постоянно помнить о том, в каком банке данных он |
||||||
работает в настоящий момент, в какой банк данных необходимо |
||||||
переключиться, для того чтобы установить контрольный бит |
||||||
заданного контрольного регистра и .т п. |
Тем не менее разделение |
памяти на банки присутствует в микроконтроллерах PIC16. Как Вы думаете, что заставило разработчиков этой архитектуры пойти на
такое решение? |
|
|
|
|
3. В первом пункте алгоритма записи данных EEPROMв |
(FLASH) |
|||
проверяется флаг WR |
регистра |
EECON1, т. е. факт |
того, что |
|
микпроконтроллер не |
занят |
записью EEPROMв |
(FLASH) в |
данный момент. Придумайте несколько ситуаций, в которых эта проверка покажет свою полезность.
4.Какие инструкции из набораPIC16 записывают данные в стек и удаляют данные из него?
5.Почему ячейки памяти стека имеют 13-разрядный размер?
6.Представьте, что Вы проектируете кассовый аппарат. Каким видом памяти следует воспользоваться для хранения текста распечатываемого чека; для хранения порядкового номера распечатываемого чека?
30
|
|
|
ЛАБОРАТОРНАЯ РАБОТА 3 |
|
|
|
|||||
Изучение работы параллельных портов микроконтроллеров |
|
||||||||||
|
|
|
|
|
PIC-micro |
|
|
|
|
||
Цель работы: изучение работы и программирование параллельных |
|
||||||||||
портов микроконтроллера PIC16F873A. |
|
|
|
|
|
|
|||||
Микроконтроллер PIC16F873A имеет три параллельных порта ввода- |
|
||||||||||
вывода: 6-разрядный порт A и два 8-разрядных порта B и C. К внешним |
|
||||||||||
устройствам |
|
порты |
ввода-вывода |
|
подключаются |
через |
вывод |
||||
микроконтроллера RA0...RA5, RB0...RB7 и RC0...RC7 соответственно. |
|
||||||||||
Выводы порта A мультиплексированы со входами аналого-цифрового |
|
||||||||||
преобразователя, |
порта B |
со схемой |
низковольтного |
программирования |
|
||||||
(используются программатором-отладчиком PICkit 2) и со входом запроса |
|
||||||||||
прерывания, а порта C – со схемами интервального таймера T1, широтно- |
|
||||||||||
импульсного модулятора, последовательной шины и последовательного |
|
||||||||||
порта. Кроме того, |
ко входам порта B могут быть подключены внутренние |
|
|||||||||
подтягивающие резисторы. |
|
|
|
|
|
|
|
|
|||
В схеме лабораторного макета выводы |
параллельных |
портов |
|||||||||
распределены следующим образом: RA0 |
– |
вход |
аналого-цифрового |
|
|||||||
преобразователя, RA2 и RA3 – выходы |
к |
которым |
подключен |
||||||||
пьезокерамический |
звукоизлучатель BZ1, |
RA5 – |
верхний |
желтый |
|
||||||
светодиод HL1, RC0 – зеленый светодиод HL2, RC1 – красный светодиод |
|
||||||||||
HL3, RC2 – выход ШИМ, RC3 – нижний желтый светодиод HL4, RC4 – |
|
||||||||||
зеленая полоса HL5, RC5 – лунно-белый |
светодиод HL6, RC6 – выход |
|
|||||||||
последовательного |
порта |
ввода-вывода, RC7 – |
вход |
последовательного |
|
||||||
порта ввода-вывода, RB0 – кнопка SA6, RB1 – кнопка SA5, RB2 – кнопка |
|
||||||||||
SA4, RB3 – вход |
низковольтного |
программирования, RB4 – кнопка SA3, |
|
||||||||
RB5 – кнопка SA2, RB6 – вход синхронизации |
программатора-отладчика |
|
|||||||||
PICkit 2 и RB7 – вход данных программатора-отладчика PICkit 2. |
|
|
|||||||||
Для |
управления |
работой |
портов |
ввода-вывода |
используются |
||||||
следующие РСН: |
|
|
|
|
|
|
|
|
|
|
|
TRISA, TRISB и TRISC определяют |
направление |
передачи |
|||||||||
информации через порты ввода-вывода, при записи логического«0» в |
|
||||||||||
какой -либо разряд регистраTRIS соответствующий разряд порта ввода- |
|
||||||||||
вывода начинает работать как выход, а при записи «1» – как вход. Легко |
|
||||||||||
запомнить: «0» как «O» – «Output», «1» как «I» – «Input». |
|
|
|
||||||||
PORTA, PORTB и PORTC – |
регистры портов |
ввода-вывода, если |
|
||||||||
порт настроен на вывод информации, то |
запись «0» или |
«1» в |
|
||||||||
определенный |
|
разряд |
этих |
регистров |
приводит |
к |
появлен |
соответствующего сигнала на выходах параллельного порта, если же порт настроен на ввод информации, то из этих регистров можно считать фактические логические уровни, присутствующие на входах параллельного порта (не зависимо от того, что было записано в эти регистры ранее).
31

ADCON1 определяет, какие из выводов порта A будут использоваться для ввода аналогового сигнала, а какие для ввода или вывода цифрового, в схеме данного макета аналоговый сигнал подается на выводRA0, поэтому перед использованием порта A в качестве порта ввода-вывода необходимо записать в регистр ADCON1 число H'0E'.
OPTION_REG позволяет подключить ко входам портаB внутренние подтягивающие резисторы и определяет вызов внешнего прерывания по переднему или заднему фронту импульса на выводеRB0. Сброс в «0» разряда OPTION_REG.-RBPU приводит к подключению внутренних подтягивающих регистров, а установка в«1» – к отключению, «0» в разряде OPTION_REG.INTEDG – прерывание по заднему фронту сигнала
на входе RB0, «1» – по переднему.
Порядок выполнения работы
В данной лабораторной работе необходимо разработать и отладить
программу, реализующую |
|
обращение |
к |
портам |
ввода-вывода |
|
микроконтроллера |
PIC16F873A. |
Конкретное |
|
задание |
выдается |
|
преподавателем. |
|
|
|
|
|
|
В качестве примера рассмотрим следующее задание. В исходном |
||||||
состоянии все светодиоды погашены, звуковой сигнал не подается. После |
||||||
нажатия кнопки SA2 выдается |
звуковой сигнал |
частотой1 кГц. После |
||||
нажатия кнопки SA3 включается красный светодиод в мигающем режиме. |
||||||
После нажатия кнопки SA4 схема возвращается в исходное состояние. |
||||||
Постановка задачи |
|
|
|
|
|
|
Представим исходную словесную форму задания в |
виде графа |
|||||
переходов (рис. 3.1.). |
|
|
|
|
|
|
Рис. 3.1. Граф переходов по программе
32

Разработка алгоритма программы
Укрупненный алгоритм основной программы приведен на рис. 3.2.
Поскольку |
в |
программе |
многократно |
используется |
блок |
выдержки |
времени, |
то |
данная последовательность |
команд оформлена |
в виде |
||
подпрограммы, алгоритм которой приведен на рис. 3.3. |
|
|
Рис. 3.2. Блок-схема алгоритма основной программы
33
В |
первом |
|
блоке |
алгоритма |
|
подключается |
текстовый |
файл |
с |
|||||||
символьными |
|
обозначениями |
, |
РСНприсваиваются |
|
символьные |
|
|||||||||
наименования трем регистрам общего назначения, выполняющим роль |
|
|||||||||||||||
счетчиков времени, задается адрес вектора сброса и начальный адрес |
|
|||||||||||||||
основной программы, производится настройка параллельных портов ввода- |
|
|||||||||||||||
вывода на соответствующий режим работы. |
|
|
|
|
|
|
|
|
||||||||
Порты |
А |
и, |
|
к С которым |
подключены |
|
светодиоды |
и |
||||||||
пьезокерамический звукоизлучатель, настраиваются на вывод информации, |
|
|||||||||||||||
а порт В, к которому подключены контакты кнопок, – на ввод. К выводам |
|
|||||||||||||||
порта В подключаются внутренние подтягивающие резисторы. |
|
|
|
|
||||||||||||
Блоки со второго по пятый соответствуют |
исходному |
состоянию |
|
|||||||||||||
графа. Во втором и третьем блоках осуществляется гашение светодиода и |
|
|||||||||||||||
выключение звукоизлучателя. В четвертом и пятом блоках производится |
|
|||||||||||||||
опрос состояния контактов кнопок. Если контакты кнопокSA2 и SA3 |
|
|||||||||||||||
разомкнуты, то программа возвращается |
на метку 10М и |
данный |
цикл |
|
||||||||||||
повторяется заново. Если нажата кнопка SA2, то осуществляется переход |
|
|||||||||||||||
на метку М30, а если нажата SA3, то – М20. |
|
|
|
|
|
|
|
|
||||||||
Блоки с шестого по одиннадцатый отвечают за мигание красного |
|
|||||||||||||||
светодиода. В шестом блоке происходит подача питания на светодиод. |
|
|||||||||||||||
Седьмой блок вызывает подпрограмму выдержки времени длительностью |
|
|||||||||||||||
1 с. В восьмом блоке питание со светодиода снимается. Девятый блок |
|
|||||||||||||||
вызывает |
подпрограмму |
выдержки |
времени |
длительностью0,5 |
с. В |
|
||||||||||
десятом и одиннадцатом блоках производится опрос состояния контактов |
|
|||||||||||||||
кнопок. Если |
контакты |
кнопокSA2 и |
SA4 разомкнуты, то |
программа |
|
|||||||||||
возвращается на метку 20М и данный цикл повторяется заново. Если |
|
|||||||||||||||
нажата кнопка SA2, |
то |
осуществляется |
переход |
на |
метку 30,М а |
если |
|
|||||||||
нажата SA4, то – М10. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
Блоки |
с |
двенадцатого |
по |
семнадцатый |
обеспечивают |
подачу |
||||||||||
звукового сигнала. В двенадцатом блоке формируется передний фронт |
|
|||||||||||||||
импульса, подаваемого на звукоизлучатель. Тринадцатый блок вызывает |
|
|||||||||||||||
подпрограмму выдержки времени длительностью 0,5 мс. В четырнадцатом |
|
|||||||||||||||
блоке |
формируется |
|
задний |
фронт |
, имподавульсаемого |
|
на |
|
||||||||
звукоизлучатель. |
Пятнадцатый |
блок |
|
снова |
вызывает |
подпрограмму |
|
|||||||||
выдержки времени, длительностью 0,5 с. В шестнадцатом и семнадцатом |
|
|||||||||||||||
блоках производится опрос состояния контактов кнопок. Если контакты |
|
|||||||||||||||
кнопок SA3 и SA4 разомкнуты, то программа возвращается на метку М30 |
|
|||||||||||||||
и данный цикл повторяется заново. Если нажата кнопкаSA3, то |
|
|||||||||||||||
осуществляется переход на метку М20, а если нажата SA4, то – М10. |
|
|
|
|||||||||||||
Перед |
вызовом |
подпрограммы |
|
выдержки времени в регистры- |
|
|||||||||||
счетчики |
необходимо |
|
записать |
определенные |
|
числовые |
. значения |
|||||||||
Методика расчета этих значений приведена ниже. |
|
|
|
|
|
|
|
|||||||||
Во-первых, необходимо определить количество регистров-счетчиков. |
|
|||||||||||||||
Тактовая |
частота |
микроконтроллераPIC16F873A в |
лабораторном макете |
|
34

равна 4 МГц, а длительность машинного цикла– четырем периодам тактовой частоты, или 1 мкс. Большинство команд микроконтроллера выполняются за один машинный цикл, исключение составляют команды перехода, вызова и возврата из подпрограмм, которые выполняются за два цикла. Проще всего реализовать цикл требуемой длительности, используя следующие команды:
T10: |
DECFSZ |
CNT,F |
;уменьшение значения счетчика на 1, |
|
|
|
;скачек если 0 |
|
GOTO |
T10 |
;возврат к декременту счетчика. |
Команда DECFSZ выполняется за один машинный цикл, а GOTO за два, т. е. время выполнения цикла составляет3 мкс.* При использовании одного регистра-счетчика можно сформировать выдержку времениT от 3 до 3·28=768 мкс, при использовании двух регистров-счетчиковT ≤ 3·216=196 608 мкс, при использовании трех регистров T ≤ 3·224=50 331 648 мкс и т. д. В нашем примере достаточно трех регистров-счетчиков.
Рис. 3.3. Блок-схема алгоритма подпрограммы выдержки времени
*Длительность цикла можно увеличить, добавив в него необходимое количество холостых команд NOP.
35
Во-вторых , необходимо вычислить числовые значения, помещаемые в каждый из этих регистров. Число циклов старшего регистра определяется
|
|
|
|
|
|
|
|
|
|
æ T |
- H·2 |
16 |
ö |
|
||
|
|
|
|
T |
|
|
|
|
ç |
|
|
÷ |
|
|||
|
|
|
|
|
|
|
3 |
|
||||||||
по формуле |
H = |
|
|
|
, число |
циклов второго регистра– |
M = |
è |
|
|
|
ø |
, а |
|||
3· 2 |
16 |
|
|
|
||||||||||||
|
|
|
|
|
28 |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
младшего – L = |
T |
- (H·216 + M·28 ). Рассчитывается количество полных циклов, |
||||||||||||||
|
||||||||||||||||
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
т. е. полученные значения округляются в меньшую сторону. |
|
|
|
|
|
|
||||||||||
В-третьих, необходимо |
учесть, что |
в команде DECFSZ |
сначала |
|||||||||||||
выполняется декремент и лишь потом сравнение содержимого регистра с |
||||||||||||||||
нулем (преддекремент), т. е. |
в начале первого цикла число, записанное в |
|||||||||||||||
регистр, будет уменьшено на единицу, что приведет к ошибке в |
|
счете. |
||||||||||||||
Такая ошибка может оказаться фатальной, если число циклов равно нулю. |
||||||||||||||||
Поэтому к |
вычисленным |
значениям |
необходимо |
прибавить |
|
единицу: |
CNT_H = H +1, CNT_M = M +1, CNT_L = L +1. Эти значения заносятся в регистры-счетчики перед вызовом подпрограммы выдержки времени.
Алгоритм самой подпрограммы выдержки времени включает блоки с восемнадцатого по двадцать пятый. Вход в подпрограмму осуществляется по метке 10Т . В девятнадцатом, двадцать первом и двадцать третьем блоках производится последовательный декремент регистров-счетчиков, а в двадцатом, двадцать втором и двадцать четвертом– сравнение значений этих счетчиков с нулем. При обнулении всех счетчиков в двадцать пятом блоке происходит выход из подпрограммы.
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки |
|
||
|
#include |
p16f873a.inc |
|
|
__CONFIG |
_HS_OSC |
; |
CNT_L: |
EQU |
H'20' |
;определение младшего регистра счетчика |
CNT_M: |
EQU |
H'21' |
;определение среднего регистра счетчика |
CNT_H: |
EQU |
H'22' |
;определение старшего регистра счетчика |
|
ORG |
H'000' |
;вектор сброса |
|
GOTO |
H'05' |
;переход на адрес, следующий |
|
|
|
;за вектором прерыв. |
|
ORG |
H'05' |
;начало основной программы |
|
BCF |
STATUS,RP1 |
;выбираем банк регистров 1 |
|
BSF |
STATUS,RP0 ;| |
|
|
MOVLW |
B'00001110' |
;задаем аналоговый входPORTA,0 |
|
MOVWF |
ADCON1 |
;программируем регистр АЦП1 |
|
MOVLW |
B'00000001' |
;PORTA,7-1 выходы, PORTA,0 вход |
|
MOVWF |
TRISA |
;программируем регистр направления PORTA |
|
MOVWF |
OPTION_REG;включаем подтягивающие резисторы PORTB |
36
|
MOVLW |
B'11111111' |
;PORTB,7-0 входы |
|
MOVWF |
TRISB |
;программируем регистр направления PORTB |
|
MOVLW |
B'11000000' |
;PORTC,7-6 вход, PORTC,5-0 выходы |
|
MOVWF |
TRISC |
;программируем регистр направления PORTC |
;исходное состояние |
|
|
|
M10: |
BCF |
STATUS,RP1 ;выбираем банк регистров 0 |
|
|
BCF |
STATUS,RP0 ;| |
|
|
CLRF |
PORTC |
;гасим все светодиоды и выключаем пищалку |
|
CLRF |
PORTA |
;| |
|
BTFSS |
PORTB,5 |
;скачок, если не нажата кнопкаSA2 |
|
GOTO |
M30 |
;переход к включению пищалки |
|
BTFSS |
PORTB,4 |
;скачок, если не нажата кнопкаSA3 |
|
GOTO |
M20 |
;переход к включению светодиода HL3 |
|
GOTO |
M10 |
;возврат к исходному состоянию |
;включение мигания красного светодиода HL3 |
|||
M20: |
BSF |
PORTC,1 |
;включаем HL3 на 1 с |
|
MOVLW |
D'6' |
;задаем начальное значение старшего счетчика |
|
MOVWF |
CNT_H |
;| |
|
MOVLW |
D'23' |
;задаем начальное значение среднего счетчика |
|
MOVWF |
CNT_M |
;| |
|
MOVLW |
D'22' |
;задаем начальное значение |
|
|
|
;младшего счетчика |
|
MOVWF |
CNT_L |
;| |
|
CALL |
T10 |
;вызов подпрограммы выдержки времени |
|
BCF |
PORTC,1 |
;гасим HL3 на 0,5 с |
|
MOVLW |
D'3' |
;задаем начальное значение старшего счетчика |
|
MOVWF |
CNT_H |
;| |
|
MOVLW |
D'140' |
;задаем начальное значение среднего счетчика |
|
MOVWF |
CNT_M |
;| |
|
MOVLW |
D'11' |
;задаем начальное значение |
|
|
|
;младшего счетчика |
|
MOVWF |
CNT_L |
;| |
|
CALL |
T10 |
;вызов подпрограммы выдержки времени |
|
BTFSS |
PORTB,5 |
;скачок, если не нажата кнопкаSA2 |
|
GOTO |
M30 |
;переход к включению пищалки |
|
BTFSS |
PORTB,2 |
;скачок, если не нажата кнопкаSA4 |
|
GOTO |
M10 |
;переход к исходному состоянию |
|
GOTO |
M20 |
;возврат к включению светодиода HL3 |
;включение пищалки |
|
|
|
M30: |
BCF |
PORTC,1 |
;гасим HL3 |
|
BSF |
PORTA,2 |
;подаем на пищалку импульс длительностью |
|
|
|
0,5 мс |
|
MOVLW |
D'1' |
;задаем начальное значение старшего счетчика |
|
MOVWF |
CNT_H |
;| |
|
MOVLW |
D'1' |
;задаем начальное значение среднего счетчика |
|
MOVWF |
CNT_M |
;| |
|
MOVLW |
D'168' |
;задаем начальное значение |
|
|
|
;младшего счетчика |
|
MOVWF |
CNT_L |
;| |
37
|
CALL |
T10 |
;вызов подпрограммы выдержки времени |
|
BCF |
PORTA,2 |
;подаем на пищалку интервал, |
|
|
|
;длительностью 0,5 мс |
|
MOVLW |
D'1' |
;задаем начальное значение старшего счетчика |
|
MOVWF |
CNT_H |
;| |
|
MOVLW |
D'1' |
;задаем начальное значение среднего счетчика |
|
MOVWF |
CNT_M |
;| |
|
MOVLW |
D'168' |
;задаем начальное значение |
|
|
|
;младшего счетчика |
|
MOVWF |
CNT_L |
;| |
|
CALL |
T10 |
;вызов подпрограммы выдержки времени |
|
BTFSS |
PORTB,4 |
;скачок, если не нажата кнопкаSA3 |
|
GOTO |
M20 |
;переход к включению светодиода |
|
BTFSS |
PORTB,2 |
;скачок, если не нажата кнопкаSA4 |
|
GOTO |
M10 |
;переход к исходному состоянию |
|
GOTO |
M30 |
;возврат к включению пищалки |
;подпрограмма выдержки времени |
|
||
T10: |
DECFSZ |
CNT_L,F |
;уменьшение младшего счетчика |
|
|
|
;на 1, скачок, если 0 |
|
GOTO |
T10 |
;возврат к декременту счетчика |
|
DECFSZ |
CNT_M,F |
;уменьшение среднего счетчика |
|
|
|
;на 1, скачок, если 0 |
|
GOTO |
T10 |
;возврат к декременту счетчика |
|
DECFSZ |
CNT_H,F |
;уменьшение старшего счетчика |
|
|
|
;на 1, скачок, если 0 |
|
GOTO |
T10 |
;возврат к декременту счетчика |
|
RETURN |
|
;выход из подпрограммы |
|
END |
|
;конец программы |
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
38
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему алгоритма и текст программы на языке Ассемблер с исправлениями, возникшими на этапе отладки.
Контрольные вопросы
1. Что называется мультиплексированием портов ввода/вывода?
2. Какое значение следует записать в регистрTRISB, чтобы настроить вывод 3 порта PORTB как выход?
3.Как организована выдержка времени в предложенном алгоритме? Существуют ли другие способы организации выдержки времени в микроконтроллерах?
4.Каким образом происходит формирование звукового сигнала, подаваемого на пьезоизлучатель?
5.Предположим, микроконтроллер тактируется частотой200КГц.
Какое |
максимальное |
значение |
выдержки |
времени |
можно |
обеспечить, используя один регистр-счетчик? |
|
|
39
ЛАБОРАТОРНАЯ РАБОТА 4 Изучение работы последовательных портов
|
|
|
микроконтроллеров PIC-micro |
|
|
|
||||
|
Цель |
работы: |
изучение |
работы |
и |
программирование |
||||
последовательных портов микроконтроллера PIC16F873A. |
|
|
||||||||
|
Микроконтроллер PIC16F873A имеет |
два последовательных |
порта |
|||||||
ввода-вывода: синхронный последовательный порт MSSP и универсальный |
||||||||||
синхронно-асинхронный передатчик USART. |
|
|
|
|
||||||
|
Синхронный |
последовательный |
портMSSP |
предназначен |
для |
|||||
организации |
связи |
микроконтроллера |
с |
периферийными |
микросхемами |
|||||
или другими микроконтроллерами. При этом возможно |
использование |
|||||||||
двух интерфейсов: последовательный периферийный интерфейс SPI, либо |
||||||||||
двухпроводная последовательная шина для связи интегральных микросхем |
||||||||||
I2C. |
Для |
соединения |
черезSPI |
используются |
четыре |
вывода |
||||
микроконтроллера: -SS – выбор ведомого, SCK – тактовый сигнал, SDI – |
||||||||||
вход |
принимаемых |
данных |
иSDO – выход |
передаваемых |
данных. Для |
подключения к последовательной шине I2C используются два вывода: SCL
– тактовый сигнал и SDA – данные. В лабораторном макете порт MSSP не задействован.
Универсальный синхронно-асинхронный приемопередатчикUSART предназначен для организации связи микроконтроллера с персональным либо промышленным компьютером по интерфейсамRS-232, RS-422 или RS-485. В лабораторном макете реализован интерфейсRS-232 без аппаратного управления потоком, позволяющий передавать и принимать какую -либо информацию от COM порта персонального компьютера. При этом в схеме задействованы выводы микроконтроллера: TX – выход передаваемых данных иRX – вход принимаемых данных, а также микросхема ILX232N, предназначенная для согласования уровней сигналов
на выводах последовательного порта микроконтроллера и персонального компьютера. Кроме того, к выводам TX и RX через инверторы подключены
светодиоды HL8 и HL9, позволяющие |
контролировать наличие |
|
сигналов |
||||
передачи и приема. |
|
|
|
|
|
|
|
Передача |
и |
прием |
информации |
по |
интерфейсуRS-232 |
||
осуществляются в асинхронном дуплексном режиме. |
|
|
|
||||
Для |
управления |
работой |
портов |
ввода-вывода |
используются |
следующие РСН:
TXREG – регистр данных передатчика;
RCREG – регистр данных приемника;
TXSTA – регистр управления и статуса передатчика; RCSTA – регистр управления и статуса приемника; SPBRG – регистр генератора скорости обмена.
40

Если в программе используется обработка прерываний, то дополнительно задействуются регистры:
PIR1 – регистр флагов прерываний периферийных модулей;
PIE1 – регистр масок прерываний периферийных модулей. Назначение отдельных разрядов регистраTXSTA представлено на
рис. 4.1, а RCSTA – на рис. 4.2.
Рис 4.1. Регистр управления и статуса передатчика TXSTA
В асинхронном режиме скорость обмена информацией зависит от коэффициента деления генератора скорости обмена, который задается записью определенного числа в регистрSPBRG и «0» либо «1» в разряд BRHG регистра TXSTA. Если BRHG = 0, то скорость обмена определяется
по формуле VПЕР = |
64(X +1) , где FOSC – частота тактового генератора, а X – |
|
FOSC |
число, записанное |
в регистр генератора скорости обменаSPBRG. Если |
41

BRHG = 1, то скорость обмена определяется по формуле VПЕР |
= |
16(X +1) . |
|
|
|
|
FOSC |
Рис. 4.2. Регистр управления и статуса приемника RCSTA
Структурная схема передатчикаUSART в приведена на рис. 4.3. Основным элементом программно не доступный сдвиговый
асинхронном |
режиме |
|
в этой |
схеме |
является |
регистр |
передатчикаTSR, |
42

осуществляющий преобразование информации из параллельного вида в последовательный. Для загрузки данных в регистрTSR используется буферный регистр специального назначенияTXREG, расположенный в банке 0. После записи данных в регистрTXREG проверяется, что регистр TSR свободен (предыдущая передача завершена) и содержимое регистра
TXREG копируется в |
регистрTSR. Освобождение |
регистра TXREG для |
|||||
новой информации |
подтверждается установкой «1»в |
флага |
TXIF в |
||||
регистре |
PIR1. Если |
передача |
разрешена записью«1» в |
разряд TXEN |
|||
регистра |
TXSTA, то |
на вход синхронизации регистраTSR начинают |
|||||
поступать |
импульсы |
от |
генератора |
скорости , |
которыеобмена |
осуществляют сдвиг информации вTSR от старших разрядов к младшим. Из нулевого разряда регистраTSR данные поступают через буферную схему на вывод TX.
Скорость передачи зависит от коэффициента деления генератора скорости обмена, который задается записью определенного числа в регистр
SPBRG и «0» либо «1» в разряд BRHG регистра TXSTA.
Рис. 4.3. Структурная схема передатчика USART
В дополнение к восьми разрядам, копируемым из регистра TXREG, может передаваться девятый разряд, обыкновенно используемый для обнаружения ошибок при передаче путем проверки на четность. Если разряд TX9 регистра TXSTA сброшен, то девятый разряд не передается, если взведен, то передается. Значение же самого девятого разряда задается программно, записью «0» или «1» в разряд TX9D регистра TXSTA. Кроме
того, |
к передаваемому байту информации автоматически |
в начале |
добавляется нулевой стартовый бит, а в конце– единичный стоповый. |
||
После |
окончания передачи и освобождения регистраTSR взводится |
флаг |
43

TRMT регистра TXSTA. Работа USART может быть полностью запрещена записью «0» в разряд SPEN регистра RCSTA.
Для передачи одного информации черезUSART необходимо выполнить следующую последовательность действий:
–установить требуемую скорость передачи с помощью регистра
SPBRG и бита BRHG в регистре TXSTA;
–выбрать асинхронный режим сбросом битаSYNC в «0» и установкой бита SPEN в «1»;
–если необходимо, разрешить прерывания установкой битаTXIE в регистре PIE1 в «1» (биты GIE и PEIE в регистре INTCON также должны быть установлены в «1»);
–если передача 9-разрядная, установить бит TX9 в «1» и записать 9-
йбит данных в TX9D;
–разрешить передачу установкой бита TXEN в «1»;
–записать данные в регистр TXREG;
Структурная схема приемникаUSART в асинхронном режиме приведена на рис. 4.4.
|
Рис. 4.4. Структурная схема приемника USART |
||||
В |
этой |
схеме |
главным |
является |
сдвиговый RSR,регистр |
осуществляющий преобразование последовательного кода, поступающего |
|||||
на вход |
приемника, в параллельный. |
Работа приемника так же, как и |
44
передатчика разрешается либо запрещается записью, соответственно, «1» или «0» в разряд SPEN регистра RCSTA, а также установкой либо сбросом разряда CREN регистра RCSTA. Если прием разрешен, то сигнал с входа RX попадает на мажоритарный детектор, назначение которого – с максимальной достоверностью определить логический уровень сигнала, поступающего в данном импульсе. Далее последовательный код поступает
на вход сдвигового регистраRSR. На вход синхронизации этого же регистра поступают тактовые импульсы от генератора скорости обмена. Частота следования данных импульсов равна частоте синхронизации передатчика (скорость приема и передачи одинаковы).
После поступления стопового импульса и заполнения регистраRSR, байт данных копируется в двухуровневый буфер приемника, построенный по принципу «первым пришел – первым вышел» FIFO, но только в том случае, если он заполнен не полностью. Считать данные из буфера можно, обратившись к РСНRCREG (чтобы считать оба байта, необходимо команду считывания повторить). Девятый бит копируется в разрядRX9D регистра RCSTA, но только в том случае, если это разрешено записью «1» в разряд RX9 этого же регистра.
Окончание приема информации приводит к установке в единичное значение флага RCIF в регистре PIR1 и генерации запроса прерывания, если это прерывание было разрешено записью«1» в разряд RCIE регистра
PIE1.
При наличии помех в линии связи возможно нарушение правильной работы приемника. В микроконтроллере PIC16 детектируются всего два вида ошибок: ошибка кадра и переполнение буфераFIFO. Ошибка кадра возникает при потере стартового или стопового импульсов, недостоверная информация из регистраRSR не копируется, но взводится флагFERR в регистре RCSTA. Переполнение буфера FIFO может произойти, если предыдущая информация не была из него вовремя считана. Тогда данные, находящиеся в регистре RSR, будут потеряны, но взведется флаг OERR в регистре RCSTA.
Рекомендуемые действия при приеме данных в асинхронном режиме:
–установить требуемую скорость передачи с помощью регистра
SPBRG и бита BRHG в регистре TXSTA;
–выбрать асинхронный режим сбросом битаSYNC в «0» и установкой бита SPEN в «1»;
–если необходимо, разрешить прерывания установкой битаRCIE в регистре PIE1 в «1» (биты GIE и PEIE в регистре INTCON также должны быть установлены в «1»);
–если прием 9-разрядный, установить бит RX9 в «1»;
–разрешить прием установкой бита CREN в «1»;
–ожидать установку битаRCIF, или прерывание, если оно было разрешено;
45
–проверить флаги ошибок и, если прием 9-разрядный, считать 9-й разряд из бита RX9D;
–считать 8 бит данных из регистра RCREG;
–при возникновении ошибки переполнения буфераFIFO сбросить
бит RCEN в «0».
Для работы с последовательным портом персонального компьютера можно воспользоваться программойHyper Terminal, входящей в состав операционной системы Windows. При этом в свойствахCOM порта необходимо указать: скорость (бит/с): 19200, биты данных: 8, четность: нет, стоповые биты: 1, управление потоком: нет.
Порядок выполнения работы
Вданной лабораторной работе необходимо разработать и отладить программу, реализующую передачу данных между микроконтроллером PIC16F873A и персональным компьютером. Конкретное задание выдается преподавателем.
Вкачестве примера рассмотрим следующее задание. В исходном состоянии все светодиоды погашены, передача по USART отсутствует. После ввода в Hyher Terminalе номера светодиода (с первого по шестой) загорается соответствующий светодиод (с HL1 по HL6) на печатной плате макета. При вводе цифры«ноль» все светодиоды гаснут. При нажатии одной из кнопок сSA2 по SA6 на печатной плате в окне Hyher Terminalа высвечивается ее номер.
Постановка задачи
Представим исходную словесную форму в виде таблиц.
Таблица 4.1
Включение светодиодов
Принимаемые символы |
HL1 |
HL2 |
HL3 |
HL4 |
HL5 |
HL6 |
|
|
|
|
|
|
|
1 |
1 |
~ |
~ |
~ |
~ |
~ |
|
|
|
|
|
|
|
2 |
~ |
1 |
~ |
~ |
~ |
~ |
|
|
|
|
|
|
|
3 |
~ |
~ |
1 |
~ |
~ |
~ |
|
|
|
|
|
|
|
4 |
~ |
~ |
~ |
1 |
~ |
~ |
|
|
|
|
|
|
|
5 |
~ |
~ |
~ |
~ |
1 |
~ |
|
|
|
|
|
|
|
6 |
~ |
~ |
~ |
~ |
~ |
1 |
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
Любой другой символ |
~ |
~ |
~ |
~ |
~ |
~ |
|
|
|
|
|
|
|
46
|
|
|
|
|
Таблица 4.2 |
|
|
|
Передаваемые символы |
||
|
|
|
|
|
|
SA2 |
SA3 |
SA4 |
SA5 |
SA6 |
Передаваемые символы |
|
|
|
|
|
|
1 |
1 |
1 |
1 |
1 |
- |
|
|
|
|
|
|
0 |
1 |
1 |
1 |
1 |
2 |
|
|
|
|
|
|
1 |
0 |
1 |
1 |
1 |
3 |
|
|
|
|
|
|
1 |
1 |
0 |
1 |
1 |
4 |
|
|
|
|
|
|
1 |
1 |
1 |
0 |
1 |
5 |
|
|
|
|
|
|
1 |
1 |
1 |
1 |
0 |
6 |
|
|
|
|
|
|
|
Разработка алгоритма программы |
|
|
|
|
|||
Укрупненный алгоритм основной программы приведен на рис. 4.5. |
|
|||||||
Алгоритм подпрограммы передачи символа приведен |
на. |
4рис.6, |
а |
|
||||
драйвера прерываний от приемника на рис. 4.7. |
|
|
|
|
||||
В первом |
блоке |
алгоритма |
подключается |
текстовый |
файл |
с |
||
символьными |
обозначениями |
. РСНПрисваиваются |
символьные |
|
||||
наименования трем регистрам общего назначения, первый из которых |
|
|||||||
предназначен для хранения принятого символа, а еще два для организации |
|
|||||||
программного стека. |
|
|
|
|
|
|
|
|
Порты А и С, к которым подключены светодиоды, настраиваются на |
|
|||||||
вывод информации, а порт В, к которому подключены контакты кнопок, – |
|
|||||||
на ввод. К выводам порта В подключаются внутренние подтягивающие |
|
|||||||
резисторы. |
|
|
|
|
|
|
|
|
Разрешается |
прерывание |
от |
приемникаUSART. |
|
USART |
|
||
настраивается на высокоскоростной асинхронный режим |
работы со |
|
||||||
скоростью передачи 19200 бит/с. |
|
|
|
|
|
|
Вблоках со второго по одиннадцатый производится опрос нажатых кнопок, если хотя бы одна из кнопок нажата, то осуществляется вызов подпрограммы передачи символа, соответствующего номеру этой кнопки.
Вблоках с двенадцатого по двадцать пятый анализируется принятая через USART информация. При обнаружении символа соответствующего цифрам от 1-го до 6-ти осуществляется включение соответствующего светодиода, а при обнаружении символа «0» – гашение всех светодиодов.
Далее программа возвращается к опросу состояния кнопок.
47

Рис. 4.5. Блок-схема алгоритма основной программы
Рис. 4.6. Блок-схема алгоритма подпрограммы передачи символа
48

Блоки с двадцать шестого по двадцать девятый реализуют передачу символа, соответствующего номеру нажатой кнопки и проверку окончания передачи.
Рис. 4.7. Блок-схема алгоритма драйвера прерываний
Обработка |
прерываний, вызываемых |
приемником USART, |
производится в |
блоках с тридцатого по тридцать третий. В тридцать |
|
первом блоке |
проверяется отсутствие ошибок, если ошибок нет, то |
принятый символ сохраняется в ОЗУ, если есть ошибки, то принятый символ игнорируется.
Необходимо обратить внимание на то, что в подпрограмме драйвера прерываний изменяется содержимое рабочего регистраW и флагов признаков, располагающихся в регистреSTATUS. Поскольку вызов прерывания происходит в произвольный момент времени, такое изменение может вызвать сбой в работе основной программы. Для предотвращения этого содержимое регистровW и STATUS в начале обработчика прерываний сохраняется в ОЗУ, а в конце считывается обратно.
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки |
|
||
|
#include |
p16f873a.inc |
|
|
__CONFIG |
_HS_OSC |
; |
RCV_S: |
SET |
H'20' |
;принятый символ |
STEK_0: |
SET |
H'21' |
;программный стек данных |
STEK_1: |
SET |
H'22' |
;| |
|
ORG |
H'000' |
;вектор сброса |
|
GOTO |
BEGIN |
;переход на начало основной программы |
|
ORG |
H'004' |
;вектор прерывания |
49
|
GOTO |
INT |
;переход к обработчику прерываний |
;начало основной программы |
|
||
BEGIN: |
BCF |
STATUS,RP1 ;выбираем банк регистров 1 |
|
|
BSF |
STATUS,RP0 ;| |
|
;задаем режимы работы параллельных портов |
|||
|
MOVLW |
B'00001110' |
;задаем аналоговый входPORTA,0 |
|
MOVWF |
ADCON1 |
;программируем регистр АЦП1 |
|
MOVLW |
B'00000001' |
;PORTA, 7-1 выходы, PORTA, 0 вход |
|
MOVWF |
TRISA |
;программируем регистр направления PORTA |
|
MOVWF |
OPTION_REG;включаем подтягивающие резисторы PORTB |
|
|
MOVLW |
B'11111111' |
;PORTB, 7-0 входы |
|
MOVWF |
TRISB |
;программируем регистр направления PORTB |
|
MOVLW |
B'10000000' |
;PORTC, 7 вход, PORTC, 6-0 выходы |
|
MOVWF |
TRISC |
;программируем регистр направления PORTC |
;разрешаем прерывания от приемника USART |
|||
|
MOVLW |
B'11000000' |
;биты GIE и PEIE = 1 |
|
MOVWF |
INTCON |
;программируем регистр |
|
|
|
;управления прерываниями |
|
BSF |
PIE1,RCIE |
;разрешение прерываний |
|
|
|
;от приемника USART |
;задаем режим работы последовательного порта |
|||
|
MOVLW |
D'12' |
;скорость передачи по USART 19200 |
|
MOVWF |
SPBRG |
;программируем регистр скорости обмена |
|
MOVLW |
B'00100100' |
;разрешение передачи, высокоскоростной |
|
|
|
;асинхронный режим |
|
MOVWF |
TXSTA |
;программируем регистр статуса передатчика |
|
BCF |
STATUS,RP1 |
;выбираем банк регистров 0 |
|
BCF |
STATUS,RP0 ;| |
|
|
MOVLW |
B'10010000' |
;включение USART, разрешение приема |
|
MOVWF |
RCSTA |
;программируем регистр статуса приемника |
;проверка кнопок и передача символов |
|
||
M10: |
BCF |
STATUS,RP1 ;выбираем банк регистров 0 |
|
|
BCF |
STATUS,RP0 ;| |
|
|
BTFSC |
PORTB,5 |
;скачок, если нажата кнопкаSA2 |
|
GOTO |
M20 |
;переход к опросу SA3 |
|
MOVLW |
A'2' |
;загружаем в аккумулятор ASCII символ "2" |
|
CALL |
TSMIT |
;вызов подпрограммы передачи посылки |
M20: |
BTFSC |
PORTB,4 |
;скачок, если нажата кнопкаSA3 |
|
GOTO |
M30 |
;переход к опросу SA4 |
|
MOVLW |
A'3' |
;загружаем в аккумулятор ASCII символ "3" |
|
CALL |
TSMIT |
;вызов подпрограммы передачи посылки |
M30: |
BTFSC |
PORTB,2 |
;скачок, если нажата кнопкаSA4 |
|
GOTO |
M40 |
;переход к опросу SA5 |
|
MOVLW |
A'4' |
;загружаем в аккумулятор ASCII символ "4" |
|
CALL |
TSMIT |
;вызов подпрограммы передачи посылки |
M40: |
BTFSC |
PORTB,1 |
;скачок, если нажата кнопкаSA5 |
|
GOTO |
M50 |
;переход к опросу SA6 |
|
MOVLW |
A'5' |
;загружаем в аккумулятор ASCII символ "5" |
|
CALL |
TSMIT |
;вызов подпрограммы передачи посылки |
M50: |
BTFSC |
PORTB,0 |
;скачок, если нажата кнопкаSA6 |
50
|
GOTO |
M60 |
;переход к ожиданию и приему посылок |
|
MOVLW |
A'6' |
;загружаем в аккумулятор ASCII символ "6" |
|
CALL |
TSMIT |
;вызов подпрограммы передачи посылки |
;ожидание и прием символа |
|
||
M60: |
MOVLW |
A'1' |
;1 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTA,5 |
;включаем HL1 |
|
MOVLW |
A'2' |
;2 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTC,0 |
;включаем HL2 |
|
MOVLW |
A'3' |
;3 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTC,1 |
;включаем HL3 |
|
MOVLW |
A'4' |
;4 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTC,3 |
;включаем HL4 |
|
MOVLW |
A'5' |
;5 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTC,4 |
;включаем HL5 |
|
MOVLW |
A'6' |
;6 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSC |
STATUS,Z |
;скачок, если не равно |
|
BSF |
PORTC,5 |
;включаем HL6 |
|
MOVLW |
A'0' |
;0 сравниваем |
|
XORWF |
RCV_S,W |
;с принятым символом |
|
BTFSS |
STATUS,Z |
;скачок, если равно |
|
GOTO |
M10 |
;возврат к началу программы если нет |
|
BCF |
PORTA,5 |
;гасим HL1 |
|
CLRF |
PORTC |
;гасим остальные светодиоды |
|
GOTO |
M10 |
;возврат к началу программы если нет |
;подпрограмма передачи символа |
|
||
TSMIT: |
MOVWF |
TXREG |
;инициируем передачу |
|
NOP |
|
|
T10: |
BTFSS |
PIR1,TXIF |
;скачок, если буфер освободился |
|
GOTO |
T10 |
;иначе, ждем освобождения буфера |
|
BCF |
PIR1,TXIF |
;сброс флага освобождения буфера |
|
RETURN |
|
;возврат в основную программу |
;драйвер прерываний от приемника USART |
|||
INT: |
MOVWF |
STEK_0 |
;сохраняем аккумулятор в ОЗУ |
|
MOVF |
STATUS,W |
;сохраняем регистр статуса в ОЗУ |
|
MOVWF |
STEK_1 |
;| |
|
BTFSC |
RCSTA,OERR;проверка ошибки переполнения буфера |
|
|
GOTO |
I10 |
;переход, если есть ошибка |
|
BTFSC |
RCSTA,FERR;проверка ошибки кадра |
|
|
GOTO |
I20 |
;переход, если есть ошибка |
51
|
MOVF |
RCREG,W |
;считываем принятый символ |
|
MOVWF |
RCV_S |
;и сохраняем его в ОЗУ |
|
GOTO |
I30 |
;переход к выходу из драйвера прерывания |
I10: |
MOVF |
RCREG,W |
;очистка буфера |
|
MOVF |
RCREG,W |
;| |
|
GOTO |
I30 |
;переход к выходу из драйвера прерывания |
I20: |
BCF |
RCSTA,CREN;сброс флага ошибки кадра |
|
|
BSF |
RCSTA,CREN;| |
|
I30: |
MOVF |
STEK_1,W |
;извлекаем регистр статуса из ОЗУ |
|
MOVWF |
STATUS |
;| |
|
MOVF |
STEK_0,W |
;извлекаем аккумулятор из ОЗУ |
|
RETFIE |
|
;возврат в основную программу |
|
END |
|
;конец программы |
52
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описаны в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему алгоритма и текст программы на языке Ассемблер с исправлениями, возникшими на этапе отладки.
Контрольные вопросы
1.Какие преимущества имеет последовательная организация порта ввода/вывода перед параллельной; параллельная перед последовательной?
2.* Как видно из лабораторной работы, передача информации по последовательному интерфейсу заметно сложн, чеем по параллельному. Чем вы это объясните?
53
ЛАБОРАТОРНАЯ РАБОТА 5
Изучение работы таймеров микроконтроллеров PIC-micro
Цель работы: изучение работы и программирование таймеров микроконтроллера PIC16F873A.
Микроконтроллер PIC16F873A имеет четыре таймера TMR0, TMR1, TMR2 и WDT.
Таймер TMR0 представляет из себя 8-разрядный счетчик импульсов с 8-разрядным предделителем. В качестве источника счетных импульсов
может |
выступать |
внутренний |
тактовый |
генератор |
микроконтроллера, |
|||||||||
период следования этих импульсов равен длительности машинного цикла |
||||||||||||||
(FOSC/4), |
либо |
внешний |
сигнал, подаваемый |
на выводRA4/T0CKI |
||||||||||
микроконтроллера. Максимальная |
|
выдержка |
времени, которую |
можно |
||||||||||
сформировать |
при |
помощи |
|
таймераTMR0 |
без |
использования |
||||||||
предделителя, равна 256 периодам счетных импульсов, а с использованием |
||||||||||||||
предделителя – |
65 |
536. |
Еще |
одной |
особенностьюTMR0 |
является |
||||||||
совместное использование предделителя со сторожевым таймером WDT. |
||||||||||||||
|
Управление работой таймера осуществляется с помощью шести |
|||||||||||||
разрядов регистра OPTION_REG: бит T0SC осуществляет выбор источника |
||||||||||||||
счетных |
импульсов, |
бит T0SE |
– выбор |
переднего |
или |
заднего |
фронта |
|||||||
внешних |
счетных |
импульсов, бит PSA определяет |
использование |
|||||||||||
предделителя TMR0 либо WDT, три |
бита PS0...PS2 задают |
коэффициент |
||||||||||||
деления |
предделителя. |
Значения |
|
|
конкретных |
разрядов |
регистра |
|||||||
OPTION_REG приведены на рис. 5.1. |
|
|
|
|
|
|
|
|
||||||
|
Структурная схема таймера TMR0 приведена на рис. 5.2. Она состоит |
|||||||||||||
из |
регистра-счетчика TMR0, |
доступного для |
записи |
и |
считывания |
|||||||||
информации |
как |
регистр |
|
специального |
назначения, 8-разрядного |
|||||||||
предделителя, который программно не доступен, пяти мультиплексоров |
||||||||||||||
MUX, узла |
синхронизации |
|
внешних |
счетных |
импульсовSYNC, |
|||||||||
сторожевого таймера WDT и логического элемента Исключающее ИЛИ. |
||||||||||||||
|
Схема может работать в четырех режимах: |
|
|
|
|
|
||||||||
|
– |
счетчик |
импульсов |
внутреннего |
тактового |
генератора без |
||||||||
предделителя. Для перехода в этот режим битT0SC сбрасывается в «0», а |
||||||||||||||
PSA |
взводится |
в |
«1». |
Импульсы |
CLKOUT |
внутреннего |
тактового |
генератора проходят через два мультиплексора и узел синхронизации и поступают на вход регистра-счетчикаTMR0. Длительность временного интервала T, формируемого таймером, определяется по формуле: T = 28-N,
где N – число, записанное в регистр TMR0. После переполнения счетчика,
т. е. при |
переходе |
его значения |
изH'FF' в H'00', |
взводится флаг T0IF в |
||
регистре |
INTCON |
и |
вызывается |
прерывание, если оно разрешено |
||
установкой в «1» |
битов |
GIE и |
T0IE |
регистра |
INTCON. Необходимо |
учитывать, что далее счетчик продолжит счет со значенияH'00' (выдержка
54

времени 256 машинных циклов), т. е. для формирования очередного временного интервала требуемой длительности в регистрTMR0 необходимо снова записать рассчитанное число;
Рис. 5.1. Регистр OPTION_REG
–счетчик импульсов внутреннего тактового генератора с предделителем. Для перехода в данный режим необходимо сбросить в«0»
бит PSA. При этом импульсыCLKOUT сначала поступают на вход8разрядного предделителя, а уже с его выхода на вход регистра-счетчика TMR0. Коэффициент пересчета предделителя задается битамиPS0...PS2.
Длительность временного интервалаT, формируемого таймером, определяется по формуле: T = K(28-N), где K – коэффициент деления предделителя, а N – число, записанное в регистр TMR0. При применении предделителя увеличивается дискретность формирования временного интервала, она равна коэффициенту пересчета предделителя. В остальном работа таймера не отличается от его работы в первом режиме;
–счетчик внешних тактовых импульсов без предделителя. Для перехода в этот режим битыT0SC и PSA взводятся в «1». Импульсы с вывода T0CKI микроконтроллера поступают на вход логического элемента
55

«Исключающее ИЛИ». При состояния бита T0SE=0 эти импульсы проходят через него без инверсии и переключение счетчикаTMR0 в очередное состояние происходит по переднему фронту счетных импульсов, а при T0SE=1 счетные импульсы инвертируются и срабатывание счетчика происходит по заднему фронту. Далее счетные импульсы проходят через
два мультиплексора и |
попадают на вход схемы синхронизации, где |
происходит их стробирование во втором и четвертом машинных тактах. |
|
Таким образом, частота |
следования счетных импульсов должна быть |
меньше FOSC/2. В остальном работа таймера аналогична первому режиму;
|
|
Рис. 5.2. Структурная схема таймера TMR0 |
|
|
|
|||||||
– счетчик внешних тактовых импульсов с предделителем. Для перехода |
|
|||||||||||
в этот режим бит T0SC взводится в «1», а PSA сбрасывается в «0». Работа |
|
|||||||||||
предделителя в этом режиме аналогична режиму2, а |
работа |
самого |
|
|||||||||
счетчика – режиму 3. |
|
|
|
|
|
|
|
|
|
|
||
|
Таймер |
TMR1 |
является 16-разрядным |
счетчиком |
импульсов |
3с- |
|
|||||
разрядным |
предделителем. |
Особенностью |
данного |
таймера |
является |
|
||||||
возможность |
работы |
от |
отдельного |
низкочастотного |
кварцевого |
|||||||
резонатора, подключаемого к выводам T1OSO и T1OSI микроконтроллера, |
|
|||||||||||
а |
также |
возможность |
|
|
отключения |
узла |
. |
синхро |
||||
Вышеперечисленные |
особенности |
обеспечивают |
работоспособность |
56

таймера TMR1 в режиме микропотребления(SLEEP). Максимальная выдержка времени, которую можно сформировать при помощи таймера TMR1 без использования предделителя равна65 536 периодам счетных импульсов, а с использованием предделителя – 524 288.
Управление работой таймера осуществляется с помощью регистра специального назначения T1CON: бит TMR1ON включает таймер TMR1, бит TMR1CS задает источник счетных импульсов(счетный вход или тактовый генератор микроконтроллера), бит -T1SYNC включает или выключает узел синхронизации, бит T1OSCEN осуществляет включение внутреннего тактового генератора таймераTMR1, а биты T1CKPS0 и T1CKPS1 задают коэффициент деления входного предделителя. Конкретные значения разрядов регистра T1CON приведены на рис. 5.3.
Рис. 5.3. Регистр управления таймера 1 T1CON
Структурная схема таймера TMR1 приведена на рис. 5.4. Она состоит
из 16-разрядного регистра-счетчика TMR1, доступного для записи и считывания информации через два регистра специального назначения–
57

TMR1H и TMR1L, 3-разрядного предделителя, который программно не доступен, двух мультиплексоров, узла синхронизации внешних счетных импульсов, логического элемента ,Итриггера Шмитта и инвертора, выполняющего роль генератора тактовых импульсов.
Схема может работать в трех режимах.
Счетчик импульсов внутреннего тактового генератора. Для перехода
в этот режим необходимо |
взвести «1»в бит TMR1ON, а |
бит TMR1SC |
|||||
сбросить |
в «0». Импульсы |
внутреннего тактового |
генератора |
частотой |
|||
FOSC/4 проходят через мультиплексор, предделитель, узел синхронизации, |
|||||||
второй |
мультиплексор, логический |
элемент |
И и |
поступают |
на вход |
||
регистра-счетчика TMR0. |
Длительность |
временного |
интервалаT, |
||||
формируемого таймером, определяется по формуле: T = K(216-N), где K – |
|||||||
коэффициент деления предделителя, а N – 16-разрядное число, записанное |
|||||||
в регистры TMR1H и TMR1L. После |
переполнения |
счетчика, т. е. при |
|||||
переходе |
его значения изH'FFFF' в H'0000', взводится флаг TMR1IF в |
регистре PIR1 и вызывается прерывание, если оно разрешено установкой в «1» битов GIE и T0IE регистра INTCON и бита TMR1IE в регистре PIE1. Аналогично таймеру TMR0 выдержка времени формируется однократно, т. е. для повторного запуска таймера TMR1 в регистры TMR1H и TMR1L необходимо программно загрузить расчетное значение.
Рис 5.4. Структурная схема таймера TMR1
Счетчик внешних тактовых импульсов. Для перехода в этот режим биты TMR1ON и TMR1CS взводятся в «1», а бит T1OSCEN сбрасывается в «0». Импульсы с вывода T1CKI микроконтроллера через триггер Шмитта и мультиплексор поступают на вход предделителя. Далее счетные импульсы
поступают |
на |
вход |
узла |
синхронизации. В |
рабочем |
|
режиме |
микроконтроллера, когда включен |
его тактовый |
генератор, внешние |
|||||
счетные |
импульсы |
можно |
синхронизировать |
вторым |
и |
четвертым |
|
машинным |
тактом |
микроконтроллера(аналогично таймеру TMR0), |
для |
58
этого |
бит -T1SYNC сбрасывается |
в «0». |
Перед |
переходом |
в |
режим |
|
микропотребления (команда SLEEP) узел |
синхронизации |
необходимо |
|||||
отключить, для этого бит -T1SYNC взводится в «1». В остальном работа |
|||||||
таймера аналогична первому режиму. |
|
|
|
|
|
||
Счетчик |
импульсов встроенного |
тактового генератора |
таймера |
||||
TMR1. |
Таймер |
TMR1 имеет |
собственный |
генератор |
импульсов, |
||
построенный на инверторе и низкочастотном кварцевом резонаторе, |
|||||||
подключаемом |
к выводамT1OSO и T1OSI микроконтроллера. Данный |
генератор не выключается при переходе микроконтроллера в режим микропотребления. Частота кварцевого резонатора не должна превышать 200 кГц, стандартное значение для«часового» кварцевого резонатора составляет 32 768 Гц. Для перехода в этот режим биты TMR1ON, TMR1CS
иT1OSCEN взводятся в «1». В остальном работа таймера аналогична второму режиму, в частности таймер также может продолжать свою работу
ив спящем режиме.
Таймер |
TMR2 является |
8-разрядным счетчиком импульсов |
4с- |
||||
разрядным |
предделителем |
4и-разрядным |
выходным |
делителем. |
|||
Особенностью |
данного |
счетчика |
является |
возможность |
генерации |
||
бесконечной |
последовательности |
временных |
интервалов |
заданной |
|||
длительности |
(программная |
перезагрузка |
счетчика |
не |
требуется). |
Максимальная выдержка времени, которую можно сформировать при помощи таймера TMR1 без использования делителей, равна 256 периодам счетных импульсов, а с использованием делителей – 65 536.
Управление работой таймера осуществляется с помощью регистра специального назначения T2CON: бит TMR2ON включает таймер TMR2,
биты T2CKPS0 |
и T2CKPS1 задают коэффициент |
деления |
входного |
предделителя, а |
биты TOUTPS0...TOUTPS3 – коэффициент |
деления |
|
выходного делителя. Конкретные значения разрядов |
регистра T2CON |
||
приведены на рис. 5.5. |
|
|
59

Рис. 5.5. Регистр управления таймера 2 T2CON
Структурная схема таймера TMR2 приведена на рис. 5.6. Она состоит
из 8-разрядного регистра-счетчика TMR2, |
доступного |
для |
записи и |
|||||
считывания |
информации |
как |
регистр |
специального |
назначения, 4- |
|||
разрядного |
предделителя 4-разрядного |
выходного |
делителя(программно |
|||||
не доступны), регистра периода PR2 и схемы сравнения. |
|
|
||||||
Работает схема следующим образом. Перед включением таймера |
||||||||
установкой |
в «1» бита TMR2ON необходимо |
записать в |
регистр |
периода |
||||
PR2 число импульсов, которые будет отсчитывать таймер в каждом цикле. |
||||||||
Импульсы |
внутреннего тактового генератора частотойFOSC/4 проходят |
|||||||
через предделитель и поступают на вход регистра-счетчикаTMR2. При |
||||||||
достижении |
равенства содержимого |
регистра |
периодаPR2 и |
счетчика |
TMR2 на выходе схемы сравнения вырабатывается сигналEQ, который сбрасывает счетчик в состояниеH'00' и процесс заполнения счетчика начинается заново. Через выходной делитель импульсыEQ поступают на выход таймера и взводят флагTMR2IF в регистре PIR1. Флаг TMR2IF может инициировать вызов прерывания, если оно разрешено установкой в «1» битов GIE и T0IE регистра INTCON и бита TMR2IE в регистре PIE1. Длительность временного интервалаT, формируемого таймером, определяется по формуле: T = K1·P·K2, где K1 – коэффициент деления предделителя, P – число, записанное в регистр периодаPR2, K2 – коэффициент деления выходного делителя.
60

|
Рис 5.6. Структурная схема таймера TMR2 |
|
|
|||||
Сторожевой |
таймер WDT |
предназначен |
для |
|
сброса |
|||
микроконтроллера в случае программного сбоя (зависание, зацикливание и |
|
|||||||
т. д.). При нормальной работе программы сторожевой таймер сбрасывается |
|
|||||||
командой CLRWDT, выполняемой с интервалом, не превышающим период |
|
|||||||
переполнения |
сторожевого |
таймера. В |
случае |
программного |
сбоя |
|||
сторожевой |
таймер |
переполняется |
и |
вырабатывает |
сигнал |
сброса |
||
микроконтроллера, при этом выполнение программы начнется с адреса |
||||||||
вектора сброса H'000'. |
|
|
|
|
|
|
|
|
Сторожевой таймер получает тактовые импульсы от отдельного |
||||||||
встроенного RC генератора, что обеспечивает его работу даже в режиме |
||||||||
микропотребления |
(SLEEP). |
Включение |
сторожевого |
таймера |
||||
производится установкой в «1» разряда WDTE в конфигурационной ячейке |
|
|||||||
2007. Период переполнения сторожевого таймера зависит от напряжения |
||||||||
питания микроконтроллера, температуры |
и |
технологического |
разброса |
параметров времязадающей RC цепи и составляет от7 до 33 мс. Период переполнения может быть увеличен 128до раз путем подключения выходного делителя, используемого совместно с таймером TMR0 (см. рис. 5.2). При этом бит PSA в регистре OPTION_REG взводится в «1», а биты PS0...PS2 задают коэффициент пересчета делителя.
Порядок выполнения работы
Вданной лабораторной работе необходимо разработать и отладить программу, формирующую временные интервалы при помощи таймеров микроконтроллера. Конкретное задание выдается преподавателем.
Вкачестве примера рассмотрим следующее задание. В исходном состоянии звуковой сигнал отсутствует. При нажатии на кнопкуSA6 включается прерывистый зуммер с частотой сигнала2 кГц и периодом звучания 1 с. При повторном нажатии на кнопку SA6 звук прекращается.
61

Постановка задачи
Исходную словесную форму задания можно представить в виде графа переходов (рис. 5.7), аналогично лабораторной работе 3.
|
Рис. 5.7. Граф переходов по программе |
|
|
|
|||||
Как видно из рисунка, имеется всего два состояния программы и два |
|
||||||||
перехода между ними. Единственную сложность представляет ,точто |
|
||||||||
переходы происходят по нажатию одной и той же кнопки, а как известно, |
|
||||||||
замыкание |
контактов |
происходит |
не |
мгновенно |
и |
сопровождается |
|||
явлением, |
называемым «дребезгом», т. е. многократным |
замыканием и |
|
||||||
размыканием электрической цепи. Таким образом, нельзя предугадать, в |
|
||||||||
каком из |
состояний окажется программа после очередного нажатия на |
|
|||||||
кнопку SA6. Для исключения дребезга контактов существует целый ряд |
|
||||||||
способов, |
самым |
простым |
является |
проверка |
|
замкнутого |
либо |
||
разомкнутого состояния контактов на протяжении определенного времени. |
|
||||||||
В большинстве случаев это время не превышает 50 мс. |
|
|
|
Разработка алгоритма программы
Алгоритм основной программы приведен на рис. 5.8, а алгоритм драйвера прерываний – на рис. 5.9.
Рис. 5.8. Блок-схема алгоритма основной программы
62

Рис. 5.9. Блок-схема алгоритма обработчика прерываний
63
В |
данной |
программе |
используются |
все |
три |
т |
|||
микроконтроллера PIC16F873A. TMR0 формирует |
выдержку 50 мс |
для |
|
|
|||||
защиты |
от дребезга контактов кнопки, TMR1 |
формирует выдержку |
|
|
|||||
времени длительностью пол периода звучания зуммера, т. е. 0,5 с. TMR2 |
|
|
|||||||
формирует выдержку времени, равную половине периода частоты 2 кГц. |
|
|
|||||||
В |
первом |
блоке |
алгоритма |
подключается |
текстовый |
файл |
с |
||
символьными обозначениями РСН. |
|
|
|
|
|
|
|||
Порт А, к которому подключен звукоизлучательBZ1, настраивается |
|
|
|||||||
на вывод информации, а порт В, к которому подключены контакты кнопок, |
|
|
|||||||
– на ввод. К выводам порта В подключаются внутренние подтягивающие |
|
||||||||
резисторы. |
|
|
|
|
|
|
|
|
|
Разрешаются прерывания от таймеров, а также от внешнего входа |
|
||||||||
запроса |
прерываний INT, к |
которому подключена |
кнопкаSA6. Таймеры |
|
|
||||
настраиваются на соответствующие режимы работы и выдержки времени. |
|
|
|||||||
Во втором блоке программа ожидает вызов прерываний от одного из |
|
|
|||||||
разрешенных источников. |
|
|
|
|
|
|
|
||
Вся остальная обработка происходит в драйвере прерываний. |
|
|
|
||||||
После вызова |
прерывания(блок 3) |
необходимо |
опросить |
флаги |
|
прерываний для того, чтобы определить источник, вызвавший прерывание. Необходимо учесть, что несколько флагов может ввестись одновременно.
Вблоке 4 проверяется флаг прерывания от таймера TMR0. Если флаг сброшен, то программа переходит к опросу флага прерывания от таймера TMR1. Если флаг прерывания от таймераTMR0 взведен, то проверяется состояние кнопки SA6 (блок 5), если она отпущена, то это значит, что либо дребезг контактов еще не закончился, либо дребезг контактов возник при отпускании кнопки. В данном случае программа переходит к опросу флага прерывания от таймераTMR1. Если контакты кнопки замкнуты, то программа переходит к проверке состояния таймераTMR1 (блок 6). Если таймер выключен, то он настраивается на выдержку времени0,5с и включается (блок 7), настраивается на выдержку времени250мкс и включается таймер TMR2, формирующий звуковой сигнал (блок 9). Если таймер TMR1 уже был включен, то оба таймера(TMR1 и TMR2) выключаются (блоки 8 и 10) и звуковой сигнал прекращается.
Вблоке 11 проверяется флаг прерывания от таймераTMR1. Если флаг сброшен, то программа переходит к опросу флага прерывания от таймера TMR2. Если же флаг прерывания от таймераTMR1 взведен, то проверяется состояние таймераTMR2 (блок 12). Во время звукового импульса таймер TMR2 настраивается на выдержку времени250 мкс и включается (блок 13), а во время интервала выключается (блок 14).
Вблоке 15 проверяется флаг прерывания от таймераTMR2. Если он сброшен, то программа переходит к проверке прерывания от внешнего источника (кнопка SA6). Если флаг прерывания от таймера TMR2 взведен,
64
то проверяется текущее состояние второго разряда порта А (блок 16)
и изменение его на противоположное (блоки 17 и 18). |
|
|
|
|||
В |
блоке 19 проверяется |
флаг прерывания |
от |
внешнего |
источника |
|
INTF. Если флаг сброшен, то программа выходит из драйвера прерываний |
||||||
(блок 21), если флаг взведен(произошло замыкание контактов кнопки |
||||||
SA6), то |
таймер TMR0 настраивается на выдержку |
времени50 мс и |
||||
включается (блок 20). Далее |
программа |
выходит |
из |
обработчика |
||
прерываний в основную программу до возникновения |
следующего |
|||||
прерывания. |
|
|
|
|
|
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки |
|
||
|
#include p16f873a.inc |
|
|
|
__CONFIG _HS_OSC |
;высокочастотный кварцевый резонатор |
|
|
ORG |
H'000' |
;вектор сброса |
|
GOTO |
BEGIN |
;переход на начало основной программы |
|
ORG |
H'004' |
;вектор прерывания |
|
GOTO |
INT |
;переход к обработчику прерываний |
;начало основной программы |
|
||
BEGIN: |
BSF |
STATUS,RP0 ;выбираем банк регистров 1 |
|
;задаем режимы работы параллельных портов |
|||
|
MOVLW |
B'00001110' |
;задаем аналоговый входPORTA,0 |
|
MOVWF |
ADCON1 |
;программируем регистр АЦП1 |
|
MOVLW |
B'00000001' |
;PORTA, 7-1 выходы, PORTA, 0 вход |
|
MOVWF |
TRISA |
;программируем регистр направления PORTA |
|
MOVWF |
OPTION_REG;включаем подтягивающие резисторы PORTB |
|
|
MOVLW |
B'11111111' |
;PORTB, 7-0 входы |
|
MOVWF |
TRISB |
;программируем регистр направления PORTB |
;задаем режим работы таймера TMR0 |
|||
|
MOVLW |
B'00100111' |
;коэфф. деления предделителя1:256 |
|
MOVWF |
OPTION_REG;| |
|
|
BCF |
STATUS,RP0 ;выбираем банк регистров 0 |
|
|
MOVLW |
D'60' |
;задаем выдержку времени 256*(256- |
60)=50176мкс |
|
|
|
|
MOVWF |
TMR0 |
;| |
;задаем режим работы таймера TMR1 |
|||
|
MOVLW |
B'00110000' |
;коэфф. деления предделителя 1:8 |
|
MOVWF |
T1CON |
;| |
|
MOVLW |
H'0B' |
;задаем выдержку времени |
|
|
|
;8*(65536-3036)=500000 |
|
MOVWF |
TMR1H |
;| |
|
MOVLW |
H'DC' |
;| |
|
MOVWF |
TMR1L |
;| |
;задаем режим работы таймера TMR2
65
|
MOVLW |
B'00000000' |
;коэфф. деления делителей1:1 |
|
|
MOVWF |
T2CON |
;| |
|
|
BSF |
STATUS,RP0 |
;выбираем банк регистров 1 |
|
|
MOVLW |
D'250' |
;задаем период таймера 2 |
|
|
MOVWF |
PR2 |
;| |
|
|
;разрешаем прерывания от таймеров и входа INT |
|||
|
MOVLW |
B'11110000' |
;биты GIE, PEIE, T0IE и INTE = 1 |
|
|
MOVWF |
INTCON |
;программируем регистр управления |
|
|
|
|
;прерываниями |
|
|
BSF |
PIE1,TMR1IE;разрешение прерываний от таймера 1 |
||
|
BSF |
PIE1,TMR2IE;разрешение прерываний от таймера 2 |
||
;основная программа |
|
|
||
M10: |
GOTO |
M10 |
;зацикливаемся здесь |
|
;драйвер прерываний от таймеров и внешнего входа |
||||
INT: |
BCF |
STATUS,RP0 ;выбираем банк регистров 0 |
||
|
BTFSS |
INTCON,T0IF;проверка флага прерывания от таймера 0 |
||
1 |
GOTO |
I20 |
;переход к проверке флага прерыв. от таймера |
|
BCF |
INTCON,T0IF;сброс флага прерывания от таймера 0 |
|||
|
||||
|
BSF |
STATUS,RP0 ;выбираем банк регистров 1 |
||
|
BSF |
OPTION_REG,T0CS ;выключаем таймер 0 |
||
|
BCF |
STATUS,RP0 ;выбираем банк регистров 0 |
||
|
BTFSC |
PORTB,0 |
;проверка, что кнопкаSA6 все еще нажата |
|
1 |
GOTO |
I20 |
;переход к проверке флага прерыв. от таймера |
|
BTFSS |
T1CON,TMR1ON ;проверка, что таймер1 включен |
|||
|
||||
|
GOTO |
I10 |
;переход к включению таймера 1 |
|
|
BCF |
T1CON,TMR1ON;выключение таймера 1 |
||
|
BCF |
T2CON,TMR2ON;выключение таймера 2 |
||
1 |
GOTO |
I20 |
;переход к проверке флага прерыв. от таймера |
|
|
|
|
||
I10: |
MOVLW |
H'0B' |
;задаем выдержку времени |
|
|
|
|
;8*(65536-3036)=500000 |
|
|
MOVWF |
TMR1H |
;| |
|
|
MOVLW |
H'DC' |
;| |
|
|
MOVWF |
TMR1L |
;| |
|
|
BSF |
T1CON,TMR1ON;включение таймера 1 |
||
|
BSF |
T2CON,TMR2ON;включение таймера 2 |
||
I20: |
BTFSS |
PIR1,TMR1IF;проверка флага прерывания от таймера 1 |
||
2 |
GOTO |
I40 |
;переход к проверке флага прерыв. от таймера |
|
BCF |
PIR1,TMR1IF;сброс флага прерывания от таймера 1 |
|||
|
||||
|
MOVLW |
H'0B' |
;перезапускаем таймер 1 |
|
|
MOVWF |
TMR1H |
;задаем выдержку времени |
|
|
|
|
;8*(65536-3036)=500000 |
|
|
MOVLW |
H'DC' |
;| |
|
|
MOVWF |
TMR1L |
;| |
|
|
BTFSS |
T2CON,TMR2ON;проверка, что таймер 2 включен |
||
|
GOTO |
I30 |
;переход к включению таймера 2 |
|
|
BCF |
T2CON,TMR2ON;выключение таймера 2 |
66
|
GOTO |
I40 |
;переход к проверке флага прерыв. |
|
|
|
;от таймера 2 |
I30: |
BSF |
T2CON,TMR2ON;включение таймера 2 |
|
I40: |
BTFSS |
PIR1,TMR2IF;проверка флага прерывания от таймера 2 |
|
|
GOTO |
I60 |
;переход к проверке флага |
|
|
|
;внешнего прерывания |
|
BCF |
PIR1,TMR2IF;сброс флага прерывания от таймера 2 |
|
|
BTFSS |
PORTA,2 |
;проверка, что на BZ1 '1' |
|
GOTO |
I50 |
;переход к подаче импульса на BZ1 |
|
BCF |
PORTA,2 |
;сбро с BZ1 в '0' |
|
GOTO |
I60 |
;переход к проверке флага |
|
|
|
;внешнего прерывания |
I50: |
BSF |
PORTA,2 |
;установка BZ1 в '1' |
I60: |
BTFSS |
INTCON,INTF;проверка флага внешнего прерывания |
|
|
GOTO |
I70 |
;переход к выходу из драйвера прерываний |
|
BCF |
INTCON,INTF;сброс флага внешнего прерывания |
|
|
MOVLW |
D'60' |
;задаем выдержку времени |
|
|
|
;256*(256-60)=50176мкс |
|
MOVWF |
TMR0 |
;| |
|
BSF |
STATUS,RP0 ;выбираем банк регистров 1 |
|
|
BCF |
OPTION_REG,T0CS ;включаем таймер 0 |
|
I70: |
RETFIE |
|
;выход из драйвера прерываний |
|
END |
|
;конец программы |
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
67
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему алгоритма и текст программы на языке Ассемблер с исправлениями, возникшими на этапе отладки.
Контрольные вопросы
1.Выполнением какого фрагмента программы-примера занят микроконтроллер большую часть времени?
2.Для чего нужен предделитель у таймеров-счетчиков?
3.Что такое «вектор прерывания»?
4.Каковы особенности работы сторожевого таймера?
68

ЛАБОРАТОРНАЯ РАБОТА 6 Изучение работы аналого-цифрового преобразователя
микроконтроллеров PIC-micro
Цель работы: |
изучение работы |
и |
программирование |
аналого- |
|
цифрового преобразователя микроконтроллера PIC16F873A. |
|
|
|||
Микроконтроллер PIC16F873A имеет |
пятиканальный 10-разрядный |
||||
аналого-цифровой |
преобразователь (АЦП), |
работающий |
по |
методу |
последовательного приближения.
Структурная схема аналого-цифрового преобразователя приведена на рис. 6.1. Она состоит из входного мультиплексора, мультиплексора опорного сигнала и схемы АЦП.
Рис. 6.1. Структурная схема АЦП
Измеряемое напряжение подается на аналоговые входыAN0...AN4, совмещенные с выводами параллельного порта. ВА каждом цикле аналого-цифрового преобразования измеряется напряжение, поступающее только на один из входов. Выбор конкретного входа осуществляется входным мультиплексором, на управляющие входы которого подаются сигналы битов CHS0...CHS2 регистра ADCON0. Сигнал с выхода мультиплексора VAIN поступает на вход АЦП. В качестве положительного
69

опорного |
напряжения VREF+ |
может |
использоваться |
напряжение |
|||||||||||
положительного полюса источника питания VDD либо напряжение на входе |
|
||||||||||||||
AN3, а в качестве отрицательногоVREF- |
– напряжение |
отрицательного |
|
||||||||||||
полюса источника питанияVSS |
либо напряжение на входеAN2. Выбор |
|
|||||||||||||
источника опорного напряжения осуществляется битамиPCFG0...PCFG3 |
|
||||||||||||||
регистра ADCON1. |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Аналого-цифровое преобразование начинается после установки в «1» |
|
|||||||||||||
бита GO/-DONE регистра ADCON0. |
|
|
|
|
|
|
|
|
|||||||
|
Период преобразования одного цифрового разряда TAD составляет не |
|
|||||||||||||
более 1,6 |
мкс, |
а |
суммарное |
время |
преобразования |
|
десяти |
разрядов |
|||||||
составляет 12·TAD = 19,2 мкс. Кроме |
того, |
между |
циклами аналого- |
|
|||||||||||
цифрового |
преобразования |
необходимо |
обеспечить |
паузу |
длительностью |
|
|||||||||
не |
менее 2·TAD |
= |
3,2 |
мкс, |
необходимую для |
заряда |
|
конденсатора |
в |
||||||
устройстве выборки-хранения. В качестве источника тактового сигнала |
|
||||||||||||||
может выступать тактовый генератор микроконтроллера либо внутренний |
|
||||||||||||||
RC |
генератор |
модуля |
АЦП. Выбор |
типа |
задающего |
генератора |
и |
||||||||
коэффициента |
|
деления |
частоты |
следования |
тактовых |
импульсов |
|||||||||
определяется битами ADCS0 и ADCS1 регистра ADCON0. |
|
|
|
|
|||||||||||
|
По окончании аналого-цифрового преобразования битGO/-DONE |
|
|||||||||||||
автоматически сбрасывается в «0», а бит ADIF в регистре PIR1 взводится в |
|
||||||||||||||
«1». Установка |
бита ADIF |
вызывает прерывание, |
если |
оно разрешено |
|
установкой в «1» битов GIE и PEIE в регистре INTCON, а также бита ADIE в регистре PIE1.
Рис. 6.2. Выравнивание результата аналого-цифрового преобразования
70

10-разрядный цифровой код с выхода АЦП записывается16- в разрядный регистр результата, отображенный в ОЗУ микроконтроллера на регистры специального назначения ADRESL и ADRESH. В зависимости от
состояния |
бита ADFM регистра |
ADCON1 восемь |
старших |
разрядов |
|
результата могут сохраняться в регистре ADRESH, а оставшиеся два – в |
|||||
регистре |
ADRESL (левое |
выравнивание), либо наоборот – |
восемь |
||
младших |
разрядов сохраняются |
в регистре ADRESL, а |
два старших– в |
||
регистре ADRESH (правое выравнивание). (см. рис. 6.2). |
|
|
|||
Назначение конкретных |
разрядов регистров ADCON0 и ADCON1 |
||||
приведены на рис. 6.3. и 6.4. |
|
|
|
|
Рис. 6.3. Регистр управления АЦП ADCON0
Рекомендуемая последовательность действий при работе с АЦП следующая.
Настроить модуль АЦП:
1.Настроить выводы портаA как входы измеряемого либо опорного напряжения (ADCON1).
2.Выбрать входной канал АЦП (ADCON0).
3.Выбрать источник тактовых импульсов для АЦП (ADCON0).
71

4. Включить модуль АЦП (ADCON0).
Настроить прерывание от АЦП, если это необходимо:
1.Сбросить бит ADIF регистра PIR1 в «0».
2.Установить бит ADIE регистра PIE1 в «1».
3.Установить бит PEIE регистра INTCON в «1».
4.Установить бит GIE регистра INTCON в «1». Выдержать паузу длительностью 2·TAD ≥ 3,2 мкс.
Начать аналого-цифровое преобразование установкой «1»в бита
GO/-DONE регистра ADCON0.
Ожидать окончания аналого-цифрового преобразования:
1.Ожидать пока бит GO/-DONE регистра ADCON0 не будет сброшен в «0».
2.Либо ожидать прерывание по окончании преобразования. Считать результат аналого-цифрового преобразования из регистров
ADRESL и ADRESH.
Сбросить бит ADIF регистра PIR1 в «0», если это необходимо.
Рис. 6.4. Регистр управления АЦП ADCON1
72
Порядок выполнения работы
Вданной лабораторной работе необходимо разработать и отладить программу, измеряющую напряжение на выходе потенциометраR1. Конкретное задание выдается преподавателем.
Вкачестве примера рассмотрим следующее задание. В исходном состоянии все светодиоды погашены. При повороте ручки потенциометра
R1 на одно из делений 1-сго по 6-е включается соответствующий светодиод (HL1...HL6), остальные светодиоды гаснут.
Постановка задачи
Для решения данной задачи вполне достаточно 8-разрядной точности аналого-цифрового преобразования. Весь диапазон цифровых отсчетов составляет 256 значений, а на одно деление шкалы потенциометра приходится 256/10 = 26 дискретных значений. Зависимость включения светодиодов от результатов аналого-цифрового преобразования можно представить в виде таблицы (см. табл. 6.1).
Таблица 6.1
Состояние светодиодов в зависимости от АЦП
Значение на выходе АЦП |
HL1 |
HL2 |
HL3 |
HL4 |
HL5 |
HL6 |
|
|
|
|
|
|
|
0...25 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
26...51 |
1 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
52...77 |
0 |
1 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
78...103 |
0 |
0 |
1 |
0 |
0 |
0 |
|
|
|
|
|
|
|
104...129 |
0 |
0 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
130...155 |
0 |
0 |
0 |
0 |
1 |
0 |
|
|
|
|
|
|
|
156...255 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
|
Разработка алгоритма программы
Впервом блоке алгоритма(рис. 6.5) осуществляется настройка
портов |
ввода-вывода |
и |
аналого-цифрового |
преобразователя |
н |
|||
соответствующие режимы работы и включение модуля АЦП. Нулевой |
|
|||||||
разряд порта А настраивается на ввод информации, а остальные разряды |
|
|||||||
порта А и порт С– на вывод. АЦП настраивается на работу с аналоговым |
|
|||||||
входом AN0 и напряжением |
источника |
питания |
микроконтроллера в |
|
||||
качестве |
источника |
опорного |
напряжения. При |
частоте |
кварцевого |
|
||
генератора |
4 МГц |
выбирается FOSC/8. Для |
обеспечения 8-разрядного |
|
преобразования выбирается левое выравнивание результата, при этом достаточно анализировать значение регистра ADRESH.
73

Рис. 6.5. Блок-схема алгоритма основной программы
Во втором блоке запускается аналого-цифровое преобразование, а в третьем ожидается его завершение.
Вблоках 4, 6, 8, 10, 12 и 14 производится сравнение результата аналого-цифрового преобразования с рассчитанными ранее порогами.
Вблоке 5 выключаются все светодиоды, поскольку уровень измеряемого сигнала ниже первого порога.
Вблоках 7, 9, 11, 13, 15 и 16 гасятся все светодиоды, кроме одного, в соответствии с табл. 6.1.
Далее программа возвращается к запуску следующего аналогоцифрового преобразования
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки |
|
|
#include |
p16f873a.inc |
|
__CONFIG |
_HS_OSC |
;высокочаcтотный кварцевый резонатор |
ORG |
H'000' |
;вектор сброса |
74
|
GOTO |
BEGIN |
;переход на начало основной программы |
;начало основной программы |
|
||
|
ORG |
H’005’ |
|
BEGIN: |
BSF |
STATUS,RP0 ;выбираем банк регистров 1 |
|
;задаем режимы работы параллельных портов |
|||
|
MOVLW |
B'00000001' |
;PORTA, 7-1 выходы, PORTA, 0 вход |
|
MOVWF |
TRISA |
;программируем регистр направления PORTA |
|
MOVLW |
B'11000000' |
;PORTC,7-6 вход, PORTC,5-0 выходы |
|
MOVWF |
TRISC |
;программируем регистр направления PORTC |
;задаем режим работы АЦП |
|
||
|
MOVLW |
B'00001110' |
;задаем аналоговый входPORTA,0, |
|
|
|
;левое выравн. |
|
MOVWF |
ADCON1 |
;программируем регистр АЦП1 |
|
BCF |
STATUS,RP0 |
;выбираем банк регистров 0 |
|
MOVLW |
B'01000001' |
;задаем аналоговый входPORTA,0 |
|
|
|
;и включаем АЦП |
|
MOVWF |
ADCON0 |
;программируем регистр АЦП0 |
|
NOP |
|
;пауза 4 мкс |
|
NOP |
|
;| |
|
NOP |
|
;| |
|
NOP |
|
;| |
;основная программа |
|
|
|
M10: |
BSF |
ADCON0,GO ;запуск преобразования |
|
M20: |
BTFSC |
ADCON0,GO ;ожидание окончания преобразования |
|
|
GOTO |
M20 |
;| |
|
MOVLW |
D'26' |
;первый порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M30 |
;переход к гашению всех светодиодов |
|
MOVLW |
D'52' |
;второй порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M40 |
;переход к вкюч. HL1 и гашению |
|
|
|
;остальных светодиодов |
|
MOVLW |
D'78' |
;третий порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M50 |
;переход к вкюч. HL2 и гашению |
|
|
|
;остальных светодиодов |
|
MOVLW |
D'104' |
;четвертый порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M60 |
;переход к вкюч. HL3 и гашению |
|
|
|
;остальных светодиодов |
|
MOVLW |
D'130' |
;пятый порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
75
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M70 |
;переход к вкюч. HL4 и гашению |
|
|
|
;остальных светодиодов |
|
MOVLW |
D'156' |
;второй порог сравнения |
|
SUBWF |
ADRESH,W |
;сравнение результата преобразования |
|
|
|
;с порогом |
|
BTFSS |
STATUS,C |
;скачок, если выше порога |
|
GOTO |
M80 |
;переход к вкюч. HL5 и гашению |
|
|
|
;остальных светодиодов |
|
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
BSF |
PORTC,5 |
;включение HL6 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M30: |
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M40: |
BSF |
PORTA,5 |
;включение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M50: |
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
BSF |
PORTC,0 |
;включение HL2 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M60: |
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
BSF |
PORTC,1 |
;включение HL3 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M70: |
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
BSF |
PORTC,3 |
;включение HL4 |
|
GOTO |
M10 |
;возврат к началу основной программы |
M80: |
BCF |
PORTA,5 |
;гашение HL1 |
|
CLRF |
PORTC |
;гашение HL2...HL6 |
|
BSF |
PORTC,4 |
;включение HL5 |
|
GOTO |
M10 |
;возврат к началу основной программы |
|
END |
|
;конец программы |
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описаны в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1.
76
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему алгоритма и текст программы на языке Ассемблер с исправлениями, возникшими на этапе отладки.
Контрольные вопросы
1.Сколько выборок в секунду может производить АЦПPIC16?
2.Какие регистры управляют работой АЦП?
3.В каких случаях при работе с АЦП используются прерывания? В каких случаях лучше синхронно ожидать окончания преобразования?
77

ЛАБОРАТОРНАЯ РАБОТА 7 Изучение работы модуля захвата/сравнения/ШИМ
микроконтроллеров PIC-micro
Цель работы: изучение работы и программирование модуляCCP (захват/сравнение/ШИМ) микроконтроллера PIC16F873A.
Микроконтроллер PIC16F873A имеет два модуляCCP1 и CCP2, осуществляющих 16-разрядный захват содержимого таймераTMR1, 16разрядное сравнение содержимого этого таймера с заданным числом, либо
10-разрядную |
широтную |
модуляцию |
импульсов, вырабатываемых |
таймером TMR2. |
|
|
|
В схеме лабораторного макета к выходу широтно-импульсного модулятора CCP1 подключен стрелочный микроамперметр, показывающий постоянную составляющую ШИМ сигнала.
Управление режимами |
работы модулейCCP осуществляется с |
помощью регистров CCP1CON |
и CCP2CON. Значения конкретных |
значений разрядов этих регистров приведены на рис 7.1.
Рис. 7.1. Регистр управления модуля CCP
78

Режим захвата
Структурная схема CCP в режиме захвата приведена на рис. 7.2. Она состоит из входаCCP1, предварительного делителя на1, 4 или 16, детектора переднего, либо заднего фронта входного импульса, старшего (CCP1H) и младшего (CCP1L) регистров модуля CCP. Кроме того. в схеме используются регистры TMR1H и TMR1L таймера TMR1. Таймер TMR1 должен быть настроен на синхронный режим работы, если он используется в качестве счетчика внешних импульсов (см. рис. 5.3).
Рис. 7.2. Структурная схема модуля CCP в режиме захвата
Событием захвата в данной схеме может являться задний фронт импульса на входе ССР1, передний фронт импульса на входе 1,ССР каждый четвертый передний фронт импульса на входе ССР1 или каждый шестнадцатый передний фронт импульса на входе ССР1. Выбор события,
при |
котором |
происходит , |
осуществляетсязахват |
битами |
ССРхМ0...ССРхМ3 регистра CCPxCON. |
|
|
Работает схема следующим образом: при возникновении события захвата информация из 16-разрядного регистра-счетчика TMR1 копируется одновременно в регистрыCCPR1H и CCPR1L, при этом таймерTMR1 может продолжать свою работу. Таким образом исключается искажение
информации, возникающее при последовательном считывании информации из регистров TMR1H и TMR1L. После этого в регистреPIR1 взводится флаг CCP1IF и вызывается прерывание, если оно разрешено.
Режим сравнения
Структурная схема CCP в режиме сравнения приведена на рис. 7.3. Она состоит из старшего(CCP1H) и младшего (CCP1L) регистров модуля CCP, схемы сравнения, логической схемы управления триггером, RS
79

триггера и вывода ССР1, а |
также регистровTMR1H и TMR1L таймера |
TMR1. При этом таймерTMR1 должен быть настроен на синхронный |
|
режим работы, если он |
используется в качестве счетчика внешних |
импульсов (см. рис. 5.3), а соответствующий разряд параллельного порта С
– на вывод информации.
Рис. 7.3. Структурная схема модуля CCP в режиме сравнения
В момент совпадения значения записанного в регистрыCCPR1H и CCPR1L с числом счетных импульсов, накопленным в регистреTMR1, схема сравнения взводит флаг прерыванияCCP1IF в регистре PIR1. В зависимости от настройки режима работы разрядами ССР10М...ССР1М3 регистра CCP1CON логическая схема воздействует наRS триггер, опрокидывая его в «0» или в «1», либо не изменяя его состояния(только взводится флаг прерывания). Сигнал с выхода RS триггера поступает на вывод CCP1 микроконтроллера. В режиме микропотребления может взводиться триггер специального события, запускающий аналого-цифровое преобразование.
Режим широтно-импульсной модуляции |
|
|
|||
Структурная |
схема |
модуляCCP в |
режиме |
ШИМ |
приведена на |
рис. 7.4. Она состоит |
из регистров |
длительности импульсаCCPR1L |
|||
(ведущий) и CCPR1H (ведомый), схемы сравнения, RS триггера, вывода |
|||||
микроконтроллера |
CCP1, |
а также регистра-счетчика |
таймераTMR2, |
||
регистра периода |
таймераTMR2 и его |
схемы |
сравнения. Временная |
диаграмма работы модуля CCP в режиме ШИМ приведена на рис 7.5. Работает схема следующим образом. Таймер TMR2 вырабатывает
бесконечную последовательность импульсов, в соответствии с выбранным режимом работы и с периодом, заданным в регистре периодаPR2
80

(настройку таймера TMR2 см. в лабораторной работе 5).
При равенстве числа в счетчикеTMR2 и в регистреPR2 схема
сравнения |
сбрасывает счетчикTNR2 и взводит RS триггер. На выходе |
CCP1 появляется логическая «1» (см. рис. 7.5). В этот же момент времени |
|
осуществляется перезапись содержимого ведущего регистраCCPR1L в |
|
ведомый |
регистр CCPR1H. Логическая «1» на выходе CCP1 будет |
сохраняться до тех пор, пока значение в счетчикеTMP2 не сравняется с содержимым регистра CCPR1H. При равенстве числа в счетчикеTMR2 числу загруженному в регистрCCPR1H схема сравнения сбрасываетRS триггер, и на выходе CCP1 появляется логический «0».
Рис 7.4. Структурная схема модуля CCP в режиме ШИМ
Рис 7.5. Временная диаграмма работы модуля CCP в режиме ШИМ
81
Наличие |
ведущего |
регистраCCPR1L предотвращает |
искажение |
|
||
длительности импульса, формируемого в данном периоде работы счетчика |
|
|||||
TMR2, т. е. изменение |
содержимого |
ведущего |
регистра |
длительности |
||
импульса CCPR1L может |
производиться программно и асинхронно с |
|||||
работой схемы ШИМ, изменение же значения в ведомом регистре CCPR1H |
|
|||||
всегда будет происходить в начале следующего периода. |
|
|
||||
В лабораторном макете к выводуCCP1 подключен микроамперметр, |
|
|||||
отклонение |
стрелки |
которого |
прямо |
пропорционально |
значению |
постоянной составляющей сигнала, формируемого схемой ШИМ.
Порядок выполнения работы
Вданной лабораторной работе необходимо разработать и отладить программу, формирующую широтно-импульсно модулированный сигнал, имеющий различные значения постоянной составляющей. Конкретное задание выдается преподавателем.
Вкачестве примера рассмотрим следующее задание: показание микроамперметра PV1 обратно пропорционально углу поворота ручки потенциометра R1.
Постановка задачи
По аналогии с лабораторной работой6 будем использовать 8- разрядную точность аналого-цифрового преобразования и формирования сигнала ШИМ.
Преобразование результата аналого-цифрового преобразования в обратный код осуществляется путем вычитания его из шестнадцатеричного числа H’FF’:
PWM = H’FF’ – ADRES,
где PWM – длительность импульса ШИМ;
ADRES – результат аналого-цифрового преобразования.
Разработка алгоритма программы
Алгоритм программы приведен на рис. 7.6.
В первом блоке осуществляется настройка портов ввода-вывода, таймера TMR2 и аналого-цифрового преобразователя на соответствующие режимы работы. Схема CCP1 настраивается на режим ШИМ путем записи двоичного числа «00001111» в регистр CCP1CON.
82

Рис. 7.6. Блок-схема алгоритма программы
Во втором блоке запускается аналого-цифровое преобразование, а в третьем ожидается его завершение.
Вчетвертом блоке считывается результат аналого-цифрового преобразования и вычисляется обратный код.
Впятом блоке задается длительность импульса ШИМ путем записи обратного кода в ведущий регистр CCPR1L.
Затем программа возвращается к запуску следующего аналогоцифрового преобразования.
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки |
|
||
|
#include |
p16f873a.inc |
|
|
__CONFIG |
_HS_OSC |
;высокочаятотный кварцевый резонатор |
|
ORG |
H'000' |
;вектор сброса |
|
GOTO |
BEGIN |
;переход на начало основной программы |
;начало основной программы |
|
||
|
ORG |
H’005’ |
|
BEGIN: |
BSF |
STATUS,RP0 ;выбираем банк регистров 1 |
|
;задаем режимы работы параллельных портов |
|||
|
MOVLW |
B'00000001' |
;PORTA, 7-1 выходы, PORTA, 0 вход |
|
MOVWF |
TRISA |
;программируем регистр направления PORTA |
|
MOVLW |
B'11000000' |
;PORTC,7-6 вход, PORTC,5-0 выходы |
|
MOVWF |
TRISC |
;программируем регистр направления PORTC |
;задаем режим работы таймера TMR2 |
|
||
|
MOVLW |
D'255' |
;задаем период таймера 2 |
|
MOVWF |
PR2 |
;| |
83
|
BCF |
STATUS,RP0 |
;выбираем банк регистров 0 |
|
MOVLW |
B'00000000' |
;коэфф. деления делителей1:1 |
|
MOVWF |
T2CON |
;| |
|
BSF |
T2CON,TMR2ON;включение таймера 2 |
|
;задаем режим работы АЦП |
|
||
|
MOVLW |
B'00001110' |
;задаем аналоговый входAN0, левое выравн. |
|
MOVWF |
ADCON1 |
;программируем регистр АЦП1 |
|
MOVLW |
B'01000001' |
;задаем аналоговый входPORTA,0 |
|
|
|
;и включаем АЦП |
|
MOVWF |
ADCON0 |
;программируем регистр АЦП0 |
|
NOP |
|
;пауза 4 мкс |
|
NOP |
|
;| |
|
NOP |
|
;| |
|
NOP |
|
;| |
;настройка модуля CCP |
|
|
|
|
MOVLW |
B'00001111' |
;задаем режим ШИМ |
|
MOVWF |
CCP1CON |
;| |
;основная программа |
|
|
|
M10: |
BSF |
ADCON0,GO ;запуск преобразования |
|
M20: |
BTFSC |
ADCON0,GO ;ожидание окончания преобразования |
|
|
GOTO |
M20 |
;| |
|
MOVF |
ADRESH,W |
;считываем результат преобразования |
|
SUBLW |
H'FF' |
;вычисляем обратный код |
|
MOVWF |
CCPR1L |
;задаем длительность импульса ШИМ |
|
GOTO |
M10 |
;возврат к началу основной программы |
|
END |
|
;конец программы |
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах .ошибкиОписание процесса программирования микроконтроллера и запуска программы приведены в лабораторной работе 1.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ, носят чисто учебный характер, то их работоспособность необходимо
поддерживать лишь до момента защиты лабораторной работ преподавателю.
84