/
Автор: Предко М.
Теги: электротехника полупроводниковые устройства программирование архитектура микроконтроллеры издательство дмк пресс
ISBN: 978-5-94074-534-1
Год: 2010
Текст
PIC-
M И КРОКОНТРОЛ Л ЕРЫ:
АРХИТЕКТУРА И
ПРОГРАММИРОВАНИЕ
Майкл Предко
ЯМ*
издат ед ь с т йо
УДК 621.3.049.77
ББК 32.852
П71
Предко М.
П71 PIC-микроконтроллеры: архитектура и программирование
Пер. с англ. -М.: ДМК Пресс, 2010.-512 с.: ил.
ISBN 978-5-94074-534-1
Книга посвящена PIC-микроконтроллерам - одному из самых по-
пулярных семейств современных микроконтроллеров. В справочни-
ке имеются все необходимые сведения, аппаратные и программные
решения. По широте охвата и объему рассматриваемого материала
книга претендует на статус малой энциклопедии. Здесь представле-
ны классификация и архитектура различных подсемейств PIC-кон-
троллеров, сравнительные характеристики типов, разводка вы-
водов, системы команд, подробная спецификация управляющих
регистров. Рассказывается о принципах работы основных узлов,
приведены таблицы временных и электрических характеристик, ал-
горитмы программирования. Дано описание языков программиро-
вания и средств разработки приложений.
Издание предназначено для широкого круга читателей - от начи-
нающих радиолюбителей до специалистов, работа которых связана
с использованием Р1С-микроконтроллеров.
Все права защищены. Любая часть этой книги не может быть воспроизве-
дена в какой бы то ни было форме и какими бы то ни было средствами без
письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, по-
скольку вероятность технических ошибок все равно существует, издательство
не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим издательство не несет ответственности за возмож-
ные ошибки, связанные с использованием книги.
ISBN 0-07136-175-8 (англ.)
ISBN 978-5-94074-534-1 (рус.)
© McGraw-Hill Companies, Inc.
© Перевод на русский язык,
оформление. ДМК Пресс, 2010
СОДЕРЖАНИЕ
Глава 1
Принятые обозначения и сокращения ..........................13
Глава 2
Основные характеристики микроконтроллеров
PICmicro® ..................................................15
Глава 3
Корпуса Р1С-микроконтроллеров
и назначение выводов........................................19
Микроконтроллеры младшего подсемейства .....................20
Микроконтроллеры среднего подсемейства .....................22
Микроконтроллеры PIC 17Схх..................................25
Микроконтроллеры PIC 18Схх..................................26
Глава 4
Система команд микроконтроллеров PICmicro®..................37
Параметры ..................................................38
Системы команд Р1С-микроконтроллеров
младшего и среднего подсемейств.............................38
Система команд микроконтроллеров подсемейства PIC 17Схх ....46
Система команд микроконтроллеров подсемейства PIC 18Схх .... 56
Мнемоника специальных команд ...............................69
Ассемблер фирмы Parallax Inc. для PIC-микроконтроллеров ....72
Глава 5
Архитектура процессора микроконтроллеров
PICmicro® ..................................................79
Арифметико-логическое устройство Р1С-микроконтроллеров .80
Микроконтроллеры PICmicro® младшего подсемейства ...........80
Доступ к регистрам ......................................83
Регистр состояния .......................................84
Счетчик команд ..........................................84
Микроконтроллеры среднего подсемейства .....................86
СОДЕРЖАНИЕ
Доступ к регистрам ...................................87
Регистр состояния ....................................88
Счетчик команд .......................................88
Управление прерываниями ..............................88
Основные компоненты программы обработки прерываний ...90
Микроконтроллеры PIC 17Схх................................90
Доступ к регистрам ...................................92
Регистр состояния ....................................93
Счетчик команд .......................................93
Выполнение прерываний ................................94
Основные компоненты программы обработки прерываний ...95
Микроконтроллеры PIC 18Схх................................96
Доступ к регистрам ...................................97
Регистры состояния ...................................99
Счетчик команд .......................................99
Выполнение прерываний ............................... 102
Общий вид программы обработки прерываний ............ 102
Глава 6
Управляющие регистры Р1С-микроконтроллеров...............103
Микроконтроллеры младшего подсемейства ................. 104
Микроконтроллеры среднего подсемейства .................. 106
Микроконтроллеры PIC 17Схх.............................. 121
Микроконтроллеры PIC 18Схх.............................. 135
Глава 7
Функциональные узлы .....................................149
Регистры конфигурации .................................. 150
Генераторы тактовых импульсов .......................... 151
Режим ожидания .......................................... 155
Регистр OPTION.......................................... 156
Порты ввода/вывода и регистры TRIS ..................... 158
Сторожевой таймер '..................................... 161
Таймер TMR0 ............................................ 162
Прескалер .............................................. 164
Таймер TMR1 ............................................ 164
Таймер TMR2 ............................................ 167
СОДЕРЖАНИЕ
Модуль ССР ............................................ 168
Модуль универсального синхронно-асинхронного
приемопередатчика ................................... 172
Модуль SSP........................................... 178
Интерфейс SPI .................................... 178
Интерфейс 12С .................................... 182
Встроенный аналого-цифровой преобразователь ......... 188
Встроенные компараторы напряжения ..................... 194
Управляемый параллельный порт ....................... 197
Доступ к EEPROM данных .............................. 199
Доступ к программной памяти EPROM ...............204
Доступ к программной флэш-памяти .....................205
Внешняя память .......................................207
Глава 8
Взаимодействие Р1С-микроконтроллеров
с внешними устройствами...............................211
Схема для подключения микроконтроллеров
к источнику питания ..................................212
Схема перезапуска микроконтроллеров...................215
Цифровые уровни ......................................215
Использование параллельной шины ......................216
Взаимодействие с кнопками ............................217
Взаимодействие с матричной клавиатурой................219
Объединение входов и выходов .........................222
Схема эмуляции вывода
с открытым коллектором/открытым стоком ...............223
Управление светодиодными индикаторами ................224
Многосегментные светодиодные индикаторы .......... 224
Управление жидкокристаллическим дисплеем..............227
Интерфейс 12С в режиме MASTER ........................258
Интерфейс RS-232 .................................... 262
Интерфейсы RS-485/RS-422 ............................ 267
Подпрограммы для последовательного
асинхронного обмена ..................................269
Однопроводный интерфейс фирмы Dallas Semiconductor....276
СОДЕРЖАНИЕ
Измерение сопротивлений
с помощью цифровых входов/выходов .....................281
Схемы для управления двигателями ......................283
Управление серводвигателями ...........................287
Схема формирования звуковых сигналов ..................288
Управление мощностью нагрузки переменного тока ........289
Схемы датчиков на основе эффекта Холла ................290
Дистанционное управление телевизионными
приемниками фирмы Sony ................................290
Глава 9
Программирование Р1С-микроконтроллеров.................295
Нех-файлы .............................................296
Программирование Р1С-микроконтроллера
младшего подсемейства .................................297
Последовательное программирование микроконтроллеров
среднего подсемейства .................................300
Программирование PIC 17Схх ............................308
Внутрисхемное программирование PIC 17Схх ...............311
Программирование PIC 18Схх ............................314
Разъем для внутрисхемного программирования ............316
Глава 10
Интерфейсы ПК..........................................319
Распределение оперативной памяти.......................320
Пространство ввода/вывода .............................320
Функции прерываний.....................................332
Шина ISA...............................................332
Контакты и линии шины ISA ......................... 334
Прерывания ........................................ 337
Порты клавиатуры и мыши................................338
Разъемы ........................................... 338
Временные диаграммы интерфейса клавиатуры ......... 339
Скан-коды клавиатуры ............................. 340
Команды контроллера клавиатуры .................... 343
Интерфейсы BIOS ................................... 344
Команды клавиатуры ................................ 344
СОДЕРЖАНИЕ
Последовательный порт .................................. 346
Выводы разъема ...................................... 346
Блок-схема УАПП 8250 .............................. 347
Базовые адреса последовательного порта .............. 348
Регистры УАПП 8250 .................................. 348
Прерывания .......................................... 351
Функции прерывания 14h BIOS интерфейса RS-232 ....... 352
Параллельный порт .......................................354
Блок-схема и разъем параллельного порта ............. 354
Базовые регистры .................................... 356
Регистры ............................................ 356
Функции BIOS параллельного порта .................. 358
Глава 11
Полезные подпрограммы....................................359
Переход за пределы текущей страницы .....................360
Таблицы ................................................ 360
Ветвление по условию.....................................362
Временные задержки.......................................362
Получение дополнительного кода
содержимого регистра (изменение знака)...................364
Инкрементирование/декрементирование
содержимого регистра w ..................................365
«Вращение на месте» .....................................365
Копирование битов из одного регистра в другой............366
Преобразование полубайта в код ASCII ....................366
Преобразование байта кода ASCII
в шестнадцатеричный полубайт ............................366
Использование входа Т0СК1 в качестве
источника прерывания ....................................367
Деление на три ..........................................367
Измерение длительности импульса с 16-разрядной точностью.368
Регистрация изменений ...................................368
Проверка диапазона ......................................369
Преобразование символов ASCII в верхний регистр..........369
Перестановка содержимого регистра и рабочего регистра w .... 369
Перестановка содержимого двух регистров .................370
СОДЕРЖАНИЕ
Сравнение и перестановка, если Y < X................370
Подсчет числа 1 в байте.............................370
Генерация бита четности для байта ..................371
Удержание переменной внутри диапазона ..............371
Перестановка четных и нечетных битов ...............371
Побитовые операции .................................371
Умножение на константу..............................372
Деление на константу ...............................373
Глава 12
16-разрядные числа..................................375
Определение 16-разрядных чисел .....................376
Инкрементирование и декрементирование ..............376
Сложение/вычитание .................................377
Побитовые операции с константами и переменными .....379
Сравнение 16-разрядных переменных ..................380
Умножение ..........................................382
Деление ........................................... 384
Глава 13
Рабочие характеристики Р1С-микроконтроллеров ........387
Токи нагрузок выходов и портов .....................388
Значения компонентов RC-генератора .................388
Рабочие характеристики в режиме LP-генератора ......391
Рабочие характеристики в режиме ХТ-генератора ......391
Рабочие характеристики в режиме HS-генератора.......392
Глава 14
Возможные неисправности устройств
с Р1С-микроконтроллерами ...........................393
Глава 15
Средства разработки приложений......................399
Функции клавиш текстового редактора ................400
Файл MPSIM.INI .....................................400
СОДЕРЖАНИЕ
Среда разработки MPLAB....................................401
Файлы стимулов ....................................... 406
Директивы ассемблера ..................................406
Включаемые файлы .........................................406
Компоновка приложений ....................................414
Шаблон программы приложения ..............................416
Язык Basic................................................416
Расширенная версия Basic .................................418
PicBasic .................................................418
Visual Basic .............................................442
Управление вводом/выводом с помощью MSComm ...............444
Язык С....................................................449
Объявления ........................................... 449
Операторы .............................................451
Операции ............................................. 453
Директивы ...................,........................ 453
Управляющие последовательности ....................... 456
Функции С ............................................ 457
Функции С для Р1С-микроконтроллеров .................. 460
Глава 16
Постоянные и таблицы данных...............................461
Математические и физические постоянные ...................462
Код ASCII.................................................462
Управляющие символы кода ASCII ...........................462
Управляющие ANSI-последовательности ......................465
Расширенный набор символов кода ASCII.....................467
Символы кода ASCII для Windows............................467
Код EBCDIC................................................470
Ноты .....................................................470
Частоты телефонов с тональным набором ....................470
АТ-команды модема ........................................471
Регистры модема ................................... 471
Код Морзе ............................................... 477
СОДЕРЖАНИЕ
Фонетический алфавит....................................478
Теп-радиокод............................................478
Глава 17
Справочная информация по электронике..................481
Цветовое кодирование резисторов........................482
Электромагнитный спектр ...............................482
Диапазоны радара ...................................482
Цифровая логика .......................................484
Вентили ............................................484
Триггеры ...........................................484
Глава 18
Формулы................................................487
Формулы постоянного тока ..............................488
Формулы переменного тока ..............................489
Физические формулы ....................................490
Булева алгебра.........................................490
Соответствия единиц измерения .........................491
Глава 19
Библиография...........................................493
Информация о компании Microchip .......................494
Web-сайты, посвященные Р1С-микроконтроллерам ..........494
Периодические издания .................................496
Полезные Web-сайты ....................................496
Seattle Robotics Society ...........................496
List of Stamp Applications (L.O.S.A.) ............. 496
Adobe PDF Viewers ................................. 497
PKZip и PKUnZip ................................... 497
Часто задаваемые вопросы по аппаратному обеспечению ...497
Поставщики комплектующих ..............................497
Предметный указатель...................................500
ОБОЗНАЧЕНИЯ
ЕНИЯ
ПРИНЯТЫЕ ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ
В табл. 1.1 приводятся наиболее часто употребляемые в настоящем
издании обозначения и сокращения, которые сопровождаются не-
обходимыми пояснениями.
Таблица 1.1
Перечень принятых обозначений и сокращений
Гц Герцы
кГц Килогерцы
МГц Мегагерцы
ГГц Гигагерцы
бит/с Биты в секунду
Кбит/с Тысячи битов в секунду
Мбит/с Миллионы битов в секунду
Кб 1024 байта
Мб 1048576 байт
Гб 1073741824 байта
кОм 1000 Ом
мкФ Микрофарада
мс Миллисекунда
ОхОпп, $пп, Onnh и Н'пп' Шестнадцатеричное число
ObOnnn,%nnn, Onnnb и B'nnn' Двоичное число
Nnn, Onnnd и nnn Десятичное число
AND и & Поразрядное логическое И
OR и | Поразрядное логическое ИЛИ
XOR и " Поразрядное логическое Исключающее ИЛИ
_Label Вывод, активизируемый логическим нулем (0) В некоторых спецификациях фирм-изготовителей это обозначение эквивалентно идентификатору с предшествующим «• » или с верхней чертой
[параметр] Произвольно задаваемый параметр
параметр | параметр Возможность использования одного или другого параметра
Gnd и GND Общий питания, 0 В
ХАРАКТЕРИСТИКИ
ТРОЛЛЕРОВ
ОСНОВНЫЕ ХАРАКТЕРИСТИКИ МИКРОКОНТРОЛЛЕРОВ
Основные характеристики микроконтроллеров Р1Спнсго®представ-
лены в табл. 2.1.
Таблица 2.1
Характеристики микроконтроллеров PICmicro®
Обозначение Характеристики
PIC 12С5ХХ Младшее подсемейство Корпус с 8 выводами,12-разрядное процессорное ядро*, внутренняя схема сброса, встроенный тактовый генератор
PIC 12С6хх Среднее подсемейство. Корпус с 8 выводами, 14-разрядное процессорное ядро, восьмиразрядный аналого-цифровой преобразователь, внутренняя схема сброса, встроенный тактовый генератор, наличие EEPROM памяти данных
PIC 14С000 Среднее подсемейство. Корпусе 28 выводами, 14-разрядное процессорное ядро, усовершенствованный аналого-цифровой преобразователь, внутренний источник опорного напряжения, встроенный датчик температуры
PIC 16С5х Младшее подсемейство. Корпус с 18/28 выводами, 12-разрядное процессорное ядро
PIC16C505 Младшее подсемейство. Корпус с 14 выводами, 12-разрядное процессорное ядро, внутренняя схема сброса, встроенный тактовый генератор
PIC 16HV540 Младшее подсемейство Корпус с 18 выводами, 12-разрядное процессорное ядро, расширенный диапазон напряжений питания Vdd, встроенный стабилизатор
PIC16C55X Среднее подсемейство. Корпусе 18 выводами, 14-разрядное процессорное ядро
PIC 16С6х Среднее подсемейство. Корпус с 18/28/40 выводами, 14-разрядное процессорное ядро, два таймера (TMR1 и TMR2), варианты с интерфейсами SPI, USART и PSP
PIC 16С62Х Среднее подсемейство. Корпус с 18 выводами, 14-разрядное процессорное ядро, компараторы напряжения со встроенным источником опорного напряжения, варианты с EEPROM памятью данных
PIC16F62X Среднее подсемейство. Корпус с 18 выводами, 14-разрядное процессорное ядро, флэш-память программ, компараторы напряжения со встроенным источником опорного напряжения, внутренняя схема сброса, встроенный тактовый генератор
PIC 16С642 Среднее подсемейство. Корпус с 28 выводами, 14-разрядное процессорное ядро, компараторы напряжения со встроенным источником опорного напряжения
PIC16C662 Среднее подсемейство. Корпус с 40 выводами, 14-разрядное процессорное ядро, компараторы напряжения со встроенным источником опорного напряжения
PIC 16С71х Среднее подсемейство. Корпусе 18 выводами, 14-разрядное процессорное ядро, 8-разрядный аналого-цифровой преобразователь
PIC 16С7х Среднее подсемейство Корпуса с 18/28/40 выводами, 14-разрядное процессорное ядро, 8-разрядный АЦП, варианты с двумя таймерами (TMR1 и TMR2), варианты с интерфейсами SPI, USART и PSP
PIC 16С77х Среднее подсемейство. Корпуса с 28/40 выводами, 14-разрядное процессорное ядро, 12-разрядный АЦП, два таймера (TMR1 и TMR2), USART, I2C, SPI, варианты с PSP
PIC16F8X Среднее подсемейство. Корпусе 18 выводами, 14-разрядное процессорное ядро, флэш-память данных (EEPROM) и программ
ОСНОВНЫЕ ХАРАКТЕРИСТИКИ МИКРОКОНТРОЛЛЕРОВ
Таблица 2.1
Характеристики микроконтроллеров PICmicro® (окончание)
Обозначение Характеристики
PIC16F87X Среднее подсемейство. Корпуса с 28/40 выводами, 14-разрядное процессорное ядро, 10-разрядный АЦП (5-8 каналов), два таймера (TMR1 и TMR2), варианты с интерфейсами USART, I2C, SPI и PSP
PIC 16С92Х Среднее подсемейство. Корпуса с 64 выводами, 14-разрядное процессорное ядро. Варианты с 8-разрядным АЦП, TMR1 и TMR2, ЖКИ контроллером
PIC 17С4х Старшее подсемейство. Корпуса с 40 выводами, 16-разрядное процессорное ядро, аппаратный умножитель, USART
“ИС 17С5х Старшее подсемейство. Корпус с 68 выводами, 16-разрядное процессорное ядро, аппаратный умножитель, 10-разрядный АЦП, варианты с интерфейсами USART и 12С
PIC 17С6х Старшее подсемейство. Корпусе 84 выводами, 16-разрядное процессорное ядро, аппаратный умножитель, 12-разрядный АЦП, USART, 12С и SPI
PIC 18Сххх Старшее подсемейство. Корпуса с 28/40 выводами**, 16-разрядное усовершенствованное процессорное ядро, 10-разрядный АЦП, варианты с интерфейсами USART, 12С и SPI
* Словосочетание «12-разрядное процессорное ядро» в терминологии фирмы Microchip означает, что процессор оперирует 12-разрядными командами Аналогично и для другой разрядности. - Прим ред * * Устаревшие сведения - Прим, ред
Таблица 2.2
Характеристики микроконтроллеров PICmicro® среднего подсемейства
Обозначение Комментарии
16Сх1 Корпуса с 18 выводами 1К слов памяти программ, встроенные интерфейсы отсутствуют PIC 16С61 и 16С71 в настоящее время не применяются
16Сх2 Корпуса с 28 выводами. 2К слов памяти программ. SPI, TMR1 и TMR2
16СхЗ Корпуса с 28 выводами. 4К слов памяти программ. USART, SPI, TMR1 и TMR2
16Сх4 Корпуса с 40 выводами. 4К слов памяти программ. USART, SPI, PSP, TMR1 и TMR2
16Сх5 Корпуса с 40 выводами 4К слов памяти программ. USART, SPI, PSP, TMR1 и TMR2
16Схб Корпуса с 28 выводами. 8Кслов памяти программ. USART, SPI, I2C, PSP, TMR1 и TMR2
16Сх7 Корпуса с 40 выводами. 8К слов памяти программ. USARjg^FI, TMR1 и TMR2 ' >I
ti
ОКОНТРОЛЛЕРОВ
ЕНИЕ ВЫВОДОВ
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
Как правило, микроконтроллеры в стандартных DIP- и CERDIP- кор-
пусах (в обозначениях приборов им соответствуют буквенные клас-
сификаторы Р и JW) с двухрядными штыревыми выводами, предназна-
ченными для установки в сквозные отверстия, имеют поперечный
размер 0,300" или 0,600" и шаг выводов 0,100". При этом высота при-
бора зависит от конкретного типа используемого корпуса.
Устройства, ориентированные на технологию поверхностного мон-
тажа, выполняются в плоских корпусах с двухрядным расположени-
ем выводов (типа SO) или в квадратных пластмассовых корпусах с че-
тырехсторонним расположением выводов (классификаторы PT, PQh L).
Конкретные размеры каждого корпуса можно найти в специфи-
кациях, содержащихся на лазерном диске или на Web-сайте фирмы
Microchip. Следует отметить, что различным корпусам микрокон-
троллеров PICmicro® соответствуют различные по размерам и фор-
ме контактные площадки для выводов.
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
Микроконтроллеры младшего подсемейства имеют 12-разрядное про-
цессорное ядро. Они изготавливаются в корпусах с двухрядным рас-
положением выводов, при этом назначение выводов микроконтрол-
леров с однотипными корпусами одинаковое. Корпуса могут быть
планарными, рассчитанными на технологию поверхностного монтажа
или технологию, ориентированную на использование сквозных от-
верстий (рис. 3.1-3.4).
GP5/OSC1/CLKIN
GP4/OSC2
GP3/_MCLR/Vpp
Vdd [ 1
---^2
3
8 ] Gnd
£
4
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми выводами
составляет 0,300"
Рис. 3.1
Выводы микроконтроллеров PIC 12C508/PIC 12С509
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми выводами
составляет 0,300"
Рис. 3.2
Выводы микроконтроллера PIC 16С505
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми выводами
составляет 0,300"
Рис. 3.3
Выводы микроконтроллеров PIC 16C54/PIC 16С56
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
Корпуса типа JW, Р, SO, SP, SS
Ширина корпусов со штыревыми выводами составляет 0,600",
за исключением корпусов типа SP, которые имеют ширину 0,300"
Рис. 3.4
Выводы микроконтроллеров PIC 16C55/PIC 16С57
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Микроконтроллеры среднего подсемейства имеют 14-разрядное про-
цессорное ядро. Номенклатура корпусов микроконтроллеров сред-
него подсемейства гораздо шире номенклатуры корпусов младшего
подсемейства (рис. 3.5-3.10). Как правило, основное назначение
GP5/OSC1/CLKIN
GP4/OSC2/CLKOUT/*AN3
GP3/_MCLR/Vpp
GP0/*AN0
GP1/*AN1/Vref
GP2/TOCKI/INT/*AN2
* - аналоговые входы
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми
выводами составляет 0,300"
Рис. 3.5
Выводы микроконтроллеров PIC 12С67х
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
RA2/*AN2
RA3/*AN3/Vref
RA4/T0CKI
_MCLR/Vpp
RBO/INT
RB1
RB2
RB3
RA1/*AN1
RA0/*AN0
0SC1/CLKIN
0SC2/CLK0UT
RB7
RB6
RB5
RB4
* - аналоговые входы для
микроконтроллеров
PIC16C62X и PIC16C71(x)
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми
выводами составляет 0,300"
Рис. 3.6
Выводы 18-контактных PIC-микроконтроллеров среднего подсемейства
_MCLR/VppAHV
RA0/*AN0
RA1/*AN1
RA2/*AN2/Vref-
RA3/*AN3/VREF(+)
RA4/T0CKI
27
26
25
£2
£з
£
£
£
RA5/*AN4/SS «-►[
Gnd [
OSC1/CLKIN---►[
OSC2/CLKOUT <---[
£
10
RC0/T1OSO/T1CKI
RC1A1OSI/CCP2
RC2/CCP1
11
12
13
14
24 >----
23 >----
22 >----
21 Ъ----
20 ]Vdd
19 ]Gnd
18 Ъ----
17 Ъ----
16 ъ—
15 Ъ----
RB7/&PGD
RB6/&PGC
RB5
RB4
RB3/PGM
RB2
RB1
RBO/INT
RC7/RX/DT
RB6/TX/CK
RB5/SDO
RB4/SDI/SDA
1
1
4
5
6
7
8
9
£
* - аналоговые входы Корпуса типа JW, Р, SO
& - выводы для программирования Ширина корпусов со штыревыми
и отладки микроконтроллеров PIC16F87X выводами составляет 0,300"
Рис. 3.7
Выводы 28-контактных PIC-микроконтроллеров среднего подсемейства
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
* - аналоговые входы Корпуса типа JW, Р
& - выводы для программирования Ширина корпусов со штыревыми
и отладки микроконтроллеров PIC16F87x выводами составляет 0,600"
Рис. 3.8
Выводы 40-контактных микроконтроллеров среднего подсемейства
выводов микроконтроллеров с однотипными корпусами одинако-
во, однако во многих микроконтроллерах выводы имеют альтерна-
тивное назначение. Конкретные функциональные назначения каждо-
го электрического вывода даны в спецификациях фирмы Microchip.
Так, микроконтроллер PIC 14000, предназначеный для работы
с сигналами смешанного типа (аналоговыми и цифровыми), изго-
тавливается в 28-контактных корпусах, назначение его выводов
проиллюстрировано на рис. 3.11.
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
-MCLR/Vpp/THV-
RA0/*AN0*
RA1/*AN1 *
RA2/*AN2/Vref- <
RA3/*AN3/VREF(+)4-
RB7/&PGD
RB6/&PGC
RB5
RB4
см
RA4/T0CKI
RE0/_RD/*AN5 ◄-►[
RE1/_WR/*AN6 ◄--►[
RE2/_CS/*AN7 ◄-►[
Vdd [
Gnd [
OSC1/CLKIN----►[
OSC2/CLKOUT ◄---[
RC0/T1OSO/T1CKI ◄---<
N/C [
7
8
9
10
11
12
13
14
15
16
17
39
38
37
36
35
34
33
32
31
30
29
см
т- см
см см
ю
см
]◄----►RBS/PGM
]◄---->RB2
Ъ----->RB1
]◄----►RBO/INT
] Vdd
] Gnd
Ъ-----►RD7/PSP7
]◄----►RD6/PSP6
]◄----►RD5/PSP5
]◄----►RD4/PSP4
Ъ-----►RC7/RX/DT
см
z
о
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1-
RD2/PSP2'
О
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD3/PSP3
Рис. 3.9
Выводы PIC-микроконтроллеров среднего подсемейства в 44-контактных PLCC-корпусах
PIC-микроконтроллеры, снабженные схемой управления жидко-
кристаллическим дисплеем -ЖКД(Liquid Crystal Display - LCD), име-
ют достаточно большое число выводов. На рис. 3.12 показан 64-кон-
тактный корпус с двухрядным расположением выводов (корпус типа
DIP). Для таких микроконтроллеров могут также использоваться
корпуса типа PLCC и TQFP.
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Микроконтроллеры PIC 17Схх относятся к старшему подсемейству
PIC-микроконтр оллеров, имеющему 16-разрядное процессорное
ядро. Микроконтроллеры PIC 17Схх изготавливаются в 40- или
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
RD2/PSP2 +
RD3/PSP3 +
RC4/SDI/SDA +
RC5/SDO +
RC6/TX/CK<-
gN/C
RD1/PSP1
RD0/PSP0
RC3/SCK/SCL
RC2/CCP1
RC1/T1OSI/CCP2
RC7/RX/DT ЧП
RD4/PSP4<*—ЧП
Vdd Щ
Gnd 01
1 О
2
3
4
5
6
7
8
9
10
11
33 m N/c
32 Пк—►RC0/T1OSI/T1CKI
31 HI---►OSC2/CLKOUT
ЛЬ—►RA4/T0CKI
29 ЦП Vdd
28
27
26
25 ПЬ—>RE0/_RD/*AN5
24 ЩЪ—►RA5/*AN4/SS
23
Ш Gnd
ПР—>RE2/_CS/*AN7
ПЬ—*RE1/_WR/*AN6
RB4
RB5
RB6/&PGC
RB7/&PGD
RA3/*AN3/VREF(+)
RA2/*AN2/Vref-
RA1/*AN1
RA0/*AN0
_MCLR/Vpp/THV
Рис. 3.10
Выводы PIC-микроконтроллеров среднего подсемейства в 44-контактных QFP-корпусах
64-контактных корпусах типа DIP (рис. 3.13-3.14) или корпусах типа
PLCC и TQFP (рис. 3.15-3.16).
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Микроконтроллеры PIC 18Схх также относятся к старшему подсе-
мейству (16-разрядное процессорное ядро). Разводка их выводов
представлена на рис. 3.17-3.20.
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
RA1/AN2 « J" >28 "L । ► RA2/AN2
Jr 1
2 27 “L . ь. DAQ /AMQ
► HAo/ANo ► RD4/AN4
3 26
nUu/ntru " L
□ ПО/rMDD a J" 4 25 14 । ь. ОПЦ/AMR
nUZ/CrlVIrD ч 1. -Г 1 ML/O/r\INu
ОГИ /СПАС 4 JT 5 24 "L . k. DF4O / AkIO
HUI/oUAlj -Г 1 ► KDo/ANo
РПЛ/CCI R -е j" 6 23 “L । ь. ОГТ7/ЛМ7
nUU/OULo 1 4. J* 1 ► nU//AN/
Г^СОО IZCll IT । г 7 22
UoUz'/ULKUU 1 * 1 L J 1 ► U U AU
ПСГМ /ГЧ И1М - j- 8 01 ь. Ci 1АЛ
UoU 1 /ULI\I IN 4. 21 J 1 ► oUM
Vdd [ 9 20 ] Gnd
, г 10 19 “L । b. DCn/DREA
Vreg * 1 L Jr 1 • пСи/пегА
ПР7 /СПА A । j" 11 18 ► RC1/CMPX
HU I/oDAA * 1 *L
□ГЙ/СГЧ Л । j" 12 17 “L . ь DPO
nUO/Ov^LA J 1 *L .r 1 ► nU4
D/^K । j" 13 16 ъ .
J« 1 * НСо/1UUKI
КАГЧ D Л/глгч । j" 14 ► RC4
_MULK/Vpp < 1 т 15
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми
выводами составляет 0,300"
Рис. 3.11
Выводы 28-контактного микроконтроллера PIC 14000
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
_MCLR/Vpp - —< 1 -^64 ъ— ► RB4
RB3 < 2 63 ► RB5
RB2 « —< 3 62 ъ— ► RB7
RAO - —< 4 61 ъ— ► RB6
RA1 < '—►[ 5 60 ] Vdd
Gnd [ 6 59 > ► сомо
RA2 < -—с 7 58 > ► RD7/SEG31/COM1
RA3 < •—< 8 57 ъ— ► RD6/SEG30/COM2
RA4/T0CKI « •—►[ 9 56 >— ► RD5/SEG29/COM3
RA5/_SS < -—[ 10 55 ► RG6/SEG26
RB1 < •—* 11 54 ► RG5/SEG25
RBO/INT < •—с 12 53 ► RG4/SEG24
RC3/SCK/SCL < •—* 13 52 ► RG3/SEG23
RC4/SDI/SDA < -—с 14 51 ► RG2/SEG22
RC5/SDO < •—* 15 50 >— ► RG1/SEG21
С1 * •—* 16 49 ► RG0/SEG20
С2^ —< 17 48 ► RF7/SEG19
VLCD2 < —< 18 47 ► RF6/SEG18
VLCD3 < —< 19 46 ► RF5/SEG17
Vdd [ 20 45 ► RF4/SEG16
Gnd [ 21 44 ъ— ► RF3/SEG15
RE2/_CS/AN7 < ►[ 22 43 ъ— ► RF2/SEG14
OSC1/CLKIN - ►[ 23 42 ?— ► RF1/SEG13
OSC2/CLKOUT < ' Е 24 41 ъ— ► RF0/SEG12
RC1/T1OSI < ' < 25 40 >— ► RE6/SEG11
RC2/CCP1 « ' * 26 39 ъ— ►RE5/SEG10
VLCD1 - ►[ 27 38 >— ► RE4/SEG09
VLCDADJ - < 28 37 ъ— ► RE3/SEG08
RD0/SEG00 ◄ ' < 29 36 Ъ—' ► RE2/SEG07
RD1/SEG01 « ' * 30 35 ► RE1/SEG06
RD2/SEG02 < —►£ 31 34 ► RE0/SEG05
RD3/SEG03 < '—< 32 33 ъ— ► RD4/SEG04
Рис. 3.12
Выводы 64-контактных микроконтроллеров PIC 16С92х
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
RC0/AD0 Vdd [ J“ 1 4- 2 -^40 39 >—' ► RD0/AD8 ► RD1/AD9
Ч.
RC1/AD1 « J" 3 38 ►RD2/AD10
RC2/AD2 ч. JT
4 37
Ч. J" F- пио/ни 1 1 ”L ь. ОРМ /ЛП1 о
RC3/AD3 5 36
Ч. j* J4 * HU4/AU1Z
RC4/AD4 6 35
ч. J’ r nUJ/MU 1 О
RC5/AD5 J" 34 "L । k. ОГЛС /лги л
ч. Г ' ► HUb/AU 14
RC6/AD6 J” 8 33 "L . k DR7/ЛГИ Ц
ч. -F 1 гЧ U / f P<U 1 □
RC7/AD7 < 9 32 Ъ - MCI R/Vnn
’ 4L -F
RB0/CAP1 - Gnd [ , J" 10 11 31 30 ] Gnd ► REO/ALE
' 4. -—< t J-
RB1/CAP2 < RB2/PWM1 < 12 13 29 28 ► RE1/_OE ► RE2/_WR
' 4.
RR4/PWM9 . r 14 27 -TEST
Пии/ГVVIVI^ * RB4/TCLK2 - ' L , J" "L
15 26
' 4. ( j- J’ ПМи/IINI
DDC /Т/^l 1ZO 16 25
К Во/1 CLK3 ‘ 4- J ГЛЛЛ 1/ 1 WVrIXI
RB6 « 17 24 ► RA2
RB7 < •—< 18 23 ъ— ► RA3
OSC1/CLKIN - —< 19 22 ► RA4/RX/DT
OSC2/CLKOUT « •—[ 20 21 ► RA5/TX/CK
Корпуса типа JW, Р
Ширина корпусов со штыревыми
выводами составляет 0,600"
Рис. 3.13
Выводы 40-контактных микроконтроллеров PIC 17С6х
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
Vdd [ -^64 ] Gnd
RC0/AD0 <—< 2 63 ъ— ► RC1/AD1
RD7/AD15 <—< 3 62 ъ— ► RC2/AD2
RD6/AD14 *—c 4 61 ъ— ► RC3/AD3
RD5/AD13 <—< 5 60 ъ— ► RC4/AD4
RD4/AD12 6 59 ► RC5/AD5
RD3/AD11 <—< 7 58 ъ— * RC6/AD6
RD2/AD10 <—< 8 57 ► RC7/AD7
RD1/AD9 -—< 9 56 ъ— - RA0/INT
RD0/AD8 <—[ 10 55 Ъ—' ► RB0/CAP1
RE0/ALE <—< 11 54 Ъ—' ► RB1/CAP2
RE1/.OE .—< 12 53 ► RB3/PWM2
RE2/.WR <—< 13 52 Ъ—' ►RB4/TOLK12
RE3/CAP4 «—[ 14 51 ъ—- ► RB5/TOCK3
_MCLR/Vpp —* 15 50 ► RB2/PWM1
TEST —< 16 49 ] Gnd
Gnd [ 17 48 ]—' ► OSC2/CLKOUT
Vdd [ 18 47 -OSC1/CLKIN
RF7/AN11 < < 19 46 ] Vdd
RF6/AN10 < < 20 45 Ъ—' ► RB7/SDO
RF5/AN9 < < 21 44 ъ—• > RB6/SCK
RF4/AN8 < ►[ 22 43 ъ—> ► RA3/SDI/SDA
RF3/AN7 < 23 42 ъ—• > RA2/_SS/SCL
RF2/AN6 < C 24 41 >— -RA1/T0CKI
RF1/AN5 « ►[ 25 40 - RA4/RX1/DT1
RF0/AN4 * 26 39 - RA5/TX1/CK1
AVdd • < 27 38 ► RG6/RX2/DT2
AVss < 28 37 >—• - RG7/TX2/CK2
RG3/AN0/Vref+ < < 29 36 > RG5/PWM3
RG2/AN1/Vref- « ►£ 30 35 >—• - RG4/CAP3
RG1/AN2 < < 31 34 ] Vdd
RG0/AN3 • < C 32 33 1 Gnd
Рис. 3.14
Выводы 64-контактных микроконтроллеров PIC 17С75х
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
RC0/AD0*
RC1/AD1 <
RC2/AD2 +
RC3/AD3 +
RD0/AD8
RD1/AD9
RD2/AD10
RD3/AD11
CM
RC4/AD4
RC5/AD6
RC6/AD6
RC7/AD7«----►[
Gnd [
Gnd [ 12
{7
<8
ф
10
11
о
RB0/CAP1
RB1/CAP2
RB2/PWM1
RB3/PWM2
RB4/TCLK12
£
£
£
£
13
14
15
16
17
39
38
37
36
35
34
33
32
31
30
29
CM
T- cm
CM CM
in
CM
CM
CM CM
RB5/TCLK3
RB6
RB7
OSC1/CLKIN
OSC2/CLKOUT
RA5/TX/CK
]◄---->RD4/AD12
]◄----►RD5/AD13
Ъ-----►RD6/AD14
]◄----►RD7/AD15
]◄-----_MCLR/Vpp
] Gnd
] Gnd
]◄---►REO/ALE
]◄---►REI/JDE
]◄--->^Е2/_\л/в
Ъ------TEST
RAO/INT
RA1/T0CKI
RA2
RA3
RA4/RX/DT
Рис. 3.15
Выводы 44-контактных микроконтроллеров PIC 17С4х в корпусе типа PLCC
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
RA5/TX/CK
RA4/RX/DT
RA3
RA2
RA1/T0CKI
RA0/INT
OSC2/CLKOUT
OSC1/CLKIN
RB7
RB6
RB5/TCLK3
Ю
TEST--НИ
RE2/_WR«—НИ
RE1/_OE<—ИД
Gnd Щ
Gnd Щ
RD7/AD15-*—►Щ
RD5/AD13<—4Ц
1 О
2
3
4
5
6
7
8
9
10
11
см
33
32
31
30
29
28
27
26
ПН—►RB4/TCKL12
Л?—►RB3/PWM2
Hh—►RB2/PWM1
Uh—►RB1/CAP2
Uh—►RB0/CAP1
m Gnd
HI Gnd
Uh—►RC7/AD7
25 Uh—*RC6/AD6
24 Uh—►RC5/AD5
23 Hh—«-RC4/AD4
СМ
СМ
RD3/AD11
RD2/AD10
RD1/AD9
RD0/AD8
J 3 3 u L
RC3/AD3
RC2/AD2
RC1/AD1
RC0/AD0
Рис. 3.16
Выводы 44-контактных микроконтроллеров PIC 17С4х в корпусе типа QFP
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
_MCLR/Vpp/THV < 1 'О'28 }< ► RB7
RA0/AN0 « »[ 2 27 }< ► RB6
RA1/AN1 < ►[ 3 26 }• ►RBS
RA2/AN2/Vref- « ►[ 4 25 }• ► RB4
RA3/AN3/Vref+ « ►[ 5 24 Ъ ► RB3/CCP2
RA4/T0CKI < ►[ 6 23 ]« ► RB2/INT2
RA5/AN4/SS/LVDIN < ►[ 7 22 }• ► RB1/INT1
Gnd [ 8 21 ]< ► RB0/INT0
OSC1/CLKIN ►[ 9 20 ]Vdd
OSC2/CLKOUT/RA6 ◄ [ 10 19 ]Gnd
RCO/T10SO/T1CKI < ►[ 11 18 } ► RC7/RX/DT
RC1/T1OSI/CCP2 ч ►[ 12 17 ]« ► RC6/TX/CK
RC2/CCP1 * ►[ 13 16 Ъ ► RC5/SDO
RC3/SCK/SCL < ►[ 14 15 ]« ► RC4/SDI/SDA
Корпуса типа JW, Р, SO
Ширина корпусов со штыревыми
выводами составляет 0,600"
Рис. 3.17
Выводы 28-контактных микроконтроллеров PIC 18С2Х2
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
RB7
RB6
RB5
RB4
RB3/CCP2
RB2/INT2
RB1/INT1
RBO/INTO
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC7/RX/DT
RB6/TX/CK
RB5/SDO
RB4/SDI/SDA
RD3/PSP3
RD2/PSP2
Корпуса типа JW, Р
Ширина корпусов со штыревыми
выводами составляет 0,600"
Рис. 3.18
Выводы 40-контактных микроконтроллеров PIC 18С4Х2
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
MCLR/Vpp
RAO/ANO
RA1/AN1
RA2/AN2/Vref-
RA3/AN3/Vref+
RA4/T0CKI
RA5/AN4/SS/LVDIN
RE0/_RD/AN5
RE1/.WR/AN6
RE2/.CS/AN7
OSC1/CLKIN
OSC2/CLKOUT/RA6
RC0/T1OSO/T1CKI
35 ] Vdd
34 ] Gnd
33 Ъ----
RB6
RB5
RB4
RB3/CCP2
RB2/INT2
RB1/INT1
RBO/INTO
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RDO/PSPO
RD1/PSP1
«---->[ 11
Vdd [ 12
Gnd [ 13
<-----[ 14
-----►[ 15
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD2/PSP2
RB7
32 ]◄-----►
31 ]«-----►
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC7/RX/DT
RD3/PSP3
Рис. 3.19
Выводы микроконтроллеров PIC 18C4X2 в 44-контактном корпусе типа PLCC
КОРПУСА PIC-МИКРОКОНТРОЛЛЕРОВ
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RD1/PSP1
RD0/PSP0
RC3/SCK/SCL
RC2/CCP1
RC1/T1OSI/CCP2
RC7/RX/DT ◄—НИ
RD4/PSP4*—4Ц
RD6/PSP6 <—«НЕ
Vdd ПТ
Gnd [Ц
RB3/CCP2-»—«Щ
RB4<-
RB5<
RB6«-
RB7<-
1 o
2
3
4
5
6
7
8
9
10
11
33
32
31
30
29
28
27
26
25
24
23
см
СМ
ш n/c
Uh—►RC0/T1OSO/T1CKI
Ш----►OSC2/CLKOUT
Uh----OSC1/CLKIN
Ш Vdd
Hl Gnd
HP—►RE2/_CS/AN7
Uh—►RE1/_WR/AN6
Hh—>RE0/_RD/AN5
Uh—►RA5/AN4/SS/LVDIN
ЛЬ—►RA4/T0CKI
RA3/AN3/Vref+
RA2/AN2/Vref-
RA1/AN1
RA0/AN0
_MCLR/Vpp
Рис. 3.20
Выводы микроконтроллера PIC 18С4Х2 в 44-контактном корпусе типа QFP
О МАНД
ТРОЛЛЕРОВ
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
PIC-микроконтроллеры являются RISC-микроконтроллерами. У каж-
дого подсемейства формат команды фиксирован и составляет соот-
ветственно 12, 16 или 16 разрядов. Формат некоторых команд под-
семейства PIC 18 составляет два слова (32 разряда). Большинство
команд выполняется за один командный цикл. Команды переходов
и вызова подпрограмм выполняются за два командных цикла. Неко-
торые команды микроконтроллеров подсемейств PIC 17 и PIC 18
требуют трех командных циклов.
ПАРАМЕТРЫ
Параметры, которые используются в командах микроконтролле-
ров, представлены в табл. 4.1.
Таблица 4.1
Параметры команд
Параметр Символ Буква, используемая для кодирования Диапазон значений
Не принципиально N/A X
Константа, 1 байт к к От 0 до OxOFF
Адрес регистра Reg f Определяется типом м и кро ко нтролл е ра
Указатель приемника результата d d 0 или 1 (0 - регистр W, 1 - регистр банка)
Адресуемый бит Bit b От 0 до 7
Задаваемый адрес Address а От 0 до 0x07FF
Порт назначения Port Р Определяется типом микроконтроллера
СИСТЕМЫ КОМАНД Р1С-МИКРОКОНТРОЛЛЕРОВ
МЛАДШЕГО И СРЕДНЕГО ПОДСЕМЕЙСТВ
Системы команд младшего и среднего подсемейств микроконтрол-
леров PlCmicro® приводятся в табл. 4.2 и 4.3 соответственно.
PIC-микроконтроллеры младшего подсемейства в каждом банке
регистров могут содержать не более 32 программно доступных регис-
тров, поэтому значение параметра «адрес регистра» (Reg) может из-
меняться в диапазоне от 0x00 до 0x01 F.
Оперативная память PIC-микроконтроллеров среднего подсе-
мейства состоит из банков, включающихдо 128 программно доступ-
ных регистров, поэтому значение параметра «адрес регистра» (Reg)
может изменяться в диапазоне от 0x00 до 0x07F.
МЛАДШЕЕ И СРЕДНЕЕ ПОДСЕМЕЙСТВА
Таблица 4.2
Система команд микроконтроллеров PICmicro® младшего подсемейства
~~ Описание Команда Функция Код
Сложение содержимого регистра с содержимым регистра w и размещение результата в соответствии с указателем d addwf Reg, d If (d == 1) Reg = Reg + w else w = Reg + w endif C = (Reg + w) > OxOFF Z = ((Reg + w) & OxOFF) == 0 DC = ((Reg & OxOF) + w & OxOF)) > OxOF 0001 lldf ffff
Логическое И (побитовое) константы с содержимым регистра w andlw k w = w & k Z = (w & k) == 0 1110 kkkk kkkk
Логическое И содержимого регистра с содержимым регистра w и сохранение результата в соответствии с указателем d andwf Reg, d if (d == 1) Reg = Reg & w else w = Reg & w endif Z = (Reg & w) == 0 0001 Oldf ffff
Стирание заданного бита в регистре bcf Reg, bit Reg = Reg & (OxOFF " (1 « Bit)) 0100 bbbf ffff
Установка заданного бита в регистре (запись 1) bsf Reg, bit Reg = Reg | (1 « Bit) 0101 bbbf ffff
Пропуск следующей команды при условии равенства 0 заданного бита в регистре; в отсутствие пропуска требуется один командный цикл, а в случае пропуска - два цикла btfsc Reg, bit if (((Reg & (1 « Bit)) == 0) PC = PC + 1 endif 0110 bbbf ffff
Пропуск следующей команды при условии равенства 1 заданного бита в регистре; если нет пропуска, требуется один командный цикл, в случае пропуска - два btfss Reg, bit if ((Reg & (1 « Bit)) != 0 PC = PC + 1 endif 0111 bbbf ffff
Вызов подпрограммы. Сохранение программного счетчика в стеке и переход к заданному адресу Требуются два цикла) call Address [SP] = PC SP = SP + 1 PC = ((STATUS & OxOEO) « 4) + Address 1001 aaaa aaaa
Стирание информации 8 заданном регистре clrf Reg Reg = 0 Z = 1 0000 011f ffff
Стирание регистра w clrw W = 0 Z = 1 0000 0100 0000
Стирание счетчика сторожевого таймера clrwdt WDT = 0 _T0 = 1 _PD = 1 0000 0000 0100
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица ,4.2,
Система команд микроконтроллеров PICmicro0 младшего подсемейства (продолжение)
Описание Команда Функция Код
Инвертирование содержимого заданного регистра и размещение результата в соответствии с указателем d comf Reg, d If (d == 1) Reg = Reg " OxOFF else w = Reg " OxOFF endif Z = (Reg " OxOFF) == 0 0010 01df ffff
Декрементирование содержимого регистра и размещение результата в соответствии с указателем d decf Reg, d if (d == 1) Reg = Reg - 1 else w = Reg - 1 endif Z = (Reg - 1) == 0 0011 11df ffff
Декрементирование содержимого регистра, размещение результата в соответствии с указателем d и пропуск следующей команды, если результат равен нулю; при пропуске требуются два цикла команды decfsz Reg, d if (d == 1) Reg = Reg - 1 else w = Reg - 1 endif PC = PC + 1 if ((Reg - 1) == 0) PC = PC + 1 indif 0010 11df ffff
Безусловный переход к заданному адресу (требуются два командных цикла) goto Address PC = ((STATUS & OxOEO) « 4) + Address 101a aaaa aaaa
Инкрементирование содержимого регистра и размещение результата в соответствии с указателем d incf Reg, d if (d == 1) Reg = Reg + 1 else w = Reg + 1 endif Z = (Reg + 1) == 0 0010 10df ffff
Инкрементирование содержимого регистра, размещение результата в соответствии с указателем d и пропуск последующей команды, если результат равен нулю; при пропуске требуются два цикла incfsz Reg, d if (d == 1) Reg = Reg + 1 else w = Reg + 1 endif PC = PC + 1 if ((Reg + 1) == 0) PC = PC + 1 indif 0011 lldf ffff
Логическое ИЛИ (побитовое) константы с содержимым регистра w lorlw k W = w | k Z = (w | k) == 0 1101 kkkk kkkk
Логическое ИЛИ содержимого регистра с содержимым регистра w, размещение результата в соответствии с указателем d lorwf Reg, d if (d == 1) Reg = Reg | w else w = Reg | w endif Z = (Reg I w) == 0 0001 OOdf ffff
Пересылка содержимого регистра в соответствии с указателем d movf Reg, d if (d == 0) W = Reg endif Z = Reg == 0 0010 OOdf ffff
МЛАДШЕЕ И СРЕДНЕЕ ПОДСЕМЕЙСТВА
Таблица 4.2
Система команд микроконтроллеров PICmicro0 младшего подсемейства (продолжение)
Описание Команда Функция Код
Загрузка константы в регистр w movlw к W = к 1100 kkkk kkkk
Загрузка в регистр содержимого регистра w movwf Reg Reg = w 0000 OOlf ffff
«Пустая» операция nop 0000 0000 0000
Загрузка содержимого регистра w в регистр OPTION option OPTION = w 0000 C000 0010
Возврат из подпрограммы с загрузкой константы в регистр w (требуются два цикла) retlw к W = к SP = SP - 1 PC = [SP] 1000 kkkk kkkk
Возврат из подпрограммы (требуются два цикла) return W = 0 SP = SP - 1 PC = [SP] 1000 0000 0000
Циклический сдвиг содержимого регистра влево и сохранение результата в соответствии с указателем d rlf Reg, d Temp = C C = (Reg » 7) & 1 if (d == 1) Reg = (Reg « 1) + Temp else w = (Reg « 1) + Temp endif 0011 01df ffff
Циклический сдвиг содержимого регистра вправо и сохранение результата в соответствии с указателем d rrf Reg, d Temp = C C = Reg & 1 if (d == 1) Reg = (Reg » 1) + (Temp « 7) else w = (Reg » 1) + (Temp « 7) endif 0011 OOdf ffff
Переход в режим ожидания SLEEP (на неопределенное время) sleep _T0 = 1 _PD = 0 0000 0000 0011
Вычитание содержимого регистра w из содержимого регистра и размещение Результата в соответствии с указателем d subwf Reg, d if (d == 1) Reg = Reg + (w ~ OxOFF) + 1 else w = Reg + (w OxOFF) + 1 endif C = (Reg + (w ~ OxOFF) + 1) > OxOFF Z = ((Reg + (w " OxOFF) + 1) & OxOFF == 0 DC == ((Reg & OxOF) + ((w " OxOF) & OxOF) + 1) > OxOF 0000 10df ffff
Перемена местами старшего и младшего полубайтов Регистра и размещение Результата в соответствии с Указателем d *- swept Reg, d if (d == 1) Reg = ((Reg & OxOFO) » 4) + ((Reg & OxOF) « 4) else w = ((Reg & OxOFO) » 4) + ((Reg & OxOOF) « 4) endif 0011 lOdf ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.2
Система команд микроконтроллеров PICmicro0 младшего подсемейства (окончание)
Описание Команда Функция Код
Пересылка содержимого регистра w в регистр управления порта TRIS tns Port TRIS(Port) = w 0000 0000 Oppp
Исключающее ИЛИ содержимого регистра w с константой xorlf k W = w " k Z = (W " k) == 0 1111 kkkk kkkk
Исключающее ИЛИ содержимого регистра с содержимым регистра w и размещение результата в соответствии с d xorwf Reg, d if (d == 1) Reg = Reg ~ w else w = Reg " w endif Z = (Reg ~ w) == 0 0001 10df ffff
Таблица .4.3
Система команд PIC-микроконтроллеров среднего подсемейства
Описание Команда Функция Код
Сложение константы с содержимым регистра w addlw к W = w + к C = (w + к) > OxOFF Z = ((w + k) & OxOFF) == 0 DC = ((w & OxOF) + (k & OxOF)) > OxOF 11 111x kkkk kkkk
Сложение содержимого регистра с содержимым регистра w и размещение результата в соответствии со значением указателя d addwf Reg, d if (d == 1) Reg = Reg + w else w = Reg + w endif C = (Reg + w) > OxOFF Z = ((Reg + w) & OxOFF) == 0 DC = ((Reg & OxOF) + (w & OxOF)) > OxOF 00 0111 dfff ffff
Логическое И (побитовое) константы с содержимым регистра w andlw к W = w & к Z = (w & к) == 0 11 1001 kkkk kkkk
Логическое И содержимого регистра с содержимым регистра w и сохранение результата в соответствии со значением указателя d andwf Reg, d if (d == 1) Reg = Reg & w else w = Reg & w endif Z = (Reg & w) == 0 00 0101 dfff ffff
Стирание заданного бита в регистре bcf Reg, bit Reg = Reg & (OxOFF * (1 « Bit)) 01 OObb bfff ffff
Установка заданного бита в регистре (запись 1) bsf Reg, bit Reg = Reg | (1 « Bit) 01 01bb bfff ffff
МЛАДШЕЕ И СРЕДНЕЕ ПОДСЕМЕЙСТВА
Таблица 4.3
Система команд PIC-микроконтроллеров среднего подсемейства (продолжение)
Описание Команда Функция Код
Пропуск следующей команды при условии,что заданный бит в регистре равен 0; при отсутствии пропуска требуется один командный цикл, а в случае пропуска - два цикла btfsc Reg, bit if ((Reg & (1 « Bit))) == 0 PC - PC + 1 endif 01 lObb bfff ffff
Пропуск следующей команды при условии,что заданный бит в регистре равен 1; при отсутствии пропуска требуется один командный цикл, а в случае пропуска - два btfss Reg, bit if ((Reg & (1 « Bit))) i= 0 PC = PC + 1 endif 01 11bb bfff ffff
Вызов подпрограммы. Сохранение программного счетчика в стеке и переход к заданному адресу (требуются два цикла) call Address [SP] = PC SP = SP + 1 PC = ((PCLATH « 8) & 0x01800) + Address 10 Oaaa aaaa aaaa
Стирание информации в заданном регистре clrf Reg Reg = 0 Z = 1 00 0001 Ifff ffff
Стирание регистра w clrw W = 0 Z = 1 00 0001 Oxxx xxxx
Стирание счетчика сторожевого таймера clrwdt WDT = 0 _T0 = 1 _PD = 1 00 0000 0110 0100
Инвертирование содержимого заданного регистра и размещение результата в соответствии со значением указателя d comf Reg, d if (d == 1) Reg = Reg " OxOFF else w = Reg " OxOFF endif Z = (Reg ~ OxOFF) == 0 00 1001 dfff ffff
Декрементирование содержимого регистра и размещение результата в соответствии со значением Указателя d decf Reg, d if (d == 1) Reg = Reg - 1 else w = Reg - 1 endif Z = (Reg - 1) == 0 00 0011 dfff ffff
Декрементирование содержимого регистра, Размещение результата в соответствии со значением Указателя d и пропуск следующей команды, если Результат равен нулю; при Допуске требуются два -командных цикла decfsz Reg, d if (d == 1) Reg = Reg - 1 else w = Reg - 1 endif if ((Reg - 1) == 0) PC = PC + 1 endif 00 1011 dfff ffff
Безусловный переход к заданному адресу (требуются два командных .Цикла) goto Address PC = ((PCLATH « 8) & 0x01800) + Address 10 laaa aaaa aaaa
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.3
Система команд PIC-микроконтроллеров среднего подсемейства (продолжение)
Описание Команда Функция Код
Инкрементирование содержимого регистра и размещение результата в соответствии со значением указателя d incf Reg, d If (d == D Reg = Reg + 1 else w = Reg + 1 endif Z = (Reg + 1) == 0 00 1010 dfff ffff
Инкрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск последующей команды, если результат равен нулю; при пропуске требуются два командных цикла incfsz Reg, d if (d == 1) Reg = Reg + 1 else w = Reg + 1 endif if ((Reg + 1) == 0 PC = PC + 1 endif 00 1111 dfff ffff
Логическое ИЛИ (побитовое) константы с содержимым регистра w lorlw k W = w | k Z = (w | k) == 0 11 1000 kkkk kkkk
Логическое ИЛИ содержимого регистра с содержимым регистра w, размещение результата в соответствии со значением указателя d lorwf Reg, d if (d == 1) Reg = Reg | w else w = Reg | w endif Z = (Reg | W) == 0 00 0100 dfff ffff
Пересылка содержимого регистра в соответствии со значением указателя d movf Reg, d if (d == 0) W = Reg endif Z = Reg == 0 00 1000 dfff ffff
Загрузка константы в регистр w movlw k W = k 11 OOxx kkkk kkkk
Загрузка в регистр содержимого регистра w movwf Reg Reg = w 00 0000 1fff ffff
«Пустая» операция nop 00 0000 OxxO 0000
Загрузка содержимого регистра w в регистр OPTION option Option = w 00 0000 0110 0010
Возврат из прерывания (требуются два цикла) retfie GIE = 1 SP = SP - 1 PC = [SP] 00 0000 0000 1001
Возврат из подпрограммы и загрузка константы в регистр w (требуются два цикла) retlw k W = k SP = SP - 1 PC = [SP] 11 01xx kkkk kkkk
Возврат из подпрограммы (требуются два цикла) return SP = SP - 1 PC = [SP] 00 0000 0000 1000
Циклический сдвиг содержимого регистра влево и сохранение результата в соответствии со значением указателя d rlf Reg, d Temp = C C = (Reg » 7) & 1 if (d == 1) Reg = (Reg « 1) + Temp else w = (Reg « 1) + Temp endif 00 1101 dfff ffff
МЛАДШЕЕ И СРЕДНЕЕ ПОДСЕМЕЙСТВА
Таблица 4.3
Система команд PIC-микроконтроллеров среднего подсемейства (продолжение)
Описание Команда Функция Код
циклический сдвиг содержимого регистра вправо и сохранение результата в соответствии со значением указателя d rrf Reg, d Temp = C C = Reg & 1 if (d == 1) Reg = (Reg » 1) + (Temp « 7) else w = (Reg » 1) + (Temp « 7) endif 00 1100 dfff ffff
Переход в режим ожидания SLEEP (на неопределенное время) sleep _T0 = 1 _PD = 0 00 0000 0110 0011
Вычитание содержимого регистра w из константы sublw k W = k + (w " OxOFF) + 1 C = (k + (w " OxOFF) + 1) > OxOFF Z = ((k + (w ~ OxOFF) + 1) & OxOFF) == 0 DC = ((k & OxOF) + ((w ~ OxOFF) & OxOF) + 1) > OxOF 11 110x kkkk kkkk
Вычитание содержимого регистра w из содержимого регистра и размещение результата в соответствии со значением указателя d subwf Reg, d if (d == 1) Reg = Reg + (w ~ OxOFF) + 1 else w = Reg + (w " OxOFF) + 1 endif C = (Reg + (w ~ OxOFF) + 1) > OxOFF Z = ((Reg + (w ~ OxOFF) + 1) & OxOFF) == 0 DC = ((Reg & OxOF) + ((w " OxOFF) & OxOF) + 1) > OxOF 00 0010 dfff ffff
Перемена местами старшего и младшего полубайтов регистра и размещение Результата в соответствии со значением указателя d swapf Reg, d if (d == 1) Reg = ((Reg & OxOFO) » 4) + ((Reg & OxOOF) « 4) else w = (Reg & OxOFO) » 4) + ((Reg & OxOOF) « 4) endif 00 1110 dfff ffff
(^ресылка содержимого Регистра w в регистр Управления порта TRIS tris Port TRIS(Port) = w 00 0000 0110 Oppp
Исключающее ИЛИ содержимого регистра w £константой xorlw k W = w " k Z = (w ~ k) == 0 11 1010 kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.3
Система команд PIC-микроконтроллеров среднего подсемейства (окончание)
Описание Команда Функция Код
Исключающее ИЛИ содержимого регистра с содержимым регистра w и размещение результата в соответствии со значением указателя d xorwf Reg, d if (d == 1) Reg = Reg " w else w = Reg " w endif Z = (Reg " w) == 0 00 0110 dfff ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ
ПОДСЕМЕЙСТВА PIC 17СХХ
Система команд микроконтроллеров подсемейства PIC 17Схх вклю-
чает 58 команд. Она во многом аналогична системам команд младше-
го и среднего подсемейств, но по сравнению с ними расширена,
в том числе и в базовых командах пересылки move, которые, поми-
мо традиционных команд пересылки между рабочим регистром w
и регистрами оперативной памяти, включают команды пересылки
между так называемыми регистрами первичного набора и другими регис-
трами ОЗУ. Система команд микроконтроллеров PIC 17Схх приведе-
на в табл. 4.4.
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх
Описание Команда Функция Код
Сложение константы с содержимым регистра wreg addlw Constant wreg = wreg + Constant if (((wreg > 0) & (Constant > 0)) & ((wreg + Constant > 0x07F)) 0V = 1 else 0V = 0 if ((wreg + Constant) > OxOFF) C = 1 else C = 0 if (((wreg & OxOF) + (Constant & OxOF)) > OxOF) DC = 1 else DC = 0 if (((wreg + Constant) & OxOFF) == 0x000) Z = 1 else Z = 0 1011 0001 kkkk kkkk
ПОДСЕМЕЙСТВО PIC 17СХХ
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Сложение содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением указателя d addwf Reg, d If (d == 1) Wreg - wreg + Reg else Reg = wreg + Reg if (((wreg > 0) & (Reg > 0)) & ((wreg + Reg) > 0x07F)) 0V = 1 else 0V = 0 if ((wreg + Reg) > OxOFF) C = 1 else C = 0 if (((wreg & OxOF) + (Reg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((wreg + Reg) & OxOFF) == 0x000) Z = 1 else Z = 0 0000 111d ffff ffff
Сложение содержимого регистра с содержимым регистра wreg и битом переноса С и размещение результата в соответствии со значением указателя d addwfc reg, d if (d == 1) Wreg = wreg + Reg + C else Reg = wreg + Reg + C if (((wreg > 0) & (Reg > 0) & ((wreg + Reg + Reg + C) > 0x07F)) 0V = 1 else 0V = 0 if ((wreg + Reg + C) > OxOFF) C = 1 else C = 0 if (((wreg & OxOF) + (Reg & OxOF) + C) > OxOF) DC = 1 else DC = 0 if (((wreg + Reg + C) & OxOFF) == 0x000) Z = 1 else Z = 0 0001 000a ffff ffff
Логическое И (побитовое) содержимого регистра wreg с константой andlw Constant wreg = wreg & Constant if ((wreg & Constant) == 0x000) Z = 1 else Z = 0 1011 0101 kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Логическое И содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением указателя d andwf Reg, d If (d == 1) wreg = wreg & Reg else Reg = wreg & Reg if ((wreg & Reg) == 0x000) Z = 1 else Z = 0 0000 101d ffff ffff
Стирание заданного бита в регистре Reg bcf Reg, Bit Reg = Reg & (OxOFF " (1 « Bit)) 1000 Ibbb ffff ffff
Установка заданного бита в регистре (запись в 1) bsf Reg, Bit Reg = Reg | (1 « Bit) 1000 Obbb ffff ffff
Проверка значения бита регистра и пропуск следующей команды, если бит равен 0. При отсутствии пропуска требуется один командный цикл, а в случае пропуска - два цикла btfsc Reg, Bit if ((Reg & (1 « Bit)) == 0) PC = PC + 1 1001 1bbb ffff ffff
Проверка значения бита регистра и пропуск следующей команды, если бит равен 1. При отсутствии пропуска требуется один командный цикл, а в случае пропуска - два цикла btfss Reg, Bit if ((Reg & (1 « Bit)) ' = 0) PC = PC + 1 1001 Obbb ffff ffff
Изменение состояния заданного бита регистра btg Reg, Bit Reg = Reg ~ (1 « Bit) 0011 1bbb ffff ffff
Вызов подпрограммы (требуются два цикла) call Label PUSH ( PC ) PCLATH = PC (15 13) + Label (12:8) PCL = Label (7.0) 111k kkkk kkkk kkkk
Стирание указанного регистра и регистра wreg в зависимости от значения указателя s clrf Reg, s Reg = 0 if (s == 0) wreg = 0 0010 100s ffff ffff
Стирание счетчика сторожевого таймера clrwdt WDT = 0 WDT Postscaler = 0 _T0 = 1 _PD = 1 0000 0000 0000 0100
Инвертирование содержимого заданного регистра и размещение результата в соответствии со значением указателя d comf Reg, d if (d == 0) Wreg = Reg " OxOFF else Reg = Reg " OxOFF if ((Reg ~ OxOFF) == 0x000) Z = 1 else Z = 0 0001 001d ffff ffff
ПОДСЕМЕЙСТВО PIC 17СХХ
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Сравнение содержимого регистра с содержимым регистра wreg. В случае равенства - пропуск следующей команды (требуются два цикла) cpfseq Reg if ((Reg - wreg) == 0) PC = PC + 1 0011 0001 ffff ffff
Сравнение содержимого регистра с содержимым регистра wreg. Если первое больше - пропуск следующей команды (требуются два цикла) cpfsgt Reg if ((Reg - wreg) > 0 PC = PC + 1 0011 0010 ffff ffff
Сравнение содержимого регистра с содержимым регистра wreg. Если первое меньше - пропуск следующей команды (требуются два цикла) cpfslt Reg if ((Reg - wreg) < 0) PC = PC + 1 0011 0000 ffff ffff
Десятичная коррекция и размещение результата в соответствии со значением указателя s daw Reg, s if ((wreg & OxOF) > 9) if (s == 0) Wreg = (wreg & OxOF) + 0x010 else Reg = (wreg & OxOF) + 0x010 0010 111s ffff ffff
Декрементирование содержимого регистра и размещение результата в соответствии со значением указателя d decf Reg, d if (d == 0) Wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) == 0x000) Z = 1 else Z = 0 if (((Reg > 0) & ((Reg - 1) < 0x080)) 0V = 1 else 0V = 0 if (((Reg & OxOOF) - 1) & 0x080) '= 0) DC = 0 else DC = 1 if ((Reg - 1) < 0) C = 0 else C = 1 0000 Olid ffff ffff
Декрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск следующей команды, если результат равен нулю; при пропуске требуются два командных Цикла decfsz Reg, d if (d == 0) wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) == 0x000) PC = PC + 1 0001 011d ffff ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4,4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Декрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск следующей команды, если результат не равен нулю; при пропуске требуются два командных цикла dcfsnz Reg, d if (d == 0) Wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) != 0x000) PC = PC + 1 0010 Olid ffff ffff
Безусловный переход (требуются два командных цикла) goto Label PCLATH = PC (15:13) + Label (12 8) PCL = Label (7.0) 1101 kkkk kkkk kkkk
Инкрементирование содержимого регистра и размещение результата в соответствии со значением указателя d incf Reg, d if (d == 0) Wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) == 0x000) Z = 1 else Z = 0 if (((Reg > 0) & ((Reg + 1) > 0x07F)) 0V = 1 else 0V = 0 if (((Reg & OxOOF) + 1) & 0x010) '= 0) DC = 1 else DC = 0 if ((Reg + 1) == 0x0100) C = 1 else C = 0 0001 OlOd ffff ffff
Инкрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск последующей команды, если результат равен нулю; при пропуске требуются два командных цикла incfsz Reg, d if (d == 0) Wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) == 0x000) PC = PC + 1 0001 111d ffff ffff
Инкрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск последующей команды, если результат не равен нулю; при пропуске требуются два командных цикла infsnz Reg, d if (d == 0) Wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) != 0x000) PC = PC + 1 0010 010d ffff ffff
ПОДСЕМЕЙСТВО PIC 17СХХ
Таблица 4Л
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Логическое ИЛИ (побитовое) константы с содержимым регистра wreg iorlw Constant wreg = wreg | Constant if ((wreg | Constant) == 0x000) Z = 1 else Z = 0 1011 0011 kkkk kkkk
Логическое ИЛИ содержимого регистра с содержимым регистра wreg, размещение результата в соответствии со значением указателя d iorwf Reg, d if (d == 1) Wreg = wreg | Reg else Reg = wreg | Reg if ((wreg | Reg) == 0x000) Z = 1 else Z = 0 000 100d ffff ffff
«Длинный» переход (два цикла) Icall Label PUSH ( PC ) PCL = Label (7 0) 1011 0111 kkkk kkkk
Пересылка содержимого регистра в регистр из первичной области (00 - 1F) movfp Reg, p P = Reg 011p pppp ffff ffff
Загрузка константы в младший полубайт регистра выбора банка (BSR) movlb Constant BSR (3-0) = Constant 1011 1000 0000 kkkk
Загрузка константы в старший полубайт регистра выбора банка (BSR) movlr Constant BSR (7.4) = Constant 1011 1010 kkkk 0000
Загрузка константы в регистр wreg movlw Constant Wreg = Constant 1011 0000 kkkk kkkk
Пересылка содержимого регистра первичной области (00 - 1F) в заданный регистр movpf p, Reg Reg = p if (p == 0) Z = 1 else Z = 0 010p pppp ffff ffff
Пересылка содержимого wreg в заданный регистр movwf Reg Reg = wreg 0000 0001 ffff ffff
Умножение содержимого регистра wreg на константу mullw Constant PRODH PROGL = Constant * wreg 1011 1100 kkkk kkkk
Умножение содержимого регистра на содержимое регистра wreg mullwf Reg PRODH.PROGL = Reg * wreg 0011 0100 ffff ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Изменение знака содержимого регистра wreg и размещение результата в соответствии со значением указателя s negw Reg, s if (s == 0) Reg = -wreg wreg = -wreg if ((wreg < 0) & (-wreg < 0x080)) 0V = 1 else 0V = 0 if (-wreg > OxOFF) C = 1 else C = 0 if ((-wreg & OxOF) > OxOF) DC = 1 else DC = 0 if (-wreg == 0x000) Z = 1 else Z = 0 0010 110s ffff ffff
«Пустая» операция nop 0000 0000 0000 0000
Возврат из прерывания (требуются два цикла) retfie PC = POP ( ) GLTIND = 0 0000 0000 0000 0101
Возврат из подпрограммы с загрузкой константы в регистр wreg (требуются два цикла) retlw Constant Wreg = Constant PC = POP ( ) 1011 0110 kkkk kkkk
Возврат из подпрограммы (требуются два цикла) return PC = POP ( ) 0000 0000 0000 0010
Циклический сдвиг (через бит переноса) содержимого регистра влево и сохранение результата в соответствии со значением указателя d rlcf Reg, d if (d == 0) Wreg (71)= Reg (6 0) Wreg (0) = C else Reg (7 1) = Reg (6.0) Reg (0) = C C = Reg (7) 0001 101d ffff ffff
Циклический сдвиг содержимого регистра влево и сохранение результата в соответствии со значением указателя d rlcnf Reg, d if (d == 0) Wreg (7:1) = Reg (6 0) Wreg (0) = Reg (7) else Reg (7.1) = Reg (6.0) Reg (0) = Reg (7) 0010 001d ffff ffff
Циклический сдвиг (через бит переноса) содержимого регистра вправо и сохранение результата в соответствии со значением указателя d rrcf Reg, d if (d == 0) Wreg (6-0) = Reg (7.1) Wreg (7) = C C = Reg (0) else Reg (6.0) = Reg (7:1) Reg (7) = C C = Reg (0) 0001 lOOd ffff ffff
ПОДСЕМЕЙСТВО PIC 17СХХ
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Циклический сдвиг содержимого регистра вправо и сохранение результата в соответствии со значением указателя d rrcnf Reg, d if (d == 0) Wreg (6 0) = Reg (7*1) Wreg (7) = Reg (0) else Reg (6 0) = Reg (7:1) Reg (7) = Reg (0) 0010 OOOd ffff ffff
Установка всех разрядов регистра в 1. Сохранение результата в зависимости от значения указателя s setf reg, s Reg = OxOFF if (s == 0) Wreg = OxOFF 0010 101s ffff ffff
Переход в режим пониженной мощности SLEEP (на неопределенное время) sleep WDT = 0 WDT Postscaler = 0 _T0 = 1 _PD = 0 Микроконтроллер переводится в режим ожидания 0000 0000 0000 0011
Вычитание содержимого регистра wreg из константы sublw Constant Wreg = Constant - wreg if (((wreg < 0) & (Consant < 0) & ((Constant - wreg) < 0x080)) 0V = 1 else 0V = 0 if ((Constant - wreg) > OxOFF) C = 1 else C = 0 if (((Constant & OxOF) - Wreg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((Constant - wreg) & OxOFF) == 0x000) Z = 1 else Z = 0 1011 0010 kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (продолжение)
Описание Команда Функция Код
Вычитание содержимого регистра wreg из содержимого регистра и размещение результата в соответствии со значением указателя d subwf reg, d if (d == 1) Wreg = Reg - wreg else Reg = Reg - wreg if (((wreg < 0) & (Reg < 0)) & (Reg - wreg) < 0x080) 0V = 1 else 0V = 0 if ((Reg - wreg) > OxOFF) C = 1 else C = 0 if (((Reg & OxOF) - (wreg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((Reg - wreg) & OxOFF) == 0x000) Z = 1 else Z = 0 0000 OlOd ffff ffff
Вычитание (с учетом переноса) содержимого регистра wreg из содержимого регистра и размещение результата в соответствии со значением указателя d subwfb Reg, d if (d == 1) Wreg = Reg - wreg - 'C else Reg = Reg - wreg - ’C if (((Reg > 0) & (wreg > 0) & ((Reg - wreg) - 'C) < 0x080) 0V = 1 else 0V = 0 if ((Reg - wreg - !C) > OxOFF) C = 1 else C = 0 if (((Reg & OxOOF) - (wreg & OxOF) - !C) > OxOF) DC = 1 else DC = 0 if (((Reg - wreg - ’C) & OxOFF) = = 0x000) Z = 1 else Z = 0 0000 001d ffff ffff
Перемена местами старшего и младшего полубайтов регистра и размещение результата в соответствии со значением указателя d swapf Reg, d if (d == 1) Wreg = ((Reg & OxOOF) « 4) + ((Reg & OxOFO) » 4) else Reg = ((Reg & OxOOF) « 4) + ((Reg & OxOFO) » 4) 0001 110d ffff ffff
ПОДСЕМЕЙСТВО PIC 17СХХ
Таблица 4.4
Система команд микроконтроллеров PIC 17Схх (окончание)
Описание Команда Функция Код
Табличное чтение. Считывание через табличный регистр ТВ LATH одного из двух байтов (старшего или младшего) содержимого ячейки программной памяти, определяемой табличным указателем TBLPTR (два-три цикла) tablrd t, i, f If (t == 1) F = TBLATH else F = TBLATH TBLAT = ProgMem (TBLPTR) if (i == 1) TBLPTR = TBLPTR + 1 1010 10ti ffff ffff
Табличная запись. Запись содержимого регистра в ячейку программной памяти, задаваемой табличным указателем, через табличный регистр Если приемником является встроенная EEPROM, команда заканчивается только по прерыванию (выполняется за два цикла или до тех пор, пока не будет прерывания от таймера) tablwt t, i, f if (t == 0) TBLATL = f else TBLATH = f TBLAT = ProgMem (TBLPTR) if (i == 1) TBLPTR = TBLPTR + 1 1010 11ti ffff ffff
Считывание содержимого табличного регистра (старшего или младшего байта) tlrd t, f if (t == 1) F = TBLATH else f = TBLATL 1010 OOtO ffff ffff
Запись содержимого регистра в табличный регистр (старший или младший байт) tlwt t, f if (t == 1) TBLATH = f else TBLATL = f 1010 01t0 ffff ffff
Проверка содержимого регистра и пропуск следующей команды, если содержимое равно нулю. В стучае пропуска требуются два цикла tstfsz Reg if Reg = = 0) PC = PC + 1 0011 0011 ffff ffff
Исключающее ИЛИ содержимого регистра wreg с константой xorlw Constant wreg = wreg " Constant if ((wreg " Constant) == 0x000) Z = 1 else Z = 0 1011 0100 kkkk kkkk
Исключающее ИЛИ содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением указателя d xorwf Reg, d if (d == 1) Wreg = wreg " Reg else Reg = wreg " Reg if ((wreg " Reg) =« 0x000) Z = 1 else Z M 0000 110d ffff ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ
ПОДСЕМЕЙСТВА PIC 18СХХ
В табл. 4.5 приводится система команд микроконтроллеров PIC 18Схх,
имеющих ряд дополнительных функциональных возможностей по
сравнению с микроконтроллерами других подсемейств.
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх
Описание Команда Функция Код
Сложение константы с содержимым регистра wreg addlw Constant wreg = wreg + Constant if ((wreg > 0)& (Constant > 0))& ((wreg + Constant) > 0x07F)) OV = 1 else OV = 0 if ((wreg + Constant) > OxOFF) C = 1 else C = 0 if ((wreg + Constant) & 0x0080) '= 0) N = 1 else N = 0 if ((wreg & OxOF) + (Constant & OxOF)) > OxOF) DC = 1 else DC = 0 if ((wreg + Constant) & OxOFF) == 0x000) Z = 1 else Z = 0 0000 1111 kkkk kkkk
Сложение содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением указателя d Если а = 1, то при доступе используется регистр выбора банка, иначе - банк доступа addwf Reg, d, a if (d == 1) wreg = wreg + Reg else Reg = wreg + Reg if (((wreg > 0 & (Reg > 0)) & ((wreg + Reg) > 0x07F)) 0V = 1 else 0V = 0 if ((wreg + Reg) & 0x080) != 0) N = 1 else N = 0 if ((wreg + Reg) > OxOFF) C = 1 else C = 0 if (((wreg & OxOF) + , (Reg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((wreg + Reg) & OxOFF) == 0x000)" Z = 1 else Z = 0 0010 01da ffff ffff
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Сложение содержимого регистра с содержимым регистра wreg и битом переноса С и размещение результата в соответствии со значением указателя d. Способ доступа определяется указателем а adwfc Reg, d, а If (d == 1) wreg = wreg + Reg + C else Reg = wreg + Reg + C if (((wreg > 0) & (Reg > 0)) & ((wreg + Reg + C) > 0x07F)) 0V = 1 else 0V = 0 if ((wreg + Reg + C)& 0x080) ! = 0) N = 1 else N = 0 if ((wreg + Reg + C) > OxOFFO C = 1 else C = 0 if (((wreg & OxOF) + (Reg & OxOF) + C) > OxOF) DC = 1 else DC = 0 if (((wreg + Reg + C) & OxOFF) == 0x000) Z = 1 else Z = 0 0010 OOda ffff ffff
Логическое И (побитовое) содержимого регистра wreg с константой andlw Constant wreg = wreg & Constant if ((wreg & Constant) == 0x000) Z = 1 else Z = 0 if (((wreg & Constant) & 0x080) '= 0) N = 1 else N = 0 0000 1011 kkkk kkkk
Логическое И содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением Указателя d. Доступ - в соответствии с указателем а andwf Reg, d, a if (d == 1) wreg = wreg & Reg else Reg = wreg & Reg if ((wreg & Reg) == 0x000) Z = 1 else Z = 0 if ((wreg & Reg) & 0x080) != 0) N = 1 else N = 0 0001 01da ffff ffff
Переход к метке, если Установлен бит переноса. в случае перехода требуются два цикла be Label if (C == 1) PC = PC + 2 + Label 1110 0010 kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4*5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Стирание заданного бита в регистре Reg Доступ - в соответствии с указателем а bcf Reg, Bit, а Reg = Reg &(0x0FF " (1 « Bit)) 1001 bbba ffff ffff
Переход к метке, если установлен флаг отрицательного результата. В случае перехода требуются два цикла bn Label if (N == 1) PC = PC + 2 + Label 1110 0110 kkkk kkkk
Переход к метке, если нет переноса. В случае перехода требуются два цикла bnc Label if (C == 0) PC = PC + 2 + Label 1110 0011 kkkk kkkk
Переход к метке, если сброшен флаг отрицательного результата. В случае перехода требуются два цикла bnn Label if (N == 0) PC = PC + 2 + Label 1110 0111 kkkk kkkk
Переход к метке, если сброшен флаг переполнения. В случае перехода требуются два цикла bnov Label if (OV == 0) PC = PC + 2 + Label 1110 0101 kkkk kkkk
Переход к метке, если результат предыдущей операции не равен 0. В случае перехода требуются два цикла, bnz Label if (Z == 0) PC = PC + 2 + Label 1110 0001 kkkk kkkk
Переход к метке, если переполнение. В случае перехода требуются два цикла bov Label if (0V == 1) PC = PC + 2 + Label 1110 0100 kkkk kkkk
Безусловный переход к метке. Требуются два цикла bra Label PC = PC + 2 + Label 1110 Okkk kkkk kkkk
Установка заданного бита в регистре (запись в 1). Доступ - в соответствии с указателем а bsf Reg, Bit, a Reg = Reg| (1 « Bit) 1000 bbba ffff ffff
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Проверка значения бита регистра и пропуск следующей команды, если бит равен 0 При отсутствии пропуска требуется один командный цикл, а в случае пропуска - два цикла. Доступ - в соответствии с указателем а btfsc Reg, Bit, а if ((Reg & (1 « Bit))== 0) PC = Nextins 1011 bbba ffff ffff
Проверка значения бита регистра и пропуск следующей команды, если бит равен 1. При отсутствии пропуска требуется один командный цикл, а в случае пропуска - два цикла. Доступ - в соответствии с указателем а btfss Reg, Bit, a if ((Reg & (1 « Bit)) '= 0) PC = Nextins 1010 bbba ffff ffff
Изменение состояния заданного бита регистра. Доступ - в соответствии с указателем а btg Reg, Bit, a Reg = Reg " (1 « Bit) 0111 bbba ffff ffff
Переход к метке, если результат предыдущей операции равен 0. В случае перехода требуются два цикла bz Label if (Z == 1) PC = PC + 2 + Label 1110 0000 kkkk kkkk
Вызов подпрограммы по 20-разрядному адресу (требуются два цикла). Сохранение _контекста, если s = 1 call Label, s PUSH (PC) if (s == 1) PUSH (w, STATUS, BSR) PC = Label 1110 110s kkkk kkkk 1111 kkkk kkkk kkkk
Стирание указанного регистра. Доступ - в соответствии С указателем а clrf Reg, a Reg = 0 Z = 1 0110 101a ffff ffff
Стирание счетчика сторожевого таймера clrwdt WDT = 0 WDT Postscaler = 0 _T0 = 1 _PD = 1 0000 0000 0000 0100
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Инвертирование содержимого заданного регистра и размещение результата в соответствии со значением указателя d Доступ - в соответствии с указателем а comf Reg, d, а if (d == 0) wreg - Reg " OxOFF else Reg = Reg "OxOFF if ((Reg " OxOFF)== 0x000) Z = 1 else Z = 0 if ((Reg " OxOFF) & 0x080) ' = 0) N = 1 else N = 0 0001 llda ffff ffff
Сравнение содержимого регистра с содержимым регистра wreg. В случае равенства - пропуск следующей команды (при пропуске требуются два цикла). Доступ - в соответствии с указателем а cpfseq Reg, a if ((Reg - wreg) == 0) PC == Nextins 0110 001a ffff ffff
Сравнение содержимого регистра с содержимым регистра wreg Если первое больше - пропуск следующей команды (при пропуске требуются 2 цикла) Доступ - в соответствии с указателем а cpfsgt Reg, a if ((Reg - wreg) > 0) PC = Nextins 0110 010a ffff ffff
Сравнение содержимого регистра с содержимым регистра wreg Если первое меньше - пропуск следующей команды (при пропуске требуются два цикла). Доступ - в соответствии с указателем а cpfslt Reg, a if ((Reg - wreg) < 0) PC = Nextins 0110 000a ffff ffff
Десятичная коррекция после сложения двух двоично-десятичных чисел daw if ((wreg & OxOF) > 9 wreg = (wreg & OxOF) + 0x010 0000 0000 0000 0111
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Декрементирование содержимого регистра и размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а decf Reg, d, а if (d == 0) wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) == 0x000) Z = 1 else Z = 0 if (((Reg > 0) & ((Reg - 1) < 0x080)) 0V = 1 else 0V = 0 if ((Reg - 1) & 0x080) '= 0) N = 1 else N = 0 if (((Reg & OxOOF) - 1) & 0x080) '= 0) DC = 0 else DC = 1 if ((Reg - 1) < 0) C = 0 else C = 1 0000 01da ffff ffff
Декрементирование содержимого регистра, размещение результата в соответствии со значением’указателя d и пропуск следующей команды, если результат равен 0, при пропуске требуются два цикла команды. Доступ - в соответствии с указателем а decfsz Reg, d, a if (d == 0) wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) == 0x000) PC = Nextins 0010 11da ffff ffff
Декрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск следующей команды, если Результат не равен 0; при пропуске требуются Два цикла команды. Доступ - в соответствии .^указателем а dcfsnz Reg, d, a if (d == 0) wreg = Reg - 1 else Reg = Reg - 1 if ((Reg - 1) '= 0x000) PC = Nextins 0100 llda ffff ffff
безусловный переход По 20-разрядному адресу (требуются два Л°М_андных цикла) goto Label PC = Label 1110 1111 kkkk kkkk 1111 kkkk kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица,4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Инкрементирование содержимого регистра и размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а .incf Reg, d, а if (d == 0) wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) == 0x000) Z = 1 else Z = 0 if (((Reg > 0) & ((Reg + 1) > 0x07F)) 0V = 1 else 0V = 0 if ((Reg + 1) & 0x080) != 0) N = 1 else N = 0 if (((Reg & oxOOF) + 1) & 0x010) != 0) DC = 1 else DC = 0 if ((Reg + 1) == 0x0100) C = 1 else C = 0 0010 10da ffff ffff
Инкрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск последующей команды, если результат равен 0; при пропуске требуются два цикла. Доступ - в соответствии с указателем а incfsz Reg, d, a if (d == 0) wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) == 0x000) PC = Nextins 0011 llda ffff ffff
Инкрементирование содержимого регистра, размещение результата в соответствии со значением указателя d и пропуск последующей команды, если результат не равен 0; при пропуске требуются два цикла. Доступ - в соответствии с указателем а infsnz Reg, d, a if (d == 0) wreg = Reg + 1 else Reg = Reg + 1 if ((Reg + 1) '= 0x000) PC = Nextins 0100 lOda ffff ffff
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код •
"Логическое ИЛИ (побитовое) константы с содержимым регистра wreg iorlw Constant wreg = wreg | Constant if ((wreg | Constant) == 0x000) Z = 1 else Z = 0 if ((wreg | Constant) & 0x080) •= 0) N = 1 else N = 0 0000 1001 kkkk kkkk
Логическое ИЛИ содержимого регистра с содержимым регистра wreg, размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а iorwf Reg, d, a if (d == 1) wreg = wreg | Reg else Reg = wreg | Reg if ((wreg | Reg == 0x000) Z = 1 else Z = 0 if ((wreg | Reg) & 0x080) ! = 0) N = 1 else N = 0 1110 1110 OOff kkkk 0001 OOda ffff ffff
Загрузка константы в регистр, определенный регистром косвенного адреса (требуются два цикла) Ifsr f, Const FSR(f) = Const 1110 1110 OOff kkkk 1111 0000 kkkk kkkk
Пересылка содержимого регистра в регистр из первичной области. Доступ - в соответствии с указателем а movf Reg, d, a if (d == 0) wreg = Reg if (Reg == 0) Z = 1 else Z = 0 if ((Reg & 0x080) •= 0) N = 1 else N = 0 0101 OOda ffff ffff
Пересылка содержимого регистра-источника в регистр-приемник. Адресация регистров 12-разрядными адресами movff Regs, Regd Regd = Regs 1100 fffs fffs fffs 1111 fffd fffd fffd
Загрузка константы в младший полубайт регистра выбора банка _£BSR) movlb Constant BSR(3:0) = Constant 0000 0001 kkkk kkkk
Загрузка константы в регистр wreg movlw Constant wreg = Constant 0000 1110 kkkk kkkk
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Пересылка в регистр содержимого регистра wreg. Доступ - в соответствии с указателем а movwf Reg, a Reg = wreg 0110 111a ffff ffff
Умножение содержимого регистра wreg на константу mullw Constant PRODH PROGL = Constant * wreg 0000 1101 kkkk kkkk
Умножение содержимого регистра на содержимое регистра wreg mulwf Reg, a PRODH.PROGL = Reg * wreg 0000 001a ffff ffff
Изменение знака содержимого регистра wreg и размещение результата в соответствии со значением указателя s Доступ - в соответствии с указателем а negw Reg, a Reg = -Reg if (-Reg < 0x080) 0V = 1 else 0V = 0 if ((-Reg & 0x080) ' = 0) N = 1 else N = 0 if (-Reg > OxOFF) C = 1 else C = 0 if ((-Reg & OxOF) > OxOF) DC = 1 else DC = 0 if (-Reg == 0x000) Z = 1 else Z = 0 0110 110a ffff ffff
«Пустая» операция (два кода) nop 0000 0000 0000 0000 1111 1111 1111 1111
Выбор из стека pop POP ( ) 0000 0000 0000 0110
Занесение в стек push PUSH (PC + 2) 0000 0000 0000 0101
Вызов подпрограммы 11-разрядным адресом rcall Label PUSH ( PC ) PC = PC + 2 + Label 1101 Ikkk kkkk kkkk
Перезапуск микроконтроллера reset _MCLR = 0 _MCLR = 1 0000 0000 1111 1111
Возврат из прерывания (требуются два цикла). Если s = 1, восстанавливается контекст (содержимое регистров wreg, STATUS, BSR) retfie, s PC = POP ( ) GIE = 0 if (s == 1) wreg = POP ( ) STATUS = POP ( ) BSR = POP ( ) 0000 0000 0001 000s
Возврат из подпрограммы с загрузкой константы в регистр wreg (требуются два цикла) retlw Constant wreg = Constant PC = POP ( ) 0000 1100 kkkk kkkk
Возврат из подпрограммы (требуются два цикла). Если s = 1, восстанавливается контекст (содержимое регистров wreg, STATUS, BSR) return, s PC = POP ( ) if (s == 1) wreg = POP ( ) STATUS = POP ( ) BSR = POP ( ) 0000 0000 0001 001s
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
циклический сдвиг (через бит переноса) содержимого регистра влево и сохранение результата в соответствии со значением указателя d Доступ - в соответствии с указателем а rlcf Reg, d, а if (d == 0) wreg (71)= Reg (6 0) wreg (0) = C C = Reg (7) else Reg (7:1) = Reg (6 0) Reg (0) = C C = Reg (7) if (Reg (6) '= 0) N = 1 else N = 0 0011 01da ffff ffff
Циклический сдвиг содержимого регистра влево и сохранение результата в соответствии со значением указателя d Доступ - в соответствии с указателем а rlncf Reg, d, a if (d == 0) wreg (7 1) = Reg (6 0) wreg (0) = Reg (7) else Reg (7-1) = Reg (6 0) Reg (0) = Reg (7) if (Reg (6) '= 0) N = 1 else N = 0 0100 01da ffff ffff
Циклический сдвиг (через бит переноса) содержимого регистра вправо и сохранение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а rrcf Reg, d, a if (d == 0) wreg (6.0) = Reg (7 1) wreg (7) = C C = Reg (0) else Reg (6.0) = Reg (7 1) Reg (7) = C C = Reg (0) if (Reg (0) '= 0) N = 1 else N = 0 0011 OOda ffff ffff
Циклический сдвиг содержимого регистра вправо и сохранение Результата в соответствии со значением указателя d Доступ - в соответствии с Указателем а rrcnf Reg, d, a if (d == 0) wreg (6 0) = Reg (7 1) wreg (7) = Reg (0) else Reg (6 0) = Reg (7 1) Reg (7) = Reg (0) if (Reg (0) '= 0) N = 1 else N = 0 0100 OOda ffff ffff
Установка всех разрядов Регистра в 1. Сохранение в зависимости от значения указателя s Доступ - в соответствии •Указателем а sett Reg, s, a Reg = OxOFF if (s == 0) wreg = OxOFF 0110 100a ffff ffff
^еРеход в режим Сниженной мощности (на неопределенное •^Демя) sleep WDT = 0 WOT Postscaler = 0 _T0 = 1 _PD = 0 0000 0000 0000 0011
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.5,
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Вычитание содержимого регистра и переноса из регистра wreg. Размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а subfwb Reg, d, а If (d == D wreg = wreg - Reg - 1C else Reg = wreg - Reg - ’C if (((Reg > 0) & (wreg > 0)) & ((wreg = Reg - 'C) < 0x080)) 0V = 1 else 0V = 0 if (((wreg - Reg - C) & 0x080) '= 0) N = 1 else N = 0 if ((wreg - Reg - !C) > OxOFF) C = 1 else C = 0 if (((wreg & OxOF) - (Reg & OxOF) - 'C) > OxOF) DC = 1 else DC = 0 if (((wreg - Reg - *C) & OxOFF) == 0x000) Z = 1 else Z = 0 0101 01da ffff ffff
Вычитание содержимого регистра wreg из константы sublw Constant wreg = Constant - wreg if (((wreg < 0) & (Constant < 0) & ((Constant - wreg) < 0x080) 0V = 1 else 0V = 0 if (((Constant -wreg) & 0x080) '= 0) N = 1 else N = 0 if ((Constant - wreg) < OxOFF) C = 1 else C = 0 if (((Constant & OxOF) - (wreg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((Constant - wreg) & OxOFF) == 0x000) Z = 1 else Z = 0 0000 1000 kkkk kkkk
ПОДСЕМЕЙСТВО PIC 18СХХ
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
"Вычитание (с учетом переноса) содержимого регистра wreg из содержимого регистра и размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а subwf Reg, d, а if (d == 1) wreg = Reg - wreg else Reg = Reg - wreg if (((wreg < 0) & (Reg < 0) & ((Reg - wreg) < 0x080)) 0V = 1 else 0V = 0 if (((Reg - wreg) & 0x080) != 0) N = 1 else N = 0 if ((Reg - wreg) > OxOFF) C = 1 else C = 0 if (((Reg & OxOF) - (wreg & OxOF)) > OxOF) DC = 1 else DC = 0 if (((Reg - wreg) & OxOFF) == 0x000) Z = 1 else Z = 0 0101 llda ffff ffff
Вычитание содержимого регистра wreg из содержимого регистра и переноса. Размещение результата в соответствии со значением указателя d. Доступ - в соответствии с указателем а subwfb Reg, d, a if (d == 1) wreg = Reg - wreg - ’C else Reg = Reg - wreg - !C if (((Reg > 0) & (wreg > 0)) & ((Reg - wreg - !C) < 0x080)) 0V = 1 else 0V = 0 if (((Reg - wreg - C) & 0x080) '= 0) N = 1 else N = 0 if ((Reg - wreg - !C) > OxOFF)) C = 1 else C = 0 if (((Reg & OxOF) - (wreg & OxOF) - 'С) > OxOF) DC = 1 else DC = 0 if (((Reg - wreg - !C) & OxOFF) == 0x000) Z = 1 else Z = 0 0101 10da ffff ffff
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (продолжение)
Описание Команда Функция Код
Перемена местами старшего и младшего полубайтов регистра и размещение результата в соответствии со значением указателя d Доступ - в соответствии с указателем а swapf Reg, d, а if (d == 1) wreg = ((Reg & OxOOF) « 4) + ((Reg & OxOFO) » 4) else Reg = ((Reg & OxOOF) « 4) + ((Reg & OxOFO). » 4) 0011 10da ffff ffff
Табличное чтение с вариантами Считывание содержимого ячейки программной памяти, определяемой табличным указателем TBLPTR (два-три цикла) tablrd Option Switch(Option) Case * TABLAT = ProgMem (TBLPTR) Case *+ TABLAT = ProgMem (TBLPTR) TBLPTR = TBLPTR + 1 Case *- TABLAT = ProgMem (TBLPTR) TBLPTR = TBLPTR - 1 Case +* TBLPTR = TBLPTR + 1 TABLAT = ProgMem (TBLPTR) 0000 0000 0000 10nn nn Option 00 * 01 *+ 10 *- 11 +*
Табличная запись с вариантами Запись содержимого табличного регистра в ячейку программной памяти. Если приемником является встроенная EPROM, команда заканчивается только по прерыванию (требуются два цикла или несколько в случае EPROM) tablwt Option Switch(Option) Case * ProgMem (TBLPTR) = TABLAT Case *+ ProgMem (TBLPTR) = TABLAT TBLPTR = TBLPTR + 1 Case *- ProgMem (TBLPTR) = TABLAT TBLPTR = TBLPTR + 1 Case +* TBLPTR = TBLPTR + 1 ProgMem (TBLPTR) = TABLAT 0000 0000 0000 linn nn Option 00 01 *+ 10 11 +*
Проверка содержимого и пропуск следующей команды, если содержимое равно 0 В случае пропуска требуются два цикла Доступ - в соответствии с указателем а tstfsz Reg, a if (Reg == 0) PC = Nextins 0110 011a ffff ffff
Исключающее ИЛИ содержимого регистра wreg с константой xorlw Constant wreg = wreg " Constant if ((wreg " Constant) == 0x000) Z = 1 else Z = 0 if ((wreg " Constant) & 0x080) '= 0) N = 1 else N = 0 0000 1010 kkkk kkkk
МНЕМОНИКА СПЕЦИАЛЬНЫХ КОМАНД
Таблица 4.5
Система команд микроконтроллеров PIC 18Схх (окончание)
с Описание Команда Функция Код
"[ТТлючающее ИЛИ содержимого регистра с содержимым регистра wreg и размещение результата в соответствии со значением указателя d Доступ - в соответствии с указателем а xorwf Reg, d, а If (d == 1) wreg = wreg ~ Reg else Reg = wreg " Reg if ((wreg " Reg) == 0x000) Z = 1 else Z = 0 if ((wreg ~ Reg) & 0x080) '= 0) N = 1 else N = 0 0001 10da ffff ffff
МНЕМОНИКА СПЕЦИАЛЬНЫХ КОМАНД
Ниже приводятся специальные команды, которые, по сути, являются
макрокомандами макроассемблера MPASP. Эти специальные коман-
ды введены фирмой Microchip, чтобы повысить функциональную
гибкость системы команд микроконтроллеров младшего и средне-
го подсемейств. Указанным командам соответствуют специальные
служебные слова, поэтому их нельзя использовать для обозначения
макрокоманд, меток, переменных или определений.
Как правило, специальные команды формируются из небольшо-
го числа стандартных команд микроконтроллеров младшего и сред-
него подсемейств. Следует отметить, что специальные команды мо-
гут изменять состояние признака нуля.
Команду LCALL следует использовать с осторожностью, поскольку
При ее исполнении изменяются биты регистра PCLATH. Вследствие
этого, например при исполнении команд GOTO или CALL после коман-
ды LCALL, в программе может инициироваться переход не к желае-
мой странице, а к странице, соответствующей LCALL.
Для PIC-микроконтроллеров младшего подсемейства команда
LCALL реализуется в виде нижеприведенной последовательности
Кодов:
bcf/bsf STATUS, РАО
bcf/bsf STATUS, PA1
bcf/bsf STATUS, PA2
call Label
bsf/bcf STATUS, РАО
bsf/bcf STATUS, PA1
bsf/bcf STATUS, PA2
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Для микроконтроллеров среднего подсемейства эквивалентная
последовательность кодов следующая:
bcf/bsf PCLATH, 3
bcf/bsf PCLATH, 4
call Label
bsf/bcf PCLATH, 3
bsf/bcf PCLATH, 4
He рекомендуется также использовать команду negf, если только
адрес назначения (приемник) не совпадает с источником данных.
Если приемником будет рабочий регистр w, при использовании ука-
занной команды содержимое источника данных может изменяться
на комплементарное (дополнительный код). Полный набор специ-
альных команд, разработанных для PIC-микроконтроллеров раз-
личных подсемейств, приводится в табл. 4.6.
Таблица 4.6
Специальные команды НС-микроконтроллеров
Описание Команда Реальные команды Функция
Прибавление переноса к содержимому регистра addcf Reg, d btfsc STATUS, C incf Reg, d if (C == 1) if (d == 1) Reg = Reg + 1; else w = Reg + 1
Прибавление десятичного (цифрового) переноса к содержимому регистра adddcf Reg, d btfsc STATUS, DC incf Reg, d if (DC == 1) if (d == 1) Reg = Reg + 1, else w = Reg + 1,
Безусловный переход к адресу Label В Label goto Label PC = ((PCLATH « 8) & 0x01800) + Label;
Переход при переносе BC Label btfsc STATUS, C goto Label if (C == 1) PC = ((PCLATH « 8) & 0x01800) + Label,
Переход при десятичном переносе (цифровом поразрядном) BDC Label btfsc STATUS, DC goto Label if (DC == 1) PC = ((HCLATH « 8) & 0x01800) + Label,
Переход при отсутствии переноса BNC Label btfss STATUS, C goto Label if (C == 0) PC = ((PCLATH « 8) & 0x01800) + Label, _
Переход при отсутствии десятичного переноса BNDC Label btfss STATUS, DC goto Label if (DC == 0) PC = ((PCLATH « 8) & 0x01800) + Label, _
Переход при отсутствии признака нуля (если результат не равен нулю) BNZ Label btfss STATUS, Z goto Label if (Z == 0) PC = ((PCLATH « 8) & 0x01800) + Label,
МНЕМОНИКА СПЕЦИАЛЬНЫХ КОМАНД
Таблица 4.6
Специальные команды PIC-микроконтроллеров (продолжение)
Описание Команда Реальные команды Функция
Переход при наличии признака нуля (если результат равен нулю) BZ Label btfsc STATUS, Z goto Label if (Z == 1) PC = ((PCLATH « 8) & 0x01800) + Label,
Сброс флага переноса clrc bef STATUS, C C = 0,
Сброс флага десятичного переноса clrdc bef STATUS, DC DC = 0,
Сброс флага равенства нулю clrz bef STATUS, Z Z = 0,
«Длинный» вызов подпрограммы Icall Label Младшее подсемейство: bef/bsf STATUS, РАО bef/bsf STATUS, PA1 bef/bsf STATUS, PA2 Call Label Среднее подсемейство, bef/bsf PCLATH, 3 bef/bsf PCLATH, 3 Call Label
«Длинный» переход Igoto Label Младшее подсемейство: bef/bsf STATUS, РАО bef/bsf STATUS, PA1 bef/bsf STATUS, PA2 goto Label Среднее подсемейство, bef/bsf PCLATH, 3 bef/bsf PCLATH, 3 goto Label
Загрузка содержимого Регистра Reg в регистр w movfw Reg Movf Reg, w w = Reg if (Reg == 0) Z = 1; else Z = 0,
Изменение знака содержимого регистра negf Reg, d Comf Reg, f inef Reg, d Reg = Reg " OxOFF if (d == 0) w = Reg + 1; else Reg = Reg + 1
Установка флага переноса setc bsf STATUS, C C = 0,
Установка флага Десятичного переноса setdc bsf STATUS, DC DC = 0,
Остановка признака нуля setz bsf STATUS, Z Z = 0,
Пропуск следующей ^Манды при переносе skpc btfss STATUS, C if (C == 1) PC = PC + 1,
Пропуск следующей команды при десятичном £!£реносе skpdc btfss STATUS, DC if (DC == 1) PC = PC + 1;
Пропуск следующей команды при отсутствии Е^Реноса skpnc btfsc STATUS, C if (C == 0) PC = PC + 1,
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.6
Специальные команды PIC-микроконтроллеров (окончание)
Описание Команда Реальные команды Функция
Пропуск следующей команды при отсутствии десятичного переноса skpndc btfsc STATUS, DC if (DC == 0) PC = PC + 1,
Пропуск следующей команды при отсутствии признака нуля skpnz btfsc STATUS, Z if (Z == 0) PC = PC + 1,
Пропуск последующей команды при наличии признака нуля skpz btfss STATUS, Z if (Z == 1) PC = PC + 1;
Вычитание переноса из содержимого регистра subcf Reg, d btfsc STATUS, C decf Reg, d if (C == 1) if (d == 1) Reg = Reg - 1, else w = Reg - 1
Вычитание десятичного переноса из содержимого регистра subdcf Reg, d btfsc STATUS, DC decf Reg, d if (DC == 1) if (d == 1) Reg = Reg - 1; else w = Reg - 1,
«Тестирование» регистра на равенство содержимого нулю (установка признака нуля) movfw Reg movf Reg, w if (Reg == 0) Z = 1, else Z = 0;
АССЕМБЛЕР ФИРМЫ PARALLAX INC.
ДЛЯ Р1С-МИКРОКОНТРОЛЛЕРОВ
Фирма Parallax Inc. разработала для PIC-микроконтроллеров язык
программирования, известный под названием PASM. Этот популярный
ассемблер весьма схож с ассемблером микроконтроллеров семейства
Intel 8051. Ассемблер PASM также поддерживает формат команд
ассемблера MPASM (стандартный макроассемблер фирмы Microchip).
Некоторые из команд создавались специально для микрокон-
троллеров PICmicro® младшего подсемейства, о чем имеются соот-
ветствующие упоминания в табл. 4.9. Эти команды не рекомендуется
использовать при работе с микроконтроллерами среднего подсемей-
ства, иначе могут возникнуть неожиданные и нежелательные изме-
нения содержимого регистров w и STATUS.
Подробную информацию о языке программирования PASM мож-
но получить на Web-сайте фирмы Parallax Inc. В приведенной ниже
табл. 4.7, содержащей набор базовых команд PASM, использованы
следующие обозначения:
# - константы;
f г - регистр файла.
АССЕМБЛЕР ФИРМЫ PARALLAX INC.
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc.
Команды PASM Функция Число ЦИКЛОВ Флаги, действие Реальные команды
Байт-ориентированные команды
сГГРагт Обнуление (сброс)
“w" w = 0 1 z clrw
fr fr = 0 1 z clr fr
WDT WDT = 0 1 -TO, _PD clrwdt
MOV Ра rm Перемещение данных
“w, #” W = # 1 - movlw It
“w, fr” w = fr 1 z movf fr, w
“W, /fr” w = fr OxOFF 1 z comf fr, w
“w, fr-w" w = fr + (w " OxOFF) + 1 1 Z, C, DC subwf fr, w
“w, ++fr” w = fr + 1 1 Z incf fr, w
“w, —fr” w = fr - 1 1 z decf fr, w
“w, »fr” w = fr » 1 1 c rrf fr, w
“w, <<fr” w = fr « 1 1 c rlf fr, w
“w, <>fr” w = NibSwap fr 1 - swapf fr, w
“fr, w” fr = w 1 - movwf fr
“'Port, w” TRIS = w 1 - TRIS Port
“'Port, #” TRIS = # 2 w movlw #
TRIS Port
"'Port, fr” TRIS = fr 2 w, Z movf fr, w
TRIS Port
“OPTION, w” OPTION = w 1 - OPTION
“OPTION, #” OPTION = # 2 w movlw #
OPTION
“OPTION fr” OPTION = fr 2 w, Z movf fr, w
OPTION
"fr, #” fr = # 2 - movlw #
movwf fr
“fr2, fr2” fr = fr2 2 Z movf fr2, w
movwf fr
add Pa rm Сложение двух величин
“w, fr” w = w + fr 1 Z, C, DC addwf fr, w
“fr, w” fr = w + fr 1 Z, C, DC addwf fr, f
“fr, #” fr = fr + # 2 w, Z, C, DC movlw ft
addwf fr, f
"fr, fr2” fr = fr + fr2 2 w, Z, C, DC mov fr2, w
addwf fr, f
SUB Parm Вычитание
“fr, w” fr = fr + (w “ OxOFF) + 1 1 Z, C, DC subwf fr, f
“fr, #" fr = fr + (# " OxOFF) + 1 2 w, Z, C, DC movlw it
subwf fr, f
“fr, fr2” fr = fr + (# ~ OxOFF) + 1 2 w, Z, C, DC movf fr2, w
—_ subwf fr, f
AND Parm Логическое И
“w, #” W = W & # 1 Z andlw #
"w, fr” w = w & fr 1 Z andwf fr, w
"fr, w" fr = w & fr 1 Z andwf fr, f
“fr, #” fr = fr & # 2 w, Z movlw #
and fr, f
“fr, fr2” fr = fr & fr2 2 w, Z movf fr2, w
—- andwf fr, f
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc. (продолжение)
Команды PASJVI Функция Число циклов Флаги, действие Реальные команды
Байт-ориентированные команды
OR Раrm "w, #” “w, fr” “fr, w” “fr, #” “fr, fr2" Логическое ИЛИ W = W I # W = W I fr fr = fr I w fr = fr I # fr = fr 1 fr2 1 1 1 2 2 z z z W, Z w, Z lorflw # iorwf fr, w iorwf fr, f movlw # iorwf fr, f movf fr2, w iorwf fr, f
XOR Pa rm “w, #” “w, fr” “fr, w” "fr, #" “fr, fr2” Исключающее ИЛИ w = w " # w = w " fr fr =fr " w fr = fr " # fr = fr - fr2 1 1 1 2 2 Z z z w, Z w, Z xorlw # xorwf fr, w xorwf fr, f movlw # xorwf fr, f movf fr2, w xorwf fr, f
DEC Parm “f r” Декрементирование содержимого регистра fr = fr - 1 1 Z decf fr, f
INC Parm “fr” Инкрементирование содержимого регистра fr = fr + 1 1 Z incf fr, f
NEG Pa rm “fr" Арифметическое дополнение (изменение знака) fr = 0 - fr 2 Z comf fr, f incf fr, f
NOT Parm “w" “f r” Инвертирование кода w = w OxOFF fr = fr ~ OxOFF 1 1 Z Z xorlw OxOFF comf fr
TEST Parm “w” “fr" Проверка на равенство нулю Z = (w == 0) Z = (fr == 0) 1 1 Z z lorlw 0 movf fr, f
RR Parm “fr” Циклический сдвиг содержимого регистра вправо fr = fr » 1 1 c rrf fr, f
RL Parm "fr” Циклический сдвиг содержимого регистра влево fr = fr « 1 1 c rlf fr, f
SWAP Parm “fr" Смена местами полубайтов fr = fr о fr 1 swaof fr, f
Бит-ориентированные команды
CLRB fr, bit fr bit = 0 1 - bef fr, bit
SETB fr, bit fr.bit = 1 1 - bsf fr, bit
CLC Carry =0 * 1 - bef STATUS, C
STC Carry = 1 1 - bsf STATUS, C
CLZ Zero = 0 1 - bef STATUC, Z
АССЕМБЛЕР ФИРМЫ PARALLAX INC.
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc. (продолжение)
Команды PASM Функция Число циклов Флаги( действие Реальные команды
Бит-ориентированные команды
STZ Zero = 1 1 - bsf STATUS, Z
ADDB fг, bit fr = fr + Bit 2 Z btfsc fr, bit incf fr, f
SUBB fr, bit fr = fr - bit 2 Z btfss fr, bit decf fr, f
MOVB fr b, fr2 b2 Пересылка бита 4 btfss fr2, b2 bcf fr, b btfsc fr2, b2 bsf fr, b
movb fr b, /fr2 b2 Пересылка с инвертированием 4 btfsc fr2, b2 bcf fr, ,f btfss fr2, b2 bsf fr, b
Команды управления
NOP «Пустая» операция 1 - nop
SLEEP Перевод микроконтроллера в режим ожидания N/A -ТО, -PD sleep
LSET addr Подготовка операции перехода 0-2 РАО, РА1 bcf/bsf STATUS, РАО
Команды условного пропуска
MOVSZ Parm “w, ++fr" “W, "fr” Пропуск, если результат равен О W = fr + 1 w = fr - 1 1/2 1/2 W W incfsz fr, w decfsz fr, w
INCSZ fr w = fr + 1,если Z = 0, пропуск 1/2 W incfsz fr, f
DECSZ w = fr - 1, если Z = 0, пропуск 1/2 W decfsz fr, f
SB fr, bit Пропуск, если бит установлен 1/2 - btfss fr, bit
SNB fr, bit Пропуск, если бит равен 0 1/2 - btfsc fr, bit
SC Пропуск, если перенос 1/2 - btfss STATUS, C
SNC Пропуск, если переноса нет (С = 0) 1/2 - btfsc STATUS, C
SZ_ Пропуск, если результат равен 0 1/2 - btfss STATUS, Z
SNZ_ Пропуск, если не нуль 1/2 - btfsc STATUS, Z
CJA, fr, # Пропуск, если f г > # 3/4 w, С, DC, Z movlw # addwf fr, w btfss STATUS, C
OJA fr, fr2 Пропуск, если f г > f г2 3/4 w, С, DC, Z movf fr, w subwf fr2, w btfss STATUS, C
CJAE fr, # Пропуск, если fr >= # 3/4 w, С, DC, Z movlw # subwf fr, w btfss STATUS, C
CjAE fr, fr2 Пропуск, если f г >= f г2 3/4 w, С, DC, Z mov fr2, w subwf fr, w btfss STATUS, C
OSB fr, if Пропуск, если f г < # 3/4 w, С, DC, Z movlw # subwf fr, w btfsc STATUS, C
C§B fr, fr2 Пропуск, если fr < fг2 3/4 w, С, DC, Z movf fr2, w subwf fr, w btfsc STATUS, C
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc. (продолжение)
Команды PASM Функция Число циклов Флаги, действие Реальные команды
Команды условного пропуска
CSBE fr, # Пропуск, если f г <= # 3/4 w, С, DC, Z movlw # addwf fr, w btfsc STATUS, C
CSBE fr, f r2 Пропуск, если fr <= fг2 3/4 w, С, DC, Z movf fr, w subwf fr2, w btfss STATUS, C
CSE fr, # Пропуск, если f г == # 3/4 w, С, DC, Z movlw # subwf fr, w btfss STATUS, Z
CSE fr, fr2 Пропуск, если fr == fг2 3/4 w, С, DC, Z movf fr2, w subwf fr, w btfss STATUS, Z
CSNE fr, it Пропуск, если НЕ (f г == #) 3/4 w, С, DC, Z movlw # subwf fr, w btfsc STATUS, Z
CSNE fr, fr2 Пропуск, если НЕ (f г == f г2) 3/4 w, С, DC, Z movf fr2, w subwf fr, w btfsc STATUS, Z
Команды безусловного перехода
JMP Parm “addr9” (* Команда для младшего подсемейства) "PC + w” "w” Переход по адресу PC = девятиразрядный адрес PC = PC + Offset w PC = w 2 2 2 Z, С, DC goto addr9 addwf PCL, f movwf PCL
CALL addr8 (* Команда для младшего подсемейства) Обращение к подпрограмме 2 call Addr8
RET Return & w = 0 2 W retlw 0
SKIP (* Команда для младшего подсемейства, бит 7 регистра FSR всегда установлен) Пропуск следующей команды 2 btfss FSR, 7
LJMP Addr (* Команда для младшего подсемейства) Выполнение команды LSET перед командой JMP 2-5 РАО - РА2 bef/bsf STATUS, Pax goto Addr
LCALL Addr (* Команда для младшего подсемейства) Выполнение команды LSET перед командой CALL 2-5 РАО - РА2 bef/bsf STATUS, Pax call Addr
RETW ‘String’ Возврат из таблицы 2 W retlw 'S’ retlw ‘t’ retlw ‘r’ retlw 'i’ retlw 'n’ retlw ‘q’
АССЕМБЛЕР ФИРМЫ PARALLAX INC.
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc. (продолжение)
"Команды PASM Функция Число циклов Флаги, действие Реальные команды
Команды условных переходов
"iJNZ fr, addr9 Инкрементирование/переход 2/3 - incfsz fr, f goto addr9
~DJNZ~fr, addr9 Декрементирование/переход 2/3 - decfsz fr, f goto addr9
-jeTTf, bit, addr9 Переход по биту (равен 1) 2/3 - btfsc fr,„ bit goto addr9
JNB fr, bit, addr9 Переход, если бит равен 0 2/3 - btfss fr, bit goto addr9
JC addr9 Переход по признаку переноса 2/3 - Bfsc STATUS, C goto addr9
JNC addr9 Переход, если переноса нет 2/3 - btfss STATUS, C goto addr9
JZ addr9 Переход по признаку нуля 2/3 - btfsc STATUS, Z goto addr9
JNZ addr9 Переход, если не нуль 2/3 - btfss STATUS, Z goto addrO
CJA fr, #, addr9 Если f г > #, переход к адресу add г9 4/5 и, С, DC, Z movlw # subwf fr, w btfss STATUS, C goto addr9
CJA fr, fr2, addr9 Если f г > f г2, переход к адресу add г9 4/5 w, С, DC, Z movf fr, w subwf fr2, w btfss STATUS, C goto addr9
CJAE fr, #, addr9 Если f г > = #, переход к адресу add г9 4/5 w, С, DC, Z movlw if subwf fr, w btfss STATUS C goto addr9
CJAE fr, fr2, addr9 Если f г > = f г2, переход к адресу add г9 4/5 w, С, DC, Z movf fr2, w subwf fr, w btfsc STATUS, C goto addr9
CJB fr, ft, addr9 Если f г < #, переход к адресу add г9 4/5 w, С, DC, Z movlw # subwf fr, w btfss STATUS, C goto addr9
CJB fr, fr2, addr9 Если f г < f г2, переход к адресу add г9 4/5 w, С, DC, Z movf fr2, w subwf fr, w btfss STATUS, C goto addr9
CJBE fr, #, addr9 Если f г < = и, переход к адресу add г9 4/5 w, С, DC, Z movlw # addwf fr, w btfss STATUS, C goto addr9
CJBE fr, fr2, addr9 Если f г < = f г2, переход к адресу 'addr9 4/5 w, С, DC, Z movf fr, w subwf fr2, w btfsc STATUS, C goto addr9
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ PICMICRO®
Таблица 4.7
Система команд ассемблера PASM фирмы Parallax Inc. (окончание)
Команды PASM Функция Число циклов Флаги, действие Реальные команды
Команды условных переходов
CJE fr, #, add г9 Если f r == #, переход к адресу addr9 4/5 w, С, DC, Z movlw # subwf fr, w btfsc STATUS, Z goto addr9
CJE fr, fr2, addr9 Если f г == f r2, переход к адресу addr9 4/5 w, С, DC, Z movf fr2, w subwf fr, w btfsc STATUS, Z goto addr9
CJNE fr, #, addr9 Если НЕ (f г == #), переход к адресу add г9 4/5 w, С, DC, Z movlw # subwf fr, w btfss STATUS, Z goto addr9
CJNE fr, fr2 addr9 Если НЕ (f г == f г2), переход к адресу add г9 4/5 w, С, DC, Z movf fr2, w subwf fr, w btfss STATUS, Z goto addr9
РА ПРОЦЕССОРА
ТРОЛЛЕРОВ
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Во многом функциональные возможности микроконтроллеров опре-
деляются аппаратной архитектурой, которая включает арифметико-
логическое устройство, память, периферийные интерфейсные модули, тай-
меры, стек, систему прерываний и т.д. Эффективность применения
микроконтроллеров и приложений на базе микроконтроллеров, их
системные характеристики напрямую зависят от аппаратных воз-
можностей. Ниже дается подробное описание архитектурных осо-
бенностей Р1С-микроконтроллеров.
АРИФМЕТИКО-ЛОГИЧЕСКОЕ УСТРОЙСТВО
^-МИКРОКОНТРОЛЛЕРОВ
В табл. 5.1 приводятся операции, выполняемые арифметико-логи-
ческими устройствами Р1С-микроконтроллеров.
Таблица 5.1
Стандартный набор операций арифметико-логического устройства микроконтроллеров PICmicro®
Вид операции Эквивалентная операция
Пересылка Логическое И с константой OxOFF
Сложение Отсутствует
Вычитание Сложение с отрицательным числом
Изменение знака Исключающее ИЛИ с константой OxOFF (поразрядное инвертирование) и инкрементирование
Инкрементирование Сложение с единицей
Декрементирование Вычитание единицы/сложение с кодом OxOFF
Логическое И Отсутствует
Логическое ИЛИ Отсутствует
Исключающее ИЛИ Отсутствует
Инвертирование кода Исключающее ИЛИ с константой OxOFF
Сдвиг влево Отсутствует
Сдвиг вправо Отсутствует
Следует отметить, что микроконтроллеры PIC 17Схх и PIC 18Схх
наряду с указанными в табл. 5.1 функциями обеспечивают выполне-
ние операции умножения восьмиразрядных чисел.
Функциональная схема арифметико-логического устройства
(АЛУ - Arithmetic Logic Unit, ALU) PIC-микроконтроллеров показа-
на на рис. 5.1.
МИКРОКОНТРОЛЛЕРЫ PICMICRO® МЛАДШЕГО ПОДСЕМЕЙСТВА
Младшее подсемейство PIC-микроконтроллеров включает:
♦ PIC 12С5хх;
♦ PIC 16С5х;
♦ PIC 16С50х;
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
ВходА
OxOFF
Вход В 0x001
Результат
Регистр
состояния
Рис. 5.1
Функциональная схема арифметико-логического устройства
где символ «х» соответствует целому числу, обозначающему кон-
кретный тип микроконтроллера.
Пример архитектуры микроконтроллера данного подсемейства
приведен на рис. 5.2.
Таблица 5.2
Стартовые векторы микроконтроллеров младшего подсемейства
Объем памяти программ Стартовый адрес после сброса
512 0x01FF
1024 0x03FF
2048 0x07FF
Под стартовые адреса программ (стартовые векторы), с которых
начинает свою работу микроконтроллер при перезапуске, обычно
резервируются последние адреса памяти программ. В табл. 5.2 при-
водятся стартовые векторы PIC-микроконтроллеров, имеющих раз-
личные объемы программной памяти.
На практике в стартовых подпрограммах выполняются только
самые необходимые действия (например, считывание значения ре-
гистра калибровки генератора OSCCAL в регистр w) на этапе подготов-
ки счетчика команд к обращению по адресу 0x0000. Аналогичные
Рекомендации справедливы и для других подсемейств PIC-микро-
контроллеров.
Рис. 5.2
Архитектура микроконтроллеров младшего подсемейства
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
Доступ к регистрам
Сведения об адресном пространстве оперативной памяти микроконт-
роллеров младшего подсемейства приведены в табл. 5.3.
Таблица 5.3
Распределение адресного пространства оперативной памяти
микроконтроллеров младшего подсемейства
БанкО Банк1 Банк 2 БанкЗ
Адрес - регистр Адрес - регистр Адрес - регистр Адрес - регистр
00 - INDF 20 - INDF 40 - INDF 60 - INDF
01 - TMRO 21 - TMR 41 - TMRO 61 - TMRO
02 - PCL 22 - PCL 42 - PCL 62 - PCL
03 - STATUS 23 - STATUS 43 - STATUS 63 - STATUS
04 - FSR 24 - FSR 44 - FSR 64 - FSR
05 - PORTA* 25 - PORTA* 45 - PORTA* 65 - PORTA*
06 - PORTB 26 - PORTB 46 - PORTB 66 - PORTB
07 - PORTC 27 - PORTC 47 - PORTC 67 - PORTC
08 - OF - регистры общего назначения 28 - 2F - регистры общего назначения 48 -4F -регистры общего назначения 68 - 8F - регистры общего назначения
10-1F - регистровый файл банка 0 (регистры общего назначения) 30-3F - регистровый файл банка 1 (регистры общего назначения) 50-5F - регистровый файл банка 2 (регистры общего назначения) 70-7F - регистровый файл банка 3 (регистры общего назначения)
OPTION - доступен через команду OPTION
TRIS# - доступен через команду TRIS PORT#_____________________________:___________
* В микроконтроллерах с внутренним генератором вместо регистра PORTA может быть OSCCAL
Адресное пространство включает четыре банка регистров. Первые
8 адресов каждого банка используются для адресации одних и тех же
управляющих регистров. Назначение следующих 8 регистров зави-
сит от конкретного типа микроконтроллера. Последние 16 адресов
банка соответствуют 16 «индивидуальным» регистрам. Подобная
организация оперативной памяти, разрешающая доступ в каждый
конкретный момент времени только к 16 байтам, не позволяет ис-
пользовать в программах сложные структурированные данные (мат-
рицы, массивы и др.) размером более 16 байт.
Обращение к банку 0 может осуществляться непосредственно с по-
мощью соответствующих полей команды. Обращение к другим бан-
кам производится только с помощью индексных регистров FSR и INDF.
В табл. 5.4 представлены адресные смещения для обращения к раз-
личным банкам регистров.
Следует отметить, что содержимое индексного регистра FSR в PIC-
микроконтроллерах никогда не равно нулю, так как нулевому адресу
соответствует регистр данных индексной адресации INDF, являющий-
ся виртуальным. В табл. 5.5 указано значение старших разрядов
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Таблица 5.4
Адресация банков регистров микроконтроллеров младшего подсемейства
Банк Значение регистра FSR Начальные адреса
0 0x000 0x010
1 0x020 0x030
2 0x040 0x050
3 0x060 0x070
Таблица 5.5
Соответствие значений старших разрядов регистра FSR
микроконтроллеров младшего подсемейства числу банков регистров
Число банков Установленные биты регистра FSR Минимальное значение для регистра FSR
1 7,6,5 ОхОЕО
2 7,6 ОхОСО
4 7 0x080
регистра FSR микроконтроллеров младшего подсемейства в зависи-
мости от числа используемых банков регистров.
Регистр состояния
В табл. 5.6 приводятся сведения о функциональном назначении раз-
рядов регистра состояния STATUS для микроконтроллеров младшего
подсемейства.
Биты РАО и РА1 регистра состояния (пятый и шестой разряды)
выполняют те же функции, что и биты регистра PCLATH, который ис-
пользуется в других подсемействах PIC-микроконтроллеров. Они
определяют страницы программной памяти.
В некоторых микроконтроллерах для адресации страниц приме-
няется и седьмой бит регистра состояния (STATUS), который обозна-
чают как РА2. Для перехода к новой странице программной памяти
необходим следующий программный код:
STATUS = (STATUS & 0x01F) + ((HIGH new.address & OxOFE) << 4);
PCL = LOW new_address;
Счетчик команд
Структурная схема счетчика команд (или программного счетчика)
PIC-микроконтроллеров младшего подсемейства показана на рис. 5.3.
Надо помнить, что к подпрограммам и таблицам, имеющим ад-
реса в диапазонах 0x0100 - 0x01 FF, 0x0300 - 0x03FF, 0x0500 - 0x05FF
и 00x700 - 0x07FF, невозможна прямая адресация из команды. Вмес-
то этого следует использовать команды goto и call с установкой со-
ответствующих разрядов регистра состояния.
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
Таблица 5.6
Назначение разрядов регистра состояния
Адрес Регистр Бит Назначение
0x003 STATUS 7 GPWUF - в микроконтроллерах Р1С12С4хх и PIC16C505. 1 - сброс при выходе из sleep-режима после изменения состояния портов, 0 - сброс после включения питания и от вывода _MCLR; в других микроконтроллерах бит 7 не используется
6-5 РА1 - РАО - выбор программной страницы 00 - страница 0 (0x0000-0x01 FF); 01 - страница 1 (0x0200-0x03FF); 10 - страница 2 (0x0400—0x05FF); 11 - страница 3 (0x0600—0x07FF)
4 _Т0 - устанавливается в 1 после подачи напряжения питания (Power up) и исполнения команд clrwdt и sleep
3 _PD - устанавливается в 1 после подачи напряжения питания (Power up) и исполнения команды clrwdt, обнуляется после исполнения команды sleep
2 Z - флаг нулевого результата
1 DC - флаг десятичного переноса, 1 - при переносе из младшего полубайта после исполнения команд сложения/вычитания
0 С - флаг переноса; 1 - при переносе после исполнения команд сложения/вычитания
Рис. 5.3
Структурная схема счетчика команд микроконтроллеров младшего подсемейства
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Следует отметить также, что микроконтроллеры младшего подсе-
мейства имеют аппаратный стек глубиной в два уровня.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Среднее подсемейство PIC-микроконтроллеров включает следую-
щие группы микроконтроллеров:
♦ PIC 12С6хх;
♦ PIC 14000;
♦ PIC 16С55х;
♦ PIC 16С6х(х);
♦ PIC 16С7х(х);
♦ PIC 16С8х;
♦ PIC 16F8x(x);
♦ PIC 16С9хх.
Их обобщенная структурная схема показана на рис. 5.4.
Рис., 5.4,
Архитектура микроконтроллеров среднего подсемейства
Шина данных
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
При перезапуске микроконтроллера исполнение программы на-
чинается с адреса 0x00000. Система обработки прерыванийисполъзует
адрес 0x00004. Регистр конфигурации имеет адрес 0x02007.
Доступ к регистрам
В PIC-микроконтроллерах среднего подсемейства может приме-
няться до четырех банков по 128 (0x080) регистров в каждом. Доступ
к каждому из этих банков регистров обеспечивается с помощью би-
тов RPx регистра состояния (табл. 5.7).
Таблица 57
Использование битов RP1 и RPO регистра состояния для адресации оперативной памяти
Диапазон адресов регистров RP1 RPO Значение, полученное с помощью операции Исключающее ИЛИ
0x000 - 0x07F 0 0 0
0x080 - OxOFF 0 1 0x080
0x0100 - 0x017F 1 0 0x0100
0x0180 - OxOIFF 1 1 0x0180
В правой колонке таблицы указана величина, получаемая при вы-
полнении операции Исключающее ИЛИ адреса и кода разрядов RP1,
RPO, что гарантирует соответствие диапазону адресов банка (адреса
с 0 по 0x07F).
При доступе к данным через индексный регистр FSR его содержи-
мое используется как восемь младших разрядов адреса (индекса).
Старший разряд задает бит IRP регистра состояния (STATUS).
В табл. 5.8 приводятся адреса управляющих регистров микрокон-
троллера.
Таблица 5.8
Адреса управляющих регистров микроконтроллеров среднего подсемейства
_ Смещение БанкО Банк1 Комментарии
_ 0x000 INDF INDF
0x001 TMRO OPTION
0x002 PCL PCL
0x003 STATUS STATUS
_ 0x004 FSR FSR
_ 0x005 PORTA TRISA
- 0x006 PORTB TRISB
- 0x007 PORTC TRISC Для микроконтроллеров с 28/40 контактами
0x008 PORTD TRISD Для микроконтроллеров с 40 контактами
0x009 PORTE TRISE Для микроконтроллеров с 40 контактами
ОхООА PCLATH PCLATH
0x00В INTCON INTCON
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
При написании программ хранить данные рекомендуется в стар-
ших областях адресов банков. Так, для банка 0 удобнее использовать
регистры начиная с адреса 0x020.
Регистр состояния
В табл. 5.9 дается спецификация разрядов регистра состояния (STATUS)
PIC-микроконтроллеров среднего подсемейства.
Таблица 5.9
Назначение разрядов регистра состояния микроконтроллеров среднего подсемейства
Бит Назначение
7 IRP - выбор старших и младших банков регистров при индексной адресации через FSR
6-5 RP1 - RPO - выбор банка (с 0 по 3)
4 _Т0 - флаг переполнения сторожевого таймера; устанавливается в 1 после сброса сторожевого таймера
3 _PD - флаг режима пониженного энергопотребления, устанавливается в 0 по команде sleep; в 1 - после включения питания и по команде CLRWDT
2 Z- флаг нуля
1 DC - флаг десятичного переноса (цифрового поразрядного - из младшего полубайта в старший)
0 С - флаг переноса (при арифметических операциях и операциях сдвига)
Счетчик команд
Структурная схема счетчика команд, который используется в микро-
контроллерах среднего подсемейства, показана на рис. 5.5.
Для адресации программной памяти используются регистры
PCLATH и PCL. Для перехода к другой странице предназначена ниже-
приведенная последовательность команд:
PCLATH = старшие разряды нового адреса
PCL = младшие разряды нового адреса
Управление прерываниями
Управление прерываниями осуществляется через регистр INTC0N
(см. табл. 5.10) и, в ряде случаев, через регистры РТЕ и PIR. Програм-
мы обработки прерывания всегда начинают исполняться со стартово-
го адреса 0x004.
Что касается запросов на прерывания (биты флагов с буквой F в кон-
це), то при их наличии для инициирования прерывания надо уста-
новить в 1 соответствующий бит разрешения (то есть установить
биты с буквой Е на конце), а затем установить бит глобального раз-
решения прерывания GIE.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Рис. 5.5
Структурная схема счетчика команд микроконтроллеров среднего подсемейства
Таблица 5.10
Назначение разрядов регистра INTCON для микроконтроллеров среднего подсемейства
Бит Назначение
7 GIE - общее (глобальное) разрешение прерывания' 1 - разрешает все незамаскированные прерывания; 0 - запрещает все прерывания
6 Разрешение прерываний от периферии: 1 - разрешает все незамаскированные прерывания от периферии; 0 - запрещает все прерывания от периферии
_ 5 TOIE - разрешение прерывания при переполнении таймера TMRO
_ 4 INTE - разрешение внешнего прерывания (от вывода RBO/INT)
3 RBIE - разрешение формирования запроса на прерывание при изменении сигналов на линиях порта В (PORTB)
TOIF - запрос на прерывание (флаг) при переполнении регистра TMRO
1 INTF - запрос на прерывание по внешнему событию (от вывода RBO/INT)
LZ3L_ RBIF - запрос на прерывание при изменении состояния порта В (PORTB)
Некоторые биты, отвечающие за разрешение обработки преры-
вания и формирование запроса на прерывание, могут располагать-
ся в дополнительных регистрах PIR или РТЕ.
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Основные компоненты программы обработки прерываний
Для микроконтроллеров среднего подсемейства основные компонен-
ты программы, отвечающей за обработку прерываний, имеют следу-
ющий вид:
огд 4
movwf w ; Сохранение контекстных регистров.
movf STATUS, W4
bcf STATUS, RP1 ; Банк 0.
bcf STATUS, RPO
movwf STATUS
movf' FSR, w
movwf FSR
movf, PCLATH, w
movwf /PCLATH
clrf • PCLATH 1 , ; Работа в странице 0 программной памяти
; Программа обслуживания прерывания.
movf PCLATH, w ; Восстановление контекстных регистров.
movwf PCLATH -
movf FSR, w '
movwf FSR
movf STATUS, w
movwf STATUS
swapf w, f
swapf w, w
retfie
Чтобы разрешить прерывание, инициируемое схемой TMRO, нуж-
но воспользоваться короткой подпрограммой:
clrf TMRO ; Сброс таймера TMRO.
bcf INTCON, TOIF ; Сброс флага прерывания от таймера TMRO
bsf INTCON, TOIE ; Разрешение прерывания от таймера TMRO.
bsf INTCON, GIE ; Глобальное разрешение прерываний.
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
К данному подсемейству относятся микроконтроллеры с обозначе-
ниями типа PIC 17Схх(х).
Это подсемейство имеет целый ряд особенностей по сравнению
с другими подсемействами PIC-микроконтроллеров, в частности:
1. Возможность работы с внешним запоминающим устройством
(внешней памятью).
2. Использование до семи портов ввода/вывода данных.
3. Встроенный блок умножения 8-разрядных чисел.
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
4. Большая оперативная память, которая содержит до 902 регис-
тров, соответствующих 16 различным банкам.
5. Большой объем программной памяти (до 64 Кб).
6. Возможность записи в программное запоминающее устрой-
ство и считывания из него.
7. Наличие нескольких векторов прерывания.
Структурная схема процессора, который применяется в микро-
контроллерах PIC 17Схх, показана на рис. 5.6.
Рис. 5.6
Архитектура процессора микроконтроллеров PIC 17Схх
Существенные отличия архитектуры этого процессора от процес-
соров, используемых в микроконтроллерах младшего и среднего
подсемейств, состоят в следующем:
1. Обращения к регистру-аккумулятору WR EG (иначе - рабочему реги-
стру) может осуществляться через адресное пространство ре-
гистров.
2. Функции регистров STATUS и OPTION распределяются между не-
сколькими регистрами.
3. Счетчик программ здесь функционирует несколько иначе, чем
в других вышеупомянутых архитектурах.
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
4. Доступ к регистрам может обеспечиваться и без обращения
к регистру WREG.
Доступ к регистрам
Оперативная память микроконтроллеров PIC 17Схх разбита на две
области: область регистров общего назначения (General Purpose Re-
gisters - GPR) и область регистров спецфункций (Special Function Re-
gisters - SFR). В каждом банке регистрам спецфункций соответствует
область адресов с 0x010 по 0x01 f, а регистрам общего назначения -
с 0x020 по OxOFF. Выбор банка выполняется с помощью регистра вы-
бора банков BSR (Bank Select Register). Младший полубайт регистра
BSR обеспечивает выбор банка регистров спецфункций, старший по-
лубайт регистра BSR используется для выбора банка регистров обще-
го назначения. Распределение адресного пространства регистров
для микроконтроллеров PIC 17Схх представлено в табл. 5.11.
Таблица 5.11
Распределение адресного пространства регистров для микроконтроллеров PIC 17Схх
Адрес Обозначение Назначение
0x000 INDFO Регистр, задаваемый с помощью регистра FSRO
0x001 FSRO Индексный регистр 0
0x002 PCL Младший байт счетчика команд
0x003 PCLATH Регистр старших разрядов адреса
0x004 ALUSTA Регистр состояния АЛУ микроконтроллера
0x005 T0STA Регистр состояния и управления таймера TMRO
0x006 CPUSTA Регистр состояния процессора
0x007 INTSTA Регистр состояния и управления прерываниями
0x008 INDF1 Регистр данных индексной адресации через FSR1
0x009 FSR1 Индексный регистр 1
ОхООА WREG Регистр аккумулятора процессора
0x00В TMROL Младший байт регистра TMRO
0x000 TMROH Старший байт регистра TMRO
OxOOD TBLPTRL Младший байт табличного указателя
ОхООЕ TBLPTRH Старший байт табличного указателя
OxOOF BSR Регистр выбора банка
0x010 - 0x017 Регистры специальных функций
0x018 PRODL Младший байт результата при выполнении операции умножения
0x019 PRODH Старший байт результата при выполнении операции умножения
0х01А - 0x01 F Регистры файла (общего назначения), расположенные вне банков регистров
0x020 - OxOFF Регистры файла (общего назначения), входящие в состав банков регистров
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Регистр состояния
Микроконтроллеры PIC 17Схх имеют два регистра состояния:
ALUSTA, и CPUSTA. Первый определяет состояние арифметико-логи-
ческого устройства, второй - состояния процессора (табл. 5.12,5.13).
Таблица 5.12
Назначение разрядов регистра ALUSTA
Бит Функция
7-6 Выбор режима для регистра FSR1 * 1х - содержимое регистра FSR1 не изменяется после осуществления доступа; 01 - содержимое регистра FSR1 инкрементируется; 00 - содержимое регистра FSR1 декрементируется
5-4 Выбор режима для регистра FSRO. 1х - содержимое регистра FSRO не изменяется после осуществления доступа, 01 - содержимое регистра FSRO инкрементируется, 00 - содержимое регистра FSRO декрементируется
3 0V - флаг переполнения при выполнении арифметических операций
• 2 Z - флаг нуля при выполнении арифметических и логических операций
1 DC - флаг десятичного (цифрового поразрядного) переноса при выполнении арифметических операций
0 С - флаг переноса при выполнении арифметических операций
Таблица 5.13
Назначение разрядов регистра CPUSTA, использующегося в микроконтроллерах PIC 17Схх
Бит Функция
7-6 Не используются
5 STKAV - флаг «стек не полон»
4 GLINTD - бит глобального запрета на прерывания
3 ТО - флаг сторожевого таймера; устанавливается после подачи напряжения питания (Power_up) или исполнения команды clrwdt; обнуляется при срабатывании сторожевого таймера
2 _PD - флаг дежурного режима (SLEEP - пониженного энергопотребления), устанавливается после подачи напряжения питания (Power_up) или исполнения команды clrwdt; обнуляется после исполнения команды sleep
1 _POR - флаг сброса микроконтроллера при включении питания; обнуляется после подачи напряжения питания (Power_up); используется не во всех микроконтроллерах PIC 17Схх
0 _BOR - флаг сброса микроконтроллера при понижении напряжения питания; обнуляется после сброса при понижении напряжения питания (Brown out), используется не во всех микроконтроллерах PIC 17Схх
Счетчик команд
Процессор микроконтроллеров PIC 17Схх способен адресовать 64К
16-разрядных командных программной памяти. Эта программная
Память может являться компонентом самой микросхемы или быть
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
внешней. Для адресации программной памяти необходим 16-раз-
рядный адрес, который формируется с помощью регистров PCL
и PCLATH, причем порядок формирования адреса остается тем же са-
мым, как у микроконтроллеров младшего и среднего подсемейств.
Структурная схема программного счетчика, который используется
в микроконтроллерах PIC 17Схх, приведена на рис. 5.7.
Адрес команды
Инкрементирование
счетчика команд
Шина данных
Рис. 5.7
Структурная схема счетчика команд микроконтроллеров PIC 17Схх
Следует отметить, что структурная схема, показанная на рис. 5.8,
отличается от структурной схемы программного счетчика для мик-
роконтроллеров среднего подсемейства по крайней мере в одном
существенном аспекте: при исполнении команд goto и call старшие
пять битов соответствующей команды заменяют младшие пять би-
тов регистра PCLATH. В результате после исполнения команды goto
или call содержимое регистра PCLATH изменяется в соответствии
с текущим адресом.
Выполнение прерываний
Микроконтроллеры PIC 17Схх используют четыре различных адре-
са векторов прерывания, которые имеют заданные приоритеты
и инициируются различными компонентами микроконтроллеров
(табл. 5.14, 5Л5).
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 5.14
Адреса векторов прерывания и приоритеты прерываний различных источников
"Приоритет Адрес вектора прерывания Источник прерывания
"Высокий 0x0008 0x00010 0x00018 Внешнее прерывание от вывода PA0/INT Прерывание от таймера TMRO Внешнее прерывание от вывода Т0СК1
Низкий 0x00020 Прерывание от периферийных узлов
Таблица 5.15
Назначение и функции регистра INTSTA микроконтроллеров PIC 17Схх
Бит Функция
7 PEIF - устанавливается при задержке прерывания, инициированного периферийным устройством
6 T0CKIF - флаг внешнего прерывания от вывода RA1 /Т0СК1; аппаратное стирание при обработке прерывания с вектором 0x0018
5 T0IF - флаг переполнения счетчика таймера TMRO; аппаратное стирание при обработке прерывания с вектором 0x0010
4 INTF - флаг внешнего прерывание от вывода RA0/INT; аппаратное стирание при обработке прерывания с вектором 0x0008
3 PEIE - бит разрешения прерываний от периферийных устройств
2 T0CKIE - бит разрешения внешних прерываний от вывода RA1/T0CKI
1 T0IE - бит разрешения прерываний от таймера TMRO
0 INTE - бит разрешения внешних прерываний от вывода RA0/INT
Основные компоненты программы обработки прерываний
Ниже приводится базовый код программы обработки прерываний
Для микроконтроллеров PIC 17Схх:
огд ?? Вектор (адрес), соответствующий источнику.
m о v р f ALUSTA, _alusta Сохранение регистров контекста.
movpf WREG, w
m о v р f BSR, _bsr
m о v p f PCLATH, -pclath
clrf PCLATH Задание страницы 0.
Программа обработки прерывания.
.m о v f p pclath, PCLATH Восстановление контекста.
movf p bsr, BSR
movf w, WREG
movf p alusta, ALUSTA
retfie
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
В состав подсемейства PIC 18 входят микроконтроллеры, имеющие
обозначения типа PIC 18Схх2*.
Дополнительные возможности микроконтроллеров PIC 18Схх
по сравнению с другими подсемействами состоят в следующем:
1. Наличие аппаратного умножителя 8-разрядных чисел.
2. Оперативная память, которая содержит до 3840 регистров, об-
разующих 16 банков регистров.
3. Адресное пространство программной памяти объемом до
1048576 командных слов.
4. Возможность считывания и записи данных в программное за-
поминающее устройство.
5. Возможность задания приоритетов прерываний.
Упрощенная структурная схема процессорного ядра микрокон-
троллеров PIC 18Схх, иллюстрирующая особенности их архитекту-
ры, показана на рис. 5.8.
Адресное пространство
регистров
Рис. 5.8
Структурная схема микроконтроллеров PIC 18Схх
* Устаревшие сведения. - Прим. ред.
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Существенные отличия архитектуры микроконтроллеров PIC
18Схх от архитектур младшего и среднего подсемейств таковы:
1. Обращение к регистру-аккумулятору WR EG может осуществлять-
ся через адресное пространство регистров.
2. Доступ к первым 128 регистрам оперативной памяти и регис-
трам спецфункций, относящимся к периферийным модулям,
возможен без привлечения регистра В S R через так называемый
банк доступа (Access Bank).
3. Иначе работает счетчик команд.
4. Изменен порядок обращения к регистрам, причем доступ к ним
возможен без привлечения регистра WREG.
Стартовый адрес перезапуска д ля микроконтроллеров PIC 18Схх -
0x00000.
Доступ к регистрам
Микроконтроллеры PIC 18Схх способны адресовать до 4096 8-раз-
рядных регистров. Для адресации всего пространства (рис. 5.9)
предусматривается использование 12-разрядных адресов.
При обращении к нужному регистру необходимо через регистр
BSR (регистр выбора банка) указать банк регистров. Регистр BSR со-
держит четыре старших бита адреса регистра, а восемь младших би-
тов задаются с помощью соответствующей команды.
При прямой адресации адрес регистра определяется с помощью
следующей формулы:
Address = (BSR << 8) + Direct Address
Функционирование индексного регистра в микроконтролле-
рах PIC 18Схх организовано весьма удачно, что позволяет авто-
рам программ-компиляторов заметно упростить процесс разработ-
ки соответствующих программных приложений. И в этом смысле
Микроконтроллеры PIC 18Схх выгодно отличаются от Р1С-мик-
Роконтроллеров других подсемейств. Механизм индексной адре-
сации, в частности, позволяет использовать три 12-разрядных
Индексных регистра FSR, и сопровождать доступ к данным инкре-
ментированием, декрементированием содержимого регистров FSR
Д° или после реализации доступа, а также обращаться по адресу,
Который определяется как сумма содержимого этого регистра с со-
держимым регистра WREG. Все перечисленные варианты адресации
осуществляются за счет выбора соответствующего виртуального
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Банк доступа
* GPR (General Parpose Registers) - регистры общего назначения
Рис. 5.9
0x000
0x07F
0x080
OxOFF
Адресация оперативной памяти микроконтроллеров PIC 18Схх
регистра данных. Напомним, что в младшем и среднем подсемей-
ствах этот регистр единственный и называется INDF.
В табл. 5.16 содержатся сведения о различных виртуальных регис-
трах данных и соответствующих возможностях модификации со-
держимого индексных регистров FSR.
Индексная адресация может быть использована для программ-
ной организации стека. Чтобы занести в стек содержимое рабочего
регистра WREG с помощью регистра FSRO, который играет роль указа-
теля стека, необходимо выполнить следующую операцию:
POSTDECO = WREG ;
Операция выбора данных из стека в регистр WREG реализуется
посредством следующей строки:
WREG = PREINCO ;
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 5.16
Варианты индексной адресации микроконтроллеров PIC 18Схх
Регистры Операции
JNDF# Обращение к регистру, заданному с помощью регистра FSR#
POSTING# Обращение к регистру, заданному с помощью регистра FSR#, с последующим инкрементированием содержимого регистра FSR#
’“’postdec# Обращение к регистру, заданному с помощью регистра FSR#, с последующим декрементированием содержимого регистра FSR#
PREINC# Инкрементирование содержимого регистра FSR# и обращение к регистру, заданному с помощью регистра FSR#
PLUSW# Обращение к регистру, определяемому результатом сложения содержимого регистра WREG и содержимого регистра FSR#
Произвольные позиции стека могут быть доступны с помощью
двух команд:
WREG = 3 ;
WREG = PLUSWO ;
Регистры состояния
В микроконтроллерах PIC 18Схх применяются два регистра, которые
содержат информацию о состоянии микроконтроллера и обеспечи-
вают управление его работой (табл. 5.17, 5.18).
Таблица 5.17
Назначение разрядов регистра состояния STATUS микроконтроллеров PIC 18Схх
Бит Функция
7-5 Не используются
4 N - флаг знака; устанавливается при отрицательном результате арифметических операций
3 0V - флаг переполнения, устанавливается при переполнении в результате выполнения арифметических операций
2 Z - флаг нуля, устанавливается при равенстве результата нулю
1 DC - флаг десятичного переноса; устанавливается при переносе из младшего полубайта в старший при выполнении арифметических операций
0 С - флаг переноса; устанавливается при переносе во время выполнения арифметических операций, используется также в командах циклического сдвига
Счетчик команд
Счетчик команд и стек счетчика команд (стек программного счетчика)
Микроконтроллеров PIC 18Схх в целом аналогичны средствам PIC-
Микроконтроллеров других подсемейств, за исключением двух су-
щественных отличий. Первое - возможность адресации программ-
ной памяти объемом до 1 Мб. Вследствие этого программный счетчик
вКлючает в себя три регистра: регистр младших разрядов PCL, ре-
гистр средних разрядов PCLATH и регистр старших разрядов PCLATU.
второе отличие связано с использованием так называемого быстрого
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Таблица 5.18
Назначение разрядов регистра RC0N микроконтроллеров PIC 18Схх
Бит Функция
7 IPEN - при его установке разрешается задание соответствующих уровней приоритета прерываний
6 LWRT - при его установке разрешается запись во внутреннюю программную память
5 Не используется
4 _RI - флаг операции сброса (если равен 0 - была выполнена операция сброса); должен устанавливаться в 1 программно
3 _Т0 - сбрасывается после сброса сторожевого таймера
2 _PD - флаг режима пониженного энергопотребления, сбрасывается после исполнения команды sleep
1 _POR - флаг сброса при включении питания; обнуляется при сбросе после включения питания (Power_on), должен устанавливаться в 1 программно
0 _BOR - флаг сброса при Brown_out; обнуляется во время сброса при понижении напряжения питания; должен устанавливаться в 1 программно
стека (fast stack), который позволяет сохранять и восстанавливать регис-
тры контекста без написания специальных подпрограмм. И наконец,
в PIC 18Схх допускается считывание данных из стека и запись в него.
Указанные отличия дают ряд дополнительных возможностей
при использовании микроконтроллеров PIC 18Схх, в частности
позволяют разрабатывать с их помощью эффективные программ-
ные приложения, которые не могут быть реализованы в рамках ар-
хитектур других подсемейств Р1С-микроконтроллеров.
Каждая команда микроконтроллера PIC 18Схх располагается по
четному адресу. Первая команда начинается с нулевого адреса, вто-
рая - с адреса «два», третья - с адреса «четыре» и т.д. Если задать для
счетчика команд нечетные адреса, это может привести к останову
программы-симулятора пакета MPLAB и непредсказуемому поведе-
нию микроконтроллеров PIC 18Схх. Изменение принятого (для
первых подсемейств PIC-микроконтроллеров) подхода означает,
что некоторые ранее разработанные правила, которые предусматри-
вают адресацию каждого байта, для микроконтроллеров PIC 18Схх
должны быть кардинально пересмотрены.
Глубина стека программного счетчика составляет 31, что вдвое
превосходит стек подсемейства PIC 17Схх и в четыре раза - стек
микроконтроллеров среднего подсемейства. Кроме того, микрокон-
троллеры PIC 18Схх предусматривают возможность мониторинга
состояния стека с помощью соответствующих аппаратных средств
и регистра STKPTR. Структурная схема стека показана на рис. 5.10.
Спецификация разрядов регистра STKPTR приведена в табл. 5.19.
Биты STKUNF (стек не полон) и STKFUL (стек полон) устанавлива-
ются в случае реализации соответствующих условий. Если в слове
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Стек счетчика команд
21 бит----------►
Рис. 5.10
Структура стека счетчика команд
Таблица 5.19
Назначение разрядов регистра STKPTR
Бит Функция
7 STKFUL - признак заполнения стека; устанавливается при заполнении или переполнении стека
6 STKUNF - признак неполного стека
5 Не используется
__4-0 SP4 - SPO - указатель стека
конфигурации установлен бит STVREN, то при установке битов STKFUL
и STKUNF должен произойти перезапуск (сброс) микроконтроллера.
Быстродействующий стек позволяет упростить процедуру обра-
щения к подпрограммам в приложениях, в которых не разрешены
прерывания, а также в приложениях, где допускается применение
пРограммы обработки прерываний. Чтобы использовать быстродей-
ствующий стек совместно с командами call и return, в конце этих
к°Манд следует добавлять параметр 1; в противном случае необходи-
мо Добавить параметр 0.
Быстродействующий стек имеет размер три байта, что позволя-
ет автоматически запоминать содержимое регистров WREG, STATUS
11 BSR (то есть контекст) при распознавании запроса на прерывание
11 выполнении программного перехода по вектору прерывания.
АРХИТЕКТУРА ПРОЦЕССОРА PICMICRO®
Если программное приложение не использует прерываний, содер-
жимое этих регистров может сохраняться и восстанавливаться с по-
мощью команд call и return. Ниже дан пример быстродействующе-
го стека:
call Sub, 1 ; Вызов Sub после сохранения контекста -
; содержимого регистров wreg, STATUS и BSR.
Sub ; Исполнение подпрограммы Sub, игнорирование
; содержимого регистров wreg, STATUS и BSR.
return 1 ; Восстановление содержимого регистров wreg,
; STATUS и BSR перед возвратом из подпрограммы.
Следует отметить, что быстрый стек не рекомендуется для про-
граммных приложений, в которых разрешение прерываний связано
с затиранием сохраненных данных. По этой причине быстрый стек не-
пригоден для так называемых вложенных подпрограмм или прерываний.
Выполнение прерываний
Выполнение прерываний осуществляется практически так же, как
для PIC-микроконтроллеров среднего подсемейства, за исключени-
ем задания уровней приоритета каждому источнику прерывания.
Если установлены бит Р источника прерывания и бит IPEN регистра
RCON, программа обработки прерываний начнет исполнение с адре-
са 0x00008. Если бит IPEN регистра RCON установлен, а бит Р источни-
ка прерывания сброшен, программа начнется с адреса 0x00018.
Если сброшен бит IPEN, прерывания будут обрабатываться про-
граммой, стартующей с адреса 0x00008.
Общий вид программы обработки прерываний
Если быстрый стек не используется, программа обработки преры-
ваний выглядит так:
I n t
movwf w ; Сохранение содержимого регистров
; контекста.
movwf STATUS, _status
movff BSR, _bsr
: ; Код программы обработки прерываний
movff _bsr, BSR ; Восстановление содержимого
; регистров контекста.
movf _w, w
movff _status, STATUS
retfle
ЩИЕ РЕГИСТРЫ
КОНТРОЛЛЕРОВ
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Адреса одноименных регистров PIC-микроконтроллеров, относя-
щихся к одному архитектурному подсемейству, практически одина-
ковы. При этом следует помнить о том, что биты регистров могут
иметь разное назначение для PIC-микроконтроллеров разных ти-
пов. Для того чтобы убедиться в правильности использования тех
или иных битов, обращайтесь к спецификациям фирмы Microchip.
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
В командах PIC-микроконтроллеров младшего подсемейства для зада-
ния адреса регистра внутри каждого банка зарезервировано пять бит.
В подобных микроконтроллерах может использоваться до четырех
банков регистров, при этом первые 16 регистров каждого банка явля-
ются общими для всех банков, а вторые 16 индивидуальны для каждо-
го конкретного банка. Эта ситуация проиллюстрирована в табл. 6.1.
Таблица 6.1
Адреса для PIC-микроконтроллеров младшего подсемейства
БанкО Банк1 Банк 2 БанкЗ
Адрес - регистр Адрес - регистр Адрес - регистр Адрес - регистр
00 - INDF 20 - INDF 40 - INDF 60 - INDF
01 - TMRO 21 - TMRO 41 - TMRO 61 - TMRO
02 - PCL 22 - PCL 42 - PCL 62 - PCL
03 - STATUS 23 - STATUS 43 - STATUS 63 - STATUS
04 - FSR 24 - FSR 44 - FSR 64 - FSR
05 - PORTA* 25 - PORTA* 45 - PORTA* 65 - PORTA*
Об - PORTB 26 - PORTB 46 - PORTB 66 - PORTB
07 - PORTC 27 - PORTC 47 - PORTC 67 - PORTC
08 - OF - регистры общего назначения 28 - 2F - регистры общего назначения 48 - 4F - регистры общего назначения 68 - 8F- регистры общего назначения
10 - 1F - регистровый файл банка 0 (регистры общего назначения) 30 - 3F - регистровый файл банка 1 (регистры общего назначения) 50 - 5F - регистровый файл банка 2 (регистры общего назначения) 70 - 7F - регистровый файл банка 3 (регистры общего назначения)
OPTION - доступен через команду OPTION TRIS# - доступен через команду TRIS PORT#
* В микроконтроллерах с внутренним генератором вместо регистра PORTA может быть регистр OSCCAL
Таким образом, микроконтроллеры младшего подсемейства мо-
гут использовать от 25 до 73 индивидуальных регистров, доступных
для любого программного приложения.
Ниже названы несколько особенностей работы с данными мик-
роконтроллерами:
МИКРОКОНТРОЛЛЕРЫ МЛАДШЕГО ПОДСЕМЕЙСТВА
1. Запись в регистры OPTION и TRIS может производиться только
в процессе исполнения команд OPTION и TRIS.
2. Если устройство имеет встроенный генератор, адрес «пять»
соответствует регистру OSCCAL, а в других случаях - регистру
PORTA.
3. Назначение разрядов регистров STATUS и OPTION для всех РЮмик-
роконтроллеров младшего подсемейства одинаково (табл. 6.2).
4. Содержимое регистра FSR PIC-микроконтроллеров младшего
подсемейства всегда отлично от нуля.
Таблица 6.2
Назначение и функции регистров STATUS и OPTION
Адрес Регистр Бит Назначение
0x003 STATUS 7 GPWUF - в микроконтроллерах PIC 12С4хх и PIC 16С505. 1 - сброс при выходе из sleep-режима после изменения состояния портов; 0 - сброс после включения питания и от вывода _MCLR; в других микроконтроллерах бит 7 не используется
6-5 РА1 - РАО - выбор программной страницы 00 - страница 0 (0x0000-0x01 FF); 01 - страница 1 (0x0200-0x03FF), 10 - страница 2 (0x0400-0x05FF); 11 - страница 3 (0x0600-0x07FF)
4 _Т0 - устанавливается в 1 после подачи напряжения питания (Power up), исполнения команд clrwdt и sleep
3 _Р0 - устанавливается в 1 после подачи напряжения питания (Power up), исполнения команды clrwdt; обнуляется после исполнения команды sleep
2 Z - флаг нулевого результата
1 DC - флаг десятичного переноса, устанавливается в 1 при переносе из младшего полубайта после исполнения команд сложения/вычитания
0 С - флаг переноса; устанавливается в 1 при переносе после исполнения команд сложения/вычитания
OPTION 7 -GPWU - в микроконтроллерах PIC 12С5хх или PIC 16С505 при обнулении разрешает переход в активное состояние после изменения состояния вывода; в других приборах бит 7 не используется
6 -GPPU - в микроконтроллерах PIC 12С5хх и PIC 16С505 разрешает «подтяжку» входов к напряжению питания (Pin Pull Ups)
5 TOCS - выбор источника тактовых импульсов для таймера TMRO; при его установке в качестве источника используется вывод T0CKI, а при обнулении - частота командных циклов
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.2,
Назначение и функции регистров STATUS и OPTION (окончание)
Адрес Регистр Бит Назначение
OPTION 4 TOSE - выбор фронта для тактирования TMRO: 0 - передний фронт; 1 - задний фронт
3 PSA - бит назначения прескалера: 1 - прескалер используется сторожевым таймером WDT; 0 - таймером TMRO
2-0 PS2 - PSO - биты выбора коэффициента деления прескалера
Биты Коэффициент деления для TMRO Коэффициент деления для WDT
111 110 101 100 011 010 001 000 256 128 64 32 16 8 4 2 128 64 32 16 8 4 2 1
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Адреса управляющих регистров PIC-микроконтроллеров среднего
подсемейства приведены в табл. 6.3.
Таблица 6.3
Адреса управляющих регистров микроконтроллеров среднего подсемейства
Смещение БанкО Банк1 Комментарии
0x000 INDF INDF
0x001 TMRO OPTION
0x002 PCL PCL
0x003 STATUS STATUS
0x004 FSR FSR
0x005 PORTA TRISA
0x006 PORTB TRISB
0x007 PORTO TRISC Для микроконтроллеров с 28/40 контактами
0x008 PORTD TRISD Для микроконтроллеров с 40 контактами
0x009 PORTE TRISE Для микроконтроллеров с 40 контактами
ОхООА PCLATH PCLATH
0x00В INTCON INTCON
В таблице представлены основные управляющие регистры, об-
щие для всего подсемейства. К ним добавляются специфичные ре-
гистры, управляющие периферийными модулями, и регистры общего
назначения, используемые приложениями в качестве оперативной па-
мяти. Они могут начинаться с адреса 0x020 или ОхООС. Следует отме-
тить, что для большей части современных PIC-микроконтроллеров
среднего подсемейства адреса этих регистров начинаются с 0x020.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Назначение разрядов регистра состояния (STATUS) PIC-микрокон-
троллеров указано в табл. 6.4.
Таблица 6.4
Назначение разрядов регистра состояния
Бит Назначение
7 IRP - выбор старших и младших банков регистров при индексной адресации через FSR
6-5 RP1 - RP0 - выбор банка (с 0 по 3)
4 _Т0 - флаг переполнения сторожевого таймера; устанавливается в 1-после сброса сторожевого таймера
3 _PD - флаг режима пониженного энергопотребления: 0 - по команде sleep; 1 - после включения питания и по команде CLRWDT
2 Z- флаг нуля
1 DC - флаг десятичного переноса (цифрового поразрядного - из младшего полубайта в старший)
0 С - флаг переноса (при арифметических операциях и операциях сдвига)
Назначение разрядов регистра OPTION, обозначаемого в специфи-
кациях фирмы Microchip как 0PTI0N_REG, приведено в табл. 6.5.
Таблица 6.5
Назначение разрядов регистра OPTION
Бит Назначение
7 _RBPU - разрешение «подтяжки» входов порта PORTB к напряжению питания (Pm Pull Ups)
6 INTEDG - бит выбора фронта для формирования запроса прерывания от внешнего сигнала RBO/INT: 1 - по переднему фронту; 0 - по заднему фронту
5 TOCS - выбор источника тактовых импульсов для таймера TMRO; при его установке в качестве источника используется вывод TOCKI, а при обнулении - частота командных циклов
4 TOSE - выбор фронта для тактирования TMRO: 0 - передний фронт; 1 - задний фронт
3 PSA - бит назначения прескалера: 1 - прескалер используется сторожевым таймером WDT; 0 - таймером TMRO
2-0 PS2 - PSO - биты выбора коэффициента деления прескалера
Биты Коэффициент деления ДЛЯ TMRO Коэффициент деления для WDT
111 101 100 011 010 001 000 256 128 64 32 16 8 4 2 128 64 32 16 8 4 2 1
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Многие микроконтроллеры содержат регистр PCON, биты которо-
го дополняют биты _Т0 и _PD регистра состояния (STATUS), имеющие
отношение к сбросу микроконтроллера (табл. 6.6).
Таблица 6.6
Назначение разрядов регистра PCON
Бит Назначение
7 MPEEN - устанавливается в 1 при возникновении ошибки четности в запоминающем устройстве; эта возможность предусмотрена лишь в небольшом числе микроконтроллеров
6-3 Не используются
2 _PER - обнуляется при возникновении ошибки четности в программной памяти; эта возможность предусмотрена лишь в небольшом числе микроконтроллеров
1 _POR - обнуляется при сбросе микроконтроллера после включения питания (Power up)
0 _BOR - обнуляется при сбросе от пониженного напряжения питания (Brown out)
Содержимое регистров PCLATH может переписываться в счетчик
команд каждый раз при исполнении команд goto или call, а также
при изменении содержимого регистра PCL (табл. 6.7).
Таблица 6.7
Назначение разрядов регистра PCLATH
Бит Назначение
7-5 Не используются
4 Выбор младших или старших страниц
3 Выбор четных или нечетных страниц
2-0 Выбор блока из 256 адресов в пределах текущей страницы
В некоторых современных микроконтроллерах среднего подсе-
мейства используются внутренние RC-генераторы. Чтобы обеспечить
высокую точность параметров этих генераторов, в регистр OSCCAL
заносится специальное калибровочное значение (табл. 6.8).
Таблица 6.8
Назначение разрядов регистра OSCALL
Бит Назначение
7-4 CAL3 - CALO - калибровочное значение
3 CALFST - увеличение частоты импульсов, формируемых RC-генератором
2 CALSLW - уменьшение частоты импульсов, формируемых RC-генератором
1-0 Не используются
Управление прерываниями^ PIC-микроконтроллерах среднего подсе-
мейства осуществляется с помощью регистра INTCON, который обеспе-
чивает как общее управление системой прерываний, так и управле-
ние их конкретными типами (см. табл. 6.9).
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Таблица 6.9
Назначение разрядов регистра INTCON
Бит Назначение
" 7 GIE - общее (глобальное) разрешение прерывания: 1 - разрешает все незамаскированные прерывания; 0 - запрещает все прерывания
6 Разрешение прерываний от периферии. 1 - разрешает все незамаскированные прерывания от периферии, 0 - запрещает все прерывания от периферии
5 TOIE - разрешение прерывания при переполнении таймера TMRO
4 INTE - разрешение внешнего прерывания (от вывода RBO/INT)
3 RBIE - разрешение формирования запроса на прерывание при изменении сигналов на линиях порта В (PORTB)
2 TOIF - запрос на прерывание (флаг) при переполнении регистра TMRO
1 INTF - запрос на прерывание по внешнему событию (от вывода RBO/INT)
0 RBIF - запрос на прерывание при изменении состояния порта В (PORTB)
Бит 6 регистра INTCON может использоваться в качестве бита раз-
решения прерываний, инициируемых периферийными устрой-
ствами (PEIE), который, при условии его установки, разрешает пре-
рывания, специфицируемые с помощью регистров PIR и PIE.
Регистр PIR содержит биты флагов F (запросов на прерывание),
тогда как в регистре PIE хранятся биты Е разрешения прерываний.
Позиции битов F и Е, соответствующих различным периферийным
устройствам, изначально известны, однако для различных подсе-
мейств микроконтроллеров набор таких битов может быть разным,
поэтому их следует уточнять по спецификациям фирмы Microchip.
Доступ к электрически программируемому ПЗУ (Electrically Erasable
Programmable Read-only Memory - EEPROM), применяемому для хра-
нения данных, обеспечивается с помощью регистров EEADR и EEDATA,
а регистры EECON1 и EECON2 позволяют управлять процедурой доступа.
Регистр EEC0N2 используется в качестве псевдорегистра (виртуального
регистра), при чтении которого возвращается нулевой результат.
Функции разрядов регистра EECON1 перечислены в табл. 6.10.
Таблица 6.10
Назначение разрядов регистра EEC0N1
_ Бит Назначение
7-5 Не используются
4 EEIF - запрос на прерывание при завершении записи в электрически программируемое ПЗУ (EEPROM)
3 WRERR - бит ошибки записи, устанавливается при некорректной записи в EEPROM
_ 2 WREN - бит разрешения записи в EEPROM
_ 1 WR - бит управления записью
LZ~~b RD - бит разрешения считывания информации из EEPROM
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
I
Бит, с помощью которого разрешается прерывание при записи
в электрически программируемое ПЗУ, обозначается как EEIE и от-
носится к регистру РТЕ или INTCON.
Управляемый параллельный порт (Parallel Slave Port - PSP) имеется
только в 40-контактных PIC-микроконтроллерах среднего подсемей-
ства и активизируется путем установки бита PSPMODE. Прерывания раз-
решаются посредством бита PSPIE, а запросы формируются в бите
PS PI F; указанные биты относятся соответственно к регистрам PI Е и PIR.
Управление работой PSP осуществляется с помощью регистра TRISЕ.
Следует отметить, что управляемый параллельный порт использует
порты PORTD и PORTE, линии которых в этом случае непригодны для
обычного ввода/вывода данных (табл. 6.11).
Таблица 6.11
Назначение разрядов регистра TRISE
Бит Назначение
7 IBF - входной буфер полон (слово принято и ожидает считывания микроконтроллером)
6 OBF - выходной буфер (PORTD) полон (еще не было чтения)
5 IBOV - переполнение входного буфера (получены новые данные, а принятые ранее не были считаны микроконтроллером)
4 PSPMODE - бит разрешения режима PSP
3 Не используется
2 TRISE2 - бит режима для порта Е2 (TRIS для Е2)
1 TRISE1 - бит режима для порта Е1 (TRIS для Е1)
0 TRISEO - бит режима для порта ЕО (TRIS для ЕО)
В некоторых PIC-микроконтроллерах среднего подсемейства на-
ряду со схемой TMRO используются таймеры TMR1 и TMR2, которые
предназначены для задания базовых временных соотношений в мо-
дуле ССР {сравнение, захват, широтно-импулъснаямодуляция).
Модуль TMR1 представляет собой 16-разрядный таймер, доступ
к которому осуществляется через регистры младшего TMR1L и стар-
шего TMR1H байтов. Он может инициировать прерывание при пере-
полнении (флаг TMR1IF), если предварительно был установлен бит
TNR1 IE. Управление работой регистра TMR1 производится с помощью
регистра Т1 CON (табл. 6.12).
Модуль TMR2 представляет собой 8-разрядный таймер с прескалером
и постскалером, Он допускает многорежимное применение, особенно
удобен для генерации широтно-модулированных сигналов и циклов.
В этом случае содержимое счетчика данного таймера непрерывно
сравнивается с содержимым регистра периода PR2.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Таблица 6.12
Назначение разрядов регистра T1C0N
Бит Назначение
~7?-б Не используются
5-4 TICKPS1 -TICKPS2 - задание коэффициента деления прескалера для таймера TMR1
3 T10SCEN - разрешение использования встроенного генератора для тактирования таймера TMR1
2 _T1SYNC - бит управления синхронизацией внешних тактирующих импульсов таймера TMR1 (0 - синхронизация разрешена)
1 TMR1CS - выбор источника тактирующих импульсов: 0 - тактирование частотой командных циклов; 1 - тактирование от внешнего источника
0 TMR1C0N - бит разрешения использования таймера TMR1
Запрос на прерывание (TMR2IF) формируется после того, как сигнал
переполнения TMR2 «пройдет» постскалер. Для запуска программы
обработки требуется установить бит разрешения TMR2IЕ. Управление
работой таймера TMR2 обеспечивает регистр T2C0N (табл. 6.13).
Схемы TMR1 и TMR2 могут использоваться совместно с одним из двух
модулей ССР. При этом регистр TMR1 служит для выполнения операций
Таблица 6.13
Назначение разрядов регистра T2C0N
Бит Назначение
7 Не используется
6-3 T0UTPS3 -TOUTPSO - выбор коэффициента деления постскалера таймера TMR2
Биты Коэффициент деления
1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
_ 2 TMR20N - разрешение таймера TMR2
1-0 T2CKPS1 -T2CKPS0 - выбор коэффициента деления прескалера таймера TMR2
Биты Коэффициент деления
1х 01 00 16 4 1
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
захвата и сравнения, а регистр TMR2 - для формирования сигнала
с широтно-импульсной модуляцией. Регистры CCPR2X предназначе-
ны для хранения параметров работы модулей сравнения/захвата,
а с помощью регистра ССРх выбирается вывод микроконтроллера,
применяемый модулем ССР. Управляет этим модулем регистр CCPxCON
(табл. 6.14).
Таблица 6.14
Назначение разрядов регистра CCPxCON
Бит_______________________________Назначение
7-6 Не используются
5-4 DCxB 1 - DCxBO - младшие разряды длительности импульса ШИМ
3-0 ССРМЗ - ССРМО - выбор режима работы
Биты Режим
11хх Режим ШИМ (PWM)
1011 Режим сравнения, триггер специальных событий
1010 Режим сравнения, триггер совпадений
1001 Режим сравнения, начальный уровень сигнала высокий, при равенстве переходит на низкий
1000 Режим сравнения, начальный уровень сигнала низкий, при равенстве переходит на высокий
0111 Захват по каждому шестнадцатому переднему фронту
0110 Захват по каждому четвертому переднему фронту
0101 Захват по каждому переднему фронту
0100 Захват по каждому заднему фронту
001х Не используется
0001 Не используется
0000 Модуль ССР отключен
Запросам прерываний от модулей ССР соответствуют флаги
CCPxIF. Разрешения даются битами CCPXIE, где символ х соотносится
со значением 1 или 2 - в зависимости от номера активизированного
модуля ССР.
В PIC-микроконтроллерах среднего подсемейства предусматри-
вается применение трех различных встроенных модулей SSP (стан-
дартный последовательный порт), реализующих функции попу-
лярных интерфейсов I2C, SPI и RS232 (SCI). Понимание основных
принципов функционирования этих модулей очень важно для эф-
фективной разработки приложений.
Большое распространение в последнее время получил интер-
фейс 12С.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Регистр SSPBUF модуля данного интерфейса обеспечивает буфериза-
цию данных, а в регистры SSPADD заносятся служебные адреса, кото-
рые сравниваются с принимаемыми адресами и при их совпадении
инициируют операции обмена. Для управления работой модулей
SSP используется регистр SSPC0N (табл. 6.15).
Таблица 6.15
Назначение разрядов регистра SSPCON
Бит Назначение
7 WCOL - флаг коллизий при записи (устанавливается в 1, если запись новых данных в буферный регистр была произведена во время их передачи)
6 SSPOV - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения работы модуля SSP (конфигурирования портов микроконтроллера для поддержки SSP)
4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт); в режиме 12С установка этого бита разрешает тактирование
3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP
Биты Режим
1111 1110 110х 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 Режим I2C, SLAVE; используется 10-разрядный адрес Режим I2C, SLAVE; используется 7-разрядный адрес Зарезервирован Режим I2C, MASTER Зарезервирован Зарезервирован Зарезервирован Режим I2C, SLAVE; используется 10-разрядный адрес Режим I2C, SLAVE; используется 7-разрядный адрес Режим SPI, SLAVE; вывод SS (Slave Select) запрещен Режим SPI, SLAVE; вывод SS (Slave Select) разрешен Режим SPI, MASTER; синхронизация OTTMR2 Режим SPI, MASTER; синхронизация от Fosc/64 Режим SPI, MASTER, синхронизация от Fosc/16 Режим SPI, MASTER; синхронизация от Fosc/4
Регистр SSPSTAT также предназначен для управления работой мо-
дулей SSP (табл. 6.16).
Модуль Master SSP (MSSP) управляется через аналогичные регис-
тры и имеет второй регистр SSPCON. Он отличается от обычного
Модуля SSP тем, что аппаратно поддерживает режим Master интер-
фейса 12С. Функции регистра SSPCON 1 приводятся в табл. 6.17.
Регистр SSPC0N2 применяется для управления режимом Master мо-
дуля 12С, его разряды перечислены в табл. 6.18.
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.16
Назначение разрядов регистра SSPSTAT
Бит Назначение
7 SMP 1 - стробирование данных осуществляется в конце битового интервала; О-в середине интервала
б СКЕ устанавливается в 1, если передача данных идет по переднему фронту импульсов SCK
5 D/_A - используется в режиме 12С: 1 - последним был передан байт данных; 0 - байт адреса
4 Р - флаг обнаружения стопового бита
3 S - устанавливается при обнаружении стартового бита (в режиме 12С)
2 R/_W - бит типа операции в режиме 12С’ 0 - запись; 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
0 BF - флаг «буфер полон»; устанавливается при заполнении буфера во время приема данных Также устанавливается при передаче данных
Таблица 6.17
Назначение разрядов регистра SSPC0N1
Бит Назначение
7 WOOL - флаг коллизий при записи (устанавливается в 1, если запись новых данных в буферный регистр была произведена во время их передачи)
6 SSPOV - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения работы модуля SSP (конфигурирования портов микроконтроллера для поддержки SSP)
4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт); в режиме 12С установка этого бита разрешает тактирование
3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP
Биты Режим
1хх1 1х1х 1000 0111 0110 0101 0100 0011 0010 0001 0000 Зарезервирован Зарезервирован Режим I2C, MASTER; тактирование частотой Fosc / (4 (SSPADD + 1)) Режим I2C, SLAVE; используется 10-разрядный адрес Режим I2C, SLAVE; используется 7-разрядный адрес Режим SPI, SLAVE; вывод SS (Slave Select) запрещен Режим SPI, SLAVE, вывод SS (Slave Select) разрешен Режим SPI, MASTER, синхронизация OTTMR2 Режим SPI, MASTER, синхронизация от Fosc/64 Режим SPI, MASTER; синхронизация от Fosc/16 Режим SPI, MASTER, синхронизация от Fosc/4
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Таблица 6.18
Назначение разрядов регистра SSPC0N2
Бит Назначение
" 7 GCEN - устанавливается для разрешения прерываний при приеме адреса общего вызова
6 ACKSTAT-устанавливается при получении подтверждения приема от slave-устройства шины 12С
5 АСКОТ - устанавливается для посылки подтверждения при приеме байта
4 ACKEN - инициирует последовательность подтверждения шины 12С
3 RCEN - устанавливается для разрешения режима приема модуля 12С
2 PEN - обнуляется для инициирования стоп-условия шины 12С
1 RSEN - устанавливается для инициирования повторных старт-условий шины 12С
0 SEN - устанавливается для инициирования старт-условий шины 12С
Назначение разрядов регистра SSPSTAT, используемого в модуле
MSSP, указано в табл. 6.19.
Запросы на прерывание от модулей SSP обозначаются битом 8SPIF,
а разрешение на обработку прерываний дается с помощью бита SSPIE.
Режим асинхронной последовательной передачи данных с кодирова-
нием «без возврата к нулю» (Non-Return to Zero, как в RS232) реали-
зуется посредством встроенного универсального синхронно-асинхронного
Таблица 6.19
Назначение разрядов регистра SSPSTAT модуля MSSP
Бит Назначение
7 SMP- 1 - стробирование данных осуществляется в конце битового интервала; О-в середине интервала
б СКЕ - устанавливается в 1, если передача данных идет по переднему фронту импульсов SCK
5 D/.A - используется в режиме 12С: 1 - последним был передан байт данных; 0 - байт адреса
_ 4 Р - флаг обнаружения стопового бита
_ 3 S - устанавливается при обнаружении стартового бита (в режиме 12С)
2 R/.W - бит типа операции в режиме 12С: 0 - запись; 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
0 BF - флаг «буфер полон»; устанавливается при заполнении буфера во время приема или передачи данных
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
приемопередатчика (Universal Synchronous Asynchronous Receiver
Transmitter - USART). Этот приемопередатчик служит также для ре-
ализации режима синхронной последовательной передачи данных.
Скорость передачи задается с помощью регистра SPBRG. TXREG
и RCREG используются в качестве буферных регистров для передачи
и приема данных.
RCSTA является основным регистром управления приемником
USART (табл. 6.20).
Таблица 6.20
Назначение разрядов регистра RCSTA
Бит Назначение
7 SPEN - разрешение USART (установка в 1 разрешает конфигурирование портов микроконтроллера для работы USART)
6 RX9 - разрешение приема данных в 9-разрядном формате
5 SREN - разрешение режима однобайтового приема
4 CREN - разрешение режима непрерывного приема данных
3 ADDEN - разрешение обнаружения адреса в асинхронном режиме передачи
2 FERR - флаг ошибки кадрирования (формата)
1 OERR - флагошибки буферизации
0 RX9D - девятый бит принимаемых данных
Регистр TXSTA предназначен для управления передатчиком
(табл. 6.21).
Установка бита запроса на прерывание (RCIF) подтверждает факт
приема универсальным синхронно-асинхронным приемопередат-
чиком байта данных. Разрешение прерывания по приему задается
с помощью бита RCIE.
Таблица 6.21
Назначение разрядов регистра TXSTA
Бит Назначение
7 CSRC - бит выбора источника тактовых импульсов в синхронном режиме 1 - внутренний источник, 0 - внешний генератор
6 ТХ9 - устанавливается для разрешения передачи данных в 9-разрядном формате
5 TXEN - бит разрешения передачи данных
4 SYNC - бит выбора режима работы USART: 1 - синхронный режим, 0 - асинхронный режим
3 Не используется
2 BRGH - бит выбора скорости передачи- 1 - высокая; 0 - низкая
1 TRMT - флаг «передающий регистр пуст» (передача слова завершена)
0 TX9D - девятый бит передаваемых данных
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Установка бита запроса прерывания при передаче TXIF происхо-
дит когда передающий буфер пуст, соответствующее разрешение на
прерывание дает бит TXIE.
В PIC-микроконтроллерах, имеющих в своем составе компарато-
ры напряжения, может быть использован встроенный источник опор-
ного напряжения (Vref), величина которого задается с помощью регис-
тра VRC0N (табл. 6.22).
Таблица 6.22
Назначение разрядов регистра VRC0N
Бит Назначение
7 VREN - бит включения питания схемы формирования опорного напряжения
6 VROE - бит разрешения выдачи опорного напряжения на внешние устройства (на выводы микроконтроллера)
5 VRR - бит задания нижнего ряда значений опорного напряжения
4 Не используется
3-0 VR3 - VRO - биты выбора величины опорного напряжения
Величина опорного напряжения рассчитывается по формуле:
Vref = (1 / 4Vdd (1 - VRR)) + Vdd (VR3 : VRO) / (24 + (8 (1 - VRR))).
В табл. 6.23 даются значения напряжения Vref в зависимости от
соответствующих управляющих кодов для случая, когда величина
напряжения Vdd равна 5,0 В.
Таблица 6.23
Значения опорных напряжений Vref при Vdd = 5,0 В
_ VR3 - VR0 VRR = 1, В VRR = 0, В
1111 3,13 3,59
1110 2,92 3,44
1101 2,71 3,28
1100 2,50 3,13
1011 2,29 2,97
1010 2,08 2,81
1001 1,88 2,66
1000 1,67 2,50 j
0111 1,46 2,34 1
0110 1,25 2,19
0101 1,04 2,03
0100 0,83 1,88
0011 0,63 1,72
0010 0,42 1,56
0001 0,21 1,41
0000 0,00 1,25
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Опорное напряжение обычно используется для подачи на один
из входов компаратора напряжения, работа которого контролиру-
ется с помощью регистра CMCON (табл. 6.24).
Таблица 6.24,
Назначение разрядов регистра CMCON
Бит Назначение
7 C20UT - устанавливается, когда C2Vin+ > C2Vin-
6 C10UT - устанавливается, когда C1Vin+ > C1Vin-
5-4 Не используются
3 CIS - управление входным коммутатором компаратора, см. СМ2 - СМО
2-0 СМ2 - СМО - выбор режима компаратора
Биты CIS C1Vin+ C1Vin- C2Vin+ C2Vin- Комментарии
111 X Gnd Gnd Gnd Gnd Компараторы отключены
110 X AN2 ANO AN2 AN1 AN3 = C10UT RA4 = C20UT
101 X Gnd Gnd AN2 AN1
100 X AN3 ANO AN2 AN1
011 X AN2 ANO AN2 AN1
010 1 Vref AN3 Vref AN2
010 0 Vref ANO Vref AN1
001 1 AN2 AN3 AN2 AN1
001 0 AN2 ANO AN2 AN1
000 X AN3 ANO AN2 AN1 Компараторы отключены
Прерывания, запрашиваемые в связи с изменением выходных сиг-
налов компараторов (флаг CMIF), разрешаются с помощью бита CMIE.
В PIC-микроконтроллерах также используются многоканальные
аналого-цифровые преобразователи- АЦП (Analog to Digital Converter -
ADC). Возможные конфигурации АЦП приводятся в табл. 6.25-6.28.
Управление работой аналого-цифровых преобразователей обеспе-
чивается с помощью регистра ADCONO.
Аналоговый вход для текущего преобразования и формат пред-
ставления результата преобразования для типовых PIC-микрокон-
троллеров в 18-контактных корпусах задаются регистром ADCON1,
назначение разрядов которого приведено в табл. 6.26.
В табл. 6.27 указан состав регистров ADCON1 более сложных 18-кон-
тактных Р1С-микроконтроллеров.
Конфигурационные варианты модуля АЦП 28/40-контактных
PIC-микроконтроллеров приводятся в табл. 6.28.
МИКРОКОНТРОЛЛЕРЫ СРЕДНЕГО ПОДСЕМЕЙСТВА
Таблица 6.25
Назначение разрядов регистра ADC0N0
Бит Назначение
ADCS 1 - ADCS0 - биты выбора тактовой частоты аналого-цифрового преобразователя: 11 - использование внутреннего RC-генератора; 10 - Fosc/32; 01 - Fosc/8; 00 - Fosc/2
5-3 CHS2 - CHSO - биты выбора канала аналого-цифрового преобразователя: 111 - AN7; 110-AN6; 101 - AN5; 100 - AN4; 011 - AN3; 010-AN2; 001 - AN1; 000 - AN0
2 G0/_D0NE - бит инициирования АЦП; сбрасывается аппаратно после окончания преобразования
1 Не используется
0 ADON - разрешение АЦП (микроконтроллер конфигурируется для выполнения функций АЦП)
Таблица 6.26
Назначение разрядов регистра ADC0N1
__ Бит Назначение
_ 7-2 Не используются
1-0 PCFG1 - PCFGO - конфигурация портов микроконтроллера при реализации функций АЦП
Биты AN3 AN2 AN1 AN0
11 10 01 00 D D Vref+ А D D А А D А А А D А А А
Результат аналого-цифрового преобразования запоминается в ре-
естрах ADRES. Запросы на прерывание от модулей АЦП (флаги ADIF)
формируются после полного завершения преобразования. Разреше-
ние прерывания дается битом ADIE.
В PIC-микроконтроллерах также могут применяться 10-разряд-т
Hbie аналого-цифровые преобразователи с измененным форматом
Управляющего регистра ADC0N1 (табл. 6.29).
УПРАВЛЯЮЩИЕ РЕГИСТРЫ РГС-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.27
Назначение разрядов регистра ADC0N1 для усовершенствованных микроконтроллеров
Бит Назначение
7-3 Не используются ~~
2-0 PCFG2 - PCFGO - конфигурация портов микроконтроллера при реализации функций АЦП
Биты AN3 AN2 AN1 AN0
111 110 101 100 011 010 001 000 D D D D D D А А D D D D А А А А D D Vref+ А Vref+ А Vref+ А 0 А А А А А А А
Таблица 6.28
Назначение разрядов регистра ADCON1 для PIC-микроконтроллеров с 28 и 40 выводами
Бит Назначение
7-3 Не используются
2-0 PCFG2 - PCFGO - конфигурация портов микроконтроллера при реализации функций АЦП
Биты AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
11х 101 100 011 010 001 000 D D D D D А А D D D D D А А D D D А D А А D D D А А А А D Vref+ А Vref+ А Vref+ А D D D А А А А D А А А А А А D А А А А А А _
При использовании 10-разрядных аналого-цифровых преобразо-
вателей результат запоминается в регистрах ADRESL и ADR ESH.
Приведенный выше перечень регистров, использующихся в мик-
роконтроллерах среднего подсемейства, не содержит регистров
управления светодиодными индикаторами (Light Emitting Diode) мик-
роконтроллеров PIC 16С92х. Сведения об этих и других регистрах,
поддерживающих дополнительные периферийные функции мик-
роконтроллеров, которые не были разработаны на момент опубли-
кования настоящей книги, можно найти в спецификациях фирмы
Microchip.
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.29
Назначение разрядов регистра ADC0N1 для микроконтроллеров с 10-разрядными АЦП
'Бит Назначение
'7-6 Не используются
"5 ADFM: 1 - результат выравнивается вправо (6 старших разрядов ADRESH равны 0); 0 - результат выравнивается влево (6 младших разрядов ADRESL равны 0)
' 4 Не используется
'з-о PCFG3 - PCFGO - конфигурация по ртов микроконтроллера при реализации с эункций АЦП
Биты AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VR+ , VR-
1111 D D D D VR+ VR- D А AN3 AN2
1110 D D D D D D D А Vdd Vss*
1101 D D D D VR+ VR- А А AN3 AN2
1100 D D D А VR+ VR- А А AN3 AN2
1011 D D А А VR+ VR- А А AN3 AN2
1010 D D А А VR+ А А А AN3 Vss
1001 D D А А А А А А Vdd Vss
1000 А А А А VR+ VR- А А AN3 AN2
011х D D D D D D D D N/A N/A
0101 D D D D VR+ D А А AN3 Vss
0100 D D D D А D А А Vdd Vss
0011 D D D D VR+ А А А AN3 Vss
0010 D D D А А А А А Vdd Vss
0001 А А А А VR+ А А А AN3 Vss
0000 А А А А А А ,А А Vdd Vss
* Vss в данном случае соответствует Gnd - Прим ред
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Адресное пространство для регистров, объединенных в банки,
в микроконтроллерах PIC 17Схх соответствует диапазонам адресов
с 0x010 по 0x017 (0x019) для управляющих регистров и с 0x020 по OxOFF
Для регистров общего назначения. Доступ к каждому банку обеспе-
чивается при помощи соответствующего полубайта регистра выбо-
ра банка BSR. Все прочие управляющие регистры, не объединенные
в банки, доступны посредством прямой адресации. Области с адре-
сами в диапазоне от 0x010 до 0x017 содержат управляющие регистры
Яериферийных модулей, обеспечивающих, в том числе, различные
Функции ввода/вывода.
Диапазон адресов с 0x000 по 0x01 F отведен для так называемого
Первичного набора регистров (Primary Register Set), который отмечает-
Ся в командах пересылки move символом р. Микроконтроллеры PIG
^С4х имеют четыре банка регистров, а микроконтроллеры PIG;
^С5х - уже восемь банков. Функциональное назначение регистров
Микроконтроллеров pic 17Схх подробно описывается в табл. 6.30/
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх
Значение BSR Адрес Регистр Функции/назначение битов
Любое 0x000 INDFO Регистр данных при индексной адресации ” через регистр FSRO
Любое 0x001 FSRO Индексный регистр 0 "
Любое 0x002 PCL Младший байт счетчика команд
Любое 0x003 PCLATH Старший байт счетчика команд (загружаемый) ~~
Любое 0x004 ALUSTA Регистр ’ управления и состояния АЛУ ~
Бит Назначение
7-6 Выбор режима для регистра FSR1: 1х - содержимое регистра FSR1 не изменяется после осуществления доступа; 01 - содержимое регистра FSR1 инкрементируется; 00 - содержимое регистра FSR1 декрементируется
5-4 Выбор режима для регистра FSRO: 1х - содержимое регистра FSRO не изменяется после осуществления доступа; 01 - содержимое регистра FSRO инкрементируется; 00 - содержимое регистра FSRO декрементируется
3 0V - флаг переполнения при выполнении арифметических операций
2 Z - флаг нуля при выполнении арифметических и логических операций
1 DC - флаг десятичного (цифрового поразрядного) переноса при выполнении арифметических операций
0 С - флаг переноса при выполнении арифметических операций
Любое 0x005 TOSTA Регистр травления и состояния TMRO
Бит Назначение
7 INTEDG - выбор фронта, инициирующего прерывание от вывода RA0/INT: 1 - запрос на прерывание формируется по переднему фронту импульса; 0 - по заднему фронту импульса _
6 T0SE - выбор тактирующего фронта входных импульсов таймера TMRO: 1 - по переднему фронту; 0 - по заднему фронту _
5 TOCS - выбор источника тактовых импульсов таймера TMRO: 1 - использование частоты командных циклов; 0 - сигнал, поступающий с вывода T0CKI _
4-1 PS3 - PSO - выбор коэффициента деления прескалера
Биты Коэффициент деления
1ххх 256 _
0111 128 _
0110 64 J
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
значение BSR Адрес Регистр Функции/Назначение битов
Любое 0x005 T0STA Биты Коэффициент деления
0101 0100 0011 0010 0001 0000 32 16 8 4 2 1
0 Не используется
Любое 0x006 CPUSTA Регистр состояния процессора
Бит Назначение
7-6 Не используются
5 STKAV - флаг «стек не полон»
4 GLINTD - бит глобального запрета на прерывания
3 _Т0 - флаг сторожевого таймера, устанавливается после подачи напряжения питания (Power_up) или исполнения команды clrwdt; обнуляется при срабатывании сторожевого таймера
2 _Р0 - флаг дежурного режима (SLEEP - пониженное энергопотребление); установка после подачи напряжения питания (Power_up) или исполнения команды clrwdt, обнуление после исполнения команды sleep
1 _P0R - флаг сброса микроконтроллера по включению питания; обнуляется после подачи напряжения питания (Power_up); используется не во всех микроконтроллерах PIC 17Схх
0 _B0R - флаг сброса микроконтроллера при понижении напряжения питания; обнуляется после сброса при понижении напряжения питания (Brown out); реализуется не во всех микроконтроллерах PIC 17Схх
Любое 0x007 INTSTA Регистр /правления и состояния прерываний
Бит Назначение
7 PEIF - устанавливается при задержке прерывания, инициированного периферийным устройством
6 T0CKIF - флаг внешнего прерывания от вывода RA1 /Т0СК1; стирание аппаратное при обработке прерывания с вектором 0x0018
5 T0IF - флаг переполнения счетчика таймера TMRO; стирание аппаратное при обработке прерывания с вектором 0x0010 |
4 INTF - флаг внешнего прерывание от вывода • RA0/INT; стирание аппаратное при обработке | прерывания с вектором 0x0008 '
3 PEIE - бит разрешения прерываний от периферийных устройств
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
Любое 0x007 INTSTA Бит Назначение ~~
2 TOCKIE - бит разрешения внешних прерываний от вывода RA1 /Т0СК1
1 TOIE - бит разрешения прерываний от таймера TMRO
0 INTE - бит разрешения внешних прерываний от вывода RAO/INT
Любое 0x008 INDF1 Регистр данных при индексной адресации через FSR1
Любое 0x009 FSR1 Индексный регистр 1
Любое ОхООА WREG Регистр-аккумулятор процессора
Любое 0x00В TMROL Младший байт регистра TMRO
Любое ОхООС TMROH Старший байт регистра TMRO
Любое OxOOD TBLPRTL Младший байт указателя таблицы
Любое ОхООЕ TBLPTRH Старший байт указателя таблицы
Любое OxOOF BSR Регистр выбора банка регистров
Бит Назначение
7-4 Выбор банка регистров общего назначения ОЗУ (адреса с 0x020 по OxOFF)
3-0 Выбор банка регистров аппаратных средств ввода/вывода (адреса с ОхОЮ по 0x017)
0 0x010 PORTA Регистр данных порта А
Бит Назначение
7 -RBPU -1 разрешает «подтяжку» входов порта В к напряжению питания (подачу на вход логической 1)
6 Не используется
5 RA5/TX - вход RA5 (с триггером Шмитта) или выход передатчика USART (ТХ)
4 RA4/RX - вход RA4 (с триггером Шмитта) или вход приемника USART (RX)
3 RA3 - вход с триггером Шмитта или выход с открытым стоком
2 RA2 - вход с триггером Шмитта или выход с открытым стоком
1 RA1 /Т0СК1 - вход RA1 с триггером Шмитта или вход таймера TMRO
0 RAO/INT - вход RA1 с триггером Шмитта или вход запроса прерывания от внешних устройств
0 0x011 DDRB Регистр указания направления передачи данных через PORTB; при 1 в соответствующем разряде вывод порта будет функционировать как вход, при О - как выход
0 0x012 PORTB Регистр данных порта В
Бит Назначение
7-6 RB7 - RB6 - входы/выходы с триггером Шмитта на входе; при изменении состояния формируется запрос на прерывание
5 RB5 - вход/выход с триггером Шмитта и вход таймера TMR3; при изменении состояния формируется запрос на прерывание
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
значение BSR Адрес Регистр Функции/назначение битов
_—-— 0 0x012 PORTB Регистр данных порта В
Бит Назначение
4 RB4 - вход/выход с триггером Шмитта и вход таймеров TMR1/TMR2, при изменении состояния формируется запрос на прерывание
3 RB3 - вход/выход с триггером Шмитта на входе и выход модуля широтно-импульсной модуляции ССР2
2 RB2 - вход/выход с триггером Шмитта на входе и выход модуля широтно-импульсной модуляции ССР1
1 RB1 - вход/выход с триггером Шмитта на входе и вход «захвата» модуля ССР2
0 RBO - вход/выход с триггером Шмитта на входе и вход «захвата» модуля ССР1
0 0x013 RCSTA Регистр управления и состояния приемника USART
Бит Назначение
7 SPEN - разрешение USART (1 разрешает конфигурирование портов микроконтроллера для работы USART)
6 RX9 - устанавливается для разрешения приема данных в 9-разрядном формате
5 SREN - устанавливается для разрешения режима однобайтового приема
4 CREN - устанавливается для разрешения режима непрерывного приема данных
3 Не используется
2 FERR - флагошибки формата
1 OERR - флагошибки буферизации
0 RX9D - девятый бит принимаемых данных
р7 0x014 RCREG Буферный регистр данных приемника USART
о" 0x015 TXSTA Регистр' управления и состояния передатчика USART
Бит Назначение
7 CSRC - бит выбора источника тактовых импульсов в синхронном режиме 1 - внутренний источник; 0 - внешний генератор
6 ТХ9 - устанавливается для разрешения передачи данных в 9-разрядном формате
5 TXEN - бит разрешения передачи данных
4 SYNC - бит выбора режима работы USART: 1 - синхронный режим; 0 - асинхронный-режим
3 Не используется
2. BRGH - бит выбора скорости передачи 1 - высокая; 0 - низкая
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
0 0x015 TXSTA Бит Назначение
1 TRMT - флаг «передающий регистр пуст» (передача слова завершена)
0 TX9D - девятый бит передаваемых данных
0 0x016 TXREG Буферный регистр данных передатчика USART
0 0x017 SPBRG Регистр задания частоты синхронизирующих импульсов USART
1 0x010 DDRC Регистр указания направления передачи данных через P0RTC; при 1 в соответствующем разряде вывод порта будет функционировать как вход, при 0 - как выход
1 0x011 P0RTC Регистр данныхлорта С или регистр данных/адреса внешнего запоминающего устройства
1 0x012 DDRD Регистр указания направления передачи данных через P0RTD; при 1 в соответствующем разряде вывод порта будет функционировать как вход, при 0 - как выход
1 0x013 P0RTD Регистр данных порта D или регистр данных/адреса внешнего запоминающего устройства (системной шины)
1 0x014 DDRE Порт указания направления передачи данных через PORTE; при 1 в соответствующем разряде вывод порта будет функционировать как вход, при 0 - как выход
1 0x015 PORTE Регистр данных порта Е или регистр для передачи управляющих сигналов внешнего запоминающего устройства (системной шины)
Бит Назначение
2 RE2/.WR - бит ввода/вывода или бит сигнала записи системной шины
1 RE1/_0E - бит ввода/вывода или бит сигнала считывания системной шины
0 REO/ALE - бит ввода/вывода или бит строб-им пульса адреса системной шины
1 0x016 PIR1 Регистр 1 состояния прерываний (в некоторых микроконтроллерах этот регистр может оказаться единственным регистром состояния прерываний, в таком случае он обозначается как PIR)
Бит Назначение
7 RBIF-флаг запроса на прерывание при изменении состояния линий PORTB
6 TMR3IF - флаг переполнения таймера TMR3
5 TMR2IF - флаг переполнения таймера TMR2
4 TMR1IF - флаг переполнения таймера TMR1
3 CA2IF - устанавливается при осуществлении захвата в модуле ССР2
2 CA1IF - устанавливается при осуществлении захвата в модуле ССР1
TXIF - запрос USART на прерывание при передаче данных
0 RCIF - запрос USART на прерывание при приеме данных
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
1 0x017 PIE1 Регистр 1 управления прерываниями (в некоторых устройствах этот регистр может оказаться единственным регистром управления прерываниями, в таком случае он обозначается как PIE)
Бит Назначение
7 RBIE - бит разрешения прерываний при изменении состояния линий PORTB
6 TMR3IE - бит разрешения прерываний от таймера TMR3
5 TMR2IE - бит разрешения прерываний от таймера TMR2
4 TMR1IE - бит разрешения прерываний от таймера TMR1
3 CA2IE - бит разрешения прерываний от модуля захвата ССР2
2 CA1IE - бит разрешения прерываний от модуля захвата ССР1
1 TXIE - бит разрешения прерываний от USART при передаче данных
0 RCIE - бит разрешения прерываний от USART при приеме данных
2 0x010 TMR1 Регистр данных таймера TMR1
2 0x011 TMR2 Регистр данных таймера TMR2
2 0x012 TMR3L Регистр данных таймера TMR3 (младший байт)
2 0x013 TMR3H Регистр данных таймера TMR3 (старший байт)
2 0x014 PR1 Регистр периода TMR1
2 0x015 PR2 ‘ Регистр периода TMR2
2 0x016 PR3L Регистр периода TMR3 (младший байт)
2 0x017 PR3H Регистр периода TMR3 (старший байт)
3 0x010 PW1DCL Регистр младших разрядов значения интервала модуля PWM1
Бит Назначение
7 DC1 - бит 1 значения интервала
б ОСО - бит 0 значения интервала
5-0 Не используются
0x011 PW2DCL Регистр младших разрядов значения интервала модуля PWM2
Бит Назначение
7 DC1 - бит 1 значения интервала
6 DCO - бит 0 значения интервала
5 TM2PW2 - бит выбора генератора периода: 1 - период формируется таймером TMR2 и задается регистром PR2; 0 - период формируется таймером TMR1 и задается регистром PR1
4-0 Не используются
з 0x012 PW1DCH Регистр старших разрядов значения интервала модуля PWM1
3 0x013 PW2DCH Регистр старших разрядов значения интервала модуля PWM2
3 0x014 CA2L Регистр 2 результата захвата, младший байт
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
3 0x015 СА2Н Регистр 2 результата захвата, старший байт ”
3 0x016 T1C0N Регистр управления таймерами TMRln TMR2
Бит Назначение ”
7-6 CA2ED1 - CA2ED0 - выбор режима захвата модуля ССР2 11 - захват по каждому шестнадцатому переднему фронту импульсов, 10 - захват по каждому четвертому переднему фронту импульсов; 01 - захват по каждому переднему фронту импульсов, 00 - захват по каждому заднему фронту импульсов
5-4 CA1ED1 - CA1ED0 - выбор режима захвата модуля ССР1: 11 - захват по каждому шестнадцатому переднему фронту импульсов, 10 - захват по каждому четвертому переднему фронту импульсов; 01 - захват по каждому переднему фронту импульсов; 00 - захват по каждому заднему фронту импульсов
3 Бит выбора режима таймеров TMR2 и TMR1: 1 - один 16-разрядный таймер, 0 - два независимых 8-разрядных таймера
2 TMR3CS* 1 - содержимое счетчика TMR3 инкрементируется по заднему фронту импульсов, поступающих с вывода RB5/TCLK3; 0 - инкрементирование производится частотой командных циклов
1 TMR2CS 1 - содержимое счетчика TMR2 инкрементируется по заднему фронту импульсов, поступающих с вывода RB4/TCLK12, 0 - инкрементирование производится частотой командных циклов
0 TMR1CS 1 - содержимое счетчика TMR1 инкрементируется по заднему фронту импульсов, поступающих с вывода RB4/TCLK12, 0 - инкрементирование производится частотой командных циклов
3 0x017 TC0N2 Регистр 2 управления таймерами TMR1 и TMR2
Бит Назначение
7 CA20VF - флаг переполнения модуля захвата ССР2 (регистр данных захвата не был считан)
6 CA10VF - флаг переполнения модуля захвата ССР1 (регистр данных захвата не был считан)
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
3 0x017 TC0N2 Бит Назначение
5 PWM20N - бит разрешения использования модуля PWM2
4 PWM10N - бит разрешения использования модуля PWM1
3 CA1/_PR3 - бит режима регистра СА1: 1 - регистр захвата; 0 - регистр периода
2 TMR30N - бит разрешения использования таймера TMR3
1 TMR20N - бит разрешения использования таймера TMR2, должен обязательно устанавливаться при объединении таймеров TMR2/TMR1
0 TMR10N - бит разрешения использования таймера TMR1; при объединении схем TMR2/TMR1 обеспечивает управление работой 1б-разрядного таймера
4 0x010 PIR2 Регистр 2 состояния прерываний
Бит Назначение
7 SSPIF - запрос на прерывание от модуля SSP
6 BCLIF - запрос на прерывание при возникновения конфликта (коллизии) на шине
5 ADIF - запрос на прерывание от АЦП
4 Не используется
3 CF4IF - запрос на прерывание от модуля ССР4
2 CA3IF - запрос на прерывание от модуля ССРЗ
1 TX21F - запрос на прерывание от USART2 при передаче
0 RC21F - запрос на прерывание от USART2 при приеме
4 0x011 PIE2 Регистр 2 управления прерываниями
Бит Назначение
7 SSPIE - разрешение прерывания от модуля SSP
6 BCLIE - разрешение прерывания при возникновении конфликта (коллизии) на шине
5 ADIE - разрешение прерывания от АЦП
4 Не используется
3 CA4IE - разрешение прерывания от модуля ССР4
2 CA3IE - разрешение прерывания от модуля ССРЗ
1 TX2IE - разрешение прерывания от USART2 при передаче
0 RC2IE - разрешение прерывания от USART2 при приеме
4~~~~ 0x012 RCSTA2 Регистр состояния и управления приемом данных USART2
Бит Назначение
7 SPEN - разрешение использования USART2
6 RX9 - разрешение приема данных в 9-разрядном формате
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
4 0x012 RCSTA2 Бит Назначение
5 SREN - разрешение однократного приема в синхронном режиме
4 CREN - разрешение использования режима непрерывного приема данных
3 Не используется
2 FERR - флагошибки формата
1 OERR - флаг ошибки буферизации
0 RX9D - девятый бит принятых данных
4 0x014 RCREG2 Буферный регистр данных приемника USART2
4 0x015 TXSTA2 Регистр травления и состояния передачи USART2
Бит Назначение
7 CSRC - бит выбора источника тактовых импульсов в синхронном режиме- 1 - внутренний источник; 0 - внешний генератор
6 ТХ9 - устанавливается для разрешения передачи данных в 9-разрядном формате
5 TXEN - бит разрешения передачи данных
4 SYNC - бит выбора режима работы USART: 1 - синхронный режим; 0 - асинхронный режим
3 Не используется
2 BRGH - бит выбора скорости передачи- 1 - высокая, 0 - низкая
1 TRMT - флаг «передающий регистр пуст» (передача слова завершена)
0 TX9D - девятый бит передаваемых данных
4 0x016 TXREG2 Буферный регистр данных передачи USART2
4 0x017 SPBRG2 Регистр задания частоты тактовых импульсов USART2
5 0x010 DDRF Регистр указания направления передачи данных через P0RTF, при 1 в соответствующем разряде вывод порта будет функционировать как вход, при 0 - как выход
5 0x011 P0RTF Регистр данных порта F. Разряды соответствуют линиям порта F или аналоговым входам с 4 по 11
5 0x012 DDRG Регистр указания направления передачи данных через P0RTF; при 1 в соответствующем разряде вывод порта будет функционировать как вход, при 0 - как выход
5 0x013 P0RTG Регистр данных порта G. Разряды соответствуют линиям порта G
Бит Назначение
7 RG7/TX2 - вход/выход RG7 (с триггером Шмитта) или выход передатчика USART2 (ТХ2)
6 RG6/RX2 - вход/выход RG6 (стриггером Шмитта) или вход приемника USART2 (RX2)
5 RG5/PWM3 - вход/выход RG5 (с триггером Шмитта) или выход модуля PWM3
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
5 0x013 P0RTG Бит Назначение
4 RG4/CAP3 - вход/выход RG4 (с триггером Шмитта) или вывод модуля ССРЗ
3 RG3/AN0 - вход/выход RG3 (с триггером Шмитта) или аналоговый вход AN0
2 RG2/AN1 - вход/выход RG2 (с триггером Шмитта) или аналоговый вход AN1
1 RG1/AN2 - вход/выход RG1 (с триггером Шмитта) или аналоговый вход AN2
0 RG0/AN3 - вход/выход RGO (стриггером Шмитта) или аналоговый вход AN3
5 0x014 ADC0N0 Регистр 0 управления АЦП
Бит Функции
7-4 CHS3 - CHSO - выбор аналогового канала
Код Канал
11хх 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 Зарезервирован AN11 AN10 AN9 AN8 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
3 Не используется
2 G0/_D0NE - устанавливается для инициирования аналого-цифрового преобразования, сбрасывается аппаратно по завершении преобразования
1 Не используется
0 ADON - устанавливается для активизации аналого-цифрового преобразователя
0x015 ADC0N1 Регистр 1 управления АЦП
Бит Функции
7-6 ADCS1 - ADCS0 - выбор тактирующих импульсов для аналого-цифрового преобразователя. 11 - импульсы внутреннего RC-генератора; 10 - Fosc/64, 01 - Fosc/32; 00 - Fosc/8
5 ADFM - установка при выборе формата с выравниванием вправо; в противном случае используется формат с выравниванием влево
4 Не используется
3-1 PCFG3 - PCFG1 - конфигурирование выводов микроконтроллера
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/Назначение битов
Код Номер аналогового входа
11 10 9 8 7 6 5 4 3 2 1 0
111 110 101 100 011 010 001 000 D D D А А А А А D D А А А А А А D А А А А А А А D А А А А А А А D D D D D 0 D А D D D D D D А А D D D D D А А А D D D D А А А А D D D А А А А А D D А А А А А А D А А А А А А А D А А А А А А А
5 0x015 ADC0N1 Бит Функции
0 PCFGO - при его установке выводы VR+ и VR- используются в качестве входов опорных надряжений Vref4- и Vref-, в противном случае ими будут Vdd и Vss
5 0x016 ADRESL Младший байт результата аналого-цифрового преобразования
5 0x017 ADRESH Старший байт результата аналого-цифрового преобразования
6 0x010 SSPADD Регистр сравнения адреса модуля MSSP
6 0x011 SSPC0N1 Регистр 1 управления модулем MSSP
Бит Назначение
7 WC0L - флаг коллизий при записи (1 - запись новых данных в буферный регистр была произведена во время передачи)
6 SSP0V - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения SSP режима работы портов микроконтроллера
4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт), в режиме 12С установка этого бита разрешает тактирование
3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP
Код Режим
1111 I2C, SLAVE с 10-разрядным адресом
1110 12С, 8ЕА7Ес7-разрядным адресом
110х Зарезервирован
1011 Режим I2C, MASTER с программным управлением
1010 Зарезервирован
1001 Зарезервирован
1000 Режим I2C, MASTER; тактирование частотой F08C / (4 (SSPADD +1))
0111 Режим I2C, SLAVE; используется 10-разрядный адрес
0110 Режим I2C, SLAVE; используется 7-разрядный адрес
0101 Режим SPI, SLAVE, вывод SS (Slave Select) не используется
МИКРОКОНТРОЛЛЕРЫ PIC 17СХХ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (продолжение)
Значение BSR Адрес Регистр Функции/назначение битов
Т 0x011 SSPC0N1 3-0 Код Режим
0100 Режим SPI, SLAVE; вывод SS (Slave Select) разрешен
0011 Режим SPI, MASTER; синхронизация от TMR2
0010 Режим SPI, MASTER; синхронизация от Fosc/64
0001 Режим SPI, MASTER, синхронизация от Fosc/16
0000 Режим SPI, MASTER; синхронизация от Fosc/4
6 0x012 SSPC0N2 Регистр 2 управления модулем MSSP
Бит Назначение
7 GCEN - устанавливается для разрешения прерываний при приеме адреса общего вызова
6 ACKSTAT - устанавливается при получении подтверждения приема от slave-устройства шины 12С
5 ACKDT - устанавливается для посылки подтверждения при приеме байта
4 ACKEN - инициирует последовательность подтверждения шины 12С
3 RCEN - устанавливается для разрешения режима приема модуля 12С
2 PEN - обнуляется для инициирования стоп-условия шины 12С
1 RSEN - устанавливается для инициирования повторных старт-условий шины 12С
0 SEN - устанавливается для инициирования старт-условий шины 12С
6 0x013 SSPSTAT Регистр состояния модуля MSSP
Бит Назначение
7 SMP. 1 - стробирование данных осуществляется в конце битового интервала; О-в середине интервала
6 ОКЕ - 1 - передача данных осуществляется по переднему фронту импульсов SCK
5 0/_А - используется в режиме 12С: 1 - последним был передан байт данных; 0 - байт адреса
4 Р - флаг обнаружения стопового бита
3 S - устанавливается при обнаружении стартового бита (в режиме 12С)
2 R/_w - бит типа операции в режиме 12С: 0 - запись; 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.30
Спецификация регистров микроконтроллеров PIC 17Схх (окончание)
Значение BSR Адрес Регистр Функции/назначение битов
6 0x013 SSPSTAT Бит Назначение
0 BF - флаг «буфер полон»; устанавливается при заполнении буфера во время приема данных или их передачи
6 0x014 SSPBUF Буферный регистр данных модуля MSSP
7 0x010 PW3DCL Регистр младших разрядов значения интервала модуля PWM3
Бит Назначение
7 DC1 - бит 1 значения интервала
6 ОСО - бит 0 значения интервала
5 TM2PW3 - бит выбора генератора периода: 1 - используются TMR2 и PR2, 0 - используются TMR1 и PR1
4-0 Не используются
7 0x011 PW3DCH Регистр старших разрядов значения интервала модуля PWM3
7 0x012 CA3L Младший байт результата захвата модуля ССРЗ
7 0x013 САЗН Старший байт результата захвата модуля ССРЗ
7 0x014 CA4L Младший байт результата захвата модуля ССР4
7 0x015 СА4Н Старший байт результата захвата модуля ССР4
7 0x016 TC0N3 Регистр ’ управления для ССРЗ/ССР4
Бит Назначение
7 Не используется
6 CA40V - флаг переполнения модуля ССР4
5 CA30V - флаг переполнения модуля ССРЗ
4-3 CA4ED1 - CA4ED0 - выбор режима захвата модуля ССР4 11 - захват по каждому шестнадцатому переднему фронту импульсов, 10 - захват по каждому четвертому переднему фронту импульсов, 01 - захват по каждому переднему фронту импульсов, 00 - захват по каждому заднему фронту импульсов
2-1 CA3ED1 - CA3ED0 - выбор режима захвата модуля ССРЗ 11 - захват по каждому шестнадцатому переднему фронту импульсов; 10 - захват по каждому четвертому переднему фронту импульсов, 01 - захват по каждому переднему фронту импульсов, 00 - захват по каждому заднему фронту импульсов
0 PWM30N - бит разрешения использования модуля PWM3
Любое 0x018 PR0DL Младший байт результата, полученного при выполнении операции умножения
Любое 0x019 PR0DH Старший байт результата, полученного при выполнении операции умножения
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
функции управляющих регистров, которые используются в микро-
контроллерах PIC 18Схх, подробно рассматриваются в табл. 6.31.
Доступ к этим регистрам может обеспечиваться с помощью банка
доступа (Access Bank) или путем задания в регистре выбора банка
BSR значения OxOF.
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх
Адрес Регистр Функции/назначение битов
ОхО#8О PORTA Регистр чтения/записи порта А; ниже приводится дополнительное назначение выводов
Бит Назначение
7 Не используется
6 0SC2
5 Выход сигнала _SS /аналоговый вход AN4
4 Выход с открытым стоком/вход с триггером Шмитта
3-0 Аналоговые входы AN3 - ANO
ОхО#81 PORTB Регистр чтения/записи порта В. Входы могут быть «подтянуты» к напряжению питания. Альтернативное назначение дано ниже
Бит Назначение
7-6 Выводы для внутрисхемного программирования микроконтроллера (1С5Р)/прерывание при изменении состояния
5 Прерывание при изменении состояния
4 Прерывание при изменении состояния
3 Вход/выход модуля ССР2 и выход ШИМ сигнала
2 Линия 3 внешнего прерывания
1 Линия 2 внешнего прерывания
0 Линия 1 внешнего прерывания
0х0#82 PORTO Регистры чтения/записи порта С. Входы с триггерами Шмитта. Альтернативное назначение
Бит Назначение
7 Вывод для приема данных UART (RX)
б Вывод для передачи данных UART (ТХ)
5 Выход данных SPI
4 Вход данных SPI/вход-выход 12С (данные)
3 Синхроимпульсы интерфейсов SPI и 12С
2 Вход/выход модуля ССР1/выход модуля PWM1
1 Вход/выход модуля ССР2/ВЫХОД модуля РШМ2/ВХОД осциллятора таймера TMR1
0 Вход таймера TMR1 и TMRS/выход таймера TMR1
0х0#83 PORTD Этот порт может использоваться только в 40-контактных микроконтроллерах PIC 18Схх. Входы с триггерами Шмитта. Применяется также как шина данных управляемого параллельного порта передачи данных (PSP)
°ХО#84 PORTE Этот порт может использоваться только в 40-контактных микроконтроллерах PIC 18Схх. Входы с триггерами Шмитта. Применяется для передачи сигналов управления PSP
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0х0#84 PORTE Бит Назначение
7-3 Не используются
2 Сигнал выбора кристалла _CS
1 Сигнал разрешения записи (_WR) в микроконтроллер PIC 18Схх порта PSP
0 Сигнал разрешения чтения (_RD) из микроконтроллера PIC 18Схх
0х0#89 LATA Регистр чтения порта A/регистр записи, шунтирующий PORTA
0х0#8А LATB Регистр чтения порта В/регистр записи, шунтирующий PORTB
0х0#8В LATC Регистр чтения порта С/регистр записи, шунтирующий PORTC
0х0#8С LATD Регистр записи, шунтирующий PORTD; используется только в 40-контактных микроконтроллерах PIC 18Схх
0x0#8D LATE Регистр записи, шунтирующий PORTE, используется только в 40-контактных микроконтроллерах PIC 18Схх
0х0#92 TRISA Регистр управления порта А 1 - в каком-либо разряде задает режим входа для соответствующего разряда порта А; 0 - режим выхода
0х0#93 TRISB Регистр управления порта В
0х0#94 TRISC Регистр управления порта С
0х0#95 TRISD Регистр управления порта D, используется только в 40-контактных микроконтроллерах PIC 18Схх
0х0#96 TRISE Регистр управления порта Е; используется только в 40-контактных микроконтроллерах PIC 18Схх. Специальные функции разрядов даны ниже
Бит Назначение
7 IBF - флаг «входной буфер PSP полон» (слово принято и ожидает считывания микроконтроллером)
6 OBF - флаг «выходной буфер PSP полон»
5 IBOV - флаг переполнения входного буфера (получены новые данные, а принятые ранее не были считаны микроконтроллером)
4 PSPMODE - бит разрешения режима PSP
3 Не используется
2 TRISE2 - бит режима для порта Е2 (TRIS для Е2)
1 TRISE1 - бит режима для порта Е1 (TRIS для Е1)
0 TRISE0 - бит режима для порта ЕО (TRIS для ЕО)
0x0#9D PIE1 Регистр управления прерываниями от периферийных устройств
Бит Назначение
7 PSPIE - разрешение прерывания от PSP при выполнении операций чтения/записи
6 ADIE - разрешение на прерывание после завершения аналого-цифрового преобразования
5 RCIE - разрешение прерывания от USART при приеме данных
4 TXIE - разрешение прерывания от USART, когда буферный регистр передачи пуст
3 SSPIE - разрешение прерывания от MSSP
2 CCP1IE - разрешение прерывания от модуля ССР1
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0x0#9D PIE1 1 TMR2IE - разрешение прерывания при совпадении данных таймера TMR2 и регистра PR2
0 TMR1TE - разрешение прерываний при переполнении таймера TMR1
0х0#9Е PIR1 Регистр 1 запросов на прерывание от периферийных устройств
Бит Назначение
7 PSPIF - флаг прерываний от PSP при чтении/записи
6 ADIF - флаг завершения выполнения аналого-цифрового преобразования
5 RCIF - флаг приема данных USART
4 TXIF - флаг «передающий буфер пуст» USART
3 SSP1IF - флаг завершения приема/передачи данных модулем SSP
2 CCP1IF - бит запроса от ССР1
1 TMR2IF - флаг равенства значений таймера TMR2 и регистра PR2
0 TMR1IF - флаг переполнения регистра ТМR1
0x0#9F IPR1 Регистр 1 приоритетов прерываний, инициируемых периферийными устройствами
Бит Назначение
7 PSPIP - устанавливает приоритет прерывания от PSP
6 ADIP - устанавливает приоритет прерывания от АЦП
5 RCIP - устанавливает приоритет прерывания от USART по приему данных
4 TXIP - устанавливает приоритет прерывания от USART по передаче данных
3 SSPIP - устанавливает приоритет прерывания от SSP
2 CCP1IP - устанавливает приоритет прерывания отССР1
1’ TMR2IP - устанавливает приоритет прерывания при равенстве значений TMR2 и регистра PR2
0 TMR1IP - устанавливает приоритет прерывания при переполнении TMR1
0х0#9А PIE2 Регистр 2 разрешения прерываний периферийных устройств
Бит Назначение
7-4 Не используются
3 BCLIE - разрешение прерывания при конфликте на шине
2 LVDIE - разрешение прерывания при обнаружении низкого уровня питающего напряжения
1 TMR3IE - разрешение прерывания при переполнении таймера TMR3
0 CCP2IE - разрешение прерывания от ССР2
ОхО#9В PIR2 Регистр 2 запросов на прерывание, инициируемых периферийными устройствами
Бит Назначение
7-4 Не используются
3 BCLIF - запрос на прерывание при конфликте на шине
2 LVDIF - запрос на прерывание при обнаружении низкого уровня напряжения
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
ОхО#9В PIR2 Бит Назначение
1 TMR3IF - запрос на прерывание при переполнении таймера TMR3
0 CCH2IF -запрос на прерывание от ССР2
0х0#9В IPR2 Регистр 2 приоритетов прерываний, инициируемых периферийными устройствами
Бит Назначение
7-4 Не используются
3 BCLIF - устанавливает приоритет прерывания при конфликте шины
2 LVDIF - устанавливает приоритета прерывания при обнаружении низкого уровня напряжения
1 TMR3IF - устанавливает приоритет прерывания при переполнении таймера TMR3
0 CCP2IF - устанавливает приоритет прерывания от ССР2
ОхО#АВ RCSTA Регистр управления и состояния приемника USART
Бит Назначение
7 SREN - логическое включение USART
6 RX9 - бит разрешения приема данных в 9-разрядном формате
5 SREN - бит разрешения режима однократного приема в синхронном режиме
4 CREN - бит разрешения режима непрерывного приема
3 ADDEN - разрешение обнаружения адреса в асинхронном режиме
2 FERR - бит признака ошибки формата
1 OERR - флагошибки буферизации
0 RX9D - девятый бит принимаемых данных
ОхОАС TXSTA Регистр управления и состояния передатчика USART
Бит Назначение
7 CSRC - бит выбора источника тактовых импульсов в синхронном режиме: 1 - внутренний источник; 0 - внешний генератор
6 ТХ9 - устанавливается для разрешения передачи данных в 9-разрядном формате
5 TXEN - бит разрешения передачи данных
4 SYNC - бит выбора режима работы USART: 1 - синхронный режим; 0 - асинхронный режим
3 Не используется
2 BRGH - бит выбора скорости передачи: 1 - высокая, 0 - низкая
1 TRMT - флаг «передающий регистр пуст» (передача слова завершена)
0 TX9D - девятый бит передаваемых данных
OxO#AD TXREG Буферный регистр передачи USART
OxO#AF SPBRG Регистр задания частоты обмена USART
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
ОхО#АЕ RCREG Буферный регистр приема USART
0хо#В1 T3C0N Регистр управления таймером TMR3
Бит Назначение
7 RD16 - разрешение считывания/записи в регистр TMR3 в 1б-разрядном формате
6,3 ТЗССР2, ТЗССР1 - биты разрешения использования таймеров TMR3 и TMR1 для ССРх: 1х - таймер TMR3 используется в качестве источника тактовых импульсов для ССРх; 01 - таймер TMR3 используется в качестве источника тактовых импульсов для ССР2, а таймер TMR1 - для ССР1; 00 - схема TMR1 используется в качестве источника тактовых импульсов для ССР
5-4 T3CKPS1 -T3CKPS0 - управление прескалером таймера TMR3: 11 - коэффициент деления прескалера равен 8, 10 - коэффициент деления прескалера равен 4, 01 - коэффициент деления прескалера равен 2, 00 - коэффициент деления прескалера равен 1
2 _T3SYNC 0 - внешние тактовые сигналы TMR3 синхронизируются внутренними сигналами
1 TMR3CS. 1 - тактирование таймера TMR3 внешними сигналами; 0 - тактирование частотой командных циклов
0 TMR30N - бит разрешения использования таймера TMR3
0х0#В2 TMR3L Младший байт регистра TMR3
ОхОйВЗ TMR3H Старший байт регистра TMR3
ОхОйВА CCP2CON Регистр управления модулем ССР2
Бит Назначение
7-6 Не используются
5-4 DC1BX1 - DC1BX0 - два младших разряда при 10-разрядной ШИМ
3-0 ССР1МЗ - ССР1М0 - биты для выбора режима ССР2: 11хх - режим ШИМ, 1011 - режим триггера событий, 1010 - режим генерации прерывания при сравнении; 1001 - задание начального высокого уровня сигнала ССР2 и принудительный переход к низкому уровню сигнала при равенстве, 1000 - задание начального низкого уровня сигнала ССР1 и принудительный переход к высокому уровню при равенстве, 0111 - захват по каждому шестнадцатому переднему фронту импульсов, 0110 - захват по каждому четвертому переднему фронту импульсов; 0101 - захват по каждому переднему фронту импульсов, 0100 - захват по каждому заднему фронту импульсов,
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
ОхО#ВА CCP2C0N Бит Назначение
3-0 0011 - зарезервирован, 0010 - переключение состояния выхода при равенстве в режиме сравнения; 0001 - зарезервирован, 0000 - модуль захвата/сравнения/широтно-импульсной модуляции отключен
ОхОйВВ CCPR1L Регистр младших разрядов модуля 2 захвата/сравнения/ШИМ
ОхОЯВС CCPR1H Регистр старших разрядов модуля 2 захвата/сравнения/ШИМ
OxO#BD CCP1C0N Регистр управления модулем СОРТ
Бит Назначение
7-6 Не используются
5-4 DC1BX1 - DC1BX0 - младшие разряды 10-разрядной ШИМ
3-0 ССР1МЗ - ССР1М0 - выбор режима модуля ССР1. 11хх - режимы ШИМ; 1011 - режим триггера специальных событий, 1010- режим генерации прерываний при сравнении; 1001- задание начального высокого уровня сигнала ССР2 и принудительный переход к низкому уровню сигнала при равенстве, 1000 - задание начального низкого уровня сигнала ССР1 и принудительный переход к высокому уровню при равенстве, 0111 - захват по каждому шестнадцатому переднему фронту импульсов, 0110 - захват по каждому четвертому переднему фронту импульсов, 0101 - захват по каждому переднему фронту импульсов, 0100 - захват по каждому заднему фронту импульсов, 0011 - зарезервирован, 0010 - переключение состояния выхода при равенстве в режиме сравнения, 0001 - зарезервирован; 0000 - модуль захвата/сравнения/широтно-импульсной модуляции отключен
ОхОЯВЕ CCPR1L Регистр младших разрядов модуля 1 захвата/сравнения/ШИМ
OxO#BF CCPR1H Регистр старших разрядов модуля 1 захвата/сравнения/ШИМ
0х0#С1 ADCON1 Регистр 1 управления АЦП
Бит Назначение
7 ADFM: 1 - возврат результата преобразования в формате с правым выравниванием; 0 - возврат в формате с левым выравниванием
6 ADCS2 - выбор синхронизирующих импульсов (старший бит, младшие в ADC0N0)
5-4 Не используются
3-0 PCFG3 - PCFG0 - биты конфигурирования выводов микроконтроллера
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр | Функции/назначение битов
Код Аналоговые входы
7 6 5 4 3 2 1 0 VR+ VR-
1111 1110 1101 1100 1011 1010 1001 1000 011х 0101 0100 0011 0010 0001 0000 D D D D D D D А D D D 0 D А А D D D D 0 D D А D D D D D А А D D D D А А А А D D D D D А А D D 0 А А А А А D D D D А А А VR+ D VR+ VR+ VR+ VR+ А VR+ D VR+ А VR+ А VR+ А VR- D VR- VR- VR- А А- VR- D D D А А А А D D А А А А А А D А А А А А А А А А А А А А А D А А А А А А AN3 Vdd AN3 AN3 AN3 AN3 Vdd AN3 N/A AN3 Vdd AN3 Vdd AN3 Vdd AN2 Vss AN2 AN2 AN2 Vss Vss AN2 N/A Vss Vss Vss Vss Vss Vss
0х0#С2 ADC0N0 Регистр 0 управления АЦП
Бит Назначение
7-6 ADCS1 - ADCS0 - биты выбора тактовых импульсов АЦП (вместе с битом ADCS2 регистра ADC0N1). 111 - внутренний RC-генератор, 110 - Fosc/64, 101 - Fosc/16, 100 - Fosc/4, 011 - внутренний RC-генератор, 010 - Fosc/32; 001 - Fosc/8; 000 - Fosc/2
5-3 CHS2 - CHSO - биты выбора канала аналого-цифрового преобразователя 111 - AN7; 110 - AN6; 101 - AN5; 100- AN4; 011 - AN3; 010 - AN2, 001 - AN1; 000 - ANO
2 G0/_D0NE - устанавливается для инициирования аналого-цифрового преобразования, по окончании - сбрасывается
1 Не используется
0 ADON - активизация модуля АЦП
ОхОйСЗ ADREL Младший байт результата аналого-цифрового преобразования
ОхО#С4 ADRESH Старший байт результата аналого-цифрового преобразования
0х0#С5 SSPC0N2 Регистр 2 управления модуля MSSP
Бит Назначение
7 GCEN - устанавливается для разрешения прерываний при приеме адреса общего вызова
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0х0#С5 SSPC0N2 Бит Назначение
6 ACKSTAT - устанавливается при получении подтверждения приема от slave-устройства шины 12С
5 ACKDT - устанавливается для посылки подтверждения при приеме байта
4 ACKEN - инициирует последовательность подтверждения шины 12С
3 RCEN - устанавливается для разрешения режима приема модуля 12С
2 PEN - обнуляется для инициирования стоп-условия шины 12С
1 RSEN - устанавливается для инициирования повторных старт-условий шины 12С
0 SEN - устанавливатся для инициирования старт-условий шины 12С
0х0#С6 SSPC0N1 Регистр 1 управление модуля MSSP
Бит Назначение
7 WOOL - флаг коллизий при записи (1 -запись новых данных в буферный регистр была произведена во время передачи)
6 SSPOV - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения SSP режима работы портов микроконтроллера
4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт); в режиме 12С установка этого бита разрешает тактирование
3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP: 1111 - I2C, SLAVE с 10-разрядным адресом; 1110 - I2C, SLAVE с7-разрядным адресом; 110х - зарезервирован; 1011 - режим I2C, MASTER с программным управлением; 1010 - зарезервирован; 1001 - зарезервирован, 1000 - режим I2C, MASTER; тактирование частотой Fosc / (4 (SSPADD + D); 0111 - режим I2C, SLAVE, используется 10-разрядный адрес; 0110 - режим I2C, SLAVE, используется 7-разрядный адрес; 0101 - режим SPI, SLAVE, вывод SS (Slave Select) не используется; 0100 - режим SPI, SLAVE, вывод SS (Slave Select) разрешен, 0011 - режим SPI, MASTER; синхронизация от TMR2; 0010 - режим SPI, MASTER, синхронизация от Fosc/64; 0001 - режим SPI, MASTER; синхронизация от Fosc/16; 0000 - режим SPI, MASTER; синхронизация от Fosc/4
0х0#С7 SSPSTAT Регистр состояния модуля MSSP
Бит Назначение
7 SMP 1 - стробирование принимаемых данных осуществляется в конце битового интервала; О-в середине интервала
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
ОхО#С7 SSPSTAT Бит Назначение
6 СКЕ: 1 - передача данных осуществляется по переднему фронту импульсов SCK
5 D/_A - используется в режиме 12С: 1 - последним был передан байт данных; 0 - байт адреса
4 Р - флаг обнаружения стопового бита
3 S - устанавливается при обнаружении стартового бита (в режиме 12С)
2 R/_W - бит типа операции в режиме 12С: 0 - запись; 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
0 BF - флаг «буфер полон»; устанавливается после заполнения буфера при приеме или передаче данных
0х0#С8 SSPADD Регистр сравнения адреса модуля MSSP
0х0#С9 SSPBUF Буферный регистр данных модуля MSSP
ОхОйСА T2C0N Регистр управления схемой TMR2
Бит Назначение
7 Не используется
6-3 T2UTPS3 - TOUTPSO - коэффициент деления постскалера модуля TMR2: 1111 -16; 1110-15; 1101 -14; 1100 -13; 1011-12; 1010-11; 1001-10; 1000 - 9; 0111-8; 0110-7; 0101-6; 0100-5; 0011-4; 0010-3; 0001 - 2; 0000 -1
2 TMR20N - бит разрешения использования таймера TMR2
1-0 T2CKPS1 - T2CKPS0 - коэффициент деления прескалера: 1х-16; 01 - 4; 00-1
ОхОйСВ PR2 Регистр сравнения периода сигналов схемы TMR2
ОхОйСС TMR2 Регистр TMR2
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
OxO#CD T1CON Регистр управления таймером TMR1
Бит Назначение
7 RD16 - бит разрешения представления данных регистра TMR1 в 16-разрядном формате
6 Не используется
5-4 T1CKPS1 - T1CKPSO - коэффициент деления прескалера- 11 - коэффициент задается равным 8; 10 - задается равным 4; 01 - задается равным 2; 00 - задается равным 1
3 _T10SCEN - бит разрешения использования генератора TMR1
2 _T1SYNC-6ht разрешения синхронизации внешних тактовых импульсов внутренними
1 TMR1CS - выбор источника синхронизирующих импульсов для схемы TMR1:1 - выбираются внешние синхронизирующие импульсы
О TMR10N - бит разрешения использования таймера TMR1
ОхО#СЕ TMR1L Младший байт регистра TMR1
ОхОЯСЕ TMR1H Старший байт регистра TMR1
ОхОЯОО RCON Регистр состояния по включению питания
Бит Назначение
7 IPEN - бит назначения уровней приоритета прерываниям
6 LWRT - бит разрешения табличной записи (TBLWT) во внутреннюю программную память
5 Не используется
4 _RI - флаг программного сброса микроконтроллера
3 _Т0 - устанавливается при включении питания и исполнении команд сброса сторожевого таймера (clrwdt) и перехода в дежурный режим (sleep); обнуляется при переполнении сторожевого таймера
2 _PD - устанавливается при включении питания и исполнении команды сброса сторожевого таймера (clrwdt); обнуляется при исполнении команды sleep
1 _POR - флаг сброса по включению питания .
0 _BOR - флаг сброса при обнаружении пониженного напряжения питания
0x0#D1 WDTCON Регистр сторожевого таймера
Бит Назначение
7-1 Не используются
0 SWDTEN - бит разрешения использования сторожевого таймера (при условии задания опции _WDT_0N в конфигурационном слове)
0x0#D2 LVDCON Регистр управления контролем низкого уровня напряжения питания
Бит * Назначение
7-6 Не используются
5 IRVST - бит разрешения прерывания при обнаружении низкого уровня напряжения
4 LVDEN - бит разрешения контроля за снижением уровня напряжения питания
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0x0#D2 LVDCON Бит Назначение
3-0 LVDL3*LVDLO - биты выбора контролируемых границ напряжения питания- 1111 - используется внешнее напряжение (LVDIN); 1110-от4,5 В (минимум) до4,77В (максимум); 1101 - от 4,2 В (минимум) до 4,45 В (максимум); 1100 - от 4,0 В (минимум) до 4,24 В (максимум); 1011 - от 3,8 В (минимум) до 4,03 В (максимум); 1010- от3,6 В (минимум) до 3,82 В (максимум); 1001 - от 3,5 В (минимум) до 3,71 В (максимум); 1000 - от 3,3 В (минимум) до 3,50 В (максимум); 0111 - от 3,0 В (минимум) до 3,18 В (максимум); 0110 - от 2,8 В (минимум) до 2,97 В (максимум); 0101 - от 2,7 В (минимум) до 2,86 В (максимум); 0100 - от 2,5 В (минимум) до 2,65 В (максимум); 0011 - от 2,4 В (минимум) до 2,54 В (максимум); 0010 - от 2,2 В (минимум) до 2,33 В (максимум); 0001 - от 2,0 В (минимум) до 2,12 В (максимум); 0000 - от 1,8 В (минимум) до 1,91 В (максимум)
0x0#D3 OSCCON Регистр выбора тактового генератора
Бит Назначение
7-1 Не используются
0 SCS - обнуляется для использования основного генератора, устанавливается для применения генератора импульсов таймера TMR1
0x0#D5 TOCON Регистр управления таймером TMRO
Бит Назначение
7 TMR00N - бит разрешения использования таймера TMRO
6 ТО8В11 - бит разрешения использования схемы TMRO в качестве 8-разрядного таймера; при обнулении таймер TMRO применяется в качестве 1б-разрядного таймера
5 TOCS: 1 - таймер TMRO тактируется от внешнего источника через вывод T0CKI; 0 - тактирование от частоты командных циклов
4 T0SE: 1 - инкрементирование TMRO осуществляется по переднему фронту синхронизирующих импульсов
3 PSA - обнуляется для использования прескалера
2-0 T0PS2 - T0PS0 - биты выбора коэффициента деления прескалера таймера TMRO: 111 - коэффициент задается равным 256; 110 - коэффициент задается равным 128; 101 - коэффициент задается равным 64; 100 - коэффициент задается равным 32; 011 - коэффициент задается равным 16; 010 - коэффициент задается равным 8; 001 - коэффициент задается равным 2
0x0#D6 TMROL Младший байт таймера TMRO
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0x0#D7 TMROH Старший байт таймера TMRO
0x0#D8 STATUS Регистр состояния процессора
Бит Назначение
7-5 Не используются
4 N - флаг знака (устанавливается, когда седьмой разряд результата равен 1)
3 0V - флаг переполнения
2 Z- флаг нуля
1 DC - флаг десятичного переноса (из младшего полубайта)
О С - флаг переноса
0x0#D9 FSR2L Младший байт индексного регистра FSR2
OxO#DA FSR2H Старший байт индексного регистра FSR2
OxO#DB PLUSW2 Регистр данных при индексной адресации, для которого адрес (индекс) определяется как сумма содержимого регистров FSR2 и WREG
OxO#DC PREIN2 Регистр данных, для которого содержимое регистра FSR2 инкрементируется перед осуществлением доступа
OxO#DD P0STDE2 Регистр данных, для которого содержимое регистра FSR2 декрементируется после осуществления доступа
OxO#DE P0STIN2 Регистр данных, для которого содержимое регистра FSR2 инкрементируется после осуществления доступа
OxOftDF INDF2 Регистр данных при индексной адресации через регистр FSR2
ОхОйЕО BSR Регистр выбора банка регистров
Бит Назначение
7-4 Не используются
3-0 BSR3-BSRO - биты выбора банка регистров
0х0йЕ1 FSR1I Младший байт индексного регистра FSR1
0х0йЕ2 FSR1H Старший байт индексного регистра FSR1
ОхОйЕЗ PLUSW1 Регистр данных при индексной адресации, для которого адрес (индекс) определяется как сумма содержимого регистров FSR1 и WREG
0х0йЕ4 PREINC1 Регистр данных, для которого содержимое регистра FSR1 инкрементируется перед осуществлением доступа
0x0#E5 POSTDEC1 Регистр данных, для которого содержимое регистра FSR1 декрементируется после осуществления доступа
ОхОйЕб POSTINC1 Регистр данных, для которого содержимое регистра FSR1 инкрементируется после осуществления доступа
0х0йЕ7 INDF1 Регистр данных при индексной адресации через регистр FSR1
0х0йЕ8 WREG Регистр-аккумулятор микроконтроллера
0х0йЕ9 FSROL Младший байт индексного регистра FSRO
ОхОйЕА FSROH Старший байт индексного регистра FSRO
ОхОйЕВ PLUSWO Регистр данных при индексной адресации, для которого адрес (индекс) определяется как сумма содержимого регистров FSRO и WREG
ОхОйЕС PREINCO Регистр данных, для которого содержимое регистра FSRO инкрементируется перед осуществлением доступа
ОхОйЕО POSTDECO Регистр данных, для которого содержимое регистра FSRO декрементируется после осуществления доступа
ОхОйЕЕ POSTINCO Регистр данных, для которого содержимое регистра FSRO инкрементируется после осуществления доступа
ОхОйЕЕ INDFO Регистр данных при индексной адресации через регистр FSRO
МИКРОКОНТРОЛЛЕРЫ PIC 18СХХ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (продолжение)
Адрес Регистр Функции/назначение битов
0x0#F0 INTC0N3 Регистр 3 управления прерываниями
Бит Назначение
7 INT2IP - задает высокий уровень приоритета для прерываний, инициируемых внешними устройствами (вывод INT2)
6 INT1IP - задает высокий уровень приоритета для прерываний, инициируемых внешними устройствами (вывод INT1)
5 Не используется
4 INT2IE - устанавливается для разрешения внешнего прерывания от входа INT2
3 INT1IE - устанавливается для разрешения внешнего прерывания от входа INT1
2 Не используется
1 INT2IF - запрос прерывания от входа INT2
0 INT1 IF - запрос прерывания от входа INT1
0x0#F1 INTC0N2 Регистр 2 управления прерываниями
Бит Назначение
7 _RBPU - обнуляется для разрешения «подтяжки» входов порта PORTB к напряжению питания
6 INTEDG0 - выбор фронта для прерывания от внешнего сигнала INTO (1 - по переднему фронту импульсов)
5 INTEDG1 - выбор фронта для прерывания от внешнего сигнала INT1 (1 - по переднему фронту импульсов)
4 INTEDG2 - выбор фронта для прерывания от внешнего сигнала INT2 (1 - по переднему фронту импульсов)
3 Не используется
2 TMR0IP - задает высокий приоритет для прерывания, инициируемого таймером TMRO
1 Не используется
0 RBIP - задается высокий приоритет для прерывания, инициируемого изменением сигнала порта PORTB
OxO#F2 INTCON Регистр управления прерываниями
Бит Назначение
' 7 GIE/GIEH - бит глобального разрешения/запрета всех прерываний (незамаскированных, когда приоритеты отменены, IPEN = 0)
6 PEIE/GELL - разрешает все запросы на прерывания с низким приоритетом
5 TMROIE - бит разрешения прерываний от таймера TMRO
4 INTOIE - бит разрешения внешних прерываний от входа INTO
3 RBIE - бит разрешения прерываний по изменению состояния входов порта PORTB
2 TMROIF - запрос на прерывание от таймера TMRO
1 INTOIF - запрос на прерывание от входа INTO
0 RBIF - запрос на прерывание при изменении состояния входов порта PORTB
УПРАВЛЯЮЩИЕ РЕГИСТРЫ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 6.31
Состав и функции регистров микроконтроллеров PIC 18Схх (окончание)
Адрес Регистр Функции/назначение битов
OxO#F3 PRODL Младший байт результата, полученного при выполнении операции умножения
OxO#F4 PRODH Старший байт результата, полученного при выполнении операции умножения
0x0#F5 TABLAT Буферный регистр записи и считывания таблицы
0x0#F6 TBLPTRL Младший байт указателя таблицы
0x0#F7 TBLPTRH Средний байт указателя таблицы
0x0#F8 TBLPTRU Старший байт указателя таблицы
0x0#F9 PCL Младший байт счетчика команд микроконтроллера PICmicro®
OxO#FA PCLATH Средний байт счетчика команд микроконтроллера (загружаемый)
OxO#FB PCKATHU Старший байт счетчика команд микроконтроллера (загружаемый)
OxO#FC STRPTR Указатель/индекс стека
Бит Назначение
7 STKFUL - флаг заполнения или переполнения стека
6 STKUNF - флаг «стек не заполнен»
5 Не используется
4-0 SP4 - SPO - биты указателя стека
OxO#FD TOSL Регистр для доступа к стеку счетчика команд (младший байт)
OxO#FE TOSL Регистр для доступа к стеку счетчика команд (средний байт)
OxO#FF TOSU Регистр для доступа к стеку счетчика команд (старший байт)
НАЛЬНЫЕ УЗЛЫ
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Основное отличие микроконтроллеров от микропроцессоров со-
стоит в том, что они помимо процессорного ядра содержат аппарат-
ные модули, которые обеспечивают взаимодействие с периферией.
«Периферийные» возможности современных микроконтроллеров,
в том числе и PIC-микроконтроллеров, весьма разнообразны. Это
и различные интерфейсы, обеспечивающие обмен данными между
центральными и подчиненными устройствами, и функции цифро-
вого и аналогового ввода и вывода, и расширенные функции тайме-
ров, позволяющие управлять процессами, и использование внешней
памяти для реализации сложных алгоритмов обработки данных. Рас-
ширение периферийных функций является главным направлением
в развитии микроконтроллерной техники.
РЕГИСТРЫ КОНФИГУРАЦИИ
Регистры конфигурации, в которых содержатся конфигурацион-
ные слова, предназначены для задания самых общих параметров
работы PIC-микроконтроллеров. Они позволяют указать:
♦ режимы работы генераторов;
♦ режим защиты памяти программ;
♦ параметры системы перезапуска микроконтроллера;
♦ запуск сторожевого таймера;
♦ режим отладки микроконтроллеров PIC 16F87x.
Биты слова конфигурации индивидуальны для каждого подсе-
мейства PIC-микроконтроллеров. Адреса регистров конфигура-
ции для различных подсемейств PIC-микроконтроллеров приве-
дены в табл. 7.1.
Таблица 7.1
Адреса регистров конфигурации различных подсемейств микроконтроллеров
Семейство микроконтроллеров Адреса регистра конфигурации
Младшее подсемейство OxOFFF
Среднее подсемейство 0x02007
Микроконтроллеры PIC 17Схх OxOFEOO - 0x0FE07 (младший байт) OxOFEOF - 0x0FE08 (старший байт)
Микроконтроллеры PIC 18Схх 0x0300000 - 0x0300007
В каждом файле идентификаторов, которые имеют расширение
.inc и предназначаются для микроконтроллеров в среде MPLAB, есть
ряд параметров, позволяющих выбирать различные опции конфигу-
рационного слова. Эти параметры обычно задаются директивой
ГЕНЕРАТОРЫ ТАКТОВЫХ ИМПУЛЬСОВ
CONFIG ассемблера. По поводу их применения имеется ряд рекомен-
даций, которые в целом совпадают с теми, что приведены в других
главах настоящего издания. Так, для микроконтроллеров PIC 18Схх
предусматривается использование нескольких директив _CONFIG#
(здесь символ # обозначает целое число в диапазоне от 0 до 7), при этом
каждой директиве соответствует свой набор битов, обеспечивающих
выбор различных функций.
Опции директивы _CONFIG объединяются с помощью функции
логическое И и образуют конфигурационное слово, которое зано-
сится программным образом в соответствующие регистры конфи-
гурации.
ГЕНЕРАТОРЫ ТАКТОВЫХ ИМПУЛЬСОВ
Для PIC-микроконтроллеров могут использоваться следующие типы
генераторов тактовых импульсов:
♦ встроенные генераторы;
♦ RC-генераторы;
♦ генераторы с кварцевыми резонаторами;
♦ генераторы с керамическими резонаторами;
♦ внешние генераторы.
Встроенный генератор применяется во многих разработанных
в последнее время PIC-микроконтроллерах. Такой генератор сде-
лан на основе конденсатора и программируемого резистора. Показан-
ный на рис. 7.1 регистр OSCCAL предназначен для загрузки калибро-
вочного значения, определяющего частоту генератора. Генератор
этого типа способен работать на частоте 4 МГц и обеспечивает ста-
бильность частоты тактовых импульсов не хуже 1,5%.
Второй тип генератора - генератор с внешней RC-цепочкой
(рис. 7.2). Его активным элементом является неинвертирующий бу-
фер, который выполнен на основе триггера Шмитта и служит для
открывания или запирания ключа на МОП транзисторе с N-каналом.
Величины емкости конденсатора и сопротивления резистора могут
определяться по спецификациям фирмы Microchip.
Схемы генераторов с кварцевыми^ керамическими резонаторамипргск-
тически не отличаются друг от друга. Подключение кварцевого или
керамического резонатора производится согласно схеме, показанной
На рис. 7.3. При этом для нормального функционирования резонатора
Предусматривается подключение двух дополнительных конденсато-
ров. Емкость этих конденсаторов оговаривается в спецификациях
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Тактовые синхроимпульсы
микроконтроллера
Рис. 7.1
Использование встроенного генератора для тактирования PIC-микроконтроллеров
Тактовые синхроимпульсы
микроконтроллера
Рис. 7.2
Использование RC-генератора для формирования тактовых импульсов
в Р1С-микроконтроллерах
фирмы Microchip, а диапазоны их значений приводятся в последу-
ющих разделах настоящего издания.
Для каждого микроконтроллера существует три диапазона рабо-
чих частот, каждому из которых соответствует определенный режим
работы кварцевого генератора. Частотные диапазоны кварцевых ге-
нераторов PIC-микроконтроллеров и обозначения режимов указаны
в табл. 7.2 и задаются с помощью регистра конфигурации.
Таблица 7.2
Частотные диапазоны кварцевых генераторов тактовых импульсов Р1С-микроконтроллеров
Тип Частоты _
LP 0-200 кГц
XT 200 кГц-4 МГц
HS 4-20 МГц (максимальное значение)
ГЕНЕРАТОРЫ ТАКТОВЫХ ИМПУЛЬСОВ
Тактовые синхроимпульсы
микроконтроллера
Рис. 7.3
Использование генератора с кварцевым резонатором для тактирования
Р1С-микроконтроллеров
В устройстве, включающем генератор с кварцевым или керами-
ческим резонатором, вывод 0CS2 может быть использован как выход
тактовой частоты для внешних устройств (рис. 7.4).
Буферизованные
синхроимпульсы
Тактовые синхроимпульсы
микроконтроллера
Рис. 7.4
Использование кварцевого генератора PIC-микроконтроллеров для формирования системных
тактовых импульсов
В таком случае лучше применять драйвер типа КМОП.
Последний вариант тактирования PIC-микроконтроллеров пред-
полагает использование внешнего генератора, сигнал которого по-
дается непосредственно на вывод 0801 (рис. 7.5).
Для микроконтроллеров PIC 18Схх существуют семь различных
вариантов тактирования, что позволяет разработчику приложений
Шбрать наиболее удобный. Наряду с описанными выше типовыми
Тактовые синхроимпульсы
микроконтроллера
Рис. 7.5
Использование внешнего генератора для тактирования Р1С-микроконтроллеров
вариантами тактирования допускается применение схемы четырех-
кратного умножения частоты с фазовой автоподстройкой частоты -
ФАПЧ. При использовании подобной схемы микроконтроллер вы-
полняет один командный цикл фактически за один период тактовых
импульсов. Имеется также возможность тактирования микрокон-
троллеров от тактовых импульсов таймера TMR1. Этот режим целесо-
образно применять в приложениях, предполагающих малое потреб-
ление.
Таким образом, варианты тактирования микроконтроллеров
PIC 18Схх таковы:
♦ RC-генератор;
♦ LP-генератор;
♦ ХТ-генератор;
♦ HS-генератор;
♦ 4хН8-генератор с ФАПЧ;
♦ внешний генератор;
♦ тактовый генератор таймера TMR1.
При использовании внешнего генератора частота командных
циклов на выводе 0SC2 в четыре раза меньше поступающей на вход.
Исключение составляет случай, когда вывод 0SC2 применяется в ка-
честве вывода RA6 (режим ECIO). Частота внешнего генератора мо-
жет быть от 0 до 40 МГц (максимально допустимая для микрокон-
троллеров PIC 18Схх).
При переходе в режим тактирования от генератора таймера TMR1
(путем установки бита SCS) управление практически мгновенно пе-
редается генератору TMR1, а собственный генератор отключается.
РЕЖИМ ОЖИДАНИЯ
Соответствующий переходный процесс занимает всего восемь пе-
риодов частоты генератора таймера TMR1.
При переходе от использования генератора таймера TMR1 к типо-
вому генератору устойчивый режим синхронизации восстанавлива-
ется за время, соответствующее 1024 периодам тактовых импуль-
сов. Схема тактирования микроконтроллеров PIC 18Схх показана
на рис. 7.6.
Рис. 7.6
Схема тактирования микроконтроллеров PIC 18Схх
РЕЖИМ ОЖИДАНИЯ
Режим ожидания (sleep-режим), которому соответствует команда
sleep, позволяет временно «отключать» микроконтроллеры по-
средством отключения генератора тактовых импульсов и перево-
да микроконтроллеров в режим ожидания перезапуска (опции _MCLR
или WDT). Потребление энергии микроконтроллером в этом режиме
минимально. Выход из sleep-режима происходит после получения
запроса на прерывание, который инициируется внешними устрой-
ствами или таймером, тактируемым внешними импульсами.
В этой ситуации большинство запросов на прерывания, иници-
ируемых внутренним таймером, не может быть сформировано, по-
скольку микроконтроллер не тактируется.
Переход в режим ожидания осуществляется по команде sleep,
^ыход из режима ожидания реализуется в ситуациях, указанных
в табл. 7.3.
Запросы на прерывание могут выводить PIC-микроконтроллеры из
Режима ожидания только в том случае, если указанные прерывания
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Таблица 7.3
Ситуации, в которых инициируется выход из режима ожидания
Событие Адрес продолжения
Аппаратный сброс Вектор старта по сбросу
Сброс по сторожевому таймеру Вектор старта по сбросу
Внешнее прерывание Следующая команда или вектор прерывания
Прерывание от таймера TMR1 Следующая команда или вектор прерывания
были предварительно разрешены, то есть установлены соответству-
ющие биты разрешения IE.
После команды sleep всегда будет исполняться следующая за ней
команда - даже в тех случаях, когда установлен бит GIE. Поэтому за
командой sleep рекомендуется располагать команду пор, что позво-
ляет исключить исполнение какой-либо некорректной команды пе-
ред обращением к программе обработки прерываний:
sleep
пор
Восстановление тактирования после завершения режима ожида-
ния происходит аналогично тому, как оно восстанавливается при
включении напряжения питания (Powe г и р), и происходит в течение
1024 циклов. Только после завершения этого временного интерва-
ла программа переходит к исполнению команды nop (Inst (PC + 1) на
приводящейся ниже временной диаграмме - см. рис. 7.7).
РЕГИСТР OPTION
Спецификация разрядов регистра OPTION в микроконтроллерах
младшего подсемейства указана в табл. 7.4.
Изменение содержимого регистра OPTION в микроконтроллерах
младшего подсемейства обеспечивается с помощью команды option,
которая осуществляет пересылку содержимого регистра w в регистр
OPTION_REG (это название используется в среде MPLAB для обозначе-
ния регистра OPTION).
В микроконтроллерах среднего подсемейства структура регис-
тра OPTION аналогична, однако в ней не применяются специфичные
биты микроконтроллеров младшего подсемейства (табл. 7.5).
В микроконтроллерах PIC 17Схх регистр OPTION обычно не задей-
ствован. Дело в том, что многие функции, связанные с ним, либо
просто не используются (например, управление прескалером или
«подтяжкой» напряжения входов), либо реализуются с помощью дру-
гих регистров. В микроконтроллерах PIC 18Схх предусматривается
РЕГИСТР OPTION
Временные диаграммы сигналов для режима ожидания
IQ1 | Q2| Q3 |Q4' Q11 Q2| Q3|Q4' Q1 | I I Q11 Q2| Q3 | Q41Q1 | Q2| Q3 |Q4'Q1 |Q2|Q3 |Q4' Q1 |Q2|Q3|Q4
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Таблица 7.4
Назначение разрядов регистра OPTION PIC-микроконтроллеров младшего подсемейства
Бит Обозначения/функции
7 _GPWU - в микроконтроллерах PIC 12С5хх или PIC 16С505 при обнулении разрешает переход в активное состояние при изменении состояния вывода, в других приборах бит 7 не используется
6 .GPPU - в микроконтроллерах PIC 12С5хх и PIC 16С505 разрешает «подтяжку» входов к напряжению питания (Pm Pull Ups)
5 TOCS - выбор источника тактовых импульсов для таймера TMRO: 1 - внешние импульсы с вывода TOCKI, 0 - частота командных циклов
4 TOSE - выбор фронта для инкрементирования счетчика таймера TMRO. 1 - изменение уровня сигнала с высокого на низкий на выводе TOCKI, 0 - изменение уровня сигнала с низкого на высокий на выводе TOCKI
3 PSA - бит назначения прескалера' 1 - прескалер для сторожевого таймера WDT; 0 - прескалер для таймера TMRO
2-0 PS2 - PSO - выбор коэффициента деления прескалера: ООО -1; 001 - 2; 010 - 4; 011 - 8, 100-16; 101-32; 110-64; 111-128
применение регистра опций, «совместимого» с регистром OPTION
микроконтроллеров среднего подсемейства. Следует отметить, од-
нако, что этот регистр имеет адрес, отличный от адреса регистра
опций микроконтроллеров среднего подсемейства, а запись в него
не может производиться посредством выполнения одной лишь ко-
манды option.
ПОРТЫ ВВОДА/ВЫВОДА И РЕГИСТРЫ TRIS
Типовая схема линии ввода/вывода данных Р1С-микроконтроллера
приведена на рис. 7.8.
Каждый порт микроконтроллера состоит из заданного числа од-
нотипных структурных компонентов, каждый их которых отвечает
за определенный разряд порта ввода/вывода.
Для выводов, соответствующих заданному порту ввода/вывода дан-
ных, используется обозначение R%#, где символ % соотнесен с буквой
порта (например, порт А, порт В и т.д.), а символ # - с номером раз-
ряда порта.
ПОРТЫ ВВОДА/ВЫВОДА И РЕГИСТРЫ TRIS
Таблица 7.5
Назначение разрядов регистра OPTION PIC-микроконтроллеров среднего подсемейства
Бит Назначение
_RBPU 0 - «подтяжка» входов порта PORTB разрешена; 1 - запрещена
' 6 INTEDG: 1 - запрос на прерывание формируется по переднему фронту импульса, поступающего на вывод RBO/INT; 0 - по заднему фронту
5 TOCS - выбор источника тактовых импульсов для таймера TMRO: 1 - внешние импульсы с вывода TOCKI; 0 - частота командных циклов
4 TOSE - выбор фронта для инкрементирования счетчика таймера TMRO' 1 - изменение уровня сигнала с высокого на низкий на выводе TOCKI; 0 - изменение уровня сигнала с низкого на высокий на выводе TOCKI
3 PSA - бит назначения прескалера: 1 - прескалер для сторожевого таймера WDT; 0 - прескалер для таймера TMRO
2-0 PS2 - PSO - выбор коэффициента деления прескалера Биты Коэффициент деления Коэффициент деления прескалера для TMRO прескалера для WDT 111 256 128 110 128 64 101 64 32 100 32 16 011 16 8 010 8 4 001 4 2 000 2 1
Регистры TRIS (TRI-state buffer enable) предназначены для управ-
ления направлением передачи данных через порты. При записи 1
в какой-либо разряд регистра соответствующий выходной буфер
отключен и данные могут поступать со входа в микроконтроллер
{режим ввода данных). При записи 0 в соответствующий бит регистра
TRIS выходной буфер активизируется {переходит в режим вывода дан-
ных) , а величина, записанная в разряд регистра данных, передается
На соответствующий вывод микроконтроллера.
Следует отметить, что команду tris не рекомендуется использо-
Вать при программировании PIC-микроконтроллеров среднего под-
семейства, поскольку она обеспечивает доступ лишь к портам PORTA,
PORTB и PORTC, тогда как порты PORTD и PORTE не могут управляться с ее
с Помощью.
Для обеспечения доступа к регистрам TRIS, имеющимся в PIC-
^Икроконтроллерах среднего подсемейства, следует установить
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Рис. 7.8
Схема линии ввода/вывода данных Р1С-микроконтроллера
бит RP0 регистра состояния (STATUS) и осуществлять прямую запись
в регистр или считывание из него с использованием последователь-
ности кодов, приведенной ниже:
bsf STATUS, RPO
movlw NewTRISA
movwf TRISA " 0x080
bcf STATUS, RPO
Разряд 4 порта PORTA (RA4) в PIC-микроконтроллерах среднего под-
семейства выполняется в виде выхода с открытым стоком (рис. 7.9).
Этот вывод не может самостоятельно обеспечить выдачу логичес-
кой 1 без подключения резисторов к напряжению питания.
Выполнение операции, связанной с «подтяжкой» входов порта
PORTB к напряжению питания (PORTB weak pull-up), разрешается с по-
мощью бита _RPBU регистра опций (OPTION). Подобное разрешение
дается при сбросе этого бита.
Величина внутреннего сопротивления переключателя, исполь-
зующегося для реализации режима «подтяжки», составляет при-
близительно 50 кОм. Наличие подобного переключателя упроща-
ет взаимодействие с клавиатурой и исключает необходимость
в использовании внешнего резистора. Структурная схема линии
ввода/вывода данных порта PORTB приведена на рис. 7.10.
Если для тактирования микроконтроллера выбран встроенный ге-
нератор, то с помощью параметра _IntRC_0SC директивы ассемблера
-CONFIG, записываемой в исходный файл, может быть разрешено исполь-
зование выводов генератора в качестве дополнительных линий вво-
да/вывода данных. При программировании PIC-микроконтроллеров
СТОРОЖЕВОЙ ТАЙМЕР
Рис. 7.9
Структурная схема разряда 4 порта PORTA
обязательно должна производиться запись соответствующего калиб-
ровочного значения для регистра калибровки генератора (OSCCAL).
Обычно это значение заносится в рабочий регистр как константа
в команде:
movlw OSCCAL-value
Эта команда размещается по адресу вектора перезапуска микро-
контроллера (в данном случае самый верхний адрес памяти), и пос-
ле того как программный счетчик естественным образом (в резуль-
тате переполнения) перейдет к нулевому адресу, константа будет
загружена в регистр OSCCAL с помощью команды
movwf OSCCAL
Соответствующий фрагмент программы выглядит следующим
образом:
_CONFIG_MCLRE_OFF & IntRC.OSC ; Изменение слова
; конфигурации.
огд О
movf OSCCAL
movlw OxOFF " (1 << TOCS)
option
: Теперь можно использовать все порты ввода/вывода,
; тактирование осуществляется с частотой 4 МГц.
; Старт приложения.
СТОРОЖЕВОЙ ТАЙМЕР
Сторожевой таймер (Watch Dog Timer - WDT) - специальный тай-
^ер, тактирующийся от отдельного встроенного RC-генератора.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Рис. 7.10
Структурная схема линии ввода/вывода данных порта PORTB,
использующегося в PIC-микроконтроллерах
При переполнении он осуществляет сброс микроконтроллера, та-
ким образом предотвращая «зависание» программы. При нормаль-
ной работе программа должна периодически сбрасывать стороже-
вой таймер с помощью команды cl rwdt, чтобы он не переполнялся.
Максимальный интервал при этом равен 18 мс. Структурная схема
сторожевого таймера (WDT) приведена на рис. 7.11.
Рис. 7.11
Структурная схема сторожевого таймера, использующегося в Р1С-микроконтроллерах
ТАЙМЕР TMRO
Таймер TMRO выполнен на основе 8-разрядного инкрементируемого
счетчика, который может предварительно устанавливаться (загру-
жаться) с помощью соответствующей последовательности кодов.
Тактирование этого счетчика осуществляется от внешнего источ-
ника или частоты командных циклов. В последнем случае использует-
ся делитель частоты на два, то есть приращение таймера происходит
ТАЙМЕР TMRO
через каждые два командных цикла. Структура таймера TMRO показа-
на на рис. 7.12. Биты TOCS и ТОСЕ применяются для выбора источника
синхронизирующих импульсов, а также типа фронта, по которому про-
изводится инкрементирование содержимого счетчика TMRO (по
переднему или заднему фронту). Эти биты относятся к регистру
OPTION.
Внешние
тактовые импульсы
Частота
командного цикла
Рис. 7.12
Структурная схема таймера TMRO
Таймер TMRO может тактироваться от внешних устройств через
вход TOCKI. Следует отметить, что этот вывод в микроконтроллерах
младшего подсемейства специально предназначен для тактирования
таймера TMRO, но в микроконтроллерах PIC 12С5хх и PIC 16С505, как
и в микроконтроллерах других подсемейств, он также используется
для ввода/вывода цифровой информации. На входе внешних такто-
вых импульсов TOCKI установлен триггер Шмитта, устраняющий воз-
действие шумов во входном сигнале на работу таймера.
Таймер TMRO PIC-микроконтроллеров среднего подсемейства
и подсемейств PIC 17Схх и PIC 18Схх применяется в качестве ин-
тервального таймера для формирования запросов на прерывания
при переполнении его счетчика. Диапазон значений таймера со-
ставляет от 0x000 до OxOFF.
Частота входного тактового сигнала, поступающего на таймер
TMRO, может подвергаться предварительному делению прескалером.
В адресном пространстве PIC-микроконтроллеров младшего
И среднего подсемейств таймеру TMRO соответствует адрес 0x001.
Операции записи и считывания данных из регистра TMRO разрешает-
ся выполнять посредством прямой адресации.
Соотношение продолжительности временных интервалов, кото-
рые способен формировать таймер TMRO, и стартовых значений, за-
гружаемых в него, определяется формулой:
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Стартовое значение TMRO = 256 - (временная задержка х частота
синхронизирующих импульсов / 8).
ПРЕСКАЛЕР
Прескалер - предварительный делитель тактовой частоты. Он вы-
полнен на основе двоичного счетчика и может применяться совмест-
но со сторожевым таймером или с таймером TMRO. Коэффициент де-
ления задается программно. Прескалер позволяет использовать
8-разрядный таймер TMRO для работы с достаточно продолжительны-
ми событиями, а также увеличить значение временной задержки сто-
рожевого таймера с 18 мс до 2,3 с (см. рис. 7.13).
Импульсы
Вывод ТОСК1
T0SE
Разрешение
сторожевого таймера
Рис. 7.13
Структурная схема прескалера Р1С-микроконтроллеров
Управление прескалером осуществляется с помощью четырех
битов (PSA, PS2 - PSO) регистра OPTION. Бит PSA предназначен для вы-
бора таймера, к которому подключается прескалер: 1 - сторожевой
таймер, 0 - таймер TMRO. Оба узла, естественно, могут работать и без
прескалера, то есть в условиях, когда коэффициент деления задает-
ся равным единице (табл. 7.6).
ТАЙМЕР TMR1
Таймер TMR1 выполнен на основе 16-разрядного регистра-счетчика
и имеет, как показано на рис. 7.14, четыре различных входа.
Доступ к содержимому регистра TMR1 обеспечивается посред-
ством записи и считывания данных из регистров TMR1LhTMR1H. При
ТАЙМЕР TMR1
Таблица 7.6
Величины коэффициентов деления прескалера, используемые для задания временных задержек
Рис. 7.14
Структурная схема таймера TMR1
записи в регистр TMR1 прескалер этого таймера сбрасывается. За-
прос на прерывание (TMR1 IF) формируется при переполнении счет-
чика, для разрешения прерывания должен быть установлен бит
TMR1IE.
Биты TMR1IF и TMR1IE обычно относятся к регистрам PIR и PIE со-
ответственно. Напомним, что для разрешения прерываний должны
быть установлены биты GIE и PIE регистра INTCON.
Управление таймером TMR1 осуществляется через регистр T1CON,
назначение битов которого приводится в табл. 7.7.
Тактирование таймера производится от специального генерато-
ра, предназначенного для работы с относительно медленными про-
граммными приложениями. Как правило, применяется часовой
кварцевый резонатор частотой 32,768 кГц, а также конденсаторы
емкостью 33 пФ. Для схемы TMR1 могут использоваться и кварцевые
резонаторы частотой 100 или 200 кГц, однако в этом случае емкость
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Таблица 77
Назначение битов регистра T1C0N
Бит Назначение ~
7-6 Не используются ”
5-4 T1CPS1 -T1CPS0 - выбор коэффициента деления прескалера для таймера TMR1: 11 - коэффициент деления задается равным 8; 10 - коэффициент деления задается равным 4; 01 - коэффициент деления задается равным 2; 00 - коэффициент деления задается равным 1
3 T10SLEN - бит разрешения использования встроенного генератора схемы TMR1
2 T1SYNCH - бит разрешения синхронизации внешних тактовых импульсов внутренней частотой командных циклов
1 TMR1CS - бит разрешения тактирования таймера внешними сигналами
0 TMR10N - бит разрешения использования таймера TMR1
конденсаторов должна быть порядка 15 пФ. Схема генератора TMR1
показана на рис. 7.15.
В микроконтроллерах PIC 18Схх генератор таймера TMR1 выпол-
няет также функцию источника тактовых импульсов микрокон-
£ Tiosco
== Cext
Кварцевый
резонатор
£ Tiosci
Рис. 7.15
Схема генератора таймера TMR1
троллера и обеспечивает возможность
работы с относительно медленными
и не требующими больших объемов вы-
числений программными приложени-
ями, которые не предполагают перевод
микроконтроллера в режим ожидания
для снижения потребления.
Прескалер таймера TMR1 позволяет
формировать продолжительные вре-
менные интервалы (задержки). Для их
программирования необходимо загру-
зить соответствующее значение в счет-
чик таймера и определить коэффициент деления прескалера. Для
расчета величины временной задержки удобна следующая формула:
Временная задержка = (65536-TMR11 nit) х коэффициент деления
прескалера / частота Т1,
где частота Т1 соответствует частоте генератора TMR1 или внешнего
генератора, управляющего работой схемы TMR1.
Значение, которое необходимо загрузить в счетчик, определяет-
ся по формуле:
TMR1 In it = 65536 - (временная задержках частота Т1 / коэффици-
ент деления).
ТАЙМЕР TMR2
ТАЙМЕР TMR2
Таймер TMR2 (рис. 7.16) применяется в качестве таймера повторя-
ющихся событий. Совместная работа схемы TMR2 и модуля ССР по-
зволяет формировать сигналы с широтно-импульсной модуляци-
ей. В обычных условиях эта схема может использоваться для задания
временной задержки, соответствующей по величине циклу 16-раз-
рядного счетчика.
Рис. 7.16
Структурная схема таймера TMR2
Содержимое регистра TMR2 постоянно сопоставляется с величиной,
записанной в регистре PR2. Когда содержимое регистра TMR2 совпадает
с содержимым регистра PR2, инициируется сброс регистра TMR2, а ин-
формация об этом передается модулю ССР в виде сообщения «переуста-
новка TMR2». Постскалер таймера TMR2 обеспечивает расширение вре-
менного диапазона событий и формирует запросы прерываний.
Таймер TMR2 управляется с помощью регистра T2C0N, назначение
битов которого приведено в табл. 7.8.
Таблица 7.8
Назначение битов регистра T2C0N
Бит Назначение
7 Не используется
6-3 T0UTPS3 - TOUTPSO - выбор коэффициента деления постскалера для таймера TMRO: 1111 - коэффициент деления задается равным 16; 1110 - коэффициент задается равным 15; 0000 - коэффициент задается равным 1
2 TMR20N - бит разрешения использования прескалера
1-0 T2CKPS1 - T2CKPS0 - выбор величины коэффициента деления прескалера для таймера TMR2: 1х - коэффициент задается равным 16; 01 - коэффициент задается равным 4; 00 - коэффициент задается равным 1
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Считывание или запись данных в регистр TMR2 разрешается про-
изводить в любой момент, при этом не следует забывать о возмож-
ности обнуления прескалера в процессе записи. Изменение содер-
жимого самого регистра ТМR2, как правило, не влечет за собой сброс
прескалера. Нет необходимости синхронизировать тактовую час-
тоту таймера с частотой командных циклов, поскольку он тактиру-
ется именно командными циклами и не предусматривает других ва-
риантов тактирования.
Регистр PR2 содержит значение модуля счета. Величина времен-
ной задержки, формируемой таймером, определяется по формуле:
Временная задержка = коэффициент делениях (PR 2+1) / (Fosc/4).
Если значение регистра PR2 равно нулю, временная задержка опре-
деляется по формуле:
Временная задержка = (коэффициент деления х 256) / (Fosc / 4).
Для организации прерываний используются биты TMR2IEhTMR2IF,
назначение которых аналогично назначению упоминавшихся выше
соответствующих битов для таймера TMR1. Указанные биты относят-
ся к регистрам PIR и PIE.
Таймер TMR2 удобен для работы с программными приложения-
ми, которые предусматривают регулярное изменение параметров
во времени, например используют обмен через последовательный
асинхронный интерфейс или обеспечивают формирование сигна-
лов с широтно-импульсной модуляцией.
МОДУЛЬ ССР
Таймеры TMR1 и TMR2 применяется в так называемом модуле сравне-
ния/захвата/широтно-импульсной модуляции (compare-capture-
PWM - ССР). Помимо таймеров в него входят дополнительные ло-
гические схемы и регистр управления. Конкретная конфигурация
аппаратных средств определяется потребностями приложения.
При наличии двух модулей ССР один из них обозначается как ССР1,
а другой как ССР2.
Аппаратные средства модуля ССР контролируются с помощью ре-
гистра CCP1CON (или CCP2C0N), назначение битов которого приводит-
ся в табл. 7.09.
Режим захвата задается соответствующим кодом в регистре управ-
ления. В этом режиме используются регистры CCPR (CCPR1H, CCPR1L,
CCPR2H и CCPR2L). Их назначение иллюстрируется структурной схемой
МОДУЛЬ ССР
Таблица 7.09
Назначение битов регистра CCPxCON
Бит Назначение
7-6 Не используются
5-4 DC1BX1 - DC1BX0 - младшие разряды 10-разрядной ШИМ
3-0 ССР1МЗ - ССР1М0 - выбор режима модуля ССР1: 11хх - режимы ШИМ, 1011 - режим триггера специальных событий; 1010 - режим генерации прерываний при сравнении; 1001 - задание начального высокого уровня сигнала ССР2 и принудительный переход к низкому уровню сигнала при равенстве; 1000 - задание начального низкого уровня сигнала ССР1 и принудительный переход к высокому уровню при равенстве; 0111 - захват по каждому шестнадцатому переднему фронту импульсов; 0110 - захват по каждому четвертому переднему фронту импульсов; 0101 - захват по каждому переднему фронту импульсов; 0100 - захват по каждому заднему фронту импульсов; ООхх - модуль захвата/сравнения/ШИМ отключен
модуля захвата, приведенной на рис. 7.17. Цель режима захвата -
зафиксировать значение таймера (в данном случае таймера TMR1)
в момент появления определенного условия. Таким условием может
быть фронт внешнего сигнала.
Запросна прерывание от ССР
Вывод ССР1
ССР1МЗ-ССР1М0
Рис. 7.17
Модуль захвата
Тактирование таймера осуществляется от внутренних сигналов
микроконтроллера. Схема регистрации фронта, показанная на
рис. 7.17, включает в себя прескалер и мультиплексор (4 в 1), который
обеспечивает выбор переднего или заднего фронта импульсов, по-
ступающих от прескалера. Схема регистрации фронта формирует
сигнал, по которому содержимое таймера записывается в регистр
CCPR1 (CCPR1Н, CCPR1L), при этом генерируется запрос на прерывание.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
В режиме захвата таймер TMR1 выполняет функции счетчика такто-
вых импульсов. При «захвате» его содержимое переносится в регистр
CCPR1.
В режиме сравнения модуль формирует сигнал на выходе ССРх (мож-
но сказать, изменяет состояние сигнала) в том случае, когда содер-
жимое регистра TMR1 становится равным величине, записанной
в регистрах CCPRxL и CCPRxH, как это показано на рис. 7.18. Данный
режим используется обычно для того, чтобы переключать или изме-
нять состояние внешних устройств после заданного временного ин-
тервала (формирования соответствующей временной задержки).
Рис. 7.18
Модуль ССР в режиме сравнения
Режим ШИМ (PWM), также реализуемый с помощью модуля ССР,
обеспечивает генерацию сигналов с широтно-импульсной модуля-
цией (рис. 7.19).
Вывод ССРх
Рис. 7.19
Модуль ССР в режиме ШИМ
МОДУЛЬ ССР
Таймер TMR2 в этом режиме работает как программируемый дели-
тель частоты, формирующий период ШИМ сигнала. Его значение
непрерывно сравнивается с содержимым регистра периода Р R2, и при
совпадении значений компаратор формирует сигнал сброса тайме-
ра; таким образом цикл повторяется. Параллельно функционирует
контур сравнения, включающий в себя таймер, второй компаратор
и регистр CCPRxH. Выходы обоих компараторов управляют тригге-
ром, выход которого подключен к выводу ССРх.
В начале периода триггер устанавливается в единичное состоя-
ние по сигналу сброса таймера, формируемому первым компарато-
ром и подаваемому на его вход установки (S). По сигналу компарато-
ра контура сравнения, поступающему на вход сброса (R), триггер
сбрасывается. Таким образом, на выходе триггера формируется сиг-
нал с периодом, который определяется содержимым регистра пе-
риода PR2, и длительностью единичного состояния, зависящей от
содержимого регистра CCPRxH.
Таймер TMR2 работает как 10-разрядный счетчик, образованный
собственно 8-разрядным счетчиком таймера и двумя разрядами пре-
скалера, которые играют роль младших разрядов.
При задании периода учитываются только старшие 8 разрядов,
а в контуре сравнения - все 10 разрядов, которые сравниваются
с 10-разрядной величиной, образованной конкатенацией («склеи-
ванием») содержимого регистра CCPRxH и двумя битами регистра
CCPxCON (DCxB1 и DCxBO).
Пример управления модулем ССР в режиме ШИМ приведен в сле-
дующем листинге, где программируется получение ШИМ сигнала
с периодом 50 мс и длительностью фазы высокого уровня сигнала
(Duty Cicle), составляющей 65% от периода:
movlw 199
movwf PR2 ; Подготовка таймера TMR2 к работе.
movlw (1 << TMR2 on) + 1
movwf T2C0N ; Установка периода 50 мс.
movlw 130 ; Назначение коэффициента
; заполнения ШИМ равным 65%.
movwf CCPRxH
movlw (1 << DC xB1) + OxOOF
movwf CCPxCON ; Старт модуля ШИМ.
В табл. 7.10 приводятся сведения о долях цикла команд, соответ-
ствующих состояниям битов DCxBX.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Таблица 7.10
Назначение битов DCxBX в модуле ССР
Соотношение Биты DCxB1 - DCxBO
0,00 00
0,25 01
0,50 10
0,75 11
МОДУЛЬ УНИВЕРСАЛЬНОГО СИНХРОННО-АСИНХРОННОГО
ПРИЕМОПЕРЕДАТЧИКА
В состав модуля универсального синхронно-асинхронного приемо-
передатчика (Universal Synchronous/Asynchronous Receiver Trans-
mitter - USART) входят три основных компонента: генератор такто-
вых импульсов, блок передачи (передатчик) данных и блок приема
(приемник) данных.
Тактовые импульсы необходимы для выполнения сдвига данных
при параллельно-последовательном преобразовании во время при-
ема и передачи данных. Структурная схема генератора тактовых им-
пульсов показана на рис. 7.20.
Рис. 7.20
Структурная схема генератора тактовых импульсов USART
В схеме генератора тактовых импульсов используется регистр
SPBREG, куда записывается величина, сравниваемая с содержимым
счетчика. Когда содержимое счетчика и регистра совпадает, счет-
чик переустанавливается. Работа счетчика разрешается битом SREN.
Для управления также применяется бит SYNC («выбор режима пере-
дачи данных: синхронный или асинхронный») и бит BRGH, предна-
значенный для выбора диапазона скорости передачи данных.
МОДУЛЬ ПРИЕМОПЕРЕДАТЧИКА
Для режима асинхронной передачи данных скорость передачи
определяется по формуле:
Скорость передачи данных = Fosc / (16 (4 (1 - BRGH)) х (SPBRG + 1)).
Рассчитанное таким образом значение нужно загрузить в регистр
SPBRG, чтобы получить необходимую скорость передачи данных:
SPREG = Fosc /(скорость передачи данных х 16 (4 (1 - BRGH)) - 1.
Блок передачи универсального синхронно-асинхронного при-
емопередатчика может пересылать восемь или девять битов в син-
хронном или асинхронном режиме. Процесс передачи данных ини-
циируется путем загрузки байта в буферный регистр передачи
TXREG. Структурная схема передатчика приведена на рис. 7.21.
Рис. 7.21
Структурная схема блока передачи универсального синхронно-асинхронного
приемопередатчика
Из буферного регистра данные перегружаются в сдвиговый ре-
гистр передачи для выдачи в линию. При этом в буферный регистр
сразу же может быть загружен новый байт для последующей переда-
чи. Подобная буферизация данных позволяет передавать их в линию
непрерывным потоком и не требует периодического программного
обращения к регистру TXREG, чтобы определить удобный момент
времени для пересылки последующего байта. Запросы на прерыва-
ние, связанные с режимом передачи универсального синхронно-
асинхронного приемопередатчика, формируются в тех случаях,
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
когда буферный регистр передаваемых данных (TXREG) оказывается
пустым.
Приемник является наиболее сложным их трех входящих в состав
USART компонентов. Это объясняется функциональной сложнос-
тью процессов обработки/преобразования данных при приеме,
а также необходимостью управления приемным буфером. При при-
еме оценивается корректность принимаемых данных. Структурная
схема блока приема данных приведена на рис. 7.22.
Рис. 7.22
Структурная схема блока приема универсального синхронно-асинхронного приемопередатчика
В режиме синхронной передачи сдвиг данных производится с по-
мощью синхронизирующих импульсов USART или синхронизирую-
щих импульсов внешнего устройства.
В приемнике (RX), как и в передатчике (ТХ), имеется буферный ре-
гистр приема (точнее, буфер приема). Для нормального функцио-
нирования приемника программа должна своевременно считывать
принятые данные, освобождая буфер для новых данных. Но если
к моменту приема очередного байта данные не будут считаны, воз-
никнет ошибка буферизации («затирания») данных. Другая возможная
проблема связана с возникновением ошибки кадрирования данных,
которая обнаруживается в том случае, если состояние стопового
бита в поступающем информационном NRZ-пакете (так называемое
кодирование без возврата к нулю) не равно 1. Указанные ошибки
МОДУЛЬ ПРИЕМОПЕРЕДАТЧИКА
отмечаются в регистре RCSTA (регистр состояния приемника), а со-
ответствующие биты этого регистра должны обнуляться программ-
ным путем.
Чтобы обеспечить правильный прием данных, распознавание ин-
формации во входном потоке осуществляется с помощью частоты,
значительно превышающей скорость приема/передачи. Частота
синхроимпульсов приемника, которая в 16 раз превышает скорость
передачи данных, подается на схему буфера линии и управления
и используется в качестве синхросигнала для соответствующих ап-
паратных средств. В процессе приема линия приема данных троек-
ратно опрашивается, после чего по мажоритарному принципу опре-
деляется значение бита принятых данных. Подобная процедура
повторяется для всех восьми или девяти битов данных, причем по-
следняя проверка производится для бита останова. Работа схемы
начинается, когда уровень сигнала в линии данных остается низким
в течение трех периодов синхроимпульсов приемника, при этом
производится считывание данных из «средней» части очередного
бита, как показано на рис. 7.23.
1. Обнаружение стартового бита с защитой от импульсных помех
2. Считывание бита
3. Считывание бита четности
Рис. 7.23
Диаграмма, иллюстрирующая процедуру считывания информационного пакета в режиме
асинхронной передачи данных
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
В некоторых PIC-микроконтроллерах приемник USART может
использоваться для приема сразу двух асинхронно передаваемых
байтов в формате «данные:адрес», где адрес предназначен для спе-
циальной идентификации устройства, связанного с шиной данных.
В этом случае при установке бита ADDEN регистра RCSTA инициирова-
ние прерываний от приемника изначально не разрешается, и такая
ситуация сохраняется вплоть до момента завершения приема обоих
байтов. Для их различения предусматривается, что девятый бит
байта адреса будет равен 1, тогда как девятый бит байта данных, на-
оборот, должен быть установлен в 0. При приеме подобного запро-
са на прерывание программа обработки прерываний сначала прове-
ряет адрес запрошенного устройства и только потом обрабатывает
байт данных.
Для управления универсальным синхронно-асинхронным при-
емопередатчиком применяются регистры TXSTA, SPBRG и RCSTA.
Регистр TXSTA (регистр состояния передатчика), который ис-
пользуется в PIC-микроконтроллерах среднего подсемейства, име-
ет адрес 0x098, а назначение битов этого регистра приводится
в табл. 7.11.
Таблица 7.11
Назначение разрядов регистра TXSTA USART
Бит Назначение
7 CSRC - бит выбора источника тактовых импульсов в синхронном режиме: 1 - внутренний источник; 0 - внешний генератор
6 ТХ9 - устанавливается для разрешения передачи данных в 9-разрядном формате
5 TXEN - бит разрешения передачи данных
4 SYNC - бит выбора режима работы USART: 1 - синхронный режим; 0 - асинхронный
3 Не используется
2 BRGH - бит выбора скорости передачи' 1 - высокая, 0 - низкая
1 TRMT - флаг «передающий регистр пуст» (передача слова завершена)
0 TX9D - девятый бит передаваемых данных
Регистры SPBRG и RCSTA имеют соответственно адреса 0x099
и 0x018. Назначение битов последнего указано в табл. 7.12.
В PIC-микроконтроллерах среднего подсемейства буферному ре-
гистру передачи TXREG обычно ставится в соответствие адрес 0x019,
МОДУЛЬ ПРИЕМОПЕРЕДАТЧИКА
Таблица 7.12
Назначение разрядов регистра RCSTA USART
Бит Назначение
" 7 SREN - включение USART
6 RX9 - бит разрешения приема данных в девятиразрядном формате
" 5 SREN - бит разрешения режима однократного приема в синхронном режиме. Обнуляется, когда данные приняты
4 CREN - бит разрешения режима непрерывного приема
3 ADDEN - разрешение обнаружения адреса в асинхронном режиме
2 FERR - бит признака ошибки формата
1 OERR - флаг переполнения буфера
0 RX9D - девятый бит принимаемых данных
а буферному регистру приема RCREG - адрес 0x01 А. Биты запросов пре-
рываний по приему и передаче (TXIF и RCIF) и разрешений прерыва-
ний (TXIE, RCIE) могут размещаться в различных регистрах. Точное
местоположение каждого из этих битов должно определяться соглас-
но спецификациям на конкретный микроконтроллер.
Задает режим асинхронной передачи данных следующий фраг-
мент программы:
bsf STATUS, RPO
bef TXSTA, SYNCH ; Режим асинхронного обмена.
bef TXSTA, BRGH ; Режим низкоскоростного обмена
movlw DataRate ; Значение скорости.
movwf SPBRG
bef STATUS, RPO ; Разрешение модуля USART.
bsf RCSTA " 0x080, SPEN
bsf STATUS, RPO
bef TXSTA, TX9 ; Восьмибитный формат.
bsf TXSTA, TXEN ; Разрешение передачи данных.
bef STATUS, RPO
Для передачи байта из регистра w необходима такая последова-
тельность кодов:
; Программа передачи байта в асинхронном режиме.
btfss TXSTA, TRMT ; Ожидание освобождения
goto $ - 1 ; буферного регистра передачи.
mvwf TXREG ; Загрузка буферного регистра.
; Разрешение передачи данных.
Режим асинхронного приема определяется с помощью следую-
щих команд:
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
bsf STATUS, RPO
bcf TXSTA, SYNCH Задание асинхронного обмена.
bcf TXSTA, BRGH Режим низкой скорости.
movlw DataRate Задание значения скорости обмена
movwf SPBRG
bsf RCSTA " 0x080, SPEN;
movwf SPBRG
bsf RCSTA~0x080, SPEN ; Разрешение использования USART.
bsf TCSTA^OxOeO, RX9 ; Восьмибитный формат.
При приеме данных необходимо воспользоваться другой после-
довательностью кодов:
btfss PIR1, RXIF
goto $ - 1
movf RCREG, w
bcf RXIF
Ожидание окончания приема
символа.
Считывание байта в рабочий регистр.
Установка бита запроса прерывания
после приема.
МОДУЛЬ SSP
С помощью модуля синхронного последовательного порта (SSP)
выполняется обмен данными по последовательным интерфейсам,
имеющим выделенную линию передачи тактовых синхросигналов.
Интерфейс SPI
Интерфейс SPI разработан на основе протокола синхронной после-
довательной передачи данных, который предусматривает передачу
данных в 8-разрядном формате и использование трех линий для вза-
имодействия с внешними устройствами. Вывод данных может син-
хронизироваться по переднему или заднему фронту тактовых импуль-
сов, при этом первым выводится старший бит. Синхронизирующие
импульсы либо формируются самим микроконтроллером (режим
MASTER), либо внешним устройством (режим SLAVE). Процедура переда-
чи данных по интерфейсу SPI проиллюстрирована на рис. 7.24.
Синхронизирующие импульсы могут быть «положительными»,
как это показано на рис. 7.24 (0 - пассивное состояние, 1 - актив-
ное), или «отрицательными» (1 - пассивное состояние, 0 - актив-
ное). Запоминание данных при приеме обычно выполняется в мо-
мент перехода к пассивному состоянию.
Модуль BSSP (базовый модуль SSP) обеспечивает «проталкивание»
данных при переходе к пассивному состоянию.
МОДУЛЬ SSP
Тактовые
синхроимпульсы
Данные
/Бит 7 Убит 6 Убит 5^Бит Д^Бит зУЁйтТУ Бит 1 ^Бит о\
Линия
свободна
Линия
свободна
Рис. 7.24
Временные диаграммы передачи данных по интерфейсу SPI
Оригинальный модуль SSP способен изменять назначение фрон-
тов для ввода и вывода. Управление модулем осуществляется через
регистр SSPCON. Назначение его разрядов дано в табл. 7.13.
Таблица 7.13
Назначение битов регистра SSPCON модулей SSP/BSSP
Бит Назначение
7 WCOL - флаг коллизий при записи (1 - запись новых данных в буферный регистр была произведена во время передачи)
6 SSPOV - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения SSP режима работы портов микроконтроллера
4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт); в режиме 12С установка этого бита разрешает тактирование
3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP: 1ххх - режимы 12С и резервные; 011х - режимы I2C, SLAVE; 0101 - режим SPI, SLAVE, вывод SS (Slave Select) не используется; 0100 - режим SPI, SLAVE, вывод SS (Slave Select) разрешен; 0011 - режим SPI, MASTER, синхронизация otTMR2; 0010 - режим SPI, MASTER, синхронизация от Fosc/64; 0001 - режим SPI, MASTER, синхронизация от Fosc/16; 0000 - режим SPI, MASTER, синхронизация от Fosc/4
Структурная схема модуля SSP показана на рис. 7.25.
В режиме MASTER при записи байта в регистр SSPBUF инициируется
процесс передачи данных в 8-разрядном формате, при этом снача-
ла передаются старшие разряды. Состояние обмена может контро-
лироваться по состоянию бита BF регистра SSPSTAT, функции которо-
го перечисляются в табл. 7.14.
Режим SPI применяется для синхронной последовательной одно-
байтовой передачи на приемники с последовательными интерфей-
сами. На рис. 7.26 показана схема, которая реализует передачу бай-
та данных на буферный регистр 74LS374, работающий в режиме
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Рис. 7.25
Структурная схема модуля SSP в режиме SPI
Таблица 7.14
Назначение битов регистра SSPSTAT модуля SSP/BSSP
Бит Назначение
7 SMP: 1 - стробирование данных осуществляется в конце битового интервала; О-в середине интервала
6 СКЕ 1 - передача данных осуществляется по переднему фронту импульсов SCK
5 D/_A - используется в режиме 12С: 1 - последним был передан байт данных; 0 - байт адреса
4 Р - флаг обнаружения стопового бита
3 S - флаг обнаружения стартового бита (в режиме 12С)
2 R/_W - бит типа операции в режиме 12С: 0 - запись; 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
0 BF - флаг «буфер полон»; устанавливается при заполнении буфера во время приема или передачи данных
сдвигового регистра с последовательным вводом и параллельным
выводом данных.
На рис. 7.27 проиллюстрировано использование буферного регис-
тра 74LS374 совместно с шинным формирователем 74LS244, в каче-
стве последовательно-параллельного преобразователя для приема
данных.
Соответствующий фрагмент программы приема данных выгля-
дит следующим образом:
bsf lOPin ; Разрешение приема данных
; в буферный регистр (‘374).
МОДУЛЬ SSP
Рис. 7.26
Использование модуля 88Р интерфейса 8PI для вывода данных
Рис. 7.27
Использование 88Р интерфейса SPI для ввода данных
bcf SCK
bsf STATUS, RPO
bcf lOpin
bcf SCK
bcf STATUS, RPO
bsf SCK ; Прием данных.
bcf SCK
bcf lOpin ; Запрещение выхода ‘244, ; разрешение ‘374.
movlw (1 << SMP) + (1 << СКЕ)
movwf SSPSTAT ; Задание последовательного ввода
movlw (1 << SSPEN) + (1 << СКР) + 0x000
movwf SSPCON
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
movf TXData, f Загрузка байта.
movwf btfss SSPBUF SSPTAT, BF Инициирование передачи.
goto $ - 1 Ожидание окончания приема.
bcf SSPCON, SSPEN Данные для дальнейшей обработки будут располагаться в SSPBUF. Выключение модуля SSP.
В режиме MASTER модуля SSP скорость передачи данных может либо
задаваться кратной частоте командных циклов, либо формировать-
ся таймером TMR2. В этом случае реальные временные параметры ре-
жима синхронизации будут определяться возможностями аппарат-
ных средств Р1С-микроконтроллера.
В режиме SLAVE используются внешние синхроимпульсы и появ-
ляется возможность задействовать дополнительный вывод SS для
управления модулем (опция _SS). При изменении уровня сигнала на
упомянутом выводе с низкого на высокий отключается выход модуля
SSP (состояние бита SDO регистра TRIS изменяется и указывает на
переход в режим ввода данных), а сам модуль SSP сбрасывается.
Интерфейс 12С
Во всех новых PIC-микроконтроллерах применяются усовершен-
ствованные модули SSP. В данном подразделе описываются возмож-
ности работы модуля в режиме интерфейса 12С.
Для управления модулем SSP в режиме 12С используются регистры
управления SSPCON1 и SSPC0N2, регистр состояния SSPSTAT, буферный
регистр приема/передачи SSPBUF и регистр адреса SSPADD. Работа
этих регистров аналогична и в модуле BSSP, а в модуле MSSP имеет не-
которые особенности. Функции регистров управления модуля MSSP
подробно описаны в табл. 7.15 и 7.16.
Состояние обмена может контролироваться с помощью бита BF
регистра SSPSTAT. Назначение разрядов этого регистра приведено
в табл. 7.17.
Для передачи данных в интерфейсе 12С используются две линии:
SDA (данные) и SCL (тактовые синхроимпульсы), которые через до-
полнительные резисторы должны быть подключены к напряже-
нию питания (рис. 7.28). При передаче данных с частотой 400 кГц
рекомендуется использовать резисторы сопротивлением 1 кОм,
а для частоты 100 кГц величина сопротивления может быть увели-
чена до 10 кОм.
Следует отметить, что во всех режимах работы модуля интерфейса
12С для выводов SDA и SCL биты регистра TRIS должны задавать режим
МОДУЛЬ SSP
Таблица 7.15
Назначение битов регистра SSPCON модуля MSSP
Бит Назначение
7 WOOL - флаг коллизий при записи (1 - запись новых данных в буферный регистр была произведена во время передачи)
' 6 SSPOV - флаг переполнения приемного буфера модуля SSP
5 SSPEN - бит разрешения SSP режима работы портов микроконтроллера
" 4 СКР - выбор фронта для передачи в режиме SPI (0 - передний фронт); в режиме 12С установка этого бита разрешает тактирование
"3-0 SSPM3 - SSPMO - выбор режима работы модуля SSP
Биты Режим
1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 Режим 12С (используется 10-разрядный адрес); инициирование прерываний по стартовому и стоповому битам Режим 12С (используется 7-разрядный адрес); инициирование прерываний по стартовому и стоповому битам Зарезервирован Зарезервирован Режим 12С (управляемые устройства в режиме ожидания) Зарезервирован Зарезервирован Режим 12С (частота синхронизирующих импульсов определяется регистром SSPADD) Режим 12С (используется 10-разрядный адрес) Режим 12С (используется 7-разрядный адрес) Режим SPI, SLAVE, вывод SS (Slave Select) не используется Режим SPI, SLAVE, вывод SS (Slave Select) разрешен Режим SPI, MASTER, синхронизация otTMR2 Режим SPI, MASTER, синхронизация от Fosc/64 Режим SPI, MASTER, синхронизация от Fosc/16 Режим SPI, MASTER, синхронизация от Fosc/4
Таблица 7.16
Назначение битов регистра SSPC0N2 модуля MSSP
Бит Назначение
7 GCEN - устанавливается для разрешения прерываний при приеме адреса общего вызова (0x0000)
б ACKSTAT - устанавливается при получении подтверждения приема от slave-устройства шины 12С
5 ACKDT - устанавливается для посылки подтверждения при приеме байта
_4 ACKEN - инициирует последовательность подтверждения шины 12С
3 RCEN - устанавливается для разрешения режима приема модуля 12С
2 PEN - обнуляется для инициирования стоп-условия шины 12С
RSEN - устанавливается для инициирования повторных старт-условий шины 12С
SEN - устанавливается для инициирования старт-условий шины 12С
вХода. В отличие от большинства других периферийных модулей
Модуль MSSP не обеспечивает автоматического управления битами
Регистра TRIS. Таким образом, если не была выполнена предвари-
тельная установка битов регистра TRIS, модуль интерфейса 12С не
сМожет нормально функционировать.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Таблица 7.17
Назначение битов регистра SSPSTAT модуля MSSP
Бит Назначение
7 SMP. ” 1 - стробирование данных осуществляется в конце битового интервала; 0 - стробирование данных осуществляется в середине битового интервала Отсутствует в BSSP
6 СКЕ- 1 - передача данных (ТХ) при переходе от активного состояния к пассивному; 0 - наоборот Отсутствует в BSSP
5 D/_A - используется в режиме 12С‘ 1 - последним был передан байт данных; 0 - байт адреса
4 Р - флаг обнаружения стопового бита (в режиме 12С)
3 S - флаг обнаружения стартового бита (в режиме 12С)
2 R/_W - бит типа операции в режиме 12С 0 - запись, 1 - чтение
1 UA - устанавливается в том случае, когда необходимо модифицировать адрес (содержимое регистра SSPADD, режим 12С)
0 BF - флаг «буфер полон»; устанавливается при заполнении буфера во время приема или передачи данных
PIC-микроконтроллер
Рис. 7.28
Пример подключения микроконтроллера к шине 12С
В режиме MASTER микроконтроллер сам формирует тактовые син-
хроимпульсы на линии SCL. Частота (скорость) передачи определя-
ется в соответствии с формулой:
Скорость передачи данных = Fosc /(4 (SSPADD + 1)).
Эта формула может быть преобразована:
SSPADD = (Fosc /(4 х скорость передачи данных схемы 12С)) - 1.
МОДУЛЬ SSP
Для передачи данных от микроконтроллера по интерфейсу 12С
необходимо выполнить следующие шаги:
1. Линии SDA/SCL нужно перевести в режим ввода данных (то есть
установить соответствующие биты регистра TRIS).
2. Должен быть задан режим MASTER, для чего следует установить
бит SSPEN регистра SSPCON и записать код ОЬОЮОО в разряды
SSPM3 - SSPMO регистра SSPCON.
3. Требуется инициировать стартовые условия путем установки
бита SEN регистра SSPCON. В дальнейшем должен обеспечивать-
ся периодический опрос этого бита вплоть до момента его
сброса.
4. В регистр SSPBUF необходимо загрузить адрес того устройства,
к которому будет обращаться микроконтроллер. Последний
бит первого передаваемого байта (которому соответствует слу-
жебный адрес) соотносится с командой «чтение/запись». Это-
му биту сопоставлен бит R/_W регистра SSPSTAT. Он индицирует,
какая операция выполняется в данный момент.
5. Для контроля приема адреса нужно проверять сигнал подтверж-
дения АСК, что практически осуществляется чтением бита ACKDT
регистра SSPC0N2.
6. В регистр SSPBUF необходимо загрузить текущий байт данных
для передачи или вторичный адрес устройства.
7. При передаче должен контролироваться бит подтверждения
приема данных (АСК), формируемый приемным устройством.
Для этого программа может считывать бит ACKDT регистра
SSPC0N2.
8. Очередные стартовые условия могут инициироваться - в интер-
вале между первым и вторым последовательно передаваемыми
байтами данных - путем установки бита SEN регистра SSPC0N2.
После установки этот бит должен опрашиваться вплоть до мо-
мента его сброса.
9. Этапы с шестого по восьмой следует повторять до тех пор,
пока все необходимые данные не будут переданы или не будет
принято сообщение NACK («неподтверждение приема») от при-
емного устройства.
19. Для завершения передачи должно быть передано стоп-условие
(стоп-последовательность), которое инициируется путем уста-
новки бита PEN регистра SSPC0N2. Этот бит также нужно контро-
лировать вплоть до момента его сброса.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Указанная последовательность операций проиллюстрирована на
рис. 7.29; там же показана циклограмма формирования запроса на
прерывание (SSPIF). В приведенной выше последовательности отсут-
ствовали какие-либо упоминания прерываний, однако использова-
ние прерываний возможно, при этом исключается необходимость
программного опроса различных битов для контроля соответствую-
щих операций.
Чтобы обеспечить прием данных от устройства, следует выпол-
нить аналогичную последовательность операций. Отличается она
лишь тем, что после пересылки одного или нескольких байтов адре-
са модуль MSSP должен соответствующим образом конфигурировать-
ся для приема данных:
1. Линии SDA/SCL нужно перевести в режим входов (то есть уста-
новить соответствующие биты регистра TRIS).
2. Требуется разрешить режим 12С модуля SSP. Это обеспечивает-
ся путем установки бита SSPEN регистра SSPCON и записи кода
ОЬОЮОО в биты SSPM3 - SSPMO регистра SSPCON.
3. Следует инициировать стартовые условия путем установки
бита SEN регистра SSPC0N2. После этого бит должен периодичес-
ки опрашиваться вплоть до момента его сброса.
4. В регистр SSPBUF для передачи должен загружаться адрес того
устройства, к которому планируется обеспечить доступ. Бит
R/_W регистра SSPSTAT нужно установить в 1. Он задает опера-
цию чтения. В дальнейшем этот бит следует опрашивать вплоть
до момента его сброса (что указывает на завершение операции
чтения данных).
5. Бит АСК принимающего устройства должен контролироваться
посредством считывания бита ACKDT регистра SSPC0N2.
6. В регистр SSPBUF требуется загрузить вторичный адрес, соответ-
ствующий устройству, из которого планируется считать данные.
7. Если передается вторичный адрес, то следует проверять бит
АСК, подтверждающий прием адреса устройством. Осуществля-
ется это путем проверки бита ACKDT регистра SSPC0N2.
8. Очередные стартовые условия могут инициироваться в интер'
вале между передачей первого и второго байтов. Это обеспечи-
вается путем установки бита SEN регистра SSPC0N2. В дальней-
шем бит должен опрашиваться вплоть до момента его сброса-
9. Для подтверждения или неподтверждения приема данный
микроконтроллером нужно установить бит ACKEN.
Рис. 7.29
Временные диаграммы, иллюстрирующие процесс передачи данных
микроконтроллером по шине 12С
Запись 1 в SSPCON2 <0> (SEN = 1)
инициирует посылку старт-условия (START)
SDA з 1 < ' 1 1
:\L 1 1 1 I sci ; !
is;
г—SEN = О
Передача
служебного адреса
R/W = 0
ACK = 0
В регистр SSPBUF записан 7-разрядный
адрес и бит R/W, начинается передача данных
2
3
SSPIF | |
*— Обнуляется программой |
При приеме подтверждения
обнуляется бит ACKSTAT (SSPCON2<6>)
BhtACSTAT=1
(SSPCON2<6>)
Передача данных или второй
половины 10-разрядного адреса
। L На линии SCL низкий уровень, процессор
! обслуживает прерывание по флагу SSPIF
। Обнуляются
программой
Обнуляется программой
обслуживания прерывания
от модуля SSP
ACK
г р
(SSPSTAT<0>) i ; I I ;;
SEN 1 — Запись в регистр SSPBUF ! [ о?ущ^Гетс?прогрХным |] ' 1 . путем , 1 1 I 1 । ।
PEN . 1 III — После старт-условия бит SEN 1 । 1 1 обнуляется аппаратно 1 ’II 1 'll । I !_ГП_
МОДУЛЬ SSP
R/W________I
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
10. Бит RCEN регистра SSPC0N2 должен инициировать операцию
приема байта данных. Бит BF регистра SSPSTAT периодически
опрашивается вплоть до момента приема байта данных.
11. Операции, указанные в пунктах 9-10, должны повторяться до
тех пор, пока не будут приняты все необходимые данные.
12. Условия останова инициируются путем установки бита PEN ре-
гистра SSPC0N2. Этот бит в дальнейшем следует опрашивать до
момента его сброса.
На рис. 7.30 показаны временные диаграммы, иллюстрирующие
процедуру приема данных.
Модуль MSSP обеспечивает возможность передачи данных по ин-
терфейсу 12С в режиме MULTI-MASTER (то есть с несколькими master-
устройствами). В этом режиме при возникновении конфликтных си-
туаций в процессе передачи данных инициируется прекращение
передачи и формируется запрос на прерывание с указанием харак-
тера возникшей проблемы.
Конфликтная ситуация на шине 12С возникает в случае, если не-
сколько устройств пытаются передать данные. Например, одно
устройство выдает на линию данных (SDA) высокий уровень, а реально
на ней оказывается низкий уровень. Эта ситуация проиллюстриро-
вана на рис. 7.31. На возникновение конфликтной ситуации указы-
вает бит WOOL регистра SSPCON.
При возникновении конфликтных ситуаций программные сред-
ства, используемые схемой 12С, обеспечивают формирование паузы
перед проверкой наличия высокого уровня сигнала на линиях SDA
и SCL, а затем инициирование «повторных стартовых условий»-
При этом восстанавливается режим передачи данных под управле-
нием схемы 12С, причем передача возобновляется с самого начала
(даже в том случае, если к моменту возникновения конфликтной
ситуации уже была передана большая часть информации).
ВСТРОЕННЫЙ АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ
Все PIC-микроконтроллеры, для которых предпоследний символ
обозначения их типа равен 7, имеют встроенный аналого-цифр0'
вой преобразователь (АЦП), используемый для оцифровки уроВ'
ней напряжения в диапазоне от 0 до Vdd. При этом результат ИЗ'
мерения может представляться в 8- или 10-разрядном формат^
Выводы порта PORTA могут применяться как для ввода/вывода циф'
ровой информации, так и для ввода аналоговых сигналов. Реальна^
Рис. 7.30
Временные диаграммы, иллюстрирующие процесс приема данных
микроконтроллером
PEN =1
Прием данных
SDA
Аск/лХобУобУБдУ^^ аск /ртХобУрбУрдУрзУБгУр^ро
SCL
Запись в SSPCON <2> (SEN = 1);
инициирование старт-условия
Передача подтверждения
(АСК) от мастера
Установка бита
ACKEN инициирует
последовательность
завершения обмена
SDA=ACKDT=1
Подтверждение приема (АСК)
slave-устройством
Бит RCEN обнуляется Установка бита SSPCON2 <4> инициирует подтверждение
автоматически приема SDA=ACKDT (SSPCON2<5>)=0
Мастер конфигурируется
для приема путем
программирования
SSPCON2 <5> (RCEN = 1)
SEN = 0
Запись в регистр SSPBUF;
начало передачи
Передача служебного
_______адреса_____r/w = 1
программой
Обнуляется J
программой
t- Обнуляется Обнуляется
программой
Сдвиг данных по заднему фронту импульсов CLK
Установка флага SSPIF _
по окончании приема
Обнуляется Обнуляется
SDA = 0 SCL = 1 * пР°гРамм°й программой
процессор обрабатывает прерывание по флагу SSPIF
Установка флага SSPIF
__ Установка флага SSPIF по окончании приема
Гпо окончании подтверждения I г----------------
t------ приема t----1 t___ ___
RCEN = 1 инициирует
прием следующего байта
Бит RCEN обнуляется
автоматически
, , Прием данных I
SSPIF
BF (65PSTAT<0>)
SSPOV
ACKEN
Последний бит принят в регистр
SSPSR и его содержимое перегружается
в регистр SSPBUF
Установка бита SSPOV,
поскольку регистр SSPBUF
все еще заполнен
1. Мастер шины завершает обмен
2. Установка флага SSPIF по окончании подтверждения приема
t t
Установка бита Р
(SSPSTAT <4>)
и флага SSPIF
ВСТРОЕННЫЙ АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
Ожидаемый высокий уровень
сигнала на линии данных
SDA
Реальный низкий
SCL
уровень сигнала
BCLIF
Запрос на прерывание в связи
с конфликтом на шине
Рис. 7.31
Возникновение конфликтной ситуации при передаче данных схемой 12С модуля MSSP
величина погрешности преобразования, характер использования выво-
дов и скорость выполнения операций зависят от конкретного типа
микроконтроллера, а также от частоты, на которой он работает.
Эквивалентная схема аналогового входа АЦП представлена на
рис. 7.32.
77777
Сопротивление
открытого (ON) ключа
составляет: Rs -1 кОм
RIC = 1 К
Ключ
®Ток утечки
500 мкА
Запоминающий
конденсатор
Рис. 7.32
Эквивалентная схема входа аналого-цифрового преобразователя
Обозначение «Rs» в схеме источника сигнала (Vsource) соответ-
ствует его внутреннему сопротивлению. Чтобы обеспечить необхо-
димый временной интервал для зарядки запоминающих конденсато-
ров аналого-цифрового преобразователя, величина сопротивления
не должна превышать 10 кОм.
ВСТРОЕННЫЙ АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ
Продолжительность временного интервала, который требуется
для стабилизации аналогового напряжения на запоминающем кон-
денсаторе (Tack), определяется по формуле:
Tack = 5 мс + [(temp - 25С) х 0,05 мс / С] + (3,19С х 10 х 7) х
х (8 кОм + Rs)
При комнатной температуре (temp) величина интервала варьи-
руется в диапазоне от 7,6 до 10,7 мкс. В большинстве случаев приве-
денная выше формула может просто игнорироваться, а интервал
стабилизации Tack - задаваться равным 15 мкс.
После стабилизации напряжения на конденсаторе производится
преобразование. На выполнение 8-разрядного аналого-цифрового
преобразования требуется временной интервал в 9,5 командных
циклов. Время формирования одного бита (TAD) составляет от 1,6 до
6,4 мкс, при этом для тактирования преобразования может использо-
ваться частота, кратная частоте командных циклов PIC-микрокон-
троллера, или сигнал встроенного RC-генератора частотой 250 кГц.
Аналого-цифровой преобразователь имеет прескалер, обеспечи-
вающий временное масштабирование тактовых сигналов в два, во-
семь и тридцать два раза.
Встроенный RC-генератор с частотой 250 кГц используется для
аналого-цифрового преобразования в тех случаях, когда сам микро-
контроллер переводится в режим ожидания. Для того чтобы увели-
чить точность АЦП, рекомендуется на время выполнения преобразо-
вания переводить микроконтроллер в режим ожидания, при этом
влияние внутренних помех сводится к минимуму. Следует отметить,
однако, что при переводе PIC-микроконтроллера в режим ожида-
ния заметно возрастает время преобразования, поскольку в этом
случае устройству требуется время для выхода из данного режима.
Минимальное время преобразования определяется суммарным
временем, которое требуется для установки напряжения на запоми-
нающем конденсаторе и для полного завершения самого аналого-
цифрового преобразования.
При работе модуля АЦП необходимо конфигурировать выво-
ды, использующиеся для ввода аналоговых сигналов (выводы порта
PORTA PIC-микроконтроллера). В исходном состоянии эти выводы
всегда подготовлены к приему аналоговых сигналов и не обеспе-
чивают ввода/вывода цифровой информации. Чтобы выбрать режим
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
преобразования, следует записать определенную величину в регистр
ADC0N1. Как видно из табл. 7.18, два младших бита (PCFG1 - PCFGO) регис-
тра ADC0N1 микроконтроллера PIC 16С71 предназначены специально
для конфигурирования выводов аналоговых и цифровых сигналов.
Таблица 7.18
Назначение битов конфигурации выводов регистра ADCON1 микроконтроллера PIC 16С71
Биты PCFG1 - PCFGO Назначение входов
AN3 AN2 AN1 AN0
11 D D D D
10 D D А А
01 Vref А А А
00 А А А А
Регистр ADCONO используется для управления аналого-цифровым
преобразователем. Назначение битов этого регистра приводится
в табл. 7.19.
Таблица 7.19
Назначение битов регистра ADCONO
Бит Назначение
7-6 ADCS1 - ADCS0 - биты выбора частоты тактовых импульсов. 11 - внутренний генератор с частотой 250 кГц; 10 - Fosc/32, 01 - Fosc/8, 00 - Fosc/2
5-3 CHS2 - CHSO - биты выбора аналогового входа, сигнал которого будет оцифровываться, использование этих битов зависит от конкретного типа микроконтроллера
2 GO/_DONE - бит для инициирования аналого-цифрового преобразования, сбрасывается аппаратно по завершении преобразования _
1 ADIF - бит запроса на прерывание, устанавливается по завершении аналого-цифрового преобразования _
0 ADON - бит разрешения на использование аналого-цифрового преобразователя _
Следует отметить, что модуль АЦП потребляет энергию и в то
время, когда он непосредственно не используется. Для его отключе-
ния следует обнулить бит ADON.
В некоторых PIC-микроконтроллерах применяется 10-разрядный
аналого-цифровой преобразователь, позволяющий формировать
результат в 10-разрядном формате, при этом результат преобразова-
ния запоминается в двух регистрах: ADRESH и ADRESL. Сформирован'
ный результат может запоминаться в регистрах ADRESH/ADRESL в дву*
ВСТРОЕННЫЙ АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ I
различных форматах. Во-первых, в формате «с правым выравнивани-
ем», когда в шесть старших битов регистра ADRESH записывается О,
а в два младших разряда - соответственно два старших бита полу-
ченного результата. Этот формат весьма удобен при последующем
представлении результата в виде 16-разрядного числа, когда, напри-
мер, все биты используются для определения среднего значения.
Во-вторых, результат представим в формате «елевым выравнивани-
ем», при этом восемь старших бит запоминаются в регистре ADRESH.
Такой формат удобен в тех случаях, когда программному приложе-
нию требуется лишь восемь старших битов, а два младших бита мо-
гут быть отброшены или проигнорированы.
Для осуществления аналого-цифрового преобразования входно-
го сигнала необходимо выполнить следующие шаги:
1. Конфигурировать порты, записав соответствующий код в ре-
гистр ADCON1, чтобы задать выводы, предназначенные для вво-
да/вывода цифровой информации и для ввода аналоговых сиг-
налов. Если необходимо использовать 10-разрядный формат,
в регистре ADCON1 надо задать соответствующий признак фор-
мата.
2. Загрузить соответствующий код в регистр ADCONO для включения
АЦП путем установки бита ADON, сброса битов ADIF и GO/_DONE
и задания значения частоты и источника синхронизирующих
импульсов аналого-цифрового преобразователя.
3. Ждать, когда установится напряжение входного аналогового
сигнала.
4. Запустить преобразование, установив бит GO/_DONE. Если требует-
ся выполнить преобразование с высокой точностью, необходи-
мо перевести микроконтроллер в режим ожидания и установить
бит ADIE, разрешающий формирование запроса на прерывание.
5. Производить периодический опрос бита GO/_DONE до тех пор,
пока он не будет сброшен (в момент завершения аналого-циф-
рового преобразования).
6. Считать результат из регистра (регистров) ADRES (или ADRESH,
ADRESL). Ниже представлен фрагмент программы, который
обеспечивает получение результата преобразования сигнала
со входа RA0 микроконтроллера PIC 167С1, тактирующегося
частотой 4 МГц.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
bsf STATUS, RPO
movlw 0x002
movlw ADC0N1 0x080 ; Задание аналоговых входов AN1/AN0.
bcf STATUS, RPO
movlw 0x041 ; Разрешение использования
; аналого-цифрового преобразователя.
movwf ADCONO
movlw 5
addlw OxOFF ; Задание задержки 20 мкс
; для заряда конденсатора.
btfss STATUS, Z
goto $ - 2
bsf ADCONO, G0 ; Старт преобразования.
btfsc ADCONO, G0 ; Ожидание окончания преобразования.
goto $ - 1
movf ADRES, w ; Считывание результата в регистр w.
ВСТРОЕННЫЕ КОМПАРАТОРЫ НАПРЯЖЕНИЯ
В микроконтроллерах PIC 16С2х уровни входных аналоговых на-
пряжений могут анализироваться с помощью компараторов, по-
зволяющих обнаруживать факты превышения заданных уровней
напряжения. Сравнение входных сигналов может производиться
для определения соотношения сигналов различных выводов, а так-
же для того, чтобы выяснить, превысил ли сигнал нулевой потенци-
ал или так называемое опорное напряжение, которое формируется
самим микроконтроллером.
Разрешение на работу компараторов дается с помощью весьма
простой операции - требуется лишь предварительно перевести
выводы, использующиеся для сравнения, в режим входов. Время
срабатывания компараторов весьма невелико, что позволяет быс-
тро формировать сигналы тревоги или какие-либо другие ответные
реакции на изменение соотношения входных сигналов (рис. 7.33).
В микроконтроллерах PIC 16С62Х предусматривается использо-
вание двух компараторов напряжения, управляемых с помощью ре-
гистра CMCON. Назначение его битов приведено в табл. 7.20.
Таблица 7.20
Назначение битов регистра CMCON
Бит___________________________Назначение_________________________________________
7____C20UT- выходной сигнал компаратора 2 (устанавливается в 1, если «+» > «-»)_
6____C10UT - выходной сигнал компаратора 1 (устанавливается в 1, если «+» > «-»)
5-4 Не используются_______________________________________________________________
3____CIS - бит управления входным коммутатором компаратора_____
2-0 | СМ2 - СМО - выбор режима компаратора
ВСТРОЕННЫЕ КОМПАРАТОРЫ НАПРЯЖЕНИЯ
Рис. 7.33
Принцип работы компаратора напряжения
Биты CIS и СМ2 - СМО используются для выбора режима работы ком-
параторов и конфигурирования входов (табл. 7.21).
Таблица 7.21
Конфигурации входов компараторов напряжения
СМ CIS Компаратор 1 Компаратор 2
Вход + Вход- Вход + Вход-
ООО X RA0 RA3 (1) RA2 RA1 (3)
001 0 RA2 RAO RA2 RA1
001 1 RA2 RA3 RA2 RA1
010 0 Vref RAO Vref RA1
010 1 Vref RA3 Vref RA2
011 X RA2 RAO (2) RA2 RA1
100 X RA3 RAO (3) RA2 RA1
101 X - - RA2 RA1
110 X RA2 RAO (4) RA2 RA1 (5)
111 X RA3 RAO (6) RA2 RA1 (7)
При выборе режима работы компараторов помните о следующих
^особенностях:
1. Когда код битов СМ2 - СМО равен ООО, выводы RАО - RАЗ назначены
для компараторов и не могут использоваться для ввода/выво-
да цифровой информации.
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
2. Вывод RA3 удобен для ввода/вывода цифровой информации.
3. Выводы RA0 и RA3 пригодны для ввода/вывода цифровой ин-
формации.
4. Вывод RA3 применяется как цифровой выход, например выход
компаратора 1.
5. Вывод RA4 выполнен в виде выхода с открытым стоком, являет-
ся выходом компаратора 2.
6. Выводы RAO и RA3 могут использоваться для ввода/вывода циф-
ровой информации.
7. Выводы RA1 и RA2 пригодны для ввода/вывода цифровой ин-
формации.
При подаче напряжения питания все биты СМ сброшены, и выво-
ды RAO - RA3 находятся в режиме аналоговых входов. Чтобы отме-
нить использование аналоговых входов, следует в регистр СМСОМ за-
писать код 0x007.
На практике с помощью компараторов напряжения можно иници-
ировать прерывания при каждом очередном изменении состояния
соответствующих входов. Для разных подсемейств PIC-микрокон-
троллеров, которые используют компараторы напряжения, разре-
шение на прерывание дается различным образом. Подобно тому, как
осуществляются прерывания по изменению состояния входов порта
PORTB, запросы прерывания по изменению состояния входов компа-
раторов (регистра СМСОМ) должны быть считаны и сброшены про-
граммой обработки прерывания.
Наряду с выполнением операций сравнения внешних аналого-
вых сигналов микроконтроллеры PIC 16С62х обеспечивают фор-
мирование опорного напряжения (Vref в табл. 7.22) посредством
встроенного 4-разрядного цифро-аналогового преобразователя. Струк-
турная схема подобного преобразователя показана на рис. 7.34.
Биты выбора величины опорного напряжения Vref находятся
в регистре VRCON (табл. 7.22).
Таблица 7.22
Назначение битов регистра VRCON модуля компараторов напряжения
Бит Назначение
7 VREN - бит разрешения использования опорного напряжения Vref -
6 VROE - бит разрешения выдачи напряжения Vref на RA2 -
5 VRR - выбор диапазона напряжения Vref. 1 - нижний диапазон 0 - верхний диапазон
4 Не используется '
3-0 VR3 - VRO - биты выбора значения напряжения J
УПРАВЛЯЕМЫЙ ПАРАЛЛЕЛЬНЫЙ ПОРТ
Рис. 7.34
Структурная схема источника опорного напряжения
Vref микроконтроллеров PIC 16С62х
Диапазон опорного напряжения Vref зависит от состояния бита
VRR. Если он установлен, величина опорного напряжения может
определяться по формуле:
Vref=Vdd (VRCON & OxOOF) / 24.
В случае, если бит равен 0, эта формула приводится к виду:
Vref=Vdd (8 + (VRCON & OxOOF)) / 32.
Следует отметить, что когда бит VRR равен 1, максимальная вели-
чина напряжения Vref составляет 15/24 от величины напряжения
^dd. При сбросе бита VRR Vref может достигать почти трех четвер-
ти от Vdd.
управляемый параллельный порт
^б управляемом параллельном портеговорят в тех случаях, когда какое-
•^Ибо устройство (в том числе и микросхема) имеет выделенные
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
выводы для чтения/записи и выбора кристалла, что позволяет лег-
ко осуществлять операции по передаче данных. Структурная схема
управляемого параллельного порта приведена на рис. 7.35.
Соответствующие временные диаграммы, иллюстрирующие про-
цедуру записи/считывания данных, показаны на рис. 7.36.
Рис. 7.35
Структурная схема управляемого параллельного порта
Данные
WR
Чтение данных из
микроконтроллера
Команда чтения
игнорируется
микроконтроллером
_RD
Рис. 7.36
Временные диаграммы работы управляемого параллельного порта
ДОСТУП К EEPROM ДАННЫХ
Минимальное время доступа соответствует одному периоду такто-
вых импульсов микроконтроллера. Для Р1С-микроконтроллеров,
использующих синхронизирующие импульсы частотой 20 МГц, ми-
нимальная величина времени доступа составляет 50 нс.
Чтобы разрешить использование управляемого параллельного
порта, нужно предварительно установить бит выбора режима па-
раллельного порта в регистре TRISЕ. При установке этого бита
управление портом D передается линиям _CS, _RD и _WR, которые
соответствуют выводам RE2, RE1 и REO порта Е. После того как будет
установлен бит выбора режима порта, данные регистров PORTD,
PORTE, TRISD и TRISE игнорируются.
При использовании управляемого параллельного порта, когда
активизированы линии _CS и _RD (на них уровень логического 0),
осуществляется вывод содержимого регистра OUTREG через порт D.
При записи в регистр OUTREG (адрес, соответствующий регистру
PORTD) производится установка бита OBF («выходной буфер полон»)
регистра TRISE. Но эта возможность предусматривается не для всех
микроконтроллеров. Бит PBF сбрасывается автоматически при счи-
тывании байта из регистра OUTREG в режиме управляемого параллель-
ного порта.
При записи байта в микроконтроллер через управляемый парал-
лельный порт (на линиях _CS и _WR логические 0) записываемая ве-
личина сохраняется в регистре INREG до тех пор, пока она не будет
заменена новыми данными. В регистре состояния бит IBF («входной
буфер полон») будет устанавливаться каждый раз при записи дан-
ных в регистр INREG и стираться каждый раз при считывании байта
программой из регистра INREG.
Если ранее записанный байт не считывается до поступления по-
следующего байта в регистр INREG, инициируется установка бита
Переполнения входного буфера IBOV, который указывает, что воз-
никли условия «затирания» данных.
В первых микроконтроллерах, имеющих управляемый парал-
лельный порт, биты IBF, OBF и IBOV регистраTRISE отсутствовали.
Доступ к eeprom данных
Регистры EEADR, EEDATA, EC0N1 и EEC0N2 обеспечивают доступ к встроен-
Ному EEPROM (электрически стираемому и программируемому постоянному
доминающему устройству), предназначенному для хранения данных.
^Ри этом регистры EEADR и EEDATA необходимы для формирования
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
и ввода адреса и данных в EEPROM, объем памяти которого может
достигать 256 байт. В свою очередь регистры EECON1 и EEC0N2 пред-
назначены для выбора режима доступа и индикации момента за-
вершения операций. Регистр EEC0N2 представляет собой «псевдоре-
гистр», не допускающий считывания данных, однако сюда можно
записать коды 0х055/0х0АА, что позволяет контролировать правиль-
ность выполнения операции записи.
В табл. 7.23 указывается назначение битов регистра EECON1, кото-
рые отвечают за управление доступом.
Таблица 7.23
Назначение основных битов регистра EECON1
Бит Назначение
EEPCD Устанавливается для разрешения доступа к программной памяти; обнуляется для разрешения доступа к электрически программируемому ПЗУ данных (только в микроконтроллерах PIC 16F62x и PIC 16F87x)
WRERR Бит ошибки записи, указывает на возможную некорректность записанного результата
WREN Бит инициирования операции записи в электрически программируемое ПЗУ
WR Индицирует выполнение операции записи; обнуляется после завершения операции записи
RD Индицирует выполнение операции считывания; автоматически стирается
Операция считывания данных из EEPROM выполняется с помо-
щью указанных битов и нижеследующего фрагмента программы:
movf/movlw Address/ADDR, w
bef STATUS, RPO
movwf EEADR
bsf STATUS, RPO
bsf EEC0N1 " 0x08, RD
bef STATUS, RPO
movf EEDATA, w ; Регистр w содержит адрес (ADDR) EEPROM
Операция записи данных выполняется аналогичным образом, но
имеет существенное отличие. Продолжительность этой операции
может достигать 10 мс, что требует периодического опроса про-
граммой битаМИ регистра EEC0N1 вплоть до момента завершения опе-
рации. Другой путь - воспользоваться аппаратно формируемым за-
просом на прерывание по завершении записи в EEPROM. Ниже
представлен программный фрагмент для осуществления записи
в EEPROM.
movlw/movf Constant/DATA, w
bef STATUS, RPO
movwf EEDATA
ДОСТУП К EEPROM ДАННЫХ
Novlw/movf Address/ADDR, w
movwf EEADDR
bsf STATUS, RPO
bsf EECON1 " 0x080, WREN
bcf INTCON, GIE
movlw 0x055 ; ] Критический раздел.
movwf EEC0N2 " 0x080 ; ]
movlw OxOAA ; ]
movwf EEC0N2 " 0x080 ; ]
bsf EEC0N1 " 0x080, WR ; ]
bsf INTCON, GIE
btfsc EEC0N1 " 0x080, WR ; 1 Проверка для завершения
goto $ - 1 ; ] операции.
bcf EEC0N1 " 0x080, WREN ; ]
bcf STATUS, RPO
bsf INTCON, GIE
Микроконтроллеры PIC 12СЕ5хх, которые имеют в своем соста-
ве EEPROM данных с последовательным доступом, используют для
доступа старшие биты регистра GPIO. Подключение EEPROM к ядру
микроконтроллеров PIC 12СЕ5хх показано на рис. 7.37.
Шестой и седьмой биты регистра GPIO не имеют соответствую-
щих битов регистра TRIS. Кроме того, драйвер шестого бита (бит
I2CEEPR0M SDA) выполнен по схеме с открытым стоком и обеспечива-
ет выдачу данных как микроконтроллером, так и EEPROM.
рис. 7.37
Интерфейс EEPROM микроконтроллера PIC 12СЕ5хх
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
На рис. 7.38 приведены временные диаграммы, иллюстрирую-
щие процедуру записи данных в EEPROM.
I
I
I
Задержка
(два цикла команд)
SCL
SDA
12С
Режим
ожидания
1
I
+
I
I
Прием
данных
। Следующий
, бит
• 1 I * I
Старт-условие шины Предустановка
(три цикла команд) 1 данных •
I (три цикла команд) |
J
Стоп-условие
(три цикла команд)
. Передача данных .
1 (10 циклов команд) 1
Рис. 7.38
Временные диаграммы интерфейса EEPROM микроконтроллера PIC 12СЕ5хх
В целом интерфейс последовательного EEPROM аналогичен 12С.
При обмене используются линии SCL и SDA. Для начала и завер-
шения операций передачи применяются старт- и стоп-условия, от-
личающиеся от битовых посылок тем, что сигнал на линии данных
меняется в пределах интервала высокого уровня сигнала на линии
синхроимпульсов (SCL).
При выполнении операции записи следует контролировать пра-
вильность обращения к порту GPIO, в частности предварительно убе-
диться, что биты SDA и SCL регистра GPIO установлены в 1. В против-
ном случае режим обращения к внутреннему EEPROM может
задаваться неправильно, что вызовет нежелательные проблемы при
выполнении операции считывания.
Команду clrf GPIO не стоит использовать в программах, которые
предусматривают обращение к EEPROM.
Данные передаются «старшими разрядами вперед», что не вполне
удобно для большинства приложений. Перед передачей данных сле-
дует производить запись «байтауправления» форматом ObOIOOOOR, где
символ R соответствует биту операции чтения/записи (Read/_Write)-
Когда бит Re ad/jA/rite равен 1, выполняется считывание данных из
ДОСТУП К EEPROM ДАННЫХ
EEPROM по текущему значению указателя адреса. При записи бит
Read/_Write равен 0.
После пересылки байта приемник должен передавать бит подтверж-
дения приема АСК (передается нулевой посылкой - см. последова-
тельности передачи, представленные ниже). При «неподтверж-
дении» (NACK) передается 1, но это совсем не обязательно означает
аппаратный сбой. Так, если подобный сигнал формируется EEPROM,
он может указывать, например, на незавершенность предшествующей
операции записи. Сам микроконтроллер в ряде случаев формирует
такой сигнал для прекращения обмена, чтобы подготовить допол-
нительную порцию байтов в режиме многобайтового обмена.
При работе с EEPROM используются следующие типовые опе-
рации:
♦ задание текущего адреса;
♦ задание текущего адреса/запись байта данных;
♦ считывание байта данных по текущему адресу;
♦ последовательное считывание байтов начиная с текущего ад-
реса (многобайтовое считывание);
♦ проверка завершения записи.
В микроконтроллерах PIC 12СЕ5хх объем памяти электрически
программируемого ПЗУ составляет всего 16 байт. При этом обраще-
ние к каждому байту памяти осуществляется с помощью 4-разрядного
адреса. Данный адрес задается EEPROM при передаче первого управ-
ляющего байта. За битами адреса передается бит операции (R/__W). Пос-
ледовательность пересылок при этом имеет следующий вид:
ожидание - старт - 1010000А - OOOOaddrA - байт данных_А
(DataByteA) - стоп - ожидание.
Второй байт ObOOOOaddr задает новый текущий адрес EEPROM,
который будет использоваться при дальнейших операциях. После
пересылки двух байтов линии SDA и SCL возвращаются в состояние
ожидания (IDLE) с помощью такой последовательности кодов:
movlw ОхОСО
iorwf PIO, f ; Установка SDA/SCL.
Запись данных производится аналогично записи самого адреса,
однако не требует перевода обеих линий в режим ожидания (IDLE);
эта операция может предусматривать многократную посылку дан-
ных до полного завершения операции передачи:
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
ожидание - старт - 10100001А - OOOOaddrA - байт данных.А -
стоп - ожидание.
Байты данных могут считываться по одному или несколько по-
следовательно - в зависимости от того, какое значение имеет бит
подтверждения АСК, направляемый микроконтроллером EEPROM
после считывания каждого байта. Чтобы прекратить считывание,
после приема очередного байта микроконтроллер формирует сооб-
щение NACK (или просто N в приводящихся ниже кодах), что указыва-
ет на завершение операции.
При считывании одного байта последовательность действий
имеет следующий вид:
ожидание - старт - 10100001А - байт данных.М - стоп - ожидание,
а при считывании двух байтов выглядит так:
ожидание - старт - 10100001А - байт данных.А - байт данных_М -
стоп - ожидание.
Операция считывания может быть использована для контроля
завершения предыдущей записи, на выполнение которой требуется
10 мс. Если операция записи была завершена, при чтении формиру-
ется сообщение АСК, в противном случае - сообщение NACK.
ДОСТУП К ПРОГРАММНОЙ ПАМЯТИ EPROM
Для чтения из программного ПЗУ (здесь речь будет идти о стирае-
мом программируемом ПЗУ - Erasable Programmable Read-only
Memory) необходимо использовать последовательность кодов:
movf р SaveAddress + 1, TBLPTRH ; Подготовка регистра TBLPTR
movf р SaveAddress, TBLPTRL ; для чтения.
tabled 0, 0, SaveData ; Загрузка TBLAT содержимым
; памяти.
tlrd 1, SaveData + 1
tlrd 0, SaveData
movf р SaveData + 1, WREG ; Старший байт команды.
movf p SaveData, WREG ; Младший байт команды.
Для записи в программное ПЗУ микроконтроллеров PIC 17СхХ
на линию _MCLR должно подаваться напряжение Vpp (от 13 до 14 В)-
Во время записи в программную память приостанавливается испоЛ'
некие всех других команд в микроконтроллере PIC 17Схх. Чтобы
восстановить исполнение программы после записи кодов в запо'
минающее устройство, необходимо инициировать прерываний
ДОСТУП К ПРОГРАММНОЙ ФЛЭШ-ПАМЯТИ
(аналогичное прерыванию, инициируемому схемой TMRO). После-
довательность кодов, которая используется при записи в ПЗУ про-
грамм микроконтроллеров PIC 17Схх, приведена ниже:
Огд 0x00010
TMROInt ; Подтверждение запроса
; на прерывание от таймера,
ret fie
movf p SaveAddress, TBLPTRL Задание адреса, по которому
movf p SaveAddress + 1, TBLPTRH будет производиться запись.
bef PORTA, 3 Включение программирующего напряжения.
movlw HIGH ((100000/5) + 256) Задержка 100 мс
movwf Dlay для стабилизации напряжения
movlw LOW ((100000/5) + 256)
addlw OxOFF
btfsc ALUSTA, Z
deefsz Dlay, f
goto $ - 3
movlw HIGH (65536 - 10000) ; ; Задержка 10 мс
movwf TMROH ; ; для записи в EEPROM.
movlw LOW (65536 - 10000)
movwf TMROL
bsf TOSTA, TOCS ; ; Запуск таймера.
movlw 1 << TOIE ; ; Разрешение прерываний.
movwf INTSTA
bef CPUSTA, GLINTD
tlwt 0, SaveData ; ; Загрузка данных.
tlwt 1, SaveData + 1 ; ; Запись данных.
tablwt nop nop 1, 0, SaveData + 1
clrf INTSTA, f ; Запрещение прерываний.
bsf CPUSTA, GLINTD
movlw 2
call SendMSG
bsf PORTA, 3
Доступ к программной флэш-памяти
Для считывания кодов из флэш-памяти микроконтроллеров PIC
16F87x необходимо использовать следующую программу:
bsf
Novlw/movwf
movwf
^ovlw/movwf
STATUS, RP1
LOW address/ADDR, w
EEADR " 0x0100
High address/ADDr, w
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
movwf EEADRH " 0x0100
bsf STATUS, RPO
bsf EEC0N1 " 0x0180, EEPGD
bsf nop nop EEC0N1 " 0x0180, RD
bcf STATUS, RPO
movf movwf EEDATA, w ; Запоминание ; младшего байта ; программной памяти
movwf movwf EEDATA, W ; Запоминание ; старшего байта ; программной памяти
bcf STATUS, RP1
Операция записи в это запоминающее устройство аналогична
операции записи данных в EEPROM, однако предусматривает ис-
пользование двух команд пор, которые сопровождаются выполнени-
ем соответствующих действий. При этом не требуется производить
опрос битов или разрешать инициирование прерываний, посколь-
ку процессор полностью останавливается на время выполнения
операции записи. Но даже несмотря на факт полного останова про-
цессора на время записи данных в запоминающее устройство, функ-
ции периферийных устройств (аналого-цифрового преобразовате-
ля, интерфейса последовательного ввода/вывода данных и др.) не
отменяются, а сами эти устройства остаются в активизированном
состоянии.
bsf
movlw/movwf
movwf
movlw/movwf
movwf
movlw/movwf
movwf
movlw/movwf
movwf
bsf
bsf
bsf
bcf
movlw
STATUS, RP1
LOW address/ADDR, w
EEADR
HIGH address/ADDR, w
EEADRH
LOW Constant/Data, w
EEDATA
High Constant/Data, w
EEDATAH
STATUS, RPO
EECON1 " 0x0180, EEPGO
EEC0N1 " 0x0180, WREN
INTCON, GIE
0x055
Максимум 0x03F.
] Критичный по времени
] раздел.
ВНЕШНЯЯ ПАМЯТЬ
movwf EEC0N2 " 0x0180 ; ]
movlw OxOAA ; ]
movwf EEC0N2 " 0x0180, OR ; 1
nop ; ] Выполнение операций
nop ; ]
bcf EEC0N1 " 0x0180, WREN
bsf INTCON, GIE
ВНЕШНЯЯ ПАМЯТЬ
Внешняя память подключается к микроконтроллерам PIC 17Схх
для увеличения используемого объема памяти. Предназначенный
для этих целей интерфейс адресует до 64К 16-разрядных слов через
мультиплексированную шину адресов/данных,
В микроконтроллерах PIC 17Схх предусматривается четыре ре-
жима взаимодействия с запоминающими устройствами. Эти режи-
мы перечислены в табл. 7.24, а также проиллюстрированы графи-
чески на рис. 7.39.
Таблица 7.24
Режимы взаимодействия микроконтроллеров Р1С 17Схх с запоминающими устройствами
Режим Характеристика программного ЗУ
Режим микро- контроллера Все программное ЗУ - внутреннее, обеспечивается возможность считывания слова конфигурации, а также выполнения операций записи/считывания в/из ПЗУ
Режим защи- щенного микро- контроллера Все программное ЗУ обеспечивает возможность считывания слова конфигурации и считывания (но не записи) из программного запоминающего устройства
Расширенный режим микро- контроллера Внутреннее программное ЗУ + внешнее запоминающее устройство в верхнем адресном пространстве, обеспечивающем выполнение операций записи/считывания. Отсутствует возможность считывания слова конфигурации
Режим микро- процессора Нет внутренней программной памяти и доступа к слову конфигурации. Все адресное пространство программной памяти, имеющее размер 64 Кб, доступно как внешнее
В непрограммируемых микроконтроллерах PIC 17Схх режим мик-
ропроцессора задается конфигурационным словом. Этот режим не
предусматривает доступ к внутреннему программному запоминающему
устройству, В таком случае в приложениях можно использовать внеш-
ние микросхемы памяти, запрограммированные специальными
Устройствами. Эта функция допускает отладку программного при-
ложения перед его непосредственной загрузкой во внутреннее
программное ПЗУ Р1С-микроконтроллера.
Рис. 7.39
Графическая иллюстрация принципов использования запоминающих устройств
в Р1С-микроконтроллерах
PIC17C42,
PIC17CR42,
PIC17C42A
PIC17C43,
PIC17CR43,
PIC17C44
1. Слово конфигурации
2. Тестовая память
3. Загрузочное ПЗУ
Режим
микропроцессора
Расширенный режим
микроконтроллера
Режимы
микроконтроллера
OOOOh FFFFh Внешняя память программ OOOOh 07FFh Встроенная память программ OOOOh 07FFh 0800h FEOOh 07FFh Встроенная память программ 1
0800h FFFFh Внешняя память программ
2
Внешняя Встроенная 3
Внешняя Встроенная Внешняя Встроенная
Внешняя
00h I—I
FFh [__]
00h Г“"
FFh I_
OOh
FFh
Встроенная Внешняя
OOOOh Внешняя память программ
FFFFh
Внешняя
Внешняя
OOOOh
OFFFh/1FFFh
1OOOh/ 2000h Внешняя память программ
FFFFh
Встроенная Внешняя
OOh I—
FFh
120h
1FFh
Встроенная
Внешняя
Встроенная Внешняя Встроенная
Встроенная
память
программ
Встроенная
OOh I—
FFh
120h Г-
1FFh |_
Встроенная
OOOOh OFFFh/1FFFh Встроенная память программ
1000h/2000h
FEOOh 1
2
07FFh 3
Внешняя Встроенная
Внешняя
Ф Q-lT
OOh
FFh
120h
1FFh
Встроенная
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
ВНЕШНЯЯ ПАМЯТЬ
Запись данных во внешнее запоминающееустройством считывание из
него осуществляются с помощью команд TABLRD и TABLWT. В расширен-
ном режиме микроконтроллера и режиме микропроцессора считы-
вание данных из внутреннего запоминающего устройства может про-
изводиться с помощью команды TABLRD.
Эти команды табличного чтения/записи предусматривают при-
менение регистра указателя таблицы, который служит для задания
адреса в операции (TBLPTRH для старших восьми бит и TBLPTRL для
младших восьми бит). При считывании таблицы и при записи в нее
применяется регистр данных (TABLATH для старшего и TABLATL для
младшего байта), что позволяет обеспечивать буферизацию 16 бит
в процессе передачи. Подобная буферизация необходима, посколь-
ку процессор микроконтроллеров PIC 17Схх обеспечивает одно-
временный доступ только к восьми битам.
Принцип доступа к памяти программ в микроконтроллерах
PIC 17Схх показан на рис. 7.40.
Программная память
16 бит
Рис. 7.40
Принцип доступа к внешнему запоминающему устройству микроконтроллеров PIC 17Схх
Чтобы выполнить операцию записи или считывания из программ-
ной памяти, следует сначала задать адрес в указателе таблицы, записав
коды в каждый из двух 8-разрядных регистров. Затем, если необходи-
мо выполнить операцию считывания, инициируется команда TABLRD.
После выполнения этих операций инициируется исполнение
Двух команд считывания, что позволяет считать 16 бит по предвари-
тельно заданному адресу. Используемая для этих целей последова-
тельность команд приведена ниже:
movlw HIGH PM_address ; Подготовка указателя таблицы.
movwf TBLPTRH
movlw LOW PM_address
ФУНКЦИОНАЛЬНЫЕ УЗЛЫ
movwf tabled tlrd movwf tablrd movwf TABLPTRL 0, 0, WRG ; Модификация буферного регистра. 1, WREG ; Считывание старшего байта. HIGH Destination 0, 0, WREG ; Считывание младшего байта. LOW Destination
Операция считывания из внешнего программного запоминаю-
щего устройства фактически идентична операции считывания из
внутреннего EPROM.
ЕЙСТВИЕ
ИМИ
ТВ AM И
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
СХЕМА ДЛЯ ПОДКЛЮЧЕНИЯ МИКРОКОНТРОЛЛЕРОВ
К ИСТОЧНИКУ ПИТАНИЯ
При подключении PIC-микроконтроллеров к источнику питания
необходимы демпфирующие (фильтрующие) конденсаторы емкос-
тью от 0,01 до 0,1 мкФ между выводами Vdd и Vss. Типовой вариант
подключения микроконтроллера к источнику питания проиллюс-
трирован на рис. 8.1. Следует отметить, что показанный на рисунке
конденсатор должен иметь малые потери. Обычно для этих целей
рекомендуется использовать керамические и танталовые конденса-
торы.
В основном PIC-микроконтроллеры требуют напряжения пита-
ния от 4,0 до 6,0 В. Некоторые типы устройств могут работать при
напряжениях питания от 2,0 до 6,0 В и выделяются по этому призна-
ку в отдельную группу с низковольтным питанием. Они отличаются
от типовых только тем, что были специально испытаны предприя-
тием-изготовителем на функционирование при напряжении пита-
ния 2,0 В. Для обозначения PIC-микроконтроллеров с низковольтным
питанием перед буквами С или F добавляется буква L.
Рис. 8.1
Схема подключения Р1С-микроконтроллеров
к источнику питания
Следует отметить, что схемы сброса при понижении напряжения пи-
тания в современных PIC-микроконтроллерах активизируются при
напряжении ниже 4,5 В. Поэтому они, как правило, не применяют-
ся в микроконтроллерах с низковольтным питанием, за исключени-
ем специальных типов, которые имеют программируемые схемы
сброса при понижении напряжения питания.
ПОДКЛЮЧЕНИЕ К ИСТОЧНИКУ ПИТАНИЯ
На рис. 8.2 показана схема, в которой при напряжении Vdd ниже
порогового уровня, задаваемого с помощью специального стаби-
литрона, уровень сигнала _MCLR станет низким и произойдет сброс
микроконтроллера.
Рис. 8.2
Схема сброса при понижении напряжения питания
Микроконтроллеры PIC 16HV540 имеют встроенный стабилизатор
напряжения, который позволяет отказаться от использования внеш-
них стабилизаторов, что создает определенные преимущества - на-
пример, если питание производится непосредственно от аккумуля-
торной батареи. Этот микроконтроллер по выводам совместим с PIC
16F54. Совместим он и по программному обеспечению, но имеет не-
сколько отличающиеся по выходным уровням порты PORTA и PORTB.
Для подключения микроконтроллеров PIC 16HV540 к аккумуля-
торной батарее требуется достаточно простая схема, показанная на
рис. 8?3, при этом для логического отключения микроконтроллера
и перевода его в режим экономичного потребления может исполь-
зоваться команда sleep.
Структурная схема микроконтроллера, имеющего встроенный
стабилизатор напряжения, приведена на рис. 8.4.
Подобный стабилизатор напряжения может обеспечивать фор-
мирование напряжения 3 либо 5 В, при этом величина напряжения
стабилизации задается путем установки в соответствующее состоя-
ние бита RL регистра 0PTI0N2.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Рис. 8.3
Схема подключения к источнику питания высоковольтного
PIC-микроконтроллера
Рис. 8.4
Структурная схема для подачи напряжения питания на высоковольтный
Р1С-микроконтроллер
Вышеуказанный регистр выполняет функции вспомогательного
регистра конфигурации, и его содержимое может изменяться соот-
ветствующим программным приложением. Назначение битов регис-
тра 0PTI0N2 указано в табл. 8.1.
Запись в регистр 0PTI0N2 производится с помощью команды TRIS,
например в виде:
TRIS 7
или в виде
TRIS 0PTI0N2
ЦИФРОВЫЕ УРОВНИ
Таблица 8.1
Назначение битов регистра OPTION2 микроконтроллера PIC 16HV540
Бит Назначение
^7-6 Не используются
5 WPC - бит разрешения «пробуждения» микроконтроллера при изменении состояния выводов RBO - RB3
4 SWE - разрешение программного сторожевого таймера
"3 RL - бит выбора величины регулируемого напряжения (1 - 5 В, 0 - 3 В)
2 SL - выбор уровня напряжения для режима ожидания (при 1 используется напряжение линии RL, а при 0 - напряжение 3 В)
1 BL - бит выбора порогового напряжения питания; при его установке величина напряжения задается равной 3,1 В (при напряжении питания 5 В), а при сбросе - 2,2 В (при напряжении питания 3 В)
0 BE - бит разрешения контроля напряжения питания (Brown out)
СХЕМА ПЕРЕЗАПУСКА МИКРОКОНТРОЛЛЕРОВ
Если используется простая схема перезапуска, показанная на
рис. 8.5, то необходимо предварительно разрешить опцию PWRTE
конфигурационного слова, которая обеспечивает дополнительную
задержку запуска PIC-микроконтроллера до момента полной стаби-
лизации уровня напряжения питания перед началом выполнения
операций.
К микроконтроллеру
Кнопка
сброса Л
Рис. 8.5
Простая внешняя схема сброса
Р1С-микроконтроллеров
Цифровые уровни
Типовые уровни напряжений цифровых выходов микроконтролле-
ра равны
Vol (низкийуровень) = 0,6 В (максимум),
Voh (высокийуровень) = Vdd - 0,7 В (минимум).
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Под пороговым входным напряжением логического вентиля понима-
ется входное напряжение, определяющее границу между состояни-
ем логической 1 и логического 0 (или наоборот). Величина этого
порогового напряжения зависит от уровня напряжения питания
Vdd. Для различных устройств пороговое напряжение может варь-
ироваться в достаточно широких пределах. Так, для разработанных
к настоящему времени подсемейств PIC-микроконтроллеров его
величина заключается в диапазоне от 0,25 Vdd + 0,8 В до 0,48 Vdd.
ИСПОЛЬЗОВАНИЕ ПАРАЛЛЕЛЬНОЙ ШИНЫ
Параллельная шина может быть реализована, например, путем ис-
пользования восьми линий порта PORTB и линий другого порта д ля ре-
ализации линий чтения _RD и записи _WR, как это показано на рис. 8.6.
Микроконтроллер Входное устройство
Рис. 8.6
Реализация двунаправленной параллельной шины
Ниже приводится фрагмент программы, который обеспечивает
организацию доступа к внешним устройствам через параллельную
шину:
bsf STATUS, RPO ; Перевод порта PORTB в ; данных. режим ввода
movlw OxOFF
movwf TRISB " 0x080
bcf STATUS, RPO
bcf PORTA, 0 ; _RD = 0.
call Dlay ; Ожидание, пока данные станут
; достоверными.
movf PORTB, w ; Считывание данных.
bsf PORTA, 0 ; Завершение чтения (_RD = 1).
ВЗАИМОДЕЙСТВИЕ С КНОПКАМИ
Запись через параллельную шину осуществляется следующим об-
разом:
bsf STATUS, RPO
cl г f TRIS В ~ 0x080 ; Конфигурирование порта PORTB.
bcf STATUS, RPO
bcf PORTA, 1 ; Разрешение выдачи данных (_WR1 = 0)
movwf PORTB
call Dlay ; Задержка, пока данные не станут
; достоверными.
bsf PORTA ; _WR1 = 1.
ВЗАИМОДЕЙСТВИЕ С КНОПКАМИ
Типовая схема, использующаяся для подключения кнопки или кла-
виши к линии порта, приведена на рис. 8.7.
Vcc
Кнопка (клавишный .1 " .
переключатель) 1 микроконтроллера
Рис. 8.7
Простая схема подключения кнопки (клавиши)
Главной причиной ошибки при считывании состояния кнопки
является дребезг контактов.
Первая макрокоманда (Debounce) позволяет исключить влияние
Дребезга контактов клавиши за счет повторного опроса через опре-
деленное время состояния линии порта, к которому клавиша под-
ключена.
Debounce macro HiLo,Port,Bit
if HiLo == Lo ; Клавиша нажата?
btfss Port, Bit
else
btfsc Port, Bit
endif
goto $ - 1 ; Если да, ожидание момента отпускания
movlw InitDlay ; Ожидание в течение 20 мс,
чтобы устранить дребезг
контактов клавиши после ее отпускания.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
movwf Dlay
movlw 0
if HiLo == Lo
btfss Port, Bit ; Ожидание нового нажатия клавиши
else
btfss Port, Bit
endif
goto $ - 6 ; и отпускания.
ifndef Debug ; Пропуск “малого” цикла, если параметр
; Debug не определен.
addlw 1 ; Инкрементирование счетчика задержки.
btfsc STATUS, Z ; Выполнение цикла, если результат не
; равен нулю.
else
пор ; Соответствует количеству команд.
пор
endif
decfsz Dlay
goto $ - 5
endm
Переменная InitDlay может определяться по формуле:
TimeDlay = (((InitDlay - 1) 256) 7) / (Frequency / 4),
откуда
InitDlay = ((TimeDlay (Frequency / 4)) / (256 x 7)) + 1.
Вторая макрокоманда, устраняющая влияние дребезга контактов
клавиши, сходна с функцией Button, которая существует в языке
Basic, разработанном фирмой Parallax.
Button macro Port, Pin, Down, Delay, Rate, Variable, Target,
Address
local ButtonEnd
incf Variable, w ; Инкрементирование
; переменной Variable.
if ((Down == 0) && (Target == 0)) | |
((Down == 1) && (Target == 1))
btfsc Port, Pin ; Проверка на 0.
else
btfss Port, Pin ; Проверка на 1.
endif
clrw ; Если клавиша не нажата, ; обнуляется W.
movwf Variable ; Сохранение значения.
movlw Delay & 0x07F
subwf Variable, w
Дребезг контактов клавиши
устранен?
ВЗАИМОДЕЙСТВИЕ С МАТРИЧНОЙ КЛАВИАТУРОЙ
btfsc STATUS, Z
goto Address ; Если равно 0, то да.
if ((Delay & 0x080) != 0) ; Есть автоповтор?
btfsc STATUS, C
decf Variable ; Нет - декрементирование, ; если больше Delay.
else
btfss STATUS, C
goto ButtonEnd ; Меньше, чем проверяемое, ; закончить.
xorlw Rate ; Все еще автоповтор?
btfsc STATUS, Z
goto ButtonEnd ; Нет - инкрементирование,
movlw Delay ; да - возврат к началу.
movwf Variable
goto Address
endif
ButtonEnd ; Конец макрокоманды.
endm
Описание параметров этой макрокоманды приведено в табл. 8.2.
Таблица 8.2
Параметры макрокоманды
Параметр Назначение
Port, Pin Вывод подключения клавиши (например, PORTA, 0)
Down Состояние, когда клавиша нажата
Delay Число итераций макрокоманды перед переходом к Address (до 127). Если установлен 0, выполняется переход при условии, что параметр Target постоянен (отсутствует дребезг контактов клавиши) Если бит 7 параметра Delay установлен, автоповтора нет
-Rate Соответствует числу циклов (до 127) перед автоповтором
-Target Логическая переменная (1 или 0)
^Address Адрес для перехода при нажатии клавиши или автоповторе
ВЗАИМОДЕЙСТВИЕ С МАТРИЧНОЙ КЛАВИАТУРОЙ
Клавиатура обычно строится как коммутационная матрица (матри-
Ча коммутации). Матрица коммутации в данном случае двумерная,
Каждый ее узел содержит кнопку (клавишу), которая коммутирует
°Дин столбец матрицы с одной из строк (рис. 8.8).
Путем сканирования столбцов (поочередного соединения их
с «землей») и считывания кода строк можно непрерывно следить
За состоянием клавиатуры.
Когда ни одна из кнопок не нажата, на всех линиях строк должен
бЫть высокий уровень (1). При замыкании одной из кнопок во время
°Проса соответствующего столбца на линии строк вместо 1 будет 0.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Строка О
Строка 1
Управление
столбцом О
Управление
столбцом 1
Рис. 8.8
Матрица коммутации с управляемыми
транзисторными ключами
В результате микроконтроллер может
зафиксировать факт нажатия и опреде-
лить, какая клавиша нажата.
В PIC-микроконтроллерах для управ-
ления матричными клавиатурами целе-
сообразно использовать выводы порта
PORTB. Напомним, что входы этого порта
снабжены внутренними резисторами,
подключаемыми к напряжению пита-
ния, а выходы портов в схемном отно-
шении аналогичны транзисторным клю-
чам с открытым стоком (рис. 8.9).
Изначально все выводы порта следу-
ет конфигурировать как входы, причем
должна быть задана «подтяжка» входов через внутренние резисто-
ры к напряжению питания. При опросе текущий вывод переводит-
ся в режим выхода и на него выдается логический 0. Затем происхо-
дит считывание линий строк. Процесс повторяется для других
столбцов. Подобным образом обеспечивается сканирование всей
Рис. 8.9
Схема управления матричной клавиатурой 4x4
ВЗАИМОДЕЙСТВИЕ С МАТРИЧНОЙ КЛАВИАТУРОЙ
^авиатурым. производится поиск замкнутых переключателей (нажа-
тых клавишей). Фрагмент соответствующей программы представ-
лен ниже:
int KeyScan ( ) // Сканирование клавиатуры
{ // и возврат,когда клавиша нажата.
int 1 = О
int key = -1
while (key == -1) {
for (i = 0; (i , 4) & ((PORTB & OxOOF) == OxOFO); :
switch (PORTB & OxOOF) { // Поиск нажатой клавиши
case OxOOE: key = i; break; // Строка 0.
case case OxOOD: OxOOC: key = 0x04 + break; H i; Строка 1.
case OxOOB: // Строка 2.
case OxOOA:
case 0x009:
case 0x008:
key = 0x08 + i;
break;
else key = ОхОС + i break; // Строка 3.
} // Завершение switch.
} // Завершение while (цикла)
return key; // Конец функции KeyScan.
Выход из функции KeyScan происходит, только когда обнаружива-
ется нажатая клавиша. Следует отметить, что эта подпрограмма не
защищает от дребезга контактов клавиши, а также не позволяет во
время своей работы выполнять другие операции.
Проблемы могут быть разрешены путем использования програм-
мы сканирования в рамках программы обработки прерываний, ис-
полнение которой инициируется с периодичностью 5 мс:
Inrerrupt KeyScan ( ) // Цикл сканирования клавиатуры - 5 мс.
{
int 1 = 0;
int key = -1
for (i = 0; (i < 4) & ((PORTB & OxOOF) = = OxOOF));i++);
if (PORTB & OxOOF) != OxOOF) { // Клавиша нажата.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
} } } switch (PORTB & OxOOF) { // Поиск нажатой клавиши, case ОхООЕ: // Строка 0. key = 1; break; case OxOOD: // Строка 1. case OxOOC: key = 0x04 + 1; break; case OxOOB: // Строка 2. case OxOOA: case 0x009: case 0x008: key = 0x08 + i; break; else // Строка 3. key = OxOC + i; break; } // Окончание switch. if (key == KeySave) { keycount = keycount + 1); // Инкрементирование счетчика if (keycount == 4) keyvalid = key; // Устранение дребезга, else keycount = 0; // Совпадения нет - начать // с начала. KeySave = key; // Текущее значение клавиши // сохраняется в течение 5 мс // Запоминание кода клавиши.
Данная программа позволяет задавать для каждой клавиши так
называемый скан-код. Это значение будет возвращаться, если про-
грамма зарегистрирует его четыре раза подряд. Таким образом про-
грамма позволяет устранить влияние дребезга контактов клавиши
в процессе сканирования: если указанное значение не изменяется
в течение четырех временных интервалов (общей продолжительно-
стью 20 мс), предполагается, что влияние дребезга контактов полно-
стью устранено.
ОБЪЕДИНЕНИЕ ВХОДОВ И ВЫХОДОВ
При подключении PIC-микроконтроллеров к устройствам, кото-
рые могут быть как приемниками, так и передатчиками данных (на-
пример, к запоминающему устройству, имеющему независимые
вход и выход), для исключения конфликтных ситуаций на линии на
ВЫВОДЫ С ОТКРЫТЫМ КОЛЛЕКТОРОМ
одном из выходов следует использовать дополнительный развязы-
вающий резистор (рис. 8.10).
Микроконтроллер
Устройство ввода/вывода
Вывод данных
£ Ввод данных
Рис. 8.10
Схема двунаправленной линии
Это может касаться и кнопок (клавиш), непосредственно соеди-
неных с линиями ввода/вывода PIC-микроконтроллера (рис. 8.11).
Микроконтроллер
Устройство ввода/вывода
Ввод/вывод данных
Рис. 8.11
Схема подключения кнопки к линии передачи цифровой информации
СХЕМА ЭМУЛЯЦИИ ВЫВОДА
с ОТКРЫТЫМ КОЛЛЕКТОРОМ/ОТКРЫТЫМ стоком
Схема вывода с открытым стоком для PIC-микроконтроллеров по-
казана на рис. 8.12.
Подобные выводы имеются во многих устройствах и используют-
ся для выполнения самых разных операций. Их работа может эму-
лироваться и обычным выводом с помощью приведенной ниже про-
граммы. Программа устанавливает низкий уровень на выходе, когда
бит переноса сброшен, и задает выводу режим входа, когда бит пе-
реноса установлен:
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Рис. 8.12
Схема вывода с открытым стоком
bef PORT#, pin ; Обнуление линии порта.
bsf STATUS, RPO
btfss STATUS, C Если есть перенос,
выход с открытым стоком запрещен
goto S + 4 Если перенос отсутствует -
разрешен.
nop
bsf TRIS " 0x080, pin
goto S + 3
bef TRIS " 0x080, pin
goto S + 1
bef STATUS, RPO
УПРАВЛЕНИЕ СВЕТОДИОДНЫМИ ИНДИКАТОРАМИ
Схема, поясняющая принцип управления светодиодными индикато-
рами, показана на рис. 8.13. Светодиодный индикатор (Light Emitting
Diode) зажигается в тех случаях, когда для использующегося в каче-
стве выходного вывода микроконтроллера, соединенного с катодом
светодиода, задан логический 0 (потенциал «земли»). При подаче на
этот вывод логической 1 светодиодный индикатор отключается.
Многосегментные светодиодные индикаторы
Семисегментные светодиодные индикаторы (рис. 8.14) также могут ис-
пользоваться в вышеупомянутой схеме и не требуют каких-либо
существенных изменений программного обеспечения. Включая
определенные сегменты этого индикатора, можно отображать на
соответствующем индикационном табло десятичные цифры.
УПРАВЛЕНИЕ СВЕТОДИОДНЫМИ ИНДИКАТОРАМИ
Потенциалы
Источник
питания(5 В)
5,0 В ( Vps)
0,7 В (Vled)
0В
"Земля”
Ri = (Vps- Vied) /lied
= (5,0-0,7 В)/20 мА
= 4,ЗВ/20 мА
= 2150м
Рис. 8.13
Принцип управления светодиодом
Многосегментный индикатор имеет вы-
воды сегментов, предназначенные для
управления сегментами, и один общий вы-
вод, который обеспечивает питание всех
сегментов. Этот общий вывод обычно ис-
пользуется для идентификации семисег-
ментного светодиодного индикатора. Ин-
дикатор может быть выполнен по схеме
с общим катодом или по схеме с общим
анодом - в зависимости от того, какие вы-
воды светодиодов подключены к общему
выводу индикатора.
Объединение нескольких семисегмент-
ных индикаторов предусматривает под-
ключение их параллельным образом и ком-
мутацию общих электродов. Поскольку ток
через общие электроды значителен и не
Может обеспечиваться с помощью одного
вывода микроконтроллера, приходится использовать дополнитель-
ный транзистор, который формирует требуемый ток. Этот транзис-
тор осуществляет выбор индикатора, как показано на рис. 8.15.
PlC-микроконтроллер обеспечивает переключение индикаторов за
Весьма короткое время, в течение которого высвечивается соответ-
ствующая цифра. Подобный принцип, называемый динамической ин-
дикацией, обычно поддерживается программой, которая использует
Рис. 8.14
Семисегментный светодиодный
индикатор
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Рис. 8.15
Схема управления четырьмя семисегментными светодиодными индикаторами
инициируемую таймером подпрограмму обработки прерываний
(Timer Interrupt Handler). Основные компоненты этой подпрограм-
мы представлены ниже:
I n t
- Сохранение содержимого регистров контекста.
- Сброс таймера и запросов прерываний.
- LED.Display = 0 ; Выключение всех светодиодных
; индикаторов.
- LED.Output = DisplayfCur]
- Cur = (Cur + 1) mod #Displays ; Определение следующего
; индикатора.
- LED_Display = 1 << Cur ; Включение текущего
; индикатора.
- Восстановление содержимого регистров контекста.
- Возврат после завершения обработки прерывания.
Приведенная программа обеспечивает последовательное цикли-
ческое высвечивание всех цифр, предусматривающее использова-
ние для этого дополнительных транзисторов. Для исключения эф'
фекта мерцаний цикл должен задаваться таким образом, чтобы
каждая цифра высвечивалась не реже 50 раз в секунду. Поэтому чем
больше цифр требуется высветить, тем быстрее должна выполнять-
ся программа обработки прерываний и тем меньшим по времени
должен быть цикл ее выполнения. Если, например, используются
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
восемь семисегментных светодиодных индикаторов, цифры должны
переключаться 2000 раз в секунду, для чего необходимо сократить
цикл выполнения программы обработки прерываний приблизи-
тельно вдвое по сравнению со случаем, когда в схему включены четы-
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
Чаще всего для подключения жидкокристаллических дисплеев
(Liquid Crystal Display), аналогичных дисплею типа 44870, использу-
ется однорядный разъем с 14 контактами, расположенными в ли-
нию с шагом 0,100". Назначение этих контактов указано в табл. 8.3.
Таблица 8.3
Назначение контактов жидкокристаллического дисплея типа 44870
Вывод Назначение
1 «Земля» (общий)
2 Vcc (напряжение питания)
3 Управление контрастом
4 R/S - команда/выбор регистра
5 R/W - чтение/запись
6 Е - тактовые импульсы
7-14 DO - D7 - выводы данных
Подающееся на дисплей напряжениеуправления контрастом обыч-
но регулируется с помощью потенциометра, который выполняет
функцию делителя напряжения. Подобный подход позволяет обес-
печить простое регулирование напряжения в диапазоне между по-
тенциалом «земли» и напряжением питания Vcc, что в свою очередь
Дает возможность регулировать контраст при отображении. Соот-
ветствующая схема регулировки показана на
Рис. 8.16.
Жидкокристаллический дисплей подклю-
чается через шину, которая обеспечивает быс-
трую запись на дисплей и считывание данных
с него.
Приведенные на рис. 8.17 временные диа-
граммы соответствуют записи одного байта
Данных в коде ASCII на жидкокристалличес-
кий дисплей. Каждый символ кода ASCII
Имеет восьмибитный формат и пересылает-
ся на жидкокристаллический дисплей в виде
или 8-разрядных кодовых посылок. Если
Vcc
°
Г1 К выводу ЗЖКИ
ЮК к------- (регулировка
Ц контраста)
7Я77
Рис. 8.16
Схема управления
напряжением контраста
для жидкокристаллического
дисплея
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Рис. 8.17
Временные диаграммы; иллюстрирующие процедуру записи данных
в жидкокристаллический дисплей
используется 4-разрядный формат передачи, то отсылаются два полу-
байта данных: сначала старший, а затем младший, сопровождаемые
синхроимпульсами по линии Е. Вместе они образуют 8-разрядный код.
Пересылка данных с использованием 4- или 8-разрядного форма-
та является наиболее типичной для существующих жидкокристал-
лических дисплеев. Выбор формата пересылки данных на жидкокри-
сталлический дисплей очень важен с точки зрения последующей
разработки программных приложений.
Режим с 8-разрядным форматом передачи оказывается наиболее
удобным, если необходимо обеспечить большую скорость обмена
данными в рамках приложения, однако этот режим требует как ми-
нимум десяти выводов микроконтроллера для ввода/вывода дан-
ных. При выборе режима с 4-разрядным форматом потребуется как
минимум шесть выводов. В таком режиме при подключении микро-
контроллера к жидкокристаллическому дисплею для записи ис-
пользуются лишь четыре старших бита (DB4 - DB7).
Бит R/S предназначен для выбора типа информации (данные или
команда), передаваемой между микроконтроллером и жидкокрис-
таллическим дисплеем. Когда этот бит установлен, обеспечивается
возможность записи (или считывания) байта, например для того,
чтобы задать текущее положение курсора на экране жидкокристал-
лического дисплея. При сброшенном бите производится пересылка
команды на жидкокристаллический дисплей или считывается слово
состояния дисплея, индицирующее результат выполнения команды-
Перечень команд жидкокристаллического дисплея типа 44780
приведен в табл. 8.4. Назначение битов для различных команд ука-
зано в табл. 8.5.
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
Таблица 8.4
Команды управления жидкокристаллическим дисплеем типа 44780 фирмы Hitachi
rS R/W D7 D6 D5 D4 D3 D2 D1 DO Команда/функции
4 5 14 13 12 11 10 9 8 7 Выводы
' 0 0 0 0 0 0 0 0 0 1 Стирание дисплея
' 0 0 0 0 0 0 0 0 1 * Возвращение курсора в исходное состояние
’ 0 0 0 0 0 0 0 1 ID S Задание направления перемещения курсора
’ 0 0 0 0 0 0 1 D С В Разрешение отображения курсора
0 0 0 0 0 1 SC RL * * Смещение курсора/ сдвиг изображения на дисплее
0 0 0 0 1 DL N F * * Сброс/задание параметров интерфейса
0 0 0 1 А А А А А А Перевод курсора В CGRAM
0 0 1 А А А А А А А Перевод курсора на экран дисплея
0 1 BF * * * * * * * Проверка признака «занято»
1 0 Н н Н Н н Н Н Н Запись символа на дисплей в текущую позицию курсора
1 1 Н н Н н н Н Н Н Считывание символа, указываемого курсором
Во многих приложениях эффективно используются операции
считывания/модификации/записи данных, которые предусматри-
вают прямую и обратную пересылку данных с модификацией на дис-
плей. В качестве примера можно привести операции прокрутки
отображаемой на дисплее информации.
Флаг «занято» позволяет контролировать завершение исполне-
ния переданной команды.
Для большей части программных приложений вообще не требует-
ся режим считывания данных из жидкокристаллического дисплея.
При этом на вывод бита R/S подается потенциал «земли», а программ-
ное приложение просто ожидает в течение определенного времен-
ного интервала, длительность которого гарантирует завершение
Исполнения очередной команды. Продолжительность этого интер-
вала обычно соответствует 4,1 мс для команд стирания данных дис-
плея или перевода дисплея/курсора в исходное состояние и 160 мкс
Для всех остальных команд. Такой подход позволяет не только замет-
но упростить программные приложения, но и высвободить соответ-
ствующие выводы микроконтроллера для других целей.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Таблица 8.5
Назначение битов для команд , используемых при управлении жидкокристаллическим дисплеем
Бит/ параметр Назначение
* Бит не используется, произвольное состояние (0 или 1)
Задание направления перемещения курсора
ID S При установке обеспечивается выполнение операции инкрементирования позиции курсора после каждого записанного на дисплей байта. Сдвиг изображения на дисплее после каждого записанного байта
Активизация дисплея/курсора
D С В Включение/отключение дисплея (1/0) Разрешение/запрет использования курсора (1/0) Задание/отмена режима мерцания курсора (1/0)
Перемещение курсора/сдвиг изображения на дисплее
SC RL Разрешение/запрещение сдвига изображения (1/0) Направление сдвига вправо/влево (1/0)
Выбор параметров интерфейса
DL N F Разрядность данных: 8/4 (1/0) Число строк изображения 1/2 (0/1) Размер знакоместа- 5x10/5x7 (1/0)
Проверка признака «занято»
BF I Этот бит равен 1 в процессе обработки данных ЖКИ дисплеем
Перевод курсора в CGRAM/на экран дисплея
А | Адрес
Считывание кодов ASCII с дисплея и запись на него
Н |Данные
Одним из основных вопросов при реализации приложений являет-
ся выбор способа для изменения положения данных на экране жидко-
кристаллического дисплея, в частности выбор способа перемещения
данных с одной его строки на другую. В табл. 8.6 приведены варианты
различных типов жидкокристаллических дисплеев, применяющих
базовые модули типа 44780. Здесь же перечислены наиболее часто ис-
пользуемые форматы жидкокристаллических дисплеев, которые зада-
ются в виде произведения числа столбцов на число строк.
Курсоры дисплеев типа 44780 могут активизироваться с помо-
щью простых команд в любой момент времени. Для этого, в част-
ности, можно применить специальную команду управления жид-
кокристаллическим дисплеем Enable Display/Cursor (Разрешение
дисплея/курсора), которая требует предварительной установки
бита С. Использовать бит В, то есть режим блочной передачи, не ре-
комендуется, поскольку это приводит к мерцанию индицируемых
символов, что заметно усложняет их восприятие пользователем.
Жидкокристаллический дисплей может рассматриваться также
как дисплей телетайпа (Teletype), потому что в условиях нормально-
го режима функционирования его курсор смещается на одну пози-
цию вправо после пересылки каждого очередного символа. Команды
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
Таблица 8.6
различные варианты жидкокристаллических дисплеев с базовыми модулями типа 44780
производства фирмы Hitachi
формат изобра- жения Верхняя левая позиция Девя- тый знак Вторая строка Третья строка Четвертая строка Комментарии
8x1 0 - - - - Примечание 1
16x1 0 0x040 - - - Примечание 1
16x1 0 8 - - - Примечание 3
8x2 0 - 0x040 - - Примечание^
10x2 0 0x008 0x040 - - Примечание 2
16x2 0 0x008 0x040 - - Примечание 2
20x2 0 0x008 0x040 - - Примечание 2
24x2 0 0x008 0x040 - - Примечание 2
30x2 0 0x008 0x040 - - Примечание 2
32x2 0 0x008 0x040 - - Примечание 2
40x2 0 0x008 0x040 - - Примечание 2
16x4 0 0x008 0x040 0x020 0x040 Примечание 2
20x4 0 0x008 0x040 0x020 0x040 Примечание 2
40x4 0 - - - - Примечание 4
Примечание 1. Один модуль типа 44780 без микросхемы контроллера
Примечание 2. Модуль типа 44780 с контроллером
Примечание 3. Модуль типа 44780 с контроллером; этот случай на практике встречается редко
Примечание 4. Два модуля типа 44780 с контроллерами; порядок адресации для данного случая оговаривается особо
Clear Display (Стирание данных дисплея) и Return Cursor and LCD to
Home Position (Перевод дисплея/курсора в исходное положение)
применяются обычно для установки курсора в верхнее левое поло-
жение на экране.
Пример использования функций перемещения курсора проил-
люстрирован на рис. 8.18.
Исходное состояние жидкокристаллического дисплея Здравствуйте,- После записи строки курсор ЖКИ устанавливается за запятой
Перемещение курсора жидкокристаллического дисплея Здравствуйте, Курсор ЖКИ устанавливается в начало второй строки командой ОхОСО
Конечное состояние жидкокристаллического дисплея Здравствуйте, Майк_ Записана новая строка (добавлено слово "Майк”)
Рис 8.18 .
Использование функций перемещения курсора
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Смещение курсора обычно выполняется с помощью команды
Move Cursor to Display (Перевод курсора на экран дисплея). В коде
этой команды седьмой бит равен 1, а остальные семь бит требуются
для задания позиции курсора на экране, позволяя формировать до
128 различных адресов, что соответствует максимальному числу
адресов символов жидкокристаллического дисплея. Сведения, при-
веденные в табл. 8.6, могут, в частности, использоваться и для опре-
деления адреса смещения (позиции) символа в конкретной строке.
Набор отображаемых символов для наиболее часто применяе-
мых жидкокристаллических дисплеев представлен на рис. 8.19.
На практике допускается использование восьми программно за-
даваемых символов, которым соответствуют коды с 0x000 по 0x007.
Рис. 8.19
Набор символов жидкокристаллических дисплеев
(таблица знакогенератора)
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
Эти знаки обычно программируются пользователем в оперативной
памяти знакогенератора (Character Generator RAM). Объем памяти
(64 байта) соответствует восьми строкам восьми знаков. При про-
граммировании знаков в качестве указателя адреса текущей строки
очередного знака используется курсор.
Перевод курсора в область ОЗУ знакогенератора обеспечивается
с помощью команды Move Cursor into CGRAM. Эта операция в целом
выполняется как обычная операция перемещения курсора в опре-
деленную позицию на экране, но тем не менее имеет одно суще-
ственное отличие: адреса в ОЗУ знакогенератора кратны 8. Послед-
нее, в частности, означает, что задаваемый пользователем символ О
занимает диапазон адресов ОЗУ знакогенератора, начиная с адреса
О, символ 1 - с адреса 8, символ 2 - с адреса 0x010 (16) и т.д. Текущяя
строка программируемого знака определяется в результате сумми-
рования ее смещения от верхней строки внутри знакоместа с на-
чальным адресом, определяемым кодом знака (рис. 8.20).
Для большинства приложений все специальные символы програм-
мируются единовременно, причем начинается программирование
Строка
(смещение) | I | |
0
1
2
3
4
л । о । 9 i < । n Столбец
d (номер бита)
Рис. 8.20
Знакоместо жидкокристаллического дисплея
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
с символа с кодом 0. В этом случае сначала код 0x040 должен записы-
ваться в жидкокристаллический дисплей, а уже вслед за ним - все
байты строк задаваемых пользователем символов.
. Перед пересылкой команд или данных на модуль жидкокристал-
лического дисплея для этого модуля должна быть выполнена опера-
ция инициализации. Если используется режим с 8-разрядным фор-
матом передачи данных, подобная инициализация осуществляется
с помощью такой последовательности действий:
1. Ожидание установки напряжения питания в течение более
15 мс после включения.
2. Запись кода 0x030 в жидкокристаллический дисплей и ожида-
ние в течение 5 мс завершения исполнения соответствующей
команды.
3. Запись кода 0x030 в жидкокристаллический дисплей и ожида-
ние в течение 160 мкс завершения исполнения соответствую-
щей команды.
4. Повторная запись кода 0x030 в жидкокристаллический дис-
плей и ожидание в течение 160 мкс или проверка признака «за-
нято».
5. Задание рабочих характеристик для жидкокристаллического
дисплея:
- передача команды Set Interface Length (задание формата об-
мена по интерфейсу);
- запись кода 0x008 для отключения дисплея;
- запись кода 0x001 для стирания данных дисплея;
- передача команды Set Си rso г Move Di rect ion (задание направле-
ния смещения курсора);
- передача команды Enable Display/Cu rso г (разрешение исполь-
зования дисплея/курсора) для активизации дисплея и кур-
сора.
Первая из приводимых ниже макрокоманд (LCD8) обеспечивает
нормальное взаимодействие с жидкокристаллическим дисплеем
в условиях самых жестких временных требований, поскольку реа-
лизует наибольшую скорость обмена.
Чтобы инициировать эту макрокоманду, следует ввести команд-
ное слово в виде:
LCD8 DataPort, EPort, EPin, RSPort, RSPin, RWPort, RWPin,
Frequency,
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
где параметр DataPort соответствует используемому 8-разрядному
порту ввода/вывода данных.
При этом параметры EPort и Enin определяют порт и линию (Е)
для передачи синхронизирующих импульсов, параметры RSPort
и RSPin - линию RS, а параметры RWPort и RWPin - линию R/W (в ряде
случаев не используются). Параметр Frequency указывает тактовую
частоту микроконтроллера и служит для расчета величин 'времен-
ных задержек. Единственной переменной, которая используется
макрокомандами LCD8 и LCD8Pol 1, является 8-разрядная переменная
Dlay.
Макрокоманда LCD8 может применяться для микроконтроллеров
младшего и среднего подсемейств. Исключение составляет лишь
подпрограмма LCDPORTInit: ее нельзя использовать для PIC-микро-
контроллеров младшего подсемейства. В этом случае инициализа-
ция портов ввода/вывода данных должна выполняться с помощью
команд TRIS:
LDC8 Macro DataPort, Eport, Epin, RSPort, RSPin,
RWPort, RWPin, Freq
Variable Dlay5Value, Dlayl60Value, Dlay160Bit1 = -1,
Dlay160Bit2 = -1, BitCount = 0
Variable Value = 128, Bit = 7
Dlay5Value = ((5007 * (Freq/1000)/4000)/7) + 256
Dlay160Value = (163 * (Freq/1000)/4000)/3
while (Bit > = 0 ; Определение числа битов и их позиции
; в переменной Dlayl60Value.
if ((D1ay160Va1uе & Value) != 0)
if (Dlay160Bit1 == -1) ; Установка старшего бита.
Dlay160Bit1 = Bit
else
if (Dlay160Bit2 = -1)
Dlay160Bit2 = Bit
endif
endif
BitCount = BitCount + 1
endif
Value = Value >> 1
Bit = Bit - 1
endw
if (BitCount > 2) ; Необходимы максимум два
; бита.
if ((Dlayl60Bit1 - 1) == Dlay160Bit2)
Dlay160Bit1 = Dlay160Bit1 + 1 ; Сдвиг вверх на 1
Dlay160Bit2 = -1 ; первого (старшего) бита
; и удаление второго.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
else
Dlay160Bit2 = Dlay160Bit2 + 1 ; Сдвиг вверх на 1 ; младшего бита.
endif endif
D1 ay 5 ; Задержка 5 мс.
movlw (Dlay5Value & OxOFFOO) >> 8
movwf Dlay
movlw Dlay5Value & OxOFF
subwf Dlay, w
xorlw OxOFF
addwf Dlay, w
btfsc STATUS, Z
decf sz Dlay, f
goto return $ - 5
LCDPORTInit ; Инициализация портов.
bsf STATUS, RPO ; Только для среднего ; подсемейства.
movlw 0x000
movwf DataPort
bcf EPort, Epin
bcf RSPort, SPin
bcf RWPort, RWPin
bcf STATUS, RPO
bcf EPort, Epin
bcf RSPort, RSPin
bcf return RWPort, RWPin
LCDIns ; Пересылка команды на дисплей
movwf DataPort
bcf RSPort, RSPin
if (Freq > 8000000) ; Возможно, потребуется
if (Freq < 16000000) ; задержка.
nop
else
goto $ + 1
endif endif -
bsf EPort, Epin
if (Freq > 8000000) ; Возможно, потребуется
if (Freq < 16000000) ; задержка.
nop
ilse
goto $ + 1
endif endif
bcf EPort, EPin
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
bsf Dlay, Dlay160Bit1
if (Dlay160Bit2 ! = -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Dlay, f
goto $ - 1
andlw OxOFC ; Задержка 5 мс.
btfsc STATUS, Z
call Dlay5
return
LCDChar ; Передача символа на дисплей."
movwf DataPort
bsf RSPort, RSPin
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка,
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bef EPort, EPin
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit - 2 != -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Dlay, f
goto $ - 1
return
LCDInit ; Инициализация (8 разрядов)
call Dlay5 ; Ожидание в течение 15 мс.
call D1 а у 5
call D1 а у 5
movlw 0x030
call LCDIns ; Передача команды сброса.
call D1 а у 5
movlw 0x030
call LCDIns
movlw 0x030
call LCDIns
movlw 0x038 ; Задание формата интерфейса
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
call LCDIns
movlw 0x010 ; Выключение дисплея.
call LCDIns
movlw 0x001 ; Стирание памяти дисплея.
call LCDIns
movlw 0x006 ; Задание перемещения курсора
call LCDIns
movlw OxOOE ; Включение дисплея/курсора.
call LCDIns
return
endm
Макрокоманда LCD8P011 является несколько более сложной по
сравнению с макрокомандой LCD8. Вместо задания временных задер-
жек фиксированной величины программные приложения осущест-
вляют периодический опрос жидкокристаллического дисплея, что-
бы более точно зарегистрировать момент завершения выполнения
соответствующей операции, после чего исполнение программы
может быть продолжено. Для этого необходимо предварительно
задать режим ввода данных (параметр DataPort) и в дальнейшем пе-
риодически проверять состояние бита 7 порта ввода/вывода, стро-
бируя линию Е (когда сброшен бит RS и установлен бит RW). Последо-
вательность кодов макрокоманды LCD8P0II приведена ниже:
LDC8P0II Macro DataPort, Eport, Epin, RSPort, RSPin,
RWPort, RWPin, Freq
Variable Dlay5Value, Dlay160Value, Dlay160Bit1 = -1,
Dlay160Bit2 = -1, BitCount = 0
Variable Value = 128, Bit = 7
Errorlevel 0, -224
Dlay5Value = ((5007 * (Freq/1000)/4000)/7) + 256
Dlay160Value = (163 * (Freq/1000)/4000)/3
while (Bit > = 0 ; Определение числа битов и их
; позиции в переменной D1 ау 160Va1 ие.
if ((Dlay160Value & Value) != 0)
if (Dlay160Bit1 == -1) ; Установка старшего бита.
Dlay160Bit1 = Bit
else
if (Dlay160Bit2 = = -1)
Dlay160Bit2 = Bit
endif
endif
BitCount = BitCount + 1
endif
Value = Value >> 1
Bit = Bit - 1
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
endw
if (BitCount > 2) ; Необходимы максимум два бита
if ((Dlay160Bit1 - 1) == Dlay160Bit2)
Dlay160Bit1 = Dlay160Bit1 + 1 ; Сдвиг на 1 вверх.
Dlay160Bit2 = -1 ; Удаление второго бита.
else
Dlay160Bit2 = Dlay160Bit2 + 1
endif endif
D1 ay 5 ; Задержка 5 мс.
movlw (Dlay5Value & OxOFFOO) >> 8
movwf Dlay
movlw Dlay5Value & OxOF, f
subwf Dlay, w
xorlw OxOFF
addwf Dlay, w
btfsc STATUS, Z
decfsz Dlay, f
goto return $ - 5
LCDPORTInit ; Инициализация портов.
bsf STATUS, RPO ; Только для среднего ; подсемейства.
movlw 0x000
movwf DataPort
bcf EPort, EPin
bcf RSPort, RSPin
bcf RWPort, RWPin
bcf STATUS, RPO
bcf EPort, Epin
bcf RSPort, RSPin
bcf return RWPort, RWPin
LCDIns
movwf Dlay ; Передача команды на дисплей
movlw OxOFF ; Чтение флага BF.
tris DataPort
bcf RSPort, RSPin
bcf RWPort, RWPin ; Чтение регистра команд.
goto $ + 1
bsf EPort, EPin
nop
movf DataPort, w ; Чтение значения DataPort.
nop
bcf EPort, EPin
andlw 0x080 ; Старший бит установлен?
btfss STATUS, Z
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
goto bcf $ - 7 RWPort, RWPin
movlw 0 ; Возврат значения DataPort.
tris DataPort
movf Dlay, w ; Получение символа.
movwf DataPort
if (Freq > 8000000) if (Freq < 16000000) ; Возможно, потребуется задержка
nop
else
goto $ + 1
endif endif
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop 0
else
goto $ + 1
endif endif
bcf EPort, EPin
return
LCDChar ; Передача символа на дисплей.
movwf Dlay
movlw OxOFF ; Чтение флага BF.
tris DataPort
bcf RSPort, RSPin ; Чтение регистра команд.
bsf RWPort, RWPin
goto $ + 1
bsf EPort, EPin
nop
movf DataPort, w ; Чтение данных.
nop
bcf EPort, EPin
andlw 0x080 ; Старший бит установлен?
btfss STATUS, Z
goto $ - 7
bsf RSPort, RSPin
bcf RWPort, RWPin
movlw 0 ; Возврат значения DataPort.
tris DataPort
movf Dlay, w ; Получение символа.
movwf DataPort
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
else
goto $ + 1
endif
endif
bsf EPort, ERin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bef EPort, EPin
return
LCDInit ; Инициализация (8 разрядов).
call Dlay5
call Dlay5
call Dlay5
movlw 0x030
movwf DataPort
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf Eport, Epin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bef Eport, EPin ; Команда сброса.
call Dlay5
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf Eport, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
пор
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
else
goto $ + 1
endif
endif
bcf Eport, Epin ; Команда сброса.
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс
if (Dlay160Bit2 ! = -1)
bsf Dlay, Dlay160Bit2
endif
decfszDlay, f
goto $ - 1
movlw 0x030
call LCDIns
movlw 0x038 ; Задание формата.
call LCDIns
movlw 0x010 ; Выключение дисплея.
call LCDIns
movlw 0x001 ; Стирание памяти дисплея.
call LCDIns
movlw 0x006 ; Задание перемещения курсора
call LCDIns
movlw OxOOE ; Включение дисплея/курсора.
call LCDIns
return
errorlevel 0, +224
endm
Если жидкокристаллический дисплей работает в 4-разрядном
формате передачи данных, то записываемые данные должны пере-
даваться в виде полубайтов. При пересылке байта сначала передает-
ся старший полубайт, а затем младший. Что касается вывода Е, то он
активизируется каждый раз при передаче полубайта на жидкокрис-
таллический дисплей. При инициализации режима с 4-разрядным
форматом передачи данных необходимо выполнить следующие
действия:
1. Ожидание установления напряжения питания в течение не ме-
нее 15 мс после включения.
2. Запись кода 0x03 в жидкокристаллический дисплей и ожидание
в течение 5 мс завершения исполнения команды.
3. Запись кода 0x03 в жидкокристаллический дисплей и ожидание
в течение 160 мкс завершения исполнения команды.
4. Повторные запись кода 0x03 в жидкокристаллический дисплей
и ожидание в течение 160 мкс (или проверка состояния при-
знака «занято» до его сброса).
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
5. Задание рабочих параметров жидкокристаллического дисплея:
запись кода 0x02 в жидкокристаллический дисплей для разреше-
ния режима с 4-разрядным форматом передачи данных.
Все перечисленные ниже команды/операции записи требуют
использования двух полубайтов:
♦ передача команды Set Interface Length (Задание формата обме-
на по интерфейсу);
♦ запись кода 0x00/0x08 для отключения дисплея;
♦ запись кода 0x00/0x01 для стирания данных дисплея;
♦ передача команды Set Cursor Move Direction (Задание направле-
ния смещения курсора);
♦ передача команды Enable Display/Cu rsoг (Разрешение исполь-
зования дисплея/курсора) для активизации дисплея и курсора.
Режим с 4-разрядным форматом передачи данных на жидкокрис-
таллический дисплей и соответствующая макрокоманда LCD4 явля-
ются, по существу, модификациями соответственно режима с 8-раз-
рядным форматом передачи данных и макрокоманды LCD8. Чтобы
инициировать макрокоманду LCD4, необходимо воспользоваться
следующим командным словом:
LCD4 DataBit, DataPort, DataPin, EPort, EPin, RSPort, RSPin,
RWPort, RWPin, Freq,
где параметр DataBit задается младшими битами данных и может
принимать только значения 0 или 4. В этой макрокоманде наряду
с переменной Dlay используется вторая переменная LCDTemp:
LCD4 Macro DataPort, Eport, Epin, RSPort, RSPin, RWPort, RWPin,
Freq
Variable Dlay5Value, D1 aу 160Va1ue, Dlay160Bit1 = -1,
Dlay160Bit2 = -1, BitCount = 0
Variable Value = 128, Bit = 7
Errorlevel 0, -224
Dlay5Value = ((5007 * (Freq/1000)/4000)/7) + 256
Dlay160Value = (163 * (Freq/1000)/4000)/3
while (Bit > = 0 ; Определение числа битов
; и их позиций для переменной
; Dlayl60Value.
if ((Dlayl60Value & Value) != 0)
if (Dlay160Bit1 == -1) ; Установка старшего бита.
Dlay160Bit1 = Bit
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
else
if (Dlay160Bit2 == -1)
Dlay160Bit2 = Bit
endif
endif
BitCount = BitCount + 1
endif
Value = Value >> 1
Bit= Bit - 1
endw
if (BitCount > 2) ; Необходимы максимум два
; бита.
if ((Dlay160Bit1 - 1) == Dlay160Bit2)
Dlay160Bit1 = Dlay160Bit1 + 1 ; Сдвиг на 1 вверх.
Dlay160Bit2 = -1 ; Удаление второго бита,
else
Dlay160Bit2 = Dlay160Bit2 + 1
endif
endif
Dlay5 • ; Задержка 5 мс.
movlw (Dlay5Value & OxOFFOO) >> 8
movwf Dlay
movlw Dlay5Value & OxOF, f
subwf Dlay, w
' xorlw OxOFF
addwf Dlay, w
btfsc STATUS, Z
decfsz Dlay, f
goto $ - 5
return
LCDPORTInit ; Инициализация портов
bsf STATUS, RPO ; Только для среднего
if (DataBit == 0) ; подсемейства.
movlw OxOFO
else
movlw OxOOF
endif
movwf DataPort
bcf EPort, EPin
bcf RSPort, RSPin
bcf RWPort, RWPin
bcf STATUS, RPO
bcf EPort, EPin
bcf RSPort, RSPin
bcf RWPort, RWPin
return
LCDIns ; Передача команды на дисплей
movwf LCDTemp ; Сохранение значения.
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
if (DataBit == 0) ; Первым передается ; старший полубайт.
swapf andlw LCDTemp, w OxOOF
else andlw OxOFO
endif movwf DataPort
bef RSPort, RSPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bef EPort, EPin
if (DataBit == 0)
movf LCDTemp, w
andlw OxOOF
else
swapf LCDTemp, w ; Младший полубайт
; передается вторым.
andlw OxOFO
endif
movwf DataPort
bef RSPort, RSPin
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
endif
endif bcf EPort, EPin bsf Dlay, Dlay160Bit1 : ; Задержка 160 мкс.
if (Dlay160Bit2 != -1) bsf Dlay, Dlay160Bit2 endif decfsz Dlay, f goto $ - 1 movf LCDTemp, w andlw OxOFC btfsc STATUS, Z call Dlay5 return LCDChar ; Передача символа на дисплей.
movwf LCDTemp ; Сохранение значения.
if (DataBit == 0) swapf LCDTemp, w ; Передача старшего полубайта.
andlw OxOOF else andlw OxOFO endif movwf DataPort bsf RSPort, RSPin if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000) nop else goto $ + 1 endif endif bsf EPort, EPin if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000) nop else goto $ + 1 endif endif bcf EPort, EPin if (DataBit == 0) movf LCDTemp, w andlw OxOOF else swapf LCDTemp, w ; Передача младшего полубайта.
andlw OxOFO
endif
movwf DataPort
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
bsf RSPort, RSPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf EPort, EPin
if (Freq > 8000000)
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bef EPort, EPin
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit2 != -1)
bsf Dlay, Dlay160Bit2
endif
decfsz : Dlay, f
goto $ - 1
return
LCDInit ; Инициализация (8 разрядов).
call Dlay5 ; Ожидание 15 мс.
call Dlay5
call Dlay 5
if (DataBit == 0) ; Команда сброса.
movlw 0x003
else
movlw 0x030
endif
movwf DataPort
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка
if (Freq < 16000000)
nop
else
goto $ + 1
endif
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
endif
bcf EPort, EPin
call Dlay5
bsf EPort, EPin
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bcf EPort, EPin
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit2 != -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Dlay, f
goto $ - 1
bsf EPort, Epin ; Третья команда сброса.
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
endif
bcf , EPort, EPin
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit2 ! = -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Olay, f
goto • $, - 1
if (DataBit == 0) ; Задание формата.
movlw 0x002
else
movlw 0x020
endif
movwf pataPort
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else'
goto $ + 1
.endif
endif
bsf EPort, EPin
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq пор else < 16000000) ; Задержка 160 мкс.
goto endif endif $ + 1
bcf EPort, EPin
bsf Olay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit2 != -1)
bsf endif Dlay, Dlay160Bit2
decfsz Dlay, f
goto $ - 1
movlw 0x028 ; Задание формата.
call LCDIns
movlw 0x010 ; Выключение дисплея.
call LCDIns
movlw 0x001 ; Стирание памяти.
call LCDIns
movlw 0x006 ; Определение перемещения курсора
call LCDIns
movlw OxOOE ; Включение дисплея/курсора.
call return endm LCDIns
При использовании этой макрокоманды рекомендуется для управ-
ления и передачи данных 4-разрядного порта (DataPort) выбирать
выводы, относящиеся к одному и тому же 8-разрядному порту мик-
роконтроллера.
Требования по организации интерфейсных связей PIC-микрокон-
троллеров с жидкокристаллическими дисплеями могут быть заметно
упрощены при использовании схемы, показанной на рис. 8.21.
Здесь последовательно передаваемые данные комбинируются
с содержимым сдвигового регистра для формирования синхрони-
зирующего импульса Е на соответствующем временном интервале.
Проводное И, которое реализуется с помощью резистора (1 кОм)
и диода 1N914 и объединяет линию входных данных Data с выходом
Шестого D-триггера буферного регистра 74SL174. Такой подход тре-
бует на один вывод меньше, чем в случае применения трехпровод-
ной схемы со сдвиговым регистром, однако предусматривает незна-
чительное увеличение числа используемых команд.
Буферный регистр 74LS174 сконфигурирован по схеме сдвиго-
вого регистра, осуществляющего последовательно-параллельное
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Vcc
74LS174
усс Жидкокристаллический
дисплей
16-Vcc
0.1 мкФ ZZZ
77/77
Тактовые
импульсы-------
Данные....• --
Vcc
1 -_Clr
9-Clk
3-1D
8-Gnd
1Q- 2
2D- 4
2Q- 5
3D- 6
3Q- 7
4D-11
4Q-10
5D-13
5Q-12
6D-14
6Q-15
ЮК
1N914
1 - Gnd
2-Vcc
3-Con
4-RS
5-RW
6-E
7-DO
8-D1
9-D2
10-D3
11-D4
12-D5
13-D6
14-D7
1 К
Рис. 8.21
Двухпроводная схема взаимодействия с жидкокристаллическим дисплеем
преобразование входных данных. Следует отметить, что для других
микросхем может потребоваться изменение полярности тактовых
импульсов. При использовании же регистра 74LS174 запоминание
данных в нем производится по переднему фронту синхронизирую-
щих импульсов (то есть при переходе от низкого уровня логическо-
го сигнала к высокому).
На рис. 8.22 прйведены временные диаграммы работы двухпро-
водной схемы и специально проиллюстрированы операции стира-
ния данных в устройстве 74LS174, загрузки данных в это устройство,
а также формирования синхронизирующего импульса Е, когда пере-
даваемые данные устойчивы и уровни сигналов линий 6Q и Data вы-
сокие.
Перед выполнением операции записи данных регистр обнуляет-
ся. В дальнейшем производится запись логической 1 (для формиро-
вания сигнала управления Е), после чего инициируется передача бита
R/S и четырех бит данных. После заполнения регистра на линии Data
формируется синхронизирующий импульс Е.
Наиболее существенное отличие от трехпроводной схемы состоит
в том, что в первом случае данные сдвигового регистра должны
предварительно стираться, поскольку в него следует загружать дрУ'
гие данные; кроме того, для загрузки 4-разрядных данных в жидко-
кристаллический дисплей требуется в два раза большее число син-
хронизирующих импульсов.
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
Данные -------
Тактовые
импульсы
1Q ”1Qo”
2Q -2Qo —
3Q “3Qo~[
4Q -4Qo —
5Q “5Qb —
6Q
Рис. 8.22
Временные диаграммы для процедуры записи данных в жидкокристаллический дисплей
с использованием двухпроводной схемы подключения
В некоторых спецификациях сигнал линии Е жидкокристалличес-
кого дисплея считается активным при задании высокого уровня, тог-
да как в других его действие проявляется по заднему фронту. Для
нормальной работы двухпроводной схемы необходимо исключить
изменение состояния линий не менее чем за 450 нс перед изменени-
ем сигнала линии Е на 0 (время предустановки).
Макрокоманда управления для двухпроводной схемы подключе-
ния жидкокристаллического дисплея предусматривает применение
тех же самых параметров, что и ранее описанные макрокоманды.
Время ее выполнения несколько больше времени выполнения пре-
дыдущих макрокоманд, однако она предполагает использование
Меньшего числа выводов PIC-микроконтроллера для ввода/вывода
Данных. Эта макрокоманда (LCD2) предусматривает работу с пере-
менными Dlay и LCDTemp.
LCD2 Macro ClockPort, ClockPin, DataPort, DataPin, Freq
Variable Dlay5Valuet Dlay160Value, Dlay160Bit1 = -1,
Dlay160Bit2 = -1, BitCount = 0
Variable Value = 128, Bit - 7
Errorlevel 0, -224
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Dlay5Value = ((5007 * (Freq/10ОО)/4000)/7) + 256
Dlay160Value = (163 * (Freq/1000)/4000)/3
while (Bit > = 0 ; Определение числа битов
; и их позиций для переменной
; Dlay160Value.
if ((D1ay160Va1ue & Value) != 0)
if (Dlay160Bit1 == -1) ; Установка старшего бита.
Dlay160Bit1 = Bit
else
if (Dlay160Bit2 = = -1)
Dlay160Bit2 = Bit
endif
endif
BitCount = BitCount + 1
endif
Value = Value >> 1
Bit= Bit - 1
endw
if (BitCount > 2) ; Необходимы максимум два бита,
if ((Dlay160Bit1 - 1) == Dlay160Bit2)
Dlay160Bit1 = Dlay160Bit1 + 1; Сдвиг на 1 вверх.
Dlay160Bit2 = -1 ; Удаление второго бита.
else
Dlay160Bit2 = Dlay160Bit2 + 1
endif
endif
Dlay5 ; Задержка 5 мс.
movlw (Dlay5Value & OxOFFOO) >> 8
movwf Dlay
movlw Dlay5Value & OxOF, f
subwf Dlay, w
xorlw OxOFF
addwf Dlay, w
btfsc STATUS, Z
decfsz Dlay, f
goto $ - 5
return
LCDPORTInit ; Инициализация портов.
bsf STATUS, RPO ; Только для среднего подсемейства,
if (DataBit == 0)
movlw OxOFO
else
movlw OxOOF
endif
movwf DataPort
bcf ' EPort, EPin
bcf RSPort, RSPin
bcf RWPort, RWPin
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
bcf STATUS, RPO
bcf EPort, EPin
bcf RSPort, RSPin
bcf RWPort, RWPin
return
LCDIns
movwf LCDTemp
movlw 6
movwf Dlay
bsf ClockPort, ClockPin
bcf ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf Dlay
movf LCDTemp, w
swapf LCDTemp, f
bsf LCDTemp, 5
bcf LCDTemp, 4
bcf DataPort, DataPin
btfsc LCDTemp, 5
bsf DataPort, DataPin
bsf ClockPort, ClockPin
tcf ClockPort, ClockPin
rlf LCDTemp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin
if (Freq > 8000000)
if (Freq < 16000000)
nop
else
goto $ + 1
endif endif
bcf DataPort, DataPin
bsf Dlay, 2
bsf Dlay, 1
bsf ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf LCDTemp
bsf Dlay, 2
Передача команды на дисплей.
Сохранение значения.
Обнуление регистра сдвига.
Содержимое регистра w
все еще равно 6.
Сдвиг старших 4 битов.
Корректировка значения
LCDTemp для сдвига.
Это бит RS,
Сдвиг на выход.
5 - текущий MSB.
Выдача следующего старшего
бита.
Возможно, потребуется
задержка.
Значение Dlay для сдвига
равно 6.
Обнуление регистра сдвига.
Сдвиг младшего полубайта.
Значение Dlay для сдвига
равно 6.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
bsf Dlay, 1
bsf LCDTemp, 5 Корректировка значения LCDTemp для сдвига.
bef LCDTemp, 4 Это бит RS.
bef DataPort, DataPin Сдвиг всех разрядов.
btfsc LCDTemp, 5 5 - текущий MSB.
bsf DataPort, DataPin
bsf ClockPort, ClockPin
bef ClockPort, ClockPin
rlf LCDTemp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin
if (Freq > 8000000) ; Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif endif
bef DataPort, DataPin
bsf Dlay, Dlay160Bit1 : ; Задержка 160 мкс.
if (Dlay160Bit2 != -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Dlay, f
goto $ - 1
andlw OxOFC ; ; Для задержки 5 мс.
btfsc STATUS, Z
call return D1 ay 5
LCDChar Передача символа на дисплей.
movwf LCDTemp Сохранение значения.
movlw 6- Обнуление регистра сдвига.
movwf Dlay
bsf ClockPort, ClockPin
bef ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf Dlay ; Регистр w еще равен 6.
movf LCDTemp, w ; Сдвиг старших 4 битов.
swapf LCDTemp, f
bsf LCDTemp, 5 Корректировка значения LCDTemp для сдвига.
bsf LCDTemp, 4 Это бит RS.
bef DataPort, DataPin Выдача следующего старшего бита
btfsc LCDTemp, 5
bsf DataPort, DataPin
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
bsf ClockPort, ClockPin
bcf ClockPort, ClockPin
rlf LCDTemp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin Запоминание данных.
if (Freq > 8000000) Возможно, потребуется задержка.
if (Freq nop else < 16000000)
goto endif endif $ + 1
bcf DataPort, DataPin
bsf Dlay, 2 ; Dlay = 6 для выдачи.
bsf Dlay, 1
bsf ClockPort, ClockPinO ; Обнуление регистра ; сдвига.
bcf ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf LCDTemp ; ; Выдача младшего полубайта.
bsf Dlay, 2 ; ; Dlay = 6 для выдачи.
bsf Dlay, 1
bsf LCDTemp, 5 Корректировка значения LCDTemp для сдвига.
bsf LCDTemp, 4 Это бит RS.
bcf DataPort, DataPin Выдача всех битов.
btfsc LCDTemp, 5 5 - текущий MSB.
bsf DataPort, DataPin Выдача следующего старшего бита.
bsf ClockPort, ClockPin
bcf ClockPort, ClockPin
rlf LCDTemp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin Запоминание данных.
if (Freq > 8000000) Возможно, потребуется задержка.
if (Freq nop else < 16000000)
goto endif endif $ + 1
bcf DataPort, DataPin
bsf Dlay, Dlay160Bit1 ; ; Задержка 160 мкс.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
if (Dlay160Bit2 ! = -1)
bsf Dlay, Dlay160Bit2
endif decfsz goto Dlay, f $ - 1
return
LCDInit ; Инициализация (8 разрядов)
call Dlay5 ; ; Задержка 15 мс.
call DI ay 5
call DI ay 5
movlw 0x023 Инициализация портов.
movlw LCDTemp Сохранение значения.
movlw 6 Обнуление регистра сдвига.
movwf Dlay
bsf ClockPort, ClockPin
bcf ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf Dlay
bcf DataPort, DataPin Последовательная выдача каждого бита.
btfsc LCDTemp, 5 5 - текущий MSB.
bsf DataPort, DataPin Выдача следующего старшего бита.
bsf ClockPort, ClockPin
bcf ClockPort, ClockPin
rlf LCDTemp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin
if (Freq > 8000000) ; ; Возможно, потребуется ; .задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif endif
bcf DataPort, DataPin
call DI ay 5
bsf DataPort, DataPin Передача 0x03 на дисплей.
if (Freq > 8000000) Возможно, потребуется задержка.
if (Freq < 16000000)
nop
else
goto $ + 1
endif
УПРАВЛЕНИЕ ЖИДКОКРИСТАЛЛИЧЕСКИМ ДИСПЛЕЕМ
endif
bef DataPort, DataPin
bsf Dlay, Dlay160Bit1
if (Dlay160Bit2 ! = -1)
; Задержка 160 мкс.
bsf Dlay, Dlay160Bit2
endif
decfszDlay, f
goto $ - 1
bsf DataPort, DataPin
if Freq > 8000000)
if (Freq < 16000000)
nop else
goto $ + 1
endif endif
bef DataPort, DataPin
bsf Dlay, Dlay160Bit1
if (Dlay160Bit2 != -1)
bsf Dlay, Dlay160Bit2
endif
decfsz Dlay, f
goto $ - 1
movlw 0x022
movwf LCDTemp
movlw 6
movwf Dlay
bsf ClockPort, ClockPin
bef ClockPort, ClockPin
decfsz Dlay, f
goto $ - 3
movwf Dlay
bef DataPort, DataPin
btfsc LCDTemp
bsf DataPort, DataPin
bsf CkockPort, ClockPin
bef ClockPort, ClockPin
rlf LCDTmp, f
decfsz Dlay, f
goto $ - 7
bsf DataPort, DataPin
if (freq > 8000000)
if (Freq < 16000000)
nop
else
Передача 0x03 на дисплей.
Возможно, потребуется
задержка.
Задержка 160 мкс.
; Инициализация портов.
; Сохранение значения.
; Обнуление регистра сдвига.
Выдача всех битов.
5 - текущий MSB.
Выдача следующего старшего
бита.
Возможно, потребуется
задержка.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
goto $ + 1
endif endif bcf DataPort, DataPin
bsf Dlay, Dlay160Bit1 ; Задержка 160 мкс.
if (Dlay160Bit2 != -1)
bsf Dlay, Dlay160Bit2
endif decfsz Dlay, f
goto $ - 1
movlw 0x028 ; Задание формата.
call LCDIns
movlw 0x010 ; Выключение дисплея.
call LCDIns
movlw 0x001 ; Стирание памяти.
call LCDIns
movlw 0x006 ; Определение перемещения курсора
call LCDIns
movlw ОхООЕ ; Включение дисплея/курсора.
call LCDIns
return
endm
ИНТЕРФЕЙС 12С В РЕЖИМЕ MASTER
Ниже приведена макрокоманда управления обменом по интерфей-
су 12С в режиме MASTER. Для нормальной работы интерфейса требу-
ется подключить линии SDA и SCL через внешние резисторы сопро-
тивлением от 1 до 10 кОм к напряжению питания.
I2CSetup Macro ClockPort, ClockPin, DataPort, DataPin, Rate,
Frequency
Variable Dlay, Fraction ; Величина временной задержки
; в командных циклах.
Dlay = ((Frequency * 110)/(800 * Rate))/1000
Fraction = ((Frequency * 110)/(800 * Rate))/1000 - (Dlay * 1000)
if Fraction > 499)
Dlay = Dlay + 1
endif
I2CbitSetup ; Подготовка шины I2C для работы.
bsf STATUS, RPO
bcf ClockPort, ClockPin ; Инициирование выходов
bcf DataPort, DataPin
bcf STATUS, RPO
bsf ClockPort, ClockPin ; На всех выходах
высокие уровни.
ИНТЕРФЕЙС 12С В РЕЖИМЕ MASTER
DlayMacro Dlay ; Уровни сигналов
; на линиях должны быть
; высокими достаточное время.
return
I2Cstart ; Формирование стартовой
; последовательности (старт-условие),
bsf ClockPort, ClockPin
bsf DataPort, DataPin
DlayMacro Dlay - 2
Bcf DataPort, DataPin DlayMacro Dlay bcf ClockPort, ClockPin DlayMacro Dlay - 2 return ; 12C st о p DlayMacro Dlay bsf ClockPort, ClockPin DlayMacro Dlay bsf DataPort, DataPin return ; I2Cread ; bsf I2CTemp, 0 btfsc STATUS, C bcf I2CTemp, 0 ; bsf STATUS, RPO ; bsf DataPort, DataPin bcf STATUS, RPO movlw 0x010 - 8 I2CR1oop bsf ClockPort, ClockPin DlayMacro (Dlay/2) - 1 bcf STATUS, C btfsc DataPort, DataPin ; Низкий уровень ; на линии данных „(SDA). ; Низкий уровень на ; линии ; синхронизации (SCL). ; Специфицированная ; задержка. Выход с SDA = SCL = 0. Формирование стоповой последовательности (стоп-условие). ; Высокий уровень ; на линии ; синхронизации (SCL). Выход с SDA = SCL = 1. Прием 8 бит по шине и повтор приема с выдачей подтверждения АСК. Если перенос, посылается подтверждение АСК. Предоставление устройству возможности выдать данные на линию. ; Цикл приема. ; SCL = 1. ; Прием бита данных.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
bsf STATUS, C
DlayMacro (Dlay/2) - 2
bcf ClockPort, ClockPin
rlf I2Temp, f ; Сдвиг I2Temp влево.
andlw 0x07F
btfsc STATUS, C
iorlw 0x080
addlw 0x001
DlayMacro Dlay - 9
btfss STATUS, DC
goto 12C Loo p
bcf DataPort, DataPin
bsf STATUS, RPO ; Выдача бита подтверждения.
bcf DataPort, DataPin
bcf STATUS, RPO
andlw 0x080 ; Высокий или низкий уровень?
btfss STATUS, Z
bsf DataPort, DataPin ; Низкий, выдается
; подтверждение.
DlayMacro Dlay/18
bsf ClockPort, ClockPin
DlayMacro Dlay
bcf ClockPort, ClockPin
bcf DataPort, DataPin
movf I2CTemp, w ; Байт принят, сохранен.
return ; Выход с SDA = SCL = 0.
I2Csend ; Посылка 8 бит данных
; из регистра w,
; нужно получить
; подтверждение АСК.
movwf I2CTemp
movlw 0x010 - 8
12CS1oo p ; Цикл передачи.
rlf I2CTemp, f ; Сдвиг буфера и выдача
; данных в линию через бит
; переноса.
btfsc STATUS, С
goto $ + 4
nop
bcf DataPort, DataPin ; SDA = 0.
goto $ + 3
bsf DataPort, DataPin ; SDA = 1.
goto $ + 1
bsf ClockPort, ClockPin ; Выдача синхроимпульса
; (SCL = 1).
DlayMacro Dlay
bcf ClockPort, ClockPin
ИНТЕРФЕЙС PC В РЕЖИМЕ MASTER
D1 а у М а с го Dlay - 12
addlw 1
btfss STATUS, DC
goto I2CSLoop
D1 а у М а с го 6
bsf STATUS, RPO ; Получение бита
; подтверждения ACK.
bsf DataPort, DataPin
bef STATUS, RPO
bsf ClockPort, ClockPin
DlayMacro (Dlay/2) - 1
bef STATUS, C
btfss DataPort, DataPin
bsf STATUS, C ; SDA = 0, подтверждение
; принято.
DlayMacro (Dlay/2) - 2
bsf STATUS, RPO
bef DataPort, DataPin
bef STATUS, RPO
bef ClockPort, ClockPin
bef DataPort, DataPin
return ; Возврат, бит подтверждения
; в бите переноса, SCL = SDA = 0.
endm
Макрокоманда во многом аналогична макрокоманде
I2CSetup I2CClock, I2CData, Rate, Frequency
Описание параметров этой макрокоманды приводится в табл. 8.7.
Таблица 8.7
Назначение параметров макрокоманды 12CSetup
Параметр Описание
12СС1оск Порт и вывод, используемые для линии SCL. Подсоединен подтягивающий резистор 1-10 кОм
l2CData Порт и вывод, используемые для линии SDA. Подсоединен подтягивающий резистор 1-10 кОм
Rate Скорость передачи данных для модуля 12С задается в килогерцах (обычно составляет 100 или 400 кГц)
frequency Частота синхронизирующих импульсов микроконтроллера
При использовании указанного интерфейса данные пересылают-
ся на подключенное к шине устройство в такой последовательности:
ожидание - старт - команда записи_А - адрес_байта_А - старт -
команда_считывания_А - данные.А - данные_М - стоп - ожидание.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Подпрограммы, входящие в состав макрокоманды I2CSetup, мо^
но использовать для выполнения операции считывания 16-разряд-
ных данных (из последователного EEPROM):
call 12CSt а гt Начало передачи.
movlw CommandWrite Пересылка адреса для чтения 16-разрядного слова.
call I2CSend
movlw AddressByte
call I2CSend
call I2CStart ; Подготовка I2C EEPROM ; к считыванию.
movlw CommandRead ; Команда чтения.
call I2CSend
bsf STATUS, C ; ; Считывание байта с подтверждением
call I2CRead
movwf 12CDa ta
bcf STATUS, C Считывание второго байта и окончание обмена за счет “неподтверждения”.
call I2CRead
movwf I2CData + 1
call I2Cstop ; ; Окончание посредством передачи
стоп-условия.
ИНТЕРФЕЙС RS-232
Интерфейс RS-232 - достаточно давно разработанный стандарт, ко-
торый предусматривает применение сигналов с нетипичными на
сегодняшний день уровнями напряжения. В данном случае состоя-
ние «Mark» (1) реально соответствует уровню напряжения -12 В,
a «Space» (0) - уровню напряжения +12 В. Уровни напряжения в об-
ласти переключения (от -3 до +3 В) считаются неопределенными
и могут восприниматься и как 0, и как 1 - в зависимости от конкрет-
ного интерфейсного устройства.
Линии «рукопожатия» основаны на тех же самых логических уров-
нях напряжения, что и вышеописанные линии передачи/приема
данных, и служат для обеспечения протокольного взаимодействия
между различными устройствами и управления процедурой переда-
чи данных между компьютерами.
Линии «запрос на пересылку» (RTS) и «инициирование пересылки»
(CTS) используются обычно для управления потоками данных, переда-
ваемых между компьютерами (DCE) и модемами (DTE). После подготов-
ки компьютера к передаче данных он активизирует линию RTS. Если
оконечное устройство (DTE) готово к приему данных, оно формирует
ИНТЕРФЕЙС RS-232
сигнал CTS. Если компьютер не в состоянии принять данные (напри-
мер, из-за того, что его буфер заполнен или выполняются какие-либо
операции по обработке данных), сигнал на линии RTS выдаваться не
будет, тем самым соответствующее устройство уведомляется о невоз-
можности приема компьютером дополнительной информации.
Линии «готовность терминала» (DTR) и «готовность модема» (DSR)
обычно применяются для подготовки сеанса передачи данных. В случае
готовности к взаимодействию с оконечным устройством (DTE) ком-
пьютер выдает в линию DTR соответствующий сигнал (сообщение).
Если оконечное устройство может принять данные, оно формирует
сигнал в линии DSR для уведомления компьютера о готовности к се-
ансу передачи данных. При возникновении каких-либо ошибок, свя-
занных с аппаратными средствами, это устройство отменяет сообще-
ние в линии DSR д ля уведомления компьютера о возникших проблемах.
Аналогичным образом при исчезновении сигнала несущей модемы от-
менят сообщение DSR.
В линии «обнаружение сигнала несущей» (DCD) сообщение фор-
мируется, когда модемом установлена связь с другим устройством
(модемом). С помощью линии «индикация сигнала вызова» (RI) ком-
пьютер информируется о генерации сигналов вызова.
Следует отметить, что эти линии, наряду с линиями «рукопожа-
тия», достаточно редко используются в приложениях с PIC-микро-
контроллерами.
Устройство передачи данных (DCE) и оконечное устройство (DTE) все-
гда связаны общим («земляным») проводом. Эта линия оказывается
весьма критичной для интерфейса RS-232, от нее зависит работа
входных преобразователей уровней, с помощью которых определяют-
ся реальные логические уровни входных напряжений линий. Об-
щий провод этого интерфейса ни при каких обстоятельствах не дол-
жен соединяться с корпусом устройства, чтобы избежать протекания
значительных токов, которые приводят к смещению напряжений
и препятствуют правильному считыванию поступающих данных.
Современные схемы подключения к интерфейсу RS-232 преду-
сматривают использование так называемой трехпроводной схемы
Интерфейса RS-232, показанной на рис. 8.23. В этом случае линии
^TS/CTS и DTR/DSR фактически закорачиваются со стороны компью-
тера или микроконтроллера.
Линии DCD и RI остаются неподключенными, а линии «рукопожа-
тия» соединяются между собой. При этом данные могут передавать-
ся и приниматься достаточно простым способом, что не требует
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Компьютер
Разъем
интерфейса
RS-232
—> ТХ
♦— Rx
— Gnd
DTR/DSR
RTS/CTS
Рис. 8.23
Типовая схема взаимодействия
устройств по интерфейсу RS-232
разработки специальных программ управ-
ления, реализующих различные логичес-
кие протоколы обмена («рукопожатия»).
Схемы 1488/1489 интерфейса RS-232 обес-
печивают преобразование логических
уровней в уровни -12 В и +12 В, принятые
в этом интерфейсе. Входы #С используют-
ся для управления входными ключами
(обычно сигналы интерфейса RS-232 по-
даются на вход #А и выводятся в виде сиг-
налов с уровнями ТТЛ логики с выхода #У).
Эти входы, как правило, остаются непод-
ключенными. Схема подсоединения ком-
пьютера к интерфейсу через данные мик-
росхемы представлена на рис. 8.24.
Рис. 8.24
Схема подключения преобразователей уровней напряжения (типа 1488/1489)
интерфейса RS-232
интерфейс rs-232
Если в устройстве имеется только одно напряжение питания +5 В,
то для преобразования логических уровней в уровни интерфейса
RS-232 удобна микросхема МАХ232; схема ее подключения показана
на рис/8.25. Другой вариант преобразования уровней напряжения
интерфейса RS-232 в уровни напряжения ТТЛ/КМОП логики преду-
сматривает наличие отрицательных напряжений передатчиков. На
схеме рис. 8.26 проиллюстрирован один из возможных вариантов
Рис. 8.25
Схема подключения процессора к интерфейсу RS-232 с помощью микросхемы МАХ232
К контакту RX интерфейса
RS-232 компьютера
К контакту ТХ интерфейса
RS-232 компьютера
ТХ
RX
Внешнее
устройство
Рис. 8.26
Вариант схемы подключения внешнего устройства к интерфейсу RS-232
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
реализации этого подхода с использованием полевого МОП транзис-
тора и двух резисторов.
Эта схема предполагает полудуплексный режим обмена по интер-
фейсу RS-232 (когда в каждый конкретный момент времени переда-
ча данных может осуществляться только одним устройством). Пере-
дача данных к компьютеру с внешнего устройства реализуется за
счет выключения и включения транзистора. В первом случае на
приемники компьютера поступает отрицательное напряжение, во
втором - положительное. Отметим, что в данной схеме цепи пере-
дачи и приема связаны и для реализации обмена требуется про-
граммная поддержка, обеспечивающая временное разделение про-
цессов приема и передачи.
Другая немаловажная особенность состоит в том, что передава-
емые внешним устройством данные должны инвертироваться.
Действительно, при выводе логического 0 фактически передается
логическая 1 и наоборот. К сожалению, по этой причине для взаи-
модействия с описанной схемой не может использоваться модуль
USART PIC-микроконтроллеров. В настоящее время фирма Dallas
Semiconductor выпустила микросхему DS275 (более поздняя версия
микросхемы DS1275), которая работает по указанному принципу,
но имеет встроенный инвертор. Подключение этой микросхемы
показано на рис. 8.27.
Линии интерфейса RS-232 могут успешно применяться для пита-
ния устройств с PIC-микроконтроллерами, поскольку потребление
их очень мало. Причем для формирования необходимых уровней
питающих напряжений допустимо использовать микросхемы
Рис. 8.27
Схема подключения интерфейса RS-232 с использованием
микросхемы DS( 1)275
ИНТЕРФЕЙСЫ RS-485/RS-422
стабилизаторов. Обеспечивать пи-
тание целесообразно через управ-
ляющие линии интерфейса RS-232
(рис. 8.28). При посылке на линии
0TR и RTS логических 0 на них по-
являются положительные напря-
жения.
Стабилизаторы понижают это
напряжение до уровня, необходи-
мого для питания микроконтрол-
лера (может обеспечиваться ток
Gnd
Рис. 8.28
Питание микроконтроллерных устройств
от линий интерфейса RS-232
78L05
—f— Vcc
_» 0.1 мкФ
до 5 мА). Для получения больших токов к схеме разрешается под-
ключить линию передачи данных (ТХ). Компьютер при этом должен
инициировать формирование выходного сигнала напряжения с по-
ложительной полярностью.
Тока в 5 мА вполне достаточно как для питания транзисторно-
резисторной схемы передатчика интерфейса RS-232, так и PIC-мик-
роконтроллера, тактируемого частотой 4 МГц, с подключенными
к нему дополнительными схемами, например жидкокристалличес-
ким дисплеем.
ИНТЕРФЕЙСЫ RS-485/RS-422
Интерфейсы RS-485/RS-422 соответствуют требованиям стандартов,
регламентирующих последовательную передачу данных по диффе-
ренциальным (парафазным) линиям. Для передачи используются сба-
лансированные парафазные драйверы, а в качестве приемников
могут выступать компараторы напряжений. Схема дифференциаль-
ной линии передачи показана на рис. 8.29.
Чтобы уменьшить влияние переменноточных наводок на работу
линии, целесообразно использовать витые пары, в которых провода
Схема передачи данных по дифференциальной линии
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
бифилярно скручены. Витую пару можно приобрести у соответству-
ющих поставщиков либо изготовить самостоятельно, просто скру-
тив отдельные проводники; при этом витая пара должна иметь ха-
рактеристическое (волновое) сопротивление, равное 75 Ом или более.
Одним из стандартов, регламентирующих передачу данных по
дифференциальной линии, является RS-422. Этот стандарт, для под-
держки которого разработано большое количество микросхем,
обеспечивает:
♦ передачу данных к нескольким приемникам;
♦ максимальную скорость передачи данных до 10 Мбит/с;
♦ длину линии передачи до 4000 м (при скорости 100 Кбод).
Режим работы с большим числом приемников проиллюстриро-
ван на рис. 8.30. Максимальные расстояние передачи и скорость
передачи данных в подобной схеме зависят от числа приемников
и суммарной длины линий. Так, максимальное расстояние переда-
чи соответствует 4000 м для частоты 100 кГц и всего 40 м для часто-
ты 10 МГц: эти примеры являются весьма наглядными и позволяют
проследить взаимосвязь между вышеупомянутыми параметрами схе-
мы. В ряде случаев при больших расстояниях приходится использо-
вать согласующий резистор с сопротивлением в несколько сотен
ом, который устанавливается между положительным и отрицатель-
ным проводниками в конце линии передачи. Это позволяет свести
к минимуму эффекты отражения сигнала приемником, а следователь-
но, и влияние других приемников.
Рис. 8.30
Использование интерфейса RS-422 для передачи данных
на несколько приемников
ПОСЛЕДОВАТЕЛЬНЫЙ АСИНХРОННЫЙ ОБМЕН
Интерфейс RS-485 во многом аналогичен интерфейсу RS-422, за
тем лишь исключением, что он допускает работу сети с множеством
передатчиков. Типовая микросхема для этого интерфейса - 75176,
которая, как показано на рис. 8.31, обеспечивает возможность пере-
дачи и приема данных.
Рис. 8.31
Схема использования микросхемы 75176 в интерфейсе RS-485
При реализации соединений по интерфейсам RS-485/RS-422 не-
обходимо тщательно проверять полярность Подключения линий
и выводов микросхем: при некорректном соединении возможна по-
теря сигналов и данных.
ПОДПРОГРАММЫ ДЛЯ ПОСЛЕДОВАТЕЛЬНОГО АСИНХРОННОГО
ОБМЕНА
Первая макрокоманда предназначена для микроконтроллеров млад-
шего и среднего подсемейств. Она записывается в виде:
NRZSerialNI TXPort, TXPin, RXPort, RXPin, Polarity, Rate, Freq,
где параметры TXPort и TXPin, а также RXPort и RXPin служат для зада-
ния вывода передачи данных и вывода приема данных соответ-
ственно. Как будет показано в следующем разделе, эти выводы могут
совмещаться в один, что позволяет заметно упростить процедуру.
Параметр Polarity, задающий полярность сигналов, определяется
как Pos (для положительной логики) или Neg (для отрицательной).
В случае отрицательной логики микроконтроллер может непосред-
ственно подключаться к интерфейсу RS-232 через токоограничиваю-
Щие резисторы. С помощью параметра Rate задается скорость передачи
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
данных (в битах в секунду), а с помощью параметра Freq - тактовая
частота микроконтроллера (в герцах).
При использовании усовершенствованного варианта макроко-
манды обеспечивается расчет величин внутренних временных за-
держек, а подпрограммы приема и передачи последовательностей
битов переносятся непосредственно в соответствующие программ-
ные приложения.
Эта макрокоманда может использоваться с микроконтроллерами
младшего и среднего подсемейств:
NRZSerialNI Macro TXPort, TXPin, RXPort, RXPin, Polarity, Rate, Fre-
quency
Variable BitDlay
BitDlay = Frequency/(4 * Rate)
SerialRX ; Прием данных в режиме 8-N-1 (8-битный
; формат без контроля по четности,
; с одним стоповым битом).
if (Polarity == Pos)
btfsc RXPort, RXPin
else
btfss RXPort, RXPin
endif
goto $ - 1
DlayMacro BitDlay/2
Ожидание входных данных.
if (Polarity == Pos)
btfsc RXPort, RXPin
else
btfss RXPort, RXPin
endif
goto SerialRX
Задержка на половину
длительности бита.
Данные достоверны.
movlw 8
SRXLoop
if ((BitDlay - 10) > 770)
DlayMacro 770
else
DlayMacro BitDlay - 10
endif
bef STATUS, C
if (Polarity == Pos)
btfsc RXPort, RXPin
else
btfss RXPort, RXPin
endif
; Если была импульсная помеха
; выполнение начинается
; с начала.
; Ожидание получения 8 бит.
; Цикл приема.
; Проверка значения.
; Удваивание задержки.
; Ожидание середины
; следующего бита.
ПОСЛЕДОВАТЕЛЬНЫЙ АСИНХРОННЫЙ ОБМЕН
bsf STATUS, С
rrf NRZTemp, f subwf NRZTemp, w xorlw OxOFF addwf NRZTemp, w btfss STATUS, Z goto SRLoop ; Прием бита декрементирования ; и окончание, если он равен 0.
if ((BitDlay - 9) > 770) ; Проверка значения.
DlayMacro 770 DlayMacro BitDlay - (770 + 9) else ; Удвоение задержки.
DlayMacro BitDlay - 9 endif ; Ожидание середины ; следующего бита.
if (Polarity == Pos) btfss RXPort, RXPin else btfsc RXPort, RXPin endif ; Столовый бит принят?
goto SerialRX ; Если нет, новый старт.
movf NRZTemp, w return ; Возврат принятого байта.
SerialTX ; Подпрограмма передачи.
movwf NRZTemp movlw 10 ; Фиксирование байта ; для передачи.
bcf STATUS, C STXLoop ; Посылка стартового бита.
if (Polarity == Pos) btfsc STATUS, C else btfss STATUS, C endif ; Выдача очередного бита.
goto $ + 4 nop ; Каждый раз требуется ; 6 циклов.
bcf TXPort, TXPin goto $ + 3 ; Выдача 0.
bsf TXPort, TXPin goto $ + 1 ; Выдача 1.
if ((BitDlay - 15) > 770) ; Проверка значения.
DlayMacro 770 DlayMacro BitDlay - (770 + 15) else ; Удвоение задержки.
DlayMacro BitDlay - 15 ; Ожидание середины ; следующего бита.
endif
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
subwf NRZTemp, w ; Декрементирование счетчика ; битов.
xorlw OxOFF
addwf NRZTemp, w
btfsc STATUS, Z
return ; Возврат после передачи ; всех битов.
bsf STATUS, C
rrf NRZTemp, f ; Сдвиг для передачи ; следующего бита.
goto STXLoop
endm
Макрокоманда инициализации последовательного интерфейса
для микроконтроллеров среднего подсемейства приведена ниже.
NRZSerialNISetup Macro TXPort, TXPin, Polarity
SerialSetup ; Инициализация модуля.
bsfSTATUS, RPO
bcfTXPort, TXPin ; Задание вывода TX
; как выхода.
bcfSTATUS, RPO
if (Polarity == Pos)
bsfTXPort, TXPin ; Передатчик в режиме
; ожидания,
else
bcfTXPort, TXPin
endif
return
endm
Следующая макрокоманда предполагает использование таймера
TMRO для реализации функций последовательного интерфейса. С по-
мощью прерывания таймера организуется трехкратная проверка
(считывание) поступающих битов при определении их значения.
Variable BitDlay, Prescaler, TMROReset
BitDlay = (Frequency/(3 * 4 * Rate)) - 10
TMROReset = BitDlay/2
Prescaler = 0
while (TMROReset > OxOFF
TMROReset = TMROReset/2 ; Использование таймера TMRO.
Prescaler = Prescaler + 1 ; Задание соответствующих значений
endw ; регистров таймера и прескалера.
if (Prescaler > 7) ; Нельзя задействовать таймер TMRO.
error "Bit Delay cannot use TMRO for Polling Clock”
; Заданная задержка не позволяет использовать TMRO
; для тактирования,
endif
ПОСЛЕДОВАТЕЛЬНЫЙ АСИНХРОННЫЙ ОБМЕН
TMROReset = 256 • - TMROReset ; Значение для таймера.
goto Afterlnt Переход после прерываний.
0 rg 4
lot Программа управления прерываниями
movwf _w
movf STATUS, w
bef STATUS, RPO ; Банк 0.
movwf .status
bef INTCON, TOIF; Сброс запроса от таймера.
movlw TMROReset
movwf TMRO
Int.RX Проверка, принят ли символ.
movlw 0x004
addwf RXCount, f
btfss STATUS, DC ; Регистр пуст.
goto _RXNo ; Проверять пока нечего.
movf RXCount, w ; Проверка, все ли принято.
xorlw 0x091
btfsc STATUS, Z ; Проверка счетчика.
goto .RXAEnd
bef STATUS, C ; Данные принимаются
через бит переноса.
if (Polarity ==Pos)
btfsc RXPort, RXPin ; 10 циклов приема.
else
btfss RXPort, RXPin
endif
bsf STATUS, C
rrf RXByte, f
bsf RXCount, 2 ; Счет начинается с цифры 4.
_RXEnd13
nop
goto _RXEnd ; 15 циклов, завершение приема
битов.
_RXEnd8 8 циклов.
goto $ + 1
nop
goto _RXEnd13
_RXNo 5 циклов от Inf.RX,
данные не поступают.
btfSC RXCount, 0 ; Что-нибудь функционирует?
goto _RXEnd8 ; 8 циклов. Если да, пропуск.
Over
btfsc RXCount, 3 ; Проверка стартовых битов?
goto _RXStartCheck
’if (Polarity == Pos)
btfsc RXPort, RXPin ; Если на линии 0, запуск
; стартового бита.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
else
btfss RXPort, RXPin
endif
bcf RXCount, 2 Стартовый бит отсутствует.
goto _RXEnd13 18 циклов от Int.RX.
_RXStartCheck До этого момента 10 циклов.
if (Polarity == Pos)
btfsc RXPort, RXPin
else
btfss RXPort, RXPin
endif
movlw OxOFF ; Обнуление счетчика приема.
addlw 1
movwf .RXEnd
goto .RXEnd До окончания 16 циклов.
.RXAtEnd 9 циклов от Int.RX, проверка последнего бита.
if (Polarity == Pos)
btfsc RXPort, RXPin
else
btfss RXPort, RXPin
endif
bsf RXFlag
clrf RXCount ; Окончание, сброс, 12 циклов
goto $ + 1
goto .RXEnd
.RXEnd
Int.TX ; Передача данных (22 цикла).
movlw 0x004 ; ; Прерывание передачи.
addwf TXCount, f
btfss STATUS, DC ; ; Пересылка следующего байта?
goto _TXSendDlayCheck
bsf TXCount, 2 ; ; Инкрементирование на 3 ; при передаче каждого бита.
bsf STATUS, C
r rf TXByte, f
movf TXPort, w ; ; Передача следующего бита.
andlw OxOFF " (1 << TXPin)
if (Polarity == Pos)
btfsc STATUS, C
else
btfss STATUS, C
endif
iorlw 1 << TXPin
movwf TXPort 12-й цикл, посылка бита.
goto .TXSendDlayCheck Нужно 14 циклов.
_TXSendDlayCheck Биты не передаются. Проверка стартового бита.
ПОСЛЕДОВАТЕЛЬНЫЙ АСИНХРОННЫЙ ОБМЕН
btfss TXCount, 0 ; Флаг нуля?
goto _TXNothingtoCheck
movlw 0x004 ; Подготовка таймера для
инкрементирования на 3.
movwf TXCount
movf TXPort, w ; Выдача стартового бита.
if (Polarity == Pos)
andlw else OxOFF " (1 << TXPin)
lorlw endif 1 << TXPin
movwf TXPort
goto _TXCompletedGoOn ; Передача первого бита
требует 14 циклов.
_TXNothingtoCheck ; Ничего не посылать?
movf TXCount, w
xorlw 0x004 ; Счетчик равен 0?
btfss STATUS, Z
xorlw 0x004 " 0x09C
btfsc STATUS, Z
clrf TXCount
_TXCompletedGoOn Завершение передачи, переход к приему.
movf .status, w ; Восстановление контекста после прерываний.
movwf STATUS
swapf _w, f
swapf retfie SerialRX _w, w
bcf RXFlag ; Сброс флага символа.
btfss RXFlag ; Ожидание приема символа.
goto $ - 1
movf return SerialTX RXByte, w ; Возврат принятого символа.
movf TXCount, f Передача?
btfss STATUS, Z ; Ожидание окончания
предыдущей передачи.
goto $ - 2
movwf TXByte ; Загрузка символа.
bsf TXCount, 0 ; Установка указателя для
подпрограммы управления
return прерываниями.
Afterlnt Возврат значения.
bsf STATUS, RPO ; Конфигурирование регистров
для прерывания.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
bcf TXPort, TXPin
movlw OxODO + Prescaler
movwf OPTION.REG " 0x080 ; Таймер TMRO ; с прескалером.
bcf STATUS, RPO
if (Polarity -- Pos)
bsf TXPort, TXPin ; Выход из режима ожидания ; для передачи данных.
else
bcf TXPort, TXPin
endif movlw TMROReset ; Обнуление таймера.
movwf TMRO
movlw (1 << GIE) + (1 « TOIE)
movwf INTCON ; Запуск прерываний.
clrf RXCount ; Обнуление счетчиков.
clrf TXCount
endm
Для работы необходимо определить несколько переменных:
♦ _w, .status - регистры сохранения контекста для программы
обработки прерываний;
♦ RXByte, TXByte - байты приема и передачи данных;
♦ RXCount, TXCount - счетчики последовательного приема и пере-
дачи данных;
♦ Flags - признаки исполнения программы.
Кроме того, требуется предварительно задавать соответствую-
щее состояние бита RXFlag, который используется для индикации
момента приема корректного байта данных.
ОДНОПРОВОДНЫЙ ИНТЕРФЕЙС
ФИРМЫ DALLAS SEMICONDUCTOR
Фирма Dallas Semiconductor разработала целый ряд периферийных
микросхем, очень привлекательных для микроконтроллерных
устройств, поскольку они используют для взаимодействия с микро-
контроллерами всего одну линию передачи данных. Подобный одно-
проводный протокол уже реализован в большом числе микросхем,
наиболее известными из которых являются цифровые термометры
DS1820 и DS1821. Эти приборы могут подключаться к одной шине
(каждый из них имеет индивидуальный код (номер), который позволя-
ет его идентифицировать). Обеспечиваемая ими погрешность измерения
температуры равна 1 °F.
ИНТЕРФЕЙС ФИРМЫ DALLAS SEMICONDUCTOR
Прибор DS1820 изготавливается в корпусах различного типа, но
чаще всего используется трехконтактный корпус типа ТО-92, по
виду напоминающий пластиковый корпус транзистора. Подключе-
ние этого прибора к микроконтроллерам PICmicro® может произ-
водиться с помощью схемы, показанной на рис. 8.32.
Рис. 8.32
Схема подключения термометра DS1820
к микроконтроллеру
Прибор DS1820 является многофункциональным и весьма поле-
зен при разработке различных приложений. В частности, он обес-
печивает возможность совместного использования однопроводной
шины с другими подобными приборами. Индивидуальный иденти-
фикационный код записывается в каждый прибор посредством пе-
режигания соответствующих плавких перемычек. Микросхема тер-
мометра может получать питание от центрального устройства.
Передача данных по однопроводной шине инициируется главным
устройством (в приложениях эта роль отводится микроконтроллеру),
Данные передаются побайтно, причем первым пересылается старший
бит. Каждая пересылка длится 60 мкс. К однопроводной шине должен
быть подключен резистор, соединяющий ее с напряжением пита-
ния. Высокий уровень сигнала формируется внешним резистором
(см. рис. 8.32), а низкий - центральным или периферийным устрой-
ством при передаче данных. Если на шине низкий уровень удержи-
вается в течение короткого времени, это означает, что была переда-
на логическая 1. Если низкий уровень удерживается более 15 мкс -
логический 0 (рис. 8.33).
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Рис. 8.33 к
Временные диаграммы передачи данных по однопроводной шине
Все сеансы передачи данных инициируются центральным устрой-
ством. При необходимости передачи оно удерживает низкий уро-
вень на шине в течение заданного временного интервала. В случае
приема данных от прибора DS1820 система задает низкий уровень
на линии и затем освобождает ее, после чего периодически опраши-
вает для определения времени возврата высокого уровня. При пере-
даче данных прерывания должны быть запрещены, поскольку пере-
ключение микроконтроллера может нарушить процесс записи или
считывания данных.
Перед направлением очередной команды к DS1820 сначала проис-
ходит обмен импульсными сигналами Reset (Перезапуск) и Presence
(Наличие). Сигнал Reset формируется путем перевода линии на низ-
кий уровень на 480-960 мкс. Микросхема DS1820 генерирует ответ-
ный сигнал, устанавливая низкий уровень линии приблизительно
на 100 мкс (от 60 до 240 мкс). Чтобы упростить создаваемые про-
граммы, в них не следует предусматривать проверку сигнала Р resence,
поскольку, как показывает практика, в большинстве приложений это
действие не требуется. Но в программных приложениях, допускаю-
щих отключение термометров, проверка сигнала Р resence может ока-
заться необходимой.
Для считывания результатов измерения температуры одним свя-
занным с микроконтроллером прибором DS1820 надо выполнить
такую последовательность действий:
1. Направить импульсный сигнал Reset и ожидать формирования
ответного импульсного сигнала Presence.
ИНТЕРФЕЙС ФИРМЫ DALLAS SEMICONDUCTOR
2. Направить код ОхОСС, соответствующий команде Skip ROM и ин-
формирующий микросхему DS1820 о том, что к ней будет по-
слана очередная команда.
3. Направить код 0x044, который соотнесен с командой, иници-
ирующей процесс измерения температуры. При этом регис-
трируется и запоминается текущее значение температуры, ко-
торое впоследствии может быть считано.
4. Ожидать не менее 500 мкс завершения процесса измерения
температуры.
5. Направить импульсный сигнал Reset и ожидать сигнала Pre-
sence.
6. Направить код ОхОСС, соответствующий повторной команде
Skip ROM.
7. Направить код ОхОВЕ для считывания оперативной памяти мик-
росхемы, содержащей текущее значение температуры (в граду-
сах Цельсия, умноженных на два).
8. Инициировать считывание девяти байт из оперативной памяти.
9. Вывести измеренное значение температуры на экран жидко-
кристаллического дисплея. Если бит 0 второго байта, получен-
ного от оперативной памяти микросхемы, равен 0, это означает,
что температура отрицательная и на экране следует отобразить
минус. Не забудьте разделить принятое значение температуры
на два.
Вся процедура измерения температуры занимает около 5 мс. Ниже
приводятся три подпрограммы управления термометром DS1820
(для случая использования микроконтроллера, тактируемого часто-
той 4 МГц).
DSReset ; Сброс DS1820 (RESET).
bcf DS1820 ; Удержание низкого уровня сигнала ; в течение 500 мкс приводит ; к перезапуску термометра DS1820.
movlw 125 ; Декрементирование до нуля.
addlw OxOFF
btfss STATUS, Z
goto $ - 2
bsf DS1820
bcf DSTRIS
movlw 0 ; Задержка в 1 мс перед посылкой
команды.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
add 1 w btfss goto bsf bsf return OxOFF STATUS, Z $ - 2 DSTRIS DS1820
Подпрограмма пересылки байтов команд:
DSSend ; Посылка байта из регистра w
movwf Temp ; к термометру DS1820.
movlw 8
DSSendLoop bcf INTCON, GIE Запрещение прерываний.
bcf DS1820 Выдача низкого уровня на линию
rrf Temp, f управления. Текущий бит перемещается в бит
btfsc STATUS, C переноса.
bsf DS182O ; Удерживание 1 в течение 4 циклов.
bsf Count, 3 ; Программный цикл (24 цикла).
Decfsz Count, f
goto $ - 1
goto $ + 1 ; ; Добавление.двух циклов
bsf DS1820 ; для 30 мкс задержки.
bsf INTCON, GIE Разрешение прерываний.
bsf Count, 3 Еще один программный цикл
Decfsz Count, f- (24 цикла) для задержки.
goto $ - 1
addlw OxOFF ; ; Декрементирование счетчика.
btfss STATUS, Z
goto DSSendLoop
return ; Возврат.
Подпрограмма считывания данных из микросхемы термометра
DS1820: DSRead ; Прием байта от DS1820 в регистр w.
movlw 8
bcf INTCON, GIE Запрещение прерываний.
bcf DS182O Выдача низкого уровня
bsf DSTRIS на линию управления. Симуляция открытого коллектора.
nop bsf STATUS, C
btfss DS1820
ИЗМЕРЕНИЕ СОПРОТИВЛЕНИЙ
bef STATUS, C
rrf Temp, f ; Прием битов.
bsf INTCON, GIE ; Разрешение прерываний.
clrf Count
decfsz Count, f
goto $ - 1
bsf DS1820
bef DSTRIS
bsf DS1820
addlw OxOFF ; Цикл для очередного бита
btfss STATUS, Z
goto DSReadLoop
movf FSROL, w
return ; Возврат.
Процедура считывания данных термометра DS1820 предусматри-
вает выполнение следующих действий:
1. Сброс ИС DS1820 (пересылка сигнала сброса).
2. Пересылка кода OCCh с последующей пересылкой кода 044h для
инициирования операций измерения температуры.
3. Ожидание в течение 480 мкс момента завершения операции
измерения температуры.
4. Пересылка очередного сигнала сброса на DS1820.
5. Пересылка кодов OCCh и OB Eh для считывания значения темпе-
ратуры.
6. Ожидание в течение 100 мкс перед считыванием первого бай-
та из прибора DS1820.
7. Считывание первого байта (или SPO) из ИС DS1820.
8. Ожидание в течение 100 мкс перед выполнением операции
считывания второго байта (или SP1) из ИС DS1820.
ИЗМЕРЕНИЕ СОПРОТИВЛЕНИЙ С ПОМОЩЬЮ ЦИФРОВЫХ
входов/выходов
Для измерения величины сопротивления (в отсутствие аналого-циф-
рового преобразователя) может использоваться достаточно простая
схема, показанная на рис. 8.34.
Принцип измерения основывается на измерении времени заря-
Да/разряда RC-цепочки, в которую включен тестируемый резис-
тор. Для измерения величины сопротивления (предполагается, что
емкость конденсатора известна) микроконтроллер сначала должен
зарядить конденсатор до уровня напряжения 5 В (или до своего вы-
годного уровня), для чего соответствующий вывод микроконтроллера
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Vcc
16F84
Vcc Vcc
Vdd
14
0.1 мкФ —11
Танталовый ПГ
RAO
_MCLR
Osc1
Osc2
Vss
Вис 8.34
Схема измерения сопротивлений
PORTB
0.1 мкФ
Танталовый
220
переводится в режим выхода. После завершения операции заряда
режим этого вывода изменяется на режим входа данных, а конденса-
тору предоставляется возможность разрядиться через потенцио-
метр. На осциллограмме (рис. 8.35) четко прослеживаются два вре-
менных интервала: цикл заряда и цикл разряда.
Рис 8.35
Осциллограмма напряжений на резисторе
Время заряда конденсатора определяется по формуле:
Время заряда = R х С х In (Uend/Ustart),
СХЕМЫ ДЛЯ УПРАВЛЕНИЯ ДВИГАТЕЛЯМИ
где величины Ustart и Uend соответствуют начальному и конечному
уровням напряжения. Поскольку емкость конденсатора (С), началь-
ный уровень напряжения и время заряда известны, эта формула мо-
жет быть приведена к виду, удобному для определения величины
сопротивления R:
R = временной интервал/(С х In (Uend/Ustart)).
Программа для управления процессом измерения представлена
ниже:
int PotRead ( ) //
{
int i
TRIS.Pin = Output; //
Pin = 1; //
for (i = 0, i < 5 мкс), i++);
TRIS.Pin = Input; //
TMRO = 0; //
while (Pin == 1); //
return TMRO; //
//
} //
Измерение сопротивления.
Назначение вывода как выхода.
Выдача 1 для заряда емкости.
Определение как входа
и удержание до полного разряда
емкости через потенциометр.
Значение таймера равно времени
разряда.
Окончание.
СХЕМЫ ДЛЯ УПРАВЛЕНИЯ ДВИГАТЕЛЯМИ
На практике для того, чтобы задать направление вращения двигате-
ля, может использоваться набор простых переключателей (в том
числе и транзисторных ключей). Час-
то управление двигателем производит-
ся с помощью мостовой схемы, которая
показана на рис. 8.36.
При размыкании всех переключате-
лей этой схемы электрический ток не
будет протекать по обмоткам двигателя,
а сам двигатель не будет вращаться. При
замыкании переключателей 1 и 4 дви-
гатель начинает вращаться в одном на-
правлении, а при замыкании переклю-
чателей 2 и 3 - в другом. Ни при каких
обстоятельствах не следует одновре-
менно замыкать оба переключателя
ь одном плече моста, поскольку это может
Рис. 8.36,
Схема управления двигателем
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
привести к выходу из строя источника питания или перегоранию
соответствующего плавкого предохранителя вследствие короткого за-
мыкания.
Регулирование скорости вращения двигателя обычно обеспечивает-
ся посредством формирования управляющих импульсов в виде сиг-
налов с широтно-импульсной модуляцией (Pulse-Wave Modulation),
как это показано на рис. 8.37. Подобный подход позволяет регули-
ровать среднюю величину мощности, поступающей на двигатель.
В данном случае чем больше величина отношения «длительность
импульса/период», тем большая мощность поступает на двигатель.
------ Длительность I——
импульса।
‘ Период [
h----------------------------Н
Рис. 8.37
Временная диаграмма сигнала с широтно-импульсной модуляцией
Частота сигнала с широтно-импульсной модуляцией должна пре-
вышать 20 кГц, что позволяет исключить звуковые эффекты, связан-
ные с формированием звуковых сигналов самим двигателем при из-
менении образующегося в нем магнитного поля.
Микросхема типа 293D (рис. 8.38) обеспечивает управление дву-
мя двигателями (по одному с каждой стороны робота), подключен-
ными к выходам соответствующих буферных элементов (выводы 3,
6,11 и 14). При этом выводы 2, 7,10 и 15 используются для управле-
ния уровнями напряжения (фактически для управления переключа-
телями вышеописанной мостовой схемы), формируемыми на выхо-
дах буферных элементов. Выводы 1 и 9 также применяются для
управления и отвечают за активизацию различных буферных эле-
ментов. Именно на эти выводы могут подаваться сигналы управле-
ния с широтно-импульсной модуляцией, которые регулируют ско-
рость вращения двигателей. Величина напряжения для питания
различных логических устройств внутри микросхемы составляет
+5 В. Напряжение питания двигателя - в пределах от 4,5 до 36 В*
Максимальная величина тока для двигателей не должна превышать
500 мА. На выходах микросхема 293D имеет защитные шунтирующее
СХЕМЫ ДЛЯ УПРАВЛЕНИЯ ДВИГАТЕЛЯМИ
Рис. 8.38
Схема подключения двигателя к микросхеме 293D
диоды. Последнее означает, что при подключении двигателя к мик-
росхеме 293D внешние защитные диоды не требуются. На рис. 8.38
показана также демпфирующая цепочка, состоящая из резистора (со-
противлением 5 Ом и допустимой мощностью рассеяния 2 Вт) и кон-
денсатора (емкостью 0,1 мкФ). Она подключается к выводам щеток
двигателя и позволяет уменьшить уровень электромагнитного излуче-
ния и импульсных радиопомех, создаваемых двигателем. Она же сгла-
живает влияние сбоев микроконтроллера на работу двигателей.
Следует напомнить, что ИС 293D и 298 используют на выходах би-
полярные транзисторы, поэтому падение напряжения на каждом вы-
ходном ключе составляет около 0,7 В (для двух ключей -1,4-1,5 В, см.
рис. 8.38). Это падение напряжения и выходной ток являются весьма
важными показателями для определения мощности, рассеиваемой
Микросхемой управления. Для микросхемы 293D величина выходно-
г° тока обычно ограничивается на уровне 1 А, а для микросхемы 298
э?от предельный показатель соответствует 3 А. Поэтому, чтобы улуч-
шить тепловые режимы работы указанных микросхем, может потре-
боваться установка радиатора для эффективного отвода тепла.
Для решения проблем, связанных с нагревом микросхем и поте-
рями мощности в мостовой схеме управления двигателями, приме-
няются мощные полевые (МОП) транзисторы.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Можно заметно упростить программы, если вместо двигателей по-
стоянного тока использовать шаговые двигатели, способные дискрет-
но (пошагово) поворачиваться или вращаться с постоянной скоро-
стью (с последовательным периодическим повторением шагов).
Схемы управления шаговыми двигателями несколько более слож-
ны и требуют больших токов управления, однако эти недостатки
полностью нивелируются за счет заметного упрощения программ
управления.
Шаговые двигатели (двухполюсные) вместо ротора имеют постоян-
ный магнит. Угловое положение ротора двигателя контролируется
с помощью пары электрических обмоток. Для поворота двигателя на его
обмотки подаются управляющие сигналы, вызывающие взаимодей-
ствие обмоток с постоянным магнитом. Для схемы, показанной на
рис. 8.39, поворот двигателя по часовой стрелке обеспечивается путем
подачи на обмотки управляющих воздействий (табл. 8.8).
Таблица 8.8
Воздействия, требующиеся для поворота шагового двигателя по часовой стрелке
Шаг Угол Обмотка А Обмотка В
1 0 S
2 90 N
3 180 N
4 270 S
5 360/0 S
Обмотка А
Обмотка В
Рис. 8.39
Схема управления шаговым двигателем
В соответствии с приведенной в табл. 8.8 последовательностью
воздействий сначала обмотка А притягивает северный полюс магнита
для установки оси двигателя в исходное положение. Затем обмотка В
притягивает южный полюс магнита, в результате чего двигатель по-
ворачивается на 90°. В дальнейшем под влиянием аналогичных воз-
действий двигатель будет вращаться
по часовой стрелке (на 90° на каждом
шаге).
На валу шагового двигателя обычно
устанавливается зубчатая передача по-
нижающего типа - так, чтобы на каж-
дом очередном шаге обеспечивался
небольшой угловой поворот управля-
емого устройства (обычно величина
этого поворота составляет всего 2 ,
а не 90°, как в вышеописанном прим6'
ре). Последнее позволяет создавать на
УПРАВЛЕНИЕ СЕРВОДВИГАТЕЛЯМИ
выходе шагового двигателя значительный крутящий моменти более
точно управлять положением выходного вала.
УПРАВЛЕНИЕ СЕРВОДВИГАТЕЛЯМИ
Серводвигатели обычно используются в радиоуправляемых летатель-
ных аппаратах, автомобилях и кораблях и могут весьма просто управ-
ляться микроконтроллерами. Подобные двигатели также часто при-
меняются в робототехнических устройствах, которые выполняют
простые механические операции. На первый взгляд это может по-
казаться странным, но серводвигатели всегда считались аналоговы-
ми устройствами. Выходной компонент серводвигателя, как пра-
вило, выполняется в виде колеса, которое должно поворачиваться
в угловом диапазоне от 0 до 90° (в настоящее время известны сер-
водвигатели, обеспечивающие возможность поворота в угловом
диапазоне от 0 до 180°, а также серводвигатели, создающие весьма
значительные по величине выходные крутящие моменты и исполь-
зующиеся в системах специального назначения). Для типовых схем
серводвигателей требуются напряжение питания +5 В, надежное
заземление и входной сигнал управления.
Не вызывает сомнения тот факт, что радиоуправляемые серводвига-
тели относятся к группе аналоговых устройств, однако их сигнал
управления может формироваться на базе цифровых логических
сигналов в виде импульсов с широтно-импульсной модуляцией.
Эти импульсы обычно имеют длительность в диапазоне от 1,0 до
2,0 мс с периодом 20 мс (рис. 8.40).
Рис. 8.40
Временная диаграмма ШИМ сигнала для управления серводвигателем
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Длительность импульса с широтно-импульсной модуляцией опре-
деляет положение колеса серводвигателя. Так, при 1,0 мс колесо
устанавливается в исходное положение (то есть угол поворота соот-
ветствует 0°), а при 2,0 мс повернется на 90°.
Для генерации импульсов с широтно-импульсной модуляцией
при помощи PIC-микроконтроллеров пригоден таймер TMRO, иници-
ирующий прерывания с периодом 20 мс, в результате чего формиру-
ются импульсы длительностью от 1,0 до 2,0 мс.
Программа обработки прерываний имеет следующий вид:
Interrupt ( ) { // Программа обработки прерывания,
int i = 0;
BitOutput ( Servo, 1); // Выдача сигнала.
for (i = 0; i < (1 мс + ServoDlay); i++);
BitOutput ( Servo, 2);
for (; i < 2 мс; i++); // Задержка 2 мс.
} // Конец программы.
СХЕМА ФОРМИРОВАНИЯ ЗВУКОВЫХ СИГНАЛОВ
PIC-микроконтроллеры могут применяться также для формирова-
ния звуковых сигналов, например с помощью схемы, показанной на
рис. 8.41.
Р1С-микроконтроллер
0,47 мкФ
Громкоговоритель
сопротивлением 8 Ом;
пьезобуззер
сопротивлением 15 Ом
Рис 8.41
Схема формирования звуковых сигналов с помощью
PIC-микроконтроллера
В этом случае временные параметры выходного сигнала задают-
ся таймером TMRO.
Для формирования сигнала частотой 1 кГц с помощью PIC-мик-
роконтроллера, использующего тактовый сигнал частотой 4 МГц,
необходима приведенная ниже программа, которая не предполага-
ет применения прескалера:
УПРАВЛЕНИЕ МОЩНОСТЬЮ НАГРУЗКИ
0 гд 4
int movwf _w ; Сохранение регистров контекста
bcf INTCON, TOIF ; Сброс всех флагов прерываний.
movlw 256 - (250 - 4)
movwf TMRO ; Установка таймера на 500 мкс.
btfsc SPKR ; Подключение громкоговорителя.
goto $ + 2
bsf SPKER ; Низкий уровень
goto $ + 2 ; на громкоговорителе.
bcf SPKER ; Высокий-уровень
swapf _w, f ; на громкоговорителе. ; Восстановление контекста.
swapf _w, w
retfie
УПРАВЛЕНИЕ МОЩНОСТЬЮ НАГРУЗКИ ПЕРЕМЕННОГО ТОКА
Для коммутации сигналов переменного напряжения часто приме-
няются триаки (TRIAC). Эти полупроводниковые устройства име-
ют в своем составе два разнополярных тиристора, которые вместе
пропускают электрически# ток без каких-либо изменений его фор-
мы и в то же время допускают управление. Типичная схема с исполь-
зованием триака показана на рис. 8.42.
Входное
переменное
напряжение
Логический
сигнал управления
Триак
t
Напряжение
нагрузки
I
----о
Рис. 8.42
Типовая схема управления нагрузкой переменного
напряжения с помощью триака
Триаки не пропускают электрический ток до тех пор, пока на их
Управляющие входы не будет подан соответствующий потенциал.
Для этого микроконтроллер должен уменьшить уровень сигнала на
Управляющем электроде. Величина тока, необходимого для откры-
вания типовых триаков, составляет порядка 25 мА, а сам сигнал
Управления может без труда формироваться на одном из выводов
Р ^-микроконтроллера.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Во избежание пожаров или получения телесных повреждений
в результате электрошока обязательно проверяйте схемы управле-
ния сетевым напряжением сначала на низковольтных источниках
и только после этого используйте их непосредственно в электри-
ческой сети.
СХЕМЫ ДАТЧИКОВ НА ОСНОВЕ ЭФФЕКТА ХОЛЛА
Переключатель на основе эффекта Холла представляет собой устрой-
ство, в котором при отклонении тока, протекающего через полу-
проводниковый компонент, от заданного направления под воздей-
ствием магнитного поля происходит изменение состояния выхода
(рис. 8.43).
Магнит
Сенсор г
отклоненного тока U .
Сенсор тока п„л_ „ / _ । Источник
основного канала ' 1 тока
~ / \
Канал прохождения тока Канал тока в отсутствие
при наличии магнитного поля магнитного поля
Рис. 8.43
Принцип действия переключателя на основе эффекта Холла
Подобный переключатель может выполняться по схеме с откры-
тым коллектором, а выходной сигнал переключателя - непосред-
ственно передаваться на вход PIC-микроконтроллера. При такой
схеме для надежного формирования выходного сигнала требуется
дополнительный резистор, чтобы высокий уровень на входе фор'
мировался без воздействия магнитного поля.
ДИСТАНЦИОННОЕ УПРАВЛЕНИЕ ТЕЛЕВИЗИОННЫМИ
ПРИЕМНИКАМИ ФИРМЫ SONY
В большинстве телевизионных приемников с инфракрасным управле-
нием предусматривается использование «манчестерского кодировй'
ния», то есть кодирования данных в информационном пакете (пото-
ке) путем варьирования длительностей посылок, соответствующих
ДИСТАНЦИОННОЕ УПРАВЛЕНИЕ ТЕЛЕВИЗОРАМИ
различным логическим уровням. Эта процедура проиллюстрирована
рис. 8.44, где приведены временные соотношения между передава-
емыми битами данных, а также на рис. 8.45, где показана осцилло-
грамма сигналов для 40-килогерцевого приемника инфракрасного
излучения, который регистрирует сигнал, поступающий от пульта
дистанционного управления фирмы Sony.
Линия в дежурном Синхронизация Синхронизация
режиме бита 0 бита 2
Стартовый "О"
импульс
Рис. 8.44
Диаграммы сигналов дистанционного управления телевизионными приемниками
Рис. 8.45
Осциллограмма реального сигнала управления
на входе приемника инфракрасного излучения
Типовой сигнал, поступающий от приемника инфракрасного излу-
чения, в отсутствие входного сигнала имеет высокий уровень. При
Появлении стартового сигнала, указывающего на факт передачи дан-
ных, выходной уровень изменяется на низкий. Передаваемые сигна-
лы содержат импульсы синхронизации, которые посылаются перед
Каждым битом данных и служат для разделения последовательно пе-
редаваемых битов.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
В телевизионных приемниках производства фирмы Sony обычно
применяются информационные пакеты с 12 битами данных, а для их
передачи используется сигнал несущей с частотой 40 кГц. Временные
соотношения для передаваемых сигналов приведены в табл. 8.9 (ба-
зовый период «Т» соответствует величине 550 мкс).
Таблица 8.9
Временные соотношения для сигналов дистанционного управления телевизионными приемниками
фирмы Sony
Тип сигнала Длительность (в периодах) Реальная величина временного интервала (в мс)
Заголовок 4Т 2,20
Импульс синхронизации Т 0,55
0 т 0,55
1 2Т 1,10
Поступающий сигнал считывается с помощью последовательно-
сти команд, приведенной ниже. Она предназначена для PIC-микро-
контроллеров, тактируемых частотой 4 МГц. При этом для ввода
сигналов в микроконтроллер используется лишь один вывод, под-
ключенный к приемнику инфракрасного излучения:
clrf IntCount ; Сброс счетчиков.
clrf ReadCount
GetPack ; Прием пакета.
movlw 0x088 ; Ожидание прерывания
; по изменению состояния порта
movwf INTCO N
Loop ; Программный цикл для каждого
; обновления экрана.
movlw 150 ; Ожидание 25 мс.
subwf IntCount, w
btfss STATUS, Z
goto Loop ; Время не закончилось.
clrf INTCON
movf ReadCount, w ; Считывание.
clrf IntCount ; Сброс для следующего пакета.
clrf ReadCount
call DispHex ; Отображение знака.
ДИСТАНЦИОННОЕ УПРАВЛЕНИЕ ТЕЛЕВИЗОРАМИ
movlw 0x08E
call WritelNS
goto GetPack Ожидание следующего пакета.
Int Прерывание, проверка
"инфракрасного входа”.
movwf _w Сохранение регистров контекста.
swapf STATUS, w
movwf .status
movlw 0x020 ; Ожидание прерывания от таймера.
movwf INTCON
movlw 256 - 20 ; Обнуление таймера.
movwf TMRO
incf IntCount Инкрементирование счетчика.
bef STATUS, C Определение значения, добавляемого к младшему байту.
btfsc PORTB, 6 Входной код определен?
goto Int.Set
btfsc ReadCount, 5 ; ; Обновление принятого кода?
bsf STATUS, C
goto Int.End
Int.Set ; Входная последовательность.
btfss ReadCount, 5
bsf STATUS, C
Int_End
rlf ReadCount Сдвиг с новыми данными.
swapf .status, w Восстановление регистров
контекста.
movwf _w
swapf _w, w
retfie
Приведенная программа предусматривает стробирование посту-
пающих данных сразу после приема стартового сигнала, при этом
логические сигналы 0 и 1 преобразуются во входные сигналы сдви-
гового регистра схемы линейной обратной связи LFSR. Следует отме-
тить, что в данной программе используется 8-разрядный регистр
LFSR, предназначенный для реализации контроля циклическим избы-
точным кодом (CRC).
Избыточные CRC-коды команд дистанционного управления для
телевизионных приемников инфракрасного излучения фирмы Sony
Приведены в табл. 8.10.
ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ
Таблица 8.10
Избыточные CRC-коды передатчика дистанционного управления
Клавиша Код
Включение питания 0x052
Vol+ (увеличить громкость) 0х05Е
Vol- (уменьшить громкость) ОхОВВ
Ch+ (следующий канал) OxODC
Ch- (предыдущий канал) 0x062
0 0x017
1 0х07А
2 0x08D
3 0x033
4 0x01F
5 0х04Е
6 0x072
7 ОхОСС
8 ОхОВЭ
9 0x023
ЖИРОВАНИЕ
□КОНТРОЛЛЕРОВ
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
HEX-ФАЙЛЫ
Ассемблер среды MPLAB и любые другие ассемблеры и компиляторы
преобразуют исходный код программы PIC-микроконтроллера в фор-
мат данных, которым может воспользоваться программатор для за-
грузки программ в PIC-микроконтроллер. Наиболее популярным фор-
матом файлов (который применяет программатор фирмы Microchip
и большинство других программаторов, включая те, что будут пред-
ставлены в этой главе) является 8-битный hex-формат, предложен-
ный корпорацией Intel.
Hex-файл (Example.hex) генерируется при ассемблировании.
Информация в нем представляется в следующем виде:
:10000000FF308600831686018312А001А101А00В98
:0А0010000728А10В0728860307288603072824
: 02400E00F13F80
:00000001FF
Каждая строка включает начальный адрес и данные, которые
должны быть размещены по этому адресу. В табл. 9.1 описано назна:
чение позиций строк.
Таблица 9.1
Позиции строки hex-файла
Байт Назначение
1 Двоеточие, всегда обозначает начало строки
2-3 Число байтов команд в строке
4-7 Начальный адрес записи команд. Это формат фирмы Motorola (за старшим байтом следует младший)
8-9 Тип строки (00 - данные, 01 - конец)
10-13 Первая команда, которая должна загружаться в PIC-микроконтроллер по указанному адресу. Эти данные представлены в формате фирмы Intel (за младшим байтом следует старший)
Другие команды также представлены в формате фирмы Intel
Две последние отображаемые позиции Контрольная сумма строки
Две последние неотображаемые позиции ASCII-символы возврата каретки и перевода строки
Контрольная сумма вычисляется путем сложения всех байтов
строки и вычитания младшего байта суммы из 0x0100. Для второй
строки в вышеприведенном примере шестнадцатеричного файла
эта сумма рассчитывается следующим образом:
0А
00
10
МЛАДШЕЕ ПОДСЕМЕЙСТВО
00
07
28
А1
0В
07
28
86
03
07
+ 28
1DC
Для получения контрольной суммы из 0x0100 вычитается млад-
ший байт суммы (OxOODC):
0x0100
OxOODC
0x0024
Полученная в результате вычислений величина контрольной сум-
мы 0x024 совпадает с двумя последними байтами исходной строки.
ПРОГРАММИРОВАНИЕ НС-МИКРОКОНТРОЛЛЕРА
МЛАДШЕГО ПОДСЕМЕЙСТВА
В PIC-микроконтроллерах младшего подсемейства для программиро-
вания, которое осуществляется с помощью «параллельного» прото-
кола, используются 17 выводов (табл. 9.2).
Таблица 9.2
Выводы для программирования микроконтроллеров младшего подсемейства
Выводы Назначение
RAO - RA3 Биты DO - D3 слова команды
RBO - RB7 Биты D4 - D11 слова команды
Т0СК1 Тактовый сигнал
. 0SC1 Вход программного счетчика
_MCLR/Vpp Напряжение программирования
. Vdd Напряжение питания
. Vss Gnd
Структурная схема программатора для Р1С-микроконтроллеров
младшего подсемейства представлена на рис. 9.1.
Для программирования ячеек памяти используется нижеприве-
денная последовательность операций:
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Рис. 9.1
Программатор для PIC-микроконтроллера младшего подсемейства
1. Новое слово выдается на RAO - RA3 и RBO - RB7.
2. Посредством возбуждения входа Р год на микроконтроллер PIC
поступает программирующий импульс длительностью 100 мкс.
3. Драйвер данных отключается (посредством линии Driver Enable).
4. Снова подается программирующий импульс, который обеспе-
чивает чтение данных для контроля правильности записи. На
рис. 9.1 показано, что защелка считывания (буфер считыва-
ния) загружается по заднему фронту синхроимпульсов.
5. Пункты 2-4 повторяются максимум 25 раз или до тех пор, пока
данные, содержащиеся в защелке, не будут корректными.
6. Пункты 1-4 повторяются по три раза, причем каждый раз про-
веряется правильность записи путем считывания. Это делает-
ся для обеспечения необходимой надежности программирова-
ния данных.
7. Импульс на выводе 0SC1 инкрементирует адрес. Такая операция
также приводит к получению на выходе PIC-микроконтроллера
данных по текущему адресу, имевшему место до инкрементиро-
вания адреса программирования PIC-микроконтроллера (что
происходит по падающему фронту импульса на выводе 0SC1).
На рис. 9.2 наряду с описанными выше этапами, с 1 по 4, показа-
ны синхросигналы защелки. После включения питания по первому
МЛАДШЕЕ ПОДСЕМЕЙСТВО
RAO - RA3
RBO - RB7
Т0СК1
^Данные программьГу—^Достоверные данные^
Ложные данные
Такты защелки
считывания
Фиксируемые
достоверные данные
Считывание
Рис. 9.2
Программирующий
импульс
Циклы программирования PIC-микроконтроллера младшего подсемейства
адресу программируется слово конфигурации, а за ним - память про-
грамм.
Для проведения «скоростной проверки» может использоваться
вывод OSC1. Как уже было сказано, каждый раз, когда на выводе OSC1
присутствует импульс, данные по текущему адресу выводятся, после
чего увеличивается значение адреса программирования PIC-микро-
контроллера. На рис. 9.3 представлен процесс «скоростной провер-
ки», когда сначала выдается слово конфигурации, а затем содержи-
мое памяти программ.
OSC1
Адрес OxOFFF Адрес
Слово конфигурации 0x0000
Рис. 9.3
«Скоростная проверка»
Адрес
0x0001
i ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Слово конфигурации, в соответствии с документацией Microchip
располагается по адресу OxOFFF и программируется в последнюю оче-
редь, чтобы бит защиты кода не влиял на возможность проверки со-
держимого программной памяти. Если бит защиты установлен, то
содержимое программной памяти будет скремблироваться (шифро-
ваться), что сделает нереальным считывание кода для проверки.
ПОСЛЕДОВАТЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
МИКРОКОНТРОЛЛЕРОВ СРЕДНЕГО ПОДСЕМЕЙСТВА
При внутрисхемном последовательном программировании (In Circuit
Serial Programming - ICSP) микроконтроллеров младшего и средне-
го подсемейств используются выводы, перечень которых приведен
в табл. 9.3.
Таблица 9.3
Выводы^ используемые для последовательного программирования
Вывод Микроконтроллер
12C5xx 16C50X Среднее подсемейство
18 выводов 28 выводов 40 выводов
Vpp 4 _MCLR 4 _MCLR 4 _MCLR 1 _MCLR 1 _MCLR
Vdd 1 Vdd 1 Vdd 14 Vdd 20 Vdd 11,32 Vdd
Gnd 8 Vss 14 Vss 5 Vss 8,19 Vss 12, 31 Vss
DATA 7 GPO 13 RBO 13 RB7 28 RB7 40 RB7
CLOCK 6 GP1 12 RB1 12 RB6 27 RB6 39 RB6
Чтобы запрограммировать или считать данные, необходимо уста-
новить PIC-микроконтроллер в режим программирования, для чего
напряжение на выводе _MCLR увеличивается до 13-14 В, а напряже-
ние на линиях передачи DATA и CLOCK обнуляется на несколько мил-
лисекунд. Когда PIC-микроконтроллер переведен в режим програм-
мирования, данные по линии DATA могут в последовательном коде
путем сдвига заноситься в микроконтроллер и выводиться из него,
причем тактирование осуществляется по линии CLOCK.
Временные диаграммы сигналов при задании режима програм-
мирования приведены на рис. 9.4. Когда напряжение на выводе _MCLR
равно Vpp, внутренний программный счетчик PIC-микроконтроллера
сбрасывается. Этот счетчик используется для формирования теку-
щего адреса программной памяти EPROM.
СРЕДНЕЕ ПОДСЕМЕЙСТВО
_MCLR/Vpp
Данные
Синхроимпульсы
1 мс 1 1 мс
Программирование
может начинаться
Рис. 9.4
Инициализация процесса программирования
Данные пересылаются в PIC-микроконтроллер и из него посред-
ством синхронного протокола и выводятся по заднему фронту такто-
вого импульса, причем сначала передается младший бит (LSB). Мини-
мальный период тактового сигнала составляет 200 нс, его фронт
должен соответствовать середине битового интервала. На рис. 9.5
представлен процесс пересылки инструкции инкрементирования
адреса.
Данные передаются аналогично, только 16-разрядными кодами
(сначала младший бит) и с задержкой в 1 мкс после передачи ин-
струкции. Эти 16 бит включают в себя 14-разрядное слово команды,
сдвинутое влево на один разряд. Следовательно, первый и послед-
ний биты при передаче данных всегда нулевые (табл. 9.4).
Рис. 9.5
Шестибитные инструкции программатора
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Таблица 9.4
Инструкции для ICSP-программирования PIC-микроконтроллеров среднего подсемейства
Инструкция Код Данные Примечания
Загрузка данных оьооооою 0,14 бит данных, 0 Загрузка слова для программирования
Начало программирования оьоооюоо Отсутствуют Запуск цикла программирования
Конец программирования 060001110 Отсутствуют Конец цикла программирования по истечении 100 мс
Увеличение адреса 0Ь0000110 Отсутствуют Увеличение значения программного счетчика
Считывание данных оьооооюо 0,14 бит данных, 0 Считывание программной памяти по адресу в программном счетчике
Загрузка слова конфигурации оьооооооо 0x07FFE (слово) В программном счетчике задается адрес 0x02000
Прежде чем приступать к программированию, следует прове-
рить, не заполнена ли память программ. Эта операция выполняет-
ся путем простого считывания из программной памяти (инструк-
ция Read Data, приведенная выше) и последующего сравнения
данных с кодом 0x07FFE. Когда проверка текущей ячейки завершена,
значение программного счетчика PIC-микроконтроллера инкре-
ментируется (с помощью инструкции Increment Address) и процесс
повторяется до завершения просмотра всей программной памяти.
По окончании проверки памяти состояние программного счетчика
PIC-микроконтроллера изменяется на 0x02000 (с помощью команды
Load Configuration). После этого содержимое регистра конфигура-
ции проверяется также на соответствие коду 0x07FFE.
Сведения об объеме памяти программ Р1С-микроконтроллеров
среднего подсемейства представлены в табл. 9.5.
Таблица 9.5
Объем памяти программ PIC-микроконтроллеров среднего подсемейства
Микроконтроллер Объем памяти, К слов
PIC 16Сх1 1
PIC 16СххО 0,5
PIC 16Схх1 1 _
PIC 16Схх2 2
PIC 16Сх2 2
PIC 16СхЗ 4 _
PIC 1бСх4 2
PIC 1бСх5 4 _
PIC 16Схб 8
PIC 16Сх7 8
СРЕДНЕЕ ПОДСЕМЕЙСТВО
Процесс программирования PIC-микроконтроллеров среднего
подсемейства, имеющих память EPROM, включает следующие шаги:
1. Передается инструкция Load Data (Загрузка данных), содержа-
щая слово команды.
2. Передается инструкция Begin Programming (Начало программи-
рования) в Р1С-микроконтроллер.
3. Задержка на 100 мс (пауза).
4. Передается инструкция End Programming (Окончание програм-
мирования) в Р1С-микроконтроллер.
5. Передается инструкция Read Data (Считать данные) в PIC-микро-
контроллер, при этом считываются 14 бит команды (старший
и младший биты 16-разрядной последовательности данных не
рассматриваются) из текущей ячейки памяти программ.
6. Пункты 1-5 (цикл программирования) повторяются 25 раз или
до тех пор, пока не будут считаны правильные данные.
7. Пункты 1-4 повторяются три раза в каждом цикле, а повторе-
ние циклов происходит столько раз, сколько потребуется для
правильной записи. Эта операция называется перепрограмми-
рованием.
8. С помощью инструкции Increment Address (Инкрементировать
адрес) инкрементируется состояние программного счетчика
Р1С-микроконтроллера.
9. Пункты 1-8 повторяются до завершения записи всей програм-
мы приложения.
10. Инструкция Load Config (Загрузка слова конфигурации) отправ-
ляется на PIC-микроконтроллер для установки в программном
счетчике адреса 0x02000.
11. Биты конфигурации PIC-микроконтроллера программируют-
ся при помощи цикла, описанного в пунктах 1-7.
Для программирования может быть использован следующий
фрагмент:
ICSPProgram() // Программа, предназначенная для "зашивки”,
{ // содержится в таблице адресов и данных.
int РС = О; // Программный счетчик.
int 1, i ] к;
int retvalue=O;
for (i=0; (i-PGMsize) && (retva1ue==0); I++)
{
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
If (PC !=address[i]) {
if ((address [I]> = 0x02000) && (PC<0x02000))
{
LoadConfiguratin(0x07FFE);
PC=0x02000;
}
for (; PC,address[i]; PC++)
IncrementAddress();
for (1=0; (i,<25) && (retvalue !=data[I]);I++)
{
Load Data{ins[i]<<1); // Цикл программирования.
BeginProgramming();
D1ay(100 u sec);
EndProgramming();
Retvalue=ReadData();
}
if (i==25)
retvalue = -1; // Ошибка программирования.
else{
retvalue =0 // Трижды повторить цикл
// программирования.
for (k = 0; k<(j*3); k++){
Load Dat a{i n s[i]< < 1);
BeginProgramming();
D1ay(100usec);
EndProgramming(); }
} и Конец оператора if.
} II Конец оператора if.
} и Конец оператора for
} и Конец программы.
После того как память будет запрограммирована, необходимо
выключить и снова включить напряжение Vpp, считать программ-
ную память PIC-микроконтроллера и сравнить ее содержимое с ис-
ходным. Затем следует повторить проверку при напряжениях пи-
тания Vdd, равных минимальному и максимальному значению
рабочего диапазона (4,5 и 5,5 В). Вторая проверка используется
программаторами Production PICmicro® MCU Programmers. Про-
грамматоры, в которых отсутствуют шаги проверки при миниму-
ме-максимуме рабочего напряжения Vdd, известны как Prototype
PICmicro® Programmers.
Микроконтроллеры младшего подсемейства PIC 12С50х и PIC
16С50х программируются при помощи протокола, аналогичного
протоколу программирования EPROM PIC-микроконтроллеров
среднего подсемейства.
СРЕДНЕЕ ПОДСЕМЕЙСТВО
Первая команда вводит режим программирования (при этом на
выводы Data и Clock подается низкий уровень, вслед за чем напряже-
ние на выводе _MCLR устанавливается равным 13 В). После этого про-
граммный счетчик PIC-микроконтроллера устанавливается в состо-
яние OxOFFF, что является адресом регистра конфигурации.
Модели PIC 12С50х и PIC 16С505 используют 12-битное команд-
ное слово. Когда данные поступают на PIC-микроконтроллер, три
старших бита (вместо одного старшего) имеют значение 0 и не рас-
сматриваются программатором при проверке. Первый отправляемый
бит также равен 0, за ним следует младший бит (LSB) командного
слова (табл. 9.6).
Таблица 9.6
Инструкции для программирования микроконтроллеров PIC 12С50х и PIC 16С505
Инструкция Код
Загрузка данных 000010 + 0, данные (12 бит), 000
Считывание данных 000100 + 0, данные (12 бит), 000
Инкрементирование программного счетчика 001000
Завершение программирования 001110
Наиболее простой способ формирования 16 бит данных (ин-
струкций) для программирования из кодов команд, которые долж-
ны быть записаны в PIC 12С50х и PIC 16С505, - сохранить команду
в виде 16-разрядной переменной и затем сдвинуть ее влево на один
бит. Инструкции, используемые для программирования PIC 12С50х
и PIC 16С505, имеют шестибитный заголовок, кроме того, существу-
ет дополнительная инструкция для слова конфигурации.
Фирма Microchip использует модифицированную версию алгорит-
ма программирования, приведенного выше, для микроконтроллеров
PIC 16F8x, имеющих память типа Flash. Такой алгоритм значительно
проще, как и техническая реализация этой схемы программирова-
ния. На рис. 9.6 представлена типичная схема программирования
Flash-контроллеров.
Электрические величины программирующих напряжений в ос-
новном совпадают с напряжениями, которые требуются для микро-
контроллеров среднего подсемейства.
Однако существует одно различие в значениях токов линии Vpp.
Так, в микроконтроллерах среднего подсемейства д ля программирова-
ния EPROM требуется ток до 50 мА. Микроконтроллеры 16F8x содер-
жат встроенный генератор напряжения Vpp для программирования
EPROM и Flash. Линия Vpp используется только для задания режима
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Рис. 9.6
Схема для внутрисхемного программирования микроконтроллеров
PIC16F8X
программирования, и ток, который по ней передается, составляет не-
сколько микроамперов. Основной ток потребляется через линию Vdd.
Для микроконтроллеров 16F8x применяется тот же формат ин-
струкций программирования, что и для EPROM-микроконтролле-
ров среднего подсемейства, хотя инструкции и способ их выполне-
ния несколько отличаются (табл. 9.7).
Таблица 9.7
Набор инструкций для программирования Flash PIC-микроконтроллеров среднего подсемейства
Инструкция Код Данные
Загрузка конфигурации 000000 0, данные (14 бит), 0 (слово конфигурации)
Загрузка команд в память программ 000010 0, данные (14 бит), 0
Загрузка данных в память данных 000011 0, данные (14 бит), 0 (байт данных)
Считывание из памяти программ 000100 0, данные (14 бит), 0
Считывание данных из памяти данных 000101 0, данные (14 бит), 0 (байт данных)
Инкрементирование программного счетчика 000110 Отсутствуют
Начало программирования 001000 Отсутствуют
Тотальное стирание памяти программ 001001 Отсутствуют
Тотальное стирание памяти данных 001011 Отсутствуют
Данные, как и в случае с EPROM микроконтроллеров среднего
подсемейства, всегда представлены в виде 16-битной последова-
тельности, где первый и последний биты постоянно равны 0. Дан-
ные всегда передаются начиная с младшего бита в той же «хроноло-
гии», что была описана выше для устройств среднего подсемейства.
СРЕДНЕЕ ПОДСЕМЕЙСТВО
При передаче 14-битных данных формируются 16-разрядные слова
инструкций путем сдвига данных влево (умножения на 2) и обнуле-
ния младшего и старшего битов.
Цикл программирования PIC 16F8x состоит из следующих шагов:
1. Выполняется инструкция Load data to г Р год ram Memo гу (Загрузить
данные в программную память) с командным словом.
2. Отправляется инструкция Begin Programming (Начать програм-
мирование).
3. Выдерживается пауза длительностью 10 мс.
4. Выполняется инструкция Read Data f rom P год ram Memo ry (Считать
данные из программной памяти) и проверяется содержимое
памяти для программы.
5. Отправляется инструкция Increment PIC Program Counter (Инкре-
ментирование программного счетчика).
6. Пункты 1-5 являются программным циклом Flash PIC-микро-
контроллера и повторяются для каждой команды в шестнадца-
теричном файле.
7. Отправляется инструкция Load Configuration (Загрузить кон-
фигурацию), устанавливающая в программном счетчике адрес
0x02000.
8. Пункты 1-4 повторяются для программирования конфигурации.
Для стирания памяти используется специальная процедура, кото-
рая полностью освобождает Flash и EEPROM память PIC-микрокон-
троллеров, даже если будет установлен защитный бит:
1. Необходимо, удерживая низкий уровень на выводах RB6 и RB7,
подать напряжение Vpp и подождать по крайней мере 2 мс.
2. Выполнить инструкцию загузки конфигурации (ОЬООООООО +
+ 0X07FFE).
3. Инкрементировать программный счетчик для получения адре-
са регистра конфигурации (семь раз отправить последователь-
ность битов 0Ь0000110).
4. Отправить команду 0Ь0000001 на PIC-микроконтроллер.
5. Отправить команду 0Ь0000111 на PIC-микроконтроллер.
6. Отправить команду Begin Programming (ОЬОООЮОО) наРГС-микро-
контроллер.
7. Выдержать паузу длительностью 10 мс.
8. Отправить команду 0Ь0000001.
9. Отправить команду 0Ь0000011.
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Обратите внимание, что в этой последовательности есть две це-
задокументированные команды (0Ь0000001 и ObOOOOW).
ПРОГРАММИРОВАНИЕ PIC 17СХХ
PIC 17Схх подключается к программатору в соответствии со схе-
мой, показанной на рис. 9.7. Выводы портов PORTB и PORTC использу-
ются для передачи 16-разрядных данных, а выводы порта PORTA-для
передачи управляющих сигналов программатора. Повышение на-
пряжения на выводе _MCLR до 13 В переводит PIC-микроконтроллер
в режим программирования.
Vpp
Начало
программирования
Управление
программированием
Старший
байт данных
Младший
байт данных
Р1С17Схх
Vdd
_MCLR
TEST
RAO - RA4
PORTB OSC1
PORTC
OSC2
Vss
Рис. 9.7
Схема параллельного программирования PIC 17Схх
Программирование PIC 17Схх определяется как параллельное.
Специальная программа загрузчика Boot ROM выполняется внутри
PIC-микроконтроллера, она принимает данные с портов ввода/вы-
вода и осуществляет программирование кода. Для этого использует-
ся специальный вывод Test, на который при программировании сле-
дует подать высокий уровень.
Для работы программы Boot ROM микроконтроллер должен так-
тироваться сигналом частотой от 4 до 10 МГц.
Для перевода PIC-микроконтроллера в режим программирова-
ния линия Test активизируется прежде, чем на вывод _MCLR поступа-
ет напряжение Vpp. Затем на PORTB подается код 0x0Е1 для запуска
ПРОГРАММИРОВАНИЕ PIC 17СХХ
загрузчика. Эта последовательность представлена на рис. 9.8. При
выходе из режима программирования напряжение с вывода _MCLR
должно сниматься по крайней мере на 10 мс раньше, чем отключа-
ется напряжение питания PIC-микроконтроллера. После снятия на-
пряжения с вывода _MCLR на линию Test подается низкий уровень.
При программировании вывод RAO переводится в высокое состо-
яние по меньшей мере на 10 командных циклов (это составляет
10 мкс в случае PIC-микроконтроллера, работающего на частоте
4 МГц). В это время PIC-микроконтроллер выдает адреса и данные
для их проверки. После того как данные проверены, вывод RAO пе-
реводится в высокое состояние на 100 мкс, в течение которых про-
исходит программирование новых данных. Программный счетчик
PIC-микроконтроллера инкрементируется, если вывод RA1 находит-
ся в низком состоянии, пока на RAO присутствует импульс. Если, на-
против, во время импульса состояние вывода высокое, то внутренний
программный счетчик не инкрементируется. При этом содержимое
слова инструкции может быть считано в момент следующего цикла
сигнала на линии RA1 без загрузки нового адреса.
Последней операции отдается предпочтение. Диаграмма сигналов
для нее представлена на рис. 9.9. Подобный цикл должен повторяться
Vdd
_MCLR
TEST
RAO - RA3
RA4
PORTB
Рис. 9.8
Запуск режима параллельного программирования PIC 17Схх
10 мс
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Загрузка адреса
Рис. 9.9
Диаграммы сигналов при программировании PIC 17Схх
Программирование Проверка
Данные, считываемые
из микроконтроллера
О Данные, записываемые
в микроконтроллер
до тех пор, пока данные не будут загружены правильно, но не более
25 раз. Для большей надежности циклы программирования повто-
ряются трижды, аналогично процессам программирования микро-
контроллеров с памятью EPROM.
Процесс записи и чтения по адресам от OxOFEOO до OxOFEOF обеспе-
чивает программирование и проверку слова конфигурации. Считы-
вание слова конфигурации подразумевает чтение с использованием
первых трех циклов сигналов линии RA1, приведенных на рис. 9.9.
При чтении по адресам OxOFEOO - 0x0FE07 считывается младший байт
слова конфигурации через порт PORTC (на линиях порта PORTB при
этом будет код OxOFF). В свою очередь, при считывании по адресам
с OxOFEO8 по OxOFEOF происходит считывание старшего байта слова
конфигурации через порт PORTC.
Соответствие разрядов слова конфигурации ячейкам памяти
дано в табл. 9.8. Назначение разрядов слова конфигурации приведе-
но в табл. 9.9.
Запись в ячейки конфигурации должна производиться в порядке
возрастания адресов. Программирование в убывающем порядке
приводит к непредсказуемым последствиям, поскольку, например,
бит режима процессора может быть записан вместо бита режима за-
щиты кода.
ВНУТРИСХЕМНОЕ ПРОГРАММИРОВАНИЕ PIC 17СХХ
Таблица 9.8
Соответствие битов конфигурации ячейкам памяти микроконтроллера PIC 17Схх
Адрес Бит
OxOFEOO FOSCO
OxOFEOl FOSC1
0x0FE02 WDTPSO
0x0FE03 WDTPS1
0x0FE04 PMO
0x0FE06 РИ1
0x0FE08 PM2
Таблица 9.9
Назначение разрядов слова конфигурации микроконтроллера PIC 17Схх
Биты Назначение
PM2 - PMO Режимы работы микроконтроллера
111 Режим микропроцессора
110 Режим микроконтроллера
101 Расширенный режим микроконтроллера
000 Режим микроконтроллера защиты кода
WDTPS1 -WDTPSO Режимы сторожевого таймера (WDT) и постскалера
11 WDT разрешен, постскалер = 1:1
10 WDT разрешен, постскалер = 256:1
01 WDT разрешен, постскалер = 64*1
00 WDT запрещен, 16-битный таймер
F0SC1 - FOSCO Режимы генератора
11 Внешний генератор
10 XT-генератор
01 RC-генератор
00 LF-генератор
ВНУТРИСХЕМНОЕ ПРОГРАММИРОВАНИЕ PIC 17СХХ
Микроконтроллеры PIC 17Схх допускают внутрисхемное програм-
мирование через последовательный интерфейс (IC8P). Для этогд
к выводу _MCLR прикладывается напряжение, превышающее 13 В,
и выполняется команда табличной записи tablwt. По этой команде
Данные, загруженные в регистры TABLATH и TABLATL, записываются
в ячейки программной памяти.
Команда tablwt продолжает выполняться (то есть она не заверша-
ется после двух циклов, как в случае, если регистры ТВLPRH и TBLPTRL
Указывают адрес вне внутреннего EPROM) до тех пор, пока не воз-
никнет прерывание или не будет снят высокий уровень вывода _MCLR.
Запись слова производится с помощью следующих действий:
1. Блокируются прерывания таймера TMRO.
2. В регистры TABPTRH и TABPTRL загружаются адреса.
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
3. В регистры TABLATH и TABLATL загружаются данные для записи.
4. Активизируется прерывание от таймера TMRO с задержкой
1000 мкс (инициализируется таймер TMRO и разрешается пре-
рывание TMRO).
5. Выполняется команда табличной записи tablwt.
6. Блокируются прерывания TMRO.
7. Считываются данные, проводится проверка соответствия.
8. Если соответствия нет, выдается сообщение об ошибке.
В качестве примера можно привести следующий фрагмент запи-
си в программную память PIC 17Схх:
отд TMROInt ret fie 0x00010 ; Запрос на прерывание ; от таймера разрешен.
movf p SaveAddress, TBLPTRL ; Указание адреса памяти,
movf p SaveAddress + 1, TBLPTRH ; в которую ведется запись.
bcf PORTA, 3 ; Включение напряжения
movlw HIGH ((100000/5) + 256) ; программирования. ; Задержка 100 мс
movwf Dlay ; на стабилизацию ; напряжения программирования
movlw LOW ((100000/5) + 256)
addlw OxOFF
btfsc ALUSTA, Z
decfsz Dlay, f
goto $ - 3
movlw HIGH (65536 - 10000) ; Задержка 10 мс
movwf TMROH ; на запись в EPROM.
movlw LOW (65536 - 10000)
movwf TMROL
bsf TOSTA, TOCS ; Старт таймера.
movlw 1 «Т01Е ; Разрешение прерываний.
movwf INTSTA
bcf CPUSTA, GLINTD
tlwt 0, SaveData ; Загрузка данных
tlwt 1, SaveData + 1 ; в регистр указателя таблицы
tablwt 1, 0, SaveData + 1 ; Запись данных.
nop nop clrf INTSTA, f ; Запрещение прерываний.
bsf CPUSTA, GLINTD
movlw 2
ВНУТРИСХЕМНОЕ ПРОГРАММИРОВАНИЕ PIC 17СХХ
call SendMSG
bsf PORTA, 3
Для разрешения внутрисхемного программирования напряже-
ние на выводе _MCLR должно переключаться с 5 В (Vdd) на 13 В. На
рис. 9.10 приведена схема, рекомендуемая фирмой Microchip. С по-
мощью этой схемы напряжение на выводе _MCLR микроконтроллера
17Схх поддерживается на уровне 5 В до тех пор, пока на выводе RA2
сохраняется высокий уровень. При низком уровне напряжения на
выводе RA2 величина напряжения, подводимого к _MCLR, становится
равной 13 В (Vpp). Ток программирования при напряжении 13 В
составляет минимум 30 мА.
Программа-загрузчик (Boot code) в данном случае представляет
собой программное обеспечение поддержки интерфейса главного
устройства (хост-интерфейса). Она считывает данные и затем вы-
полняет их программирование по указанному адресу. Этот код дол-
жен «зашиваться» в PIC-микроконтроллер, прежде чем будет выпол-
няться ICSP-программирование. Типичная программа-загрузчик
для PIC 17Схх выполняет следующие операции:
1. Установить соединение с главным устройством.
2. Если связи нет, перейти к выполнению программы приложения.
3. Разрешить Vpp (RA2 = 0).
4. Подождать, пока хост отправит инструкцию (данные).
Рис. 9.10
Схема включения микроконтроллера PIC 17Схх при последовательном
внутрисхемном программировании
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
5. Запрограммировать слово.
6. Проверить, что слово запрограммировано правильно.
7. Вернуться к пункту 4.
ПРОГРАММИРОВАНИЕ PIC 18СХХ
Подобно PIC 17Схх микроконтроллеры PIC 18Схх обладают способно-
стью к «самопрограммированию» с помощью команд табличного
считывания и записи. В случае PIC 18Схх эта возможность использу-
ется не только внутри приложений, но применяется также и для про-
граммирования «стертого» микроконтроллера.
Для программирования PIC 18Схх команды загружаются в мик-
роконтроллер после того, как на выводе _MCLR устанавливается на-
пряжение Vpp (13-14 В, как и в EPROM других PIC-микроконтролле-
ров), а на выводах RB6 и RB7 - низкие уровни. Передача инструкций
(которые содержат программируемые данные) к PIC-микрокон-
троллеру происходит путем передачи сначала 4-битной специаль-
ной команды, за которой следует 16-разрядная команда. При переда-
че специальной команды сначала передается старший бит, который
является указателем. Если он равен 1, то 4-разрядный код соответ-
ствует командам ТВLRD и TBLWT, как показано в табл. 9.10.
Таблица 9.10
Мнемоника команд программирования PIC 18Схх
Специальная команда Мнемоника Операция Циклы
0000 пор Перейти к следующей команде 1 _
1000 TBLRD * Считать таблицу 2 _
1001 TBLRD *+ Считать таблицу, инкрементировать TBLPTR 2
1010 TBLRD *- Считать таблицу, декрементировать TBLPTR 2
1011 TBLRD +* Инкрементировать TBLPTR, считать таблицу 2
1100 TBLWT * Записать таблицу 2
1101 TBLWT *+ Записать таблицу, инкрементировать TBLPTR 2
1110 TBLWT *- Записать таблицу, декрементировать TBLPTR 2
1111 TBLWT +* Инкрементировать TBLPTR, записать таблицу 2
На рис. 9.11 представлены временные диаграммы сигналов пр#
передаче данных. Сначала передаются четыре бита кода пор, за к°'
торыми следует 16-разрядная команда.
Рис 9.11
Временные диаграммы сигналов при
последовательной передаче инструкций
Q-циклы
Q1
Q2
Q3
Q4
Q4
Q1
Q2IQ3
Q4
_MCLR/VPP=VIHH
Данные
Синхро-
импульсы
Выполнение команды РС-2
Поступает пор и разрешает
выборку 16-битной команды
Поступает 16-битная команда
__________RB7=Bxofl________
Режим тестирования
Выполняется 16-битная
команда и выбирается
следующая 4-битная команда
ПРОГРАММИРОВАНИЕ PIC 18СХХ
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Если инструкция представляет собой табличную операцию, то
вместо пор может передаваться код специальной команды (Special
Instruction), что упрощает передачу данных. В конце (см. рис. 9.11)
на PIC-микроконтроллер отправляется последовательность битов
0Ь01101(TBLWT*-).
За 4-разрядным кодом специальной команды следуют 16 бит дан-
ных/команд. Это освобождает от необходимости явной загрузки
и чтения табличных регистров защелок с помощью дополнитель-
ных команд. На рис. 9.12 показана команда ТВLWT (запись в таблицу
без изменения табличного указателя TBLPTR).
Вслед за первой 20-битной последовательностью выполняется
вторая 20-битная последовательность, что позволяет завершить
операцию программирования. PIC-микроконтроллер не принима-
ет во внимание вторую последовательность, обрабатывая только
первую. Считывание данных из программной памяти PIC-микро-
контроллера происходит точно так же.
Для того чтобы задать считывание или запись в таблицу, прежде
всего должна быть инициализирована команда ТВ LPTR. Это выполня-
ется при помощи стандартных команд movlw и movwf.
Например, для программирования по адресу 0x12345 данных
0x6789 выполняются следующие операции пересылок PIC 18Схх:
Спецкоманда Команда/Данные
пор movlw UPPER 0x012345
пор movwf TBLPTRU
пор movlw HIGH 0x012345
пор movwf TBLPTRH
пор movlw LOW 0x12345
пор movwf TBLPTRL
tblwt* 0x06789
РАЗЪЕМ ДЛЯ ВНУТРИСХЕМНОГО ПРОГРАММИРОВАНИЯ
В табл. 9.11 приведена разработанная фирмой Microchip специфи-
кация выводов разъема, который используется для внутрисхемного
программирования.
Фрагмент схемы приложения с указанным разъемом представлен
на рис. 9.13.
На время программирования необходимо отсоединить PIC-мик-
роконтроллер от приложения. Для этого используется диод, под-
ключенный к выводу _MCLR (Vpp), а также перемычки на выводах
Vdd, RB7 и RB6. Перемычками могут быть резисторы с нулевым со-
противлением (которые не запаиваются) или джамперы.
Рис. 9.12
Последовательность передачи команды TBLWT
Выполняется
команда РС-2
Выбирается TBLWT
Выполняется
первый
цикл TBLWT
к_________________7
Выполняется второй цикл TBLWT
и выбирается следующая
4-битная команда
Загрузка данных TBLWT
ВНУТРИСХЕМНОГО ПРОГРАММИРОВАНИЯ
РВ7=Вход
Режим ICSP
ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ
Таблица 9.11
Назначение выводов разъема Microchip ICSP
Выводы 12C5xx 16Cxx 16Fxx ”
1 Vpp _MCLR/Vpp _MCLR/Vpp _MCLR/Vpp
2 Vdd Vdd Vdd Vdd
3 Vss Vss Vss Vss
4 DATA GPO RB7 RB7
5 CLOCK GP1 RB6 RB6 ’
Рис. 9.13
Схема внутрисхемного программирования PIC 16F84
Отключение необходимо, поскольку, согласно спецификации
ICSP, устройства для внутрисхемного программирования обеспечи-
вают ток питания только 50 мА (Vdd), и для защиты драйверов ли-
ний в них установлены резисторы номиналом 1 кОм.
СЫ ПК
ИНТЕРФЕЙСЫ ПК
РАСПРЕДЕЛЕНИЕ ОПЕРАТИВНОЙ ПАМЯТИ
На рис. 10.1 представлено распределение адресов оперативной памяти
IBM-совместимого ПК
Рис. J 0.1
Распределение адресов оперативной памяти ПК
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Для операций с программно доступными регистрами пространства
ввода/вывода в PC/AT отводится только 10 младших бит адресов.
Ниже дан перечень регистров (табл. 10.1), из которого исключены
несколько специальных регистров PC/XT. Обычно адреса с 0x0000
по 0x00FF соответствуют портам ввода/вывода, которые располага-
ются на материнской плате, в то время как более высокие адреса
соотносятся с портами на платах периферийных адаптеров.
На некоторых материнских платах регистры доступны только
с адреса 0x0400 и выше. Во избежание проблем убедитесь, что были
указаны только адреса меньшие, чем этот.
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10,1
Программно доступные регистры IBM PC
Адрес Описание регистра
OOOOh Канал 0 прямого доступа к памяти (DMA, адрес (сначала младший байт, затем старший))
~”o001h Канал 0 прямого доступа к памяти, счетчик слов (сначала младший байт, затем старший)
0002h Канал 1 прямого доступа к памяти, адрес (сначала младший байт, затем старший)
0003h Канал 1 прямого доступа к памяти, счетчик слов (сначала младший байт, затем старший)
0004h Канал 2 прямого доступа к памяти, адрес (сначала младший байт, затем старший)
0005h Канал 2 прямого доступа к памяти, счетчик слов (сначала младший байт, затем старший)
0006h Канал 3 прямого доступа к памяти, адрес (сначала младший байт, затем старший).
0007h Канал 3 прямого доступа к памяти, счетчик слов (сначала младший байт, затем старший)
0008h Чтение - регистр состояния каналов ПДП (0-3)
Бит Назначение
7 Запрос по каналу 3
6 Запрос по каналу 2
5 Запрос по каналу 1
4 Запрос по каналу 0
3 Счетчик канала 3
2 Счетчик канала 2
1 Счетчик канала 1
0 Счетчик канала 0
Запись - регистр управления каналов ПДП (0-3)
Бит Назначение
7 Подтверждение запроса, активный высокий
6 Запрос, активный высокий
5 Расширенная запись
4 Циклический сдвиг приоритетов
3 Сжатие времени
2 Разрешение контроллера
0009h Регистр запросов записи
OOOAh Регистр маски каналов 0-3
Бит Назначение
7-3 Зарезервированы
2 Бит маски
1-0 Выбор канала: 00 - канал 0, 01 - канал 1; 10-канал 2; 11 - канал 3
OOOBh Регистр режима каналов 0-3
Бит Назначение
7-6 Режим функционирования: 00-режим запроса; 01 - одиночная передача; 10 - блочный режим, 11 - каскадный режим
ИНТЕРФЕЙСЫ ПК
Таблица ЮЛ
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
Бит Назначение
5 Инкрементирование адреса
3-2 Операции: 00 - проверка; 01 - записать в память; 10 - считать из памяти; 11 - зарезервирован
1-0 Выбор канала.
00 - канал 0; 01 - канал 1, 10 - канал 2; 11 - канал 3
OOOCh Регистр сброса триггера указателя байта
OOODh Чтение - рабочий регистр чтения Запись - сброс
OOOEh Очистка регистра маски
OOOFh Регистр записи маски канала 1
0020h Контроллер 1 прерываний. Регистр команд
Бит Назначение
7-5 0 - используется только в режиме 80/85
4 Запрос ICW1 (Initialization Command Word, управляющее слово инициализации)
3 Режим запроса прерывания: 0 - режим переключения фронтом; 1 - режим переключения уровнем
2 Формат вектора прерывания. 0-8 байт, 1 - 4 байта
1 Режим функционирования: 0 - каскадный режим; 1 - одиночный режим
0 ТребованияIC4: 0 - не требуется; 1 - требуется
0021h Регистр маски первого контроллера прерываний
Бит Назначение
7 0 - разрешить прерывание от параллельного принтера
6 0 - разрешить прерывание от дисководов
5 0 - разрешить прерывание от жесткого диска
4 0 - разрешить прерывание от последовательного порта 1
3 0 - разрешить прерывание от последовательного порта 2
2 0 - разрешить прерывание от видеоадаптера
1 0 - разрешить прерывание от клавиатуры, мыши, часов реального времени __
0 0 - разрешить прерывание от таймера
0040h Счетчик таймера 0 и регистр счетчика делителя (ИС 8254) _
0041 h Счетчик таймера 1 и регистр счетчика делителя (ИС 8254) _
0042h Счетчик таймера 2 и регистр счетчика делителя (ИС 8254) _
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
0043h Порт режима/управления таймера (ИС 8254)
Бит Назначение
7-6 Выбор счетчика: 00-счетчик 0; 01 - счетчик 1, 10 - счетчик 2
5-4 Операция считывания/записи счетчика: 01 - запись/чтение младшего байта счетчика; 10 - запись/чтение старшего байта счетчика; 11 - запись/чтение младшего, затем старшего байта счетчика
3-1 Выбор режима счетчика. 000 - режим 0, 001 - режим 1 (ждущий мультивибратор); х10 - режим 2 (генератор частоты); х11 - режим 3 (генератор меандра); 100 - режим 4 (счетчик событий); 101 - режим 5 (счетчик событий с автозагрузкой)
0 Тип счетчика: 0 - двоичный счетчик; 1 - двоично-десятичный счетчик
0060h Считывание - контроллер клавиатуры
Бит Назначение
7 0 - запрещение клавиатуры
6 0-CGA
5 Джампер производителя установлен
4 0 - если ОЗУ 512 Кб
3-0 Зарезервированы
Запись - контроллер клавиатуры
7 Выходные данные клавиатуры
6 Выходной синхросигнал клавиатуры
5 0 - буфер ввода полон
4 0 - буфер вывода пуст
3-2 Зарезервированы
1 Ключ линии адреса А20
0 Сброс системы
0061h Считывание - порт В контроллера клавиатуры, регистр управления
Бит Назначение
7 Проверка четности
6 Проверка канала
5 Выход таймера 2
4 Переключение при каждом новом запросе
3 Состояние проверки канала
2 Состояние проверки четности
1 Состояние данных спикера
0 Состояние вентиля подключения таймера 2 к громкоговорителю
Запись - 8255 совместимый порт
7 Очистить клавиатуру
6 Выдавать 0 на линию тактового сигнала клавиатуры
ИНТЕРФЕЙСЫ ПК
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
Бит Назначение
5 Разрешить проверку ввода-вывода
4 Разрешить проверку четности ОЗУ
3 Считывать состояние ключей
2 Зарезервирован
1 Разрешить тактовый сигнал громкоговорителя
0 Разрешить подключение таймера 2 к громкоговорителю
0064b Считывание - состояние контроллера клавиатуры
Бит Назначение
7 Ошибка четности
6 Превышение времени ожидания приема
5 Превышение времени ожидания передачи
4 Заблокировать клавиатуру
3 Тип данных входного регистра. 0 - команды; 1 - данные
2 Состояние флага системы
1 Состояние буфера ввода
0 Состояние буфера вывода
Запись - входной буфер контроллера клавиатуры
Код Назначение
20 Чтение нулевого байта внутреннего ОЗУ. Последняя команда, отправленная к контроллеру клавиатуры 8042
21-3F Чтение байта из внутреннего ОЗУ контроллера 8042, указанного в младших пяти битах команды
60-7F Запись байта данных по адресу, указанному в младших пяти битах команды
0065И Управление вентилем линии адреса А20
Бит 2 Контроль вентиля А20. 1 - А20 разрешить; 0 - А20 запретить __
0070b Индексный регистр КМОП ОЗУ (CMOS RAM)
Бит Назначение
7 Разрешить немаскируемые прерывания (NMI)
6-0 Индекс КМОП ОЗУ
0071h Регистр данных КМОП ОЗУ
Индекс Назначение
' 00 Текущая секунда (двоично-десятичный код - BCD)
01 Секунды будильника (BCD)
02 Текущая минута (BCD)
03 Минуты в будильнике (BCD)
04 Текущий час (BCD)
05 Час(ы) в будильнике (BCD)
06 День недели (BCD)
07 День месяца (BCD)
08 Месяц (BCD)
09 Год(BCD) (00-99)
0А Регистр состояния А
Бит Назначение
7 Регенерация памяти
6-4 Делитель частоты синхронизации
3-0 Выход выбора отношения
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
0071h Индекс Назначение
OB Регистр состояния В
Бит Назначение
7 Управление остановом
6 Разрешение периодических прерываний
5 Разрешение прерываний будильника
4 Разрешение прерываний после регенерации памяти
3 Разрешение прерываний от генератора меандра
2 Формат календаря
1 Режим представления времени
0 Разрешить переход на летнее время
ОС Регистр состояния С
Бит Назначение
7 Флаг запроса на прерывание
6 Флаг периодических прерываний
5 Флаг прерывания будильника
4 Флаг прерывания для регенерации
3-0 Зарезервированы
OD Регистр состояния D
Бит Назначение
7 Включение часов реального времени
0080h Адрес записи MFG_PORT
0080h Регистр страницы ПДП (DMA) (рабочий регистр)
0081h Адрес страницы канала 2 ПДП
0082h Адрес страницы канала 3 ПДП
0083h Адрес страницы канала 1 ПДП
0084h Регистр дополнительной страницы
0085h Регистр дополнительной страницы
0086h Регистр дополнительной страницы
0087h Адрес страницы канала 0 ПДП
0088h Адрес дополнительной страницы
0089h Адрес страницы канала 6 ПДП
008Ah Адрес страницы канала 7 ПДП
008Bh Адрес страницы канала 5 ПДП
008Ch Регистр дополнительной страницы
008Dh Регистр дополнительной страницы
008Eh Регистр дополнительной страницы
008Fh Регистр обновления страницы ПДП
OOAOh Регистр управления контроллера прерываний 2
Бит Назначение
7-5 0 - используется только в режиме 80/85
4 Запрос ICW1 (Initialization Command Word, управляющее слово инициализации)
3 Режим запроса прерывания 0 - по фронту; 1 - по уровню
2 Размер вектора прерывания. 0 - 8-байтные векторы прерывания, 1 - 4-байтные векторы прерывания
1 Операционный режим- 0 - каскадный режим; 1 - одиночный режим
ИНТЕРФЕЙСЫ ПК
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
OOAOh Бит Назначение ”
0 Требования IC4 0 - не требуется; 1 - требуется
OOAIh Регистр маски контроллера прерываний 2
Бит Назначение
7 Зарезервирован
б Постоянный диск
5 Исключение сопроцессора
4 Прерывание от мыши
3 Зарезервирован
2 Зарезервирован
1 Переадресуемый каскад
0 Часы реального времени
OODOh Чтение - регистр состояния каналов 4-7 контроллера 2 ПДП
Бит Назначение
7 Запрос 7 канала
б Запрос б канала
5 Запрос 5 канала
4 Запрос 4 канала
3 Счетчик 7 канала
2 Счетчик б канала
1 Счетчик 5 канала
0 Счетчик 4 канала
Запись - регистр управления каналов 4-7 контроллера 2 ПДП
7 Подтверждение (DACK), активный высокий
6 Запрос (DREQ), активный высокий
5 Расширенная запись
4 Круговой приоритет
3 Сжатие времени
2 Разрешение контроллера
00D2h Регистр запроса записи по каналам 4-7 контроллера 2 ПДП
00D4h Регистр маски каналов 4-7 контроллера 2 ПДП
Бит Назначение
7-3 Зарезервированы
2 Бит маски
1-0 Выбор канала: 00 - канал 0; 01 - канал 1; 10 - канал 2; 11 - канал 3 __
00D6h Регистр режима каналов 4-7 контроллера 2 ПДП _
Бит Назначение __
7-6 Режим функционирования: 00 - режим запроса; 01 - одиночная передача, 10 - блочный режим; 11 - каскадный режим _
5 Инкрементирование адреса
3-2, Операция: 00 - проверка; 01 - запись в память _
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
006П Бит Назначение
3-2 10 - считывание из памяти; 11 - зарезервирован
1-0 Выбор канала. 00 - канал 0; 01 - канал 1; 10 - канал 2; 11 - канал 3
00D8h Сброс указателя байтов каналов 4-7 контроллера 2 ПДП
OODAh Считывание - рабочий регистр чтения каналов 4-7 контроллера ПДП Запись - программный сброс каналов 4-7 контроллера 2 ПДП
OODCh Сброс маски каналов 4-7 контроллера 2 ПДП
OODEh Запись маски каналов 4-7 контроллера 2 ПДП
OOFOh Защелка сброса занятости математического сопроцессора
OOFIh Сброс математического сопроцессора
00F8h Регистр пересылки кода операции
OOFAh Регистр пересылки кода операции
OOFCh Регистр пересылки кода операции
01F0h Регистр данных контроллера жесткого диска
OlFlh Регистр ошибок контроллера жесткого диска
Бит Назначение
7 Сбой в драйвере
6-3 Зарезервированы
2-0 Состояние: 001 - нет ошибки; 010 - ошибка устройства; 011 - ошибка буфера сектора; 100 - ошибки схемы ЕСС; 101 - ошибка контролирующего микропроцессора
01F2h Счетчик секторов
01F3h Номер сектора
01F4h Младший цилиндр
01F5h Старший цилиндр
01F6h Драйвер-головка
01F7h Считывание - регистр состояния контроллера жесткого диска
Бит Назначение
7 Состояние исполнения контроллера
6 Состояние драйвера
5 Ошибка записи
4 Поиск завершен
3 Буфер сектора требует обслуживания
2 Считывание данных с диска успешно откорректировано
1 Указатель (индекс)
0 Предыдущая команда завершилась ошибкой
Запись - управляющий регистр контроллера жесткого диска
0201h Считывание - положение и состояние джойстика
Бит Назначение
7 Состояние кнопки 2 джойстика В
6 Состояние кнопки 1 джойстика В
5 Состояние кнопки 2 джойстика А
4 Состояние кнопки 1 джойстика А
3 Координата Y джойстика В
ИНТЕРФЕЙСЫ ПК
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
0201h Бит Назначение
2 Координата X джойстика В
1 Координата Y джойстика А
0 Координата X джойстика А
Запись - 4 кнопки боевого джойстика (Fire Joystick)
0220h SoundBlaster - состояние/адрес левого громкоговорителя
Адрес Назначение
01 Разрешить контроль формы сигнала
02 Данные таймера 1
03 Данные таймера 2
04 Флаги контроля таймера
08 Режим синтеза речи
20-35 Амплитудная модуляция/вибрато
40-55 Переключаемое масштабирование уровня/общий уровень
60-75 Отношение пуск/спад
80-95 Отношение поддержание/освобождение
А0-В8 Октава/номер частоты
С0-С8 Обратная связь/алгоритм
E0-F5 Выбор формы сигнала
0221h SoundBlaster - данные левого громкоговорителя
0222h SoundBlaster - правый громкоговоритель/адрес
Адрес Назначение
01 Разрешить контроль формы сигнала
02 Данные таймера 1
03 Данные таймера 2
04 Флаги контроля таймера
08 Режим синтеза речи
20-35 Амплитудная модуляция/вибрато
40-55 Переключаемое масштабирование уровня/общий уровень
60-75 Отношение пуск/спад
80-95 Отношение поддержание/освобождение
А0-В8 Октава/номер частоты
С0-С8 Обратная связь/алгоритм
E0-F5 Выбор формы сигнала
0223h Правый громкоговоритель - порт данных
0278h Регистр данных порта LPT2
0279h Регистр состояния LPT2
Бит Назначение
7 Занято
6 Подтверждение
5 Нет бумаги
4 Принтер выбран
3 Ошибка
2 Запрос на прерывание
1-0 Зарезервированы
027Ah Регистр управления LPT2
Бит Назначение
7-6 Зарезервированы
5 Управление выходом данных
4 Разрешить запрос на прерывание
3 Выбрать принтер
2 Инициализация
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
027Ah Бит Назначение
1 Перевод строки
0 Строб-импульс
02E8h 8514/A, состояние дисплея
02E8h 8514/A, протяженность строки
02EAh 8514/А, маска ЦАП
02EBh 8514/А, индекс считывания ЦАП
02ECh 8514/А, индекс записи ЦАП
02EDh 8514/А, данные ЦАП
02F8h Буферные регистры передатчика-приемника последовательного порта 2/ младший байт делителя
02F9h Регистр разрешения прерываний последовательного порта 2/ старший байт делителя
02FAh Регистр идентификации прерываний последовательного порта 2
02FBh Регистр контроля линии последовательного порта 2
02FCh Регистр контроля модема последовательного порта 2
02FDh Регистр состояния линии последовательного порта 2
02FEh Регистр состояния модема последовательного порта 2
02FFh Оперативный регистр последовательного порта 2
0300h - 031Fh Адреса платы прототипа IBM
0360h - 036Fh Сетевые платы
0370h Регистр А состояния контроллера вторичного дисковода
0371h Регистр В состояния контроллера вторичного дисковода
0372h Регистр цифрового выхода контроллера дисковода
0374h Считывание - основной регистр состояния контроллера вторичного дисковода Запись - регистр выбора скорости передачи данных контроллера вторичного дисковода
0375h Регистр данных/управления контроллера вторичного дисковода
0377h Считывание - регистр цифрового входа контроллера вторичного дисковода Запись - регистр выбора скорости передачи данных дисковода
0378h Регистр данных порта LPT1
0379h Регистр состояния LPT1
Бит Назначение
7 Занято
6 Подтверждение
5 Нет бумаги
4 Принтер выбран
3 Ошибка
2 Запрос на прерывание
1-0 Зарезервированы
037Ah Регистр управления порта LPT1
Бит Назначение
7-6 Зарезервированы
5 Управление выходом данных
4 Разрешение запроса на прерывание
3 Выбрать принтер
2 Инициализация
1 Перевод строки
0 Строб-импульс
ИНТЕРФЕЙСЫ ПК
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
0380h - 038Fh Вспомогательные регистры SDLC
0390h - 039Fh Адаптер IBM кластера
03A0h - 03AFh Первичные регистры SDLC
03B4h Регистр индекса видеоконтроллера MDA
03B5h Регистр данных видеоконтроллера MDA
Индекс Функция
00 Сумма по горизонтали
01 Отображение по горизонтали
02 Позиция синхроимпульса по горизонтали
03 Ширина синхроимпульса по горизонтали
04 Сумма по вертикали
05 Отображение по вертикали
06 Позиция синхроимпульса по вертикали
07 Ширина синхроимпульса по вертикали
08 Режим чересстрочной развертки
09 Максимум сканируемых строк
0А Начальная строка курсора
ОВ Конечная строка курсора
ОС Старший байт стартового адреса
0D Младший байт стартового адреса
0Е Позиция курсора, старший байт
0F Позиция курсора, младший байт
10 Позиция светового пера, старший байт
11 Позиция светового пера, младший байт
03B8h Регистр контроля режимов видеоконтроллера MDA
Бит Назначение
7-6 Зарезервированы
5 Разрешить мигание
4 Зарезервирован
3 Разрешить видеоадаптер
2-1 Зарезервированы
0 Режим высокого разрешения
03B9h Выбор цвета видеоконтроллера EGA
03BAh Считывание - регистр состояния видеоконтроллера EGA Запись - регистр расширения видеоконтроллеров EGA-VGA
03BBh Зарезервировано для видеоконтроллера EGA __
03BCh Регистр данных порта LPT1 __
03BDh Регистр состояния LPT
Бит Назначение _
7 Занято _
6 Подтверждение __
5 Нет бумаги _
4 Принтер выбран _
3 Ошибка -
2 Запрос на прерывание ,
1-0 Зарезервированы _
ПРОСТРАНСТВО ВВОДА/ВЫВОДА
Таблица 10.1
Программно доступные регистры IBM PC (продолжение)
Адрес Описание регистра
ОЗВЕИ Регистр управления порта LPT1
Бит Назначение
7-5 Зарезервированы
4 Разрешение запроса на прерывание
3 Выбрать принтер
2 Инициализация
1 Перевод строки
0 Строб-импульс
03BFh Регистр переключения конфигурации видеоконтроллера Hercules
Бит Назначение
7-2 Зарезервированы
1 Разрешить использование верхних 32 Кб графического буфера
0 Запретить графический режим
03C0h Регистр индекса/даиных контроллера атрибутов EGA-VGA
03C1h Регистр данных контроллера атрибутов видеоконтроллера VGA
03C2h Считывание - регистр 0 состояния входа EGA-VGA Запись - многоцелевой регистр видеоконтроллера VGA
03C4h Регистр индекса секвенсора видеоконтроллера VGA
03C5h Регистр данных секвенсора VGA
03C6h Регистр маски RAM-DAC VGA (ИС палитры)
03C7h Регистр адреса чтения /состояния RAM-DAC VGA (палитры)
03C8h Регистр адреса записи RAM-DAC VGA
03C9h Регистр данных RAM-DAC VGA
03CAh Регистр управления расширением VGA
03CCh Многоцелевой регистр VGA
03CEh Регистр индекса графического контроллера VGA
03CFh Регистр данных графического контроллера VGA
03D4h Регистр индекса видеоконтроллера CGA
03D5h Регистр данных видеоконтроллера CGA (6845)
03D8h Регистр управления режимом CGA
Бит Назначение
7-6 Зарезервированы
5 Разрешить мигание
4 Выбор графического режима 640x200
3 Разрешение видео
2 Монохромный режим
1 Графический режим
0 Текстовый режим высокого разрешения
03D9h Регистр палитры CGA
Бит Назначение
7-6 Зарезервированы
5 Выбор активного набора цветов
4 Выбор уровня яркости
3 Выбор яркости рамки
2 Бит красного цвета (рамка/фон/передний план)
1 Бит зеленого цвета (рамка/фон/передний план)
0 Бит синего цвета (рамка/фон/передний план)
03DAh Регистр состояния CGA
Бит Назначение
7-4 Зарезервированы
3 Признак обратного хода по вертикали
ИНТЕРФЕЙСЫ ПК
Таблица 10.1
Программно доступные регистры IBM PC (окончание)
Адрес Описание регистра
03DAh Бит Назначение 1 ”
2 Состояние светового пера
1 Триггер светового пера ~~
0 Выбор памяти ~~
03EAh Регистр управления расширением EGA-VGA
03EBh Сброс защелки светового пера
03ECh Установка защелки светового пера
03E8h Регистры блоков передатчика/приемника последовательного порта 3/ делитель, младший байт
03E9h Регистр разрешения прерываний последовательного порта 3/ делитель, старший байт
03EAh Регистр прерываний последовательного порта 3
03EBh Регистр контроля линии последовательного порта 3
03ECh Регистр контроля модема последовательного порта 3
03EDh Регистр состояния линии последовательного порта 3
03EFh Оперативный регистр последовательного порта 3
03F0h Регистр состояния А контроллера основного дисковода
03F1h Регистр состояния В контроллера основного дисковода
03F2h Регистр цифрового выхода контроллера основного дисковода
03F4h Считывание - основной регистр состояния контроллера вспомогательного дисковода Запись - регистр выбора скорости передачи данных контроллера основного дисковода
03F5h Регистр данных/управнения контроллера основного дисковода
03F7h Считывание - регистр цифрового входа контроллера основного дисковода Запись - регистр выбора скорости передачи данных дисковода
03F8h Буферные регистры передатчика/приемника последовательного порта 1/ делитель, младший байт
03F9h Регистр разрешения прерываний последовательного порта 1/ старший байт делителя
03FAh Регистр идентификации прерываний последовательного порта 1
03FBh Регистр контроля линии последовательного порта 1
03FCh Регистр контроля модема последовательного порта 1
03FDh Регистр состояния линии последовательного порта 1
03FFh Оперативный регистр последовательного порта 1
ФУНКЦИИ ПРЕРЫВАНИЙ
Назначение различных прерываний описано в табл. 10.2.
ШИНА ISA
При разработке ПК специалисты фирмы IBM спроектировали ма-
теринскую плату и шину ISA таким образом, чтобы упростить разра-
ботку периферийных адаптеров (рис. 10.2). На рис. 10.3 показан
цикл чтения-записи по шине ISA. Аналогично происходят чтение
и запись в адресном пространстве ввода/вывода.
ФУНКЦИИ ПРЕРЫВАНИЙ
Таблица 10.2
Прерывания IBM PC
Прерывание Название и примечания
ООП Ошибка деления на ноль
01h Пошаговый режим
02h Немаскируемое прерывание
03h Прерывание исполнения программы (команда ОхОСС)
04h Переполнение
05h Печать экрана
06h - 07h Зарезервированы
08h Установка времени/даты
09h Прерывание от клавиатуры
OAh Управляемый контроллер прерываний
OBh Прерывание от СОМ1/СОМЗ
OCh Прерывание от СОМ2/СОМЗ
ODh Прерывание от жесткого диска/прерывание от LPT2
OEh Прерывание от дискового накопителя
OFh Прерывание от LPT1
10h BIOS, видео
11h BIOS, чтение списка оборудования/проверка оборудования
12h BIOS, определение размера памяти
13h BIOS, ввод/вывод на диоов> ,й накопитель
14h BIOS, последовательный интерфейс
15h BIOS, системные службы
16h BIOS, клавиатура
17h BIOS, принтер
18h Резидентный BASIC
19h Программа начальной загрузки
1Ah BIOS, часы реального времени
1Bh Вектор прерывания клавиатуры
1Ch Вектор таймера пользователя
IDh Табличный адрес видеопараметров
1Eh Табличный адрес параметров диска
IFh Табличный адрес графических символов
20h MS DOS, завершение программы
2 Ih MS DOS, групповое прерывание вызова служебных функций
22h MS DOS, вектор завершения
23h MS DOS, вектор функции комбинации клавиш CTRL+C (прерывания)
24h MS DOS, вектор обработчика фатальной ошибки
25h - 26h MS DOS, абсолютный ввод с диска и вывод на него
27h MS DOS, завершить и остаться резидентно
28h - 2Eh MS DOS, резерв
2Fh MS DOS, прерывание мультиплексирования
30h - 32h MS DOS, зарезервированы
33h BIOS, MS мышь
34h - 3Fh MS DOS, зарезервированы
40h BIOS, жесткий диск
41h Таблица параметров жесткого диска 0
42h BIOS, EGA
43h Таблица EGA параметров
44h - 34h Зарезервированы
46h Таблица параметров жесткого диска 1
ИНТЕРФЕЙСЫ ПК
Таблица 10.2
Прерывания IBM PC (окончание)
Прерывание Название и примечания
47h - 49h Зарезервированы ~~
4Ah BIOS, управление будильником
4Bh - 4Fh Зарезервированы "
50h BIOS, прерывание КМОП ОЗУ/будильника ~~
51h - 59h Зарезервированы
5Ah NETBIOS, служебные функции
5Bh NETBIOS, перераспределение вектора 19h
5Ch NETBIOS, точка входа
5Dh - 66h Зарезервированы
67h Служебные функции памяти EMS
68h - 6Fh Зарезервированы
70h Прерывание часов реального времени (RTC)
71h IRQ9, переадресация контроллера прерывания (IRQ2)
72h Запрос на прерывание IRQ10
73h Запрос на прерывание IRQ11
74h Запрос на прерывание IRQ12
75h Запрос на прерывание IRQ13
76h Запрос на прерывание IRQ14
77h Запрос на прерывание IRQ15
78h - 7Fh Не назначены/доступны для использования
80h - 85h Зарезервированы для Basic
86h - FOh Используются Basic
F1h - FFh Используются во время загрузки ПК в качестве временной стековой области. Не должны применяться для прерываний или переменных
ISA-слоты
Процессор Данные 4=И
Адрес
Линии управления/ прерывания/ прямого доступа
Рис. 10.2
Взаимодействие процессора с периферийными устройствами
Контакты и линии шины ISA
Восьмибитная шина ISA предполагает для слотов двусторонний кра-
евой соединитель с 31 выводом с каждой стороны. В табл. 10.3 пред-
ставлены назначения выводов.
ШИНА ISA
Данные и адреса поступают от процессора на соответствующие
шины через магистральные усилители. Шина ISA позволяет напрямую
обращаться к адресам с 0x00000 до OxOFFFFF (от 0 до 1 Мб). Ниже пе-
речислены функции линий шины ISA:
♦ BALE - первоначально в ПК применялся термин «буферизован-
ная линия ALE» (Buffered ALE), поскольку упомянутая линия ис-
пользовалась для передачи соответствующего сигнала процес-
сора 8088 с помощью буферного усилителя. На сегодняшний
день этот бит более известен под названием ALE. Его назначе-
ние и временная диаграмма такие же, что и у сигнала BALE;
♦ _ 1/0 CH СНК - вывод предназначен для устройств, память кото-
рых допускает контроль по четности. При нарушении четнос-
ти возникает прерывание процессора. В современных системах
с помощью данного вывода можно информировать процессор
о сбое, подавая на линию низкий уровень, чтобы указать на факт
системной ошибки;
♦ _I/0 CH RDY — на эту линию периферийный адаптер выдает низ-
кий уровень, если ему требуется больше времени на заверше-
ние операции;
♦ _I0R/_I0W - разрешение считывания и записи в регистры адрес-
ного пространства ввода/вывода;
♦ _М ЕМ R/_М ЕМW - указывает на то, что процессор ведет считывание
или запись в память;
ИНТЕРФЕЙСЫ ПК
Таблица 10.3
Контакты разъема шины ISA
Вывод Сторона А разъема Сторона В разъема
1 I/O сн снк GND ’
2 D7 Reset
3 D6 +5 В "
4 D5 IRQ2 ~
5 D4 -5 В ~~
6 D3 DRQ2
7 D2 -12 В
8 D1 _CARD SLCTD
9 D0 +12 В
10 IO CH RDY GND
11 AEN _MEMW
12 А19 _MEMR
13 А18 J0W
14 А17 JOR
15 А16 _DACK3
16 А15 DRQ3
17 А14 _DACK1
18 А13 DRQ1
19 А12 _DACK0 (-REFRESH)
20 А11 CLOCK
21 А10 IRQ7
22 А9 IRQ6
23 А8 IRQ5
24 А7 IRQ4
25 А6 IRQ3
26 А5 _DACK2
27 А4 т/с
28 АЗ BALE
29 А2 +5 В
30 А1 OSC - 14, 31818 МГц
31 АО GND
♦ IRQ3 -1RQ7 - линии запроса прерывания от аппаратуры. Запро-
сы поступают на программируемый контроллер прерываний
8259, расположенный на материнской плате (Peripheral Inter-
rupt Controller - PIC). Он организует обработку запросов в со-
ответствии с текущими приоритетами. Запрос на прерывание
передается высоким уровнем сигнала;
♦ ОSС - тактовая частота, соответствует учетверенной частоте цве-
товой несущей стандарта NTSC (14, 31818 МГц). Используется
для тактирования работы видеоадаптеров MDA и CGA. Также
может применяться для синхронизации других адаптеров;
♦ CLOCK - частота системного тактового генератора, служит для
тактирования обмена по шине;
ШИНА ISA
♦ DRQ# - линии запросов прямого доступа к памяти (Direct Me-
mory Access - DMA). Каждой из них соответствует линия под-
тверждения (разрешения) прямого доступа _DACK#. При пря-
мом доступе к памяти происходит пересылка данных между
портом периферийного устройства и оперативной памятью.
Управляет пересылкой контроллер прямого доступа к памяти
(контроллер ПДП, или DMA-контроллер). Во время обмена по
прямому доступу на линии AEN удерживается высокий уровень.
Это указывает другим адаптерам на то, что в данный момент идет
операция ПДП. По завершении передачи всех данных DMA-koh-
троллер информирует запросивший адаптер о завершении обме-
на. При этом формируется запрос на прерывание, который сооб-
щит программному обеспечению о завершении операции;
♦ -DACK# - линии подтверждения цикла прямого доступа. Одна из
них активизируется в ответ на соответствующий запрос прямо-
го доступа от какого-либо адаптера, после чего происходит об-
мен. Линия -DACK0 или -REFRESH используется в устройствах
с динамической памятью (DRAM) для так называемой регене-
рации памяти;
♦ -MASTER - сигнал на эту линию формируется адаптером, полу-
чившим контроль над шиной. Адаптер сам генерирует все сиг-
налы, необходимые для управления шиной.
Прерывания
В IBM-совместимых ПК для интерфейсов отведены линии запросов
прерываний IRQ3, IRQ4 и IRQ7. Запросы формируются высокими
уровнями сигналов. На каждую линию может поступать несколько
запросов от периферийных устройств по схеме, представленной на
рис. 10.4.
Запрос
на прерывание
Контроллер
прерываний
Рис. 10.4
Схема передачи запросов прерываний
ИНТЕРФЕЙСЫ ПК
Программа обработки прерывания функционирует по следующей
схеме:
1. Сохранить исходный вектор, используя прерывание MS DOS
021h АН = 035h.
2. Установить новый вектор, используя прерывание MS DOS 021 h
АН = 025h.
3. Разрешить прерывание с помощью сброса соответствующего
бита маски контроллера 8259.
Для разрешения можно использовать следующий оператор:
outp(IntBase + 1, inp(IntBase + 1) & ((OxOFF " (1 << Bit));
После завершения программы обработки необходимо выпол-
нить следующие действия:
1. Запретить прерывание с помощью маскирования соответству-
ющего запроса прерывания в 8259.
2. Восстановить исходный вектор, используя прерывание MS
DOS 021 h АН = 025h.
ПОРТЫ КЛАВИАТУРЫ И МЫШИ
Клавиатура и мышь ПК работают по синхронному последовательно-
му протоколу передачи данных, который впервые появился в IBM
PC. Этот протокол позволяет отправлять данные с клавиатуры таким
образом, что ПК в состоянии распознать нажатие нескольких кла-
виш. Стандарт усовершенствован с появлением компьютеров IBM
PC АТ, в которых используется двунаправленная передача.
Три года спустя были выпущены компьютеры PS/2, в которых
протокол интерфейса клавиатуры применяется и для мыши, при-
чем без выделения для нее последовательного порта и соответству-
ющей мультикарты. Протокол клавиатуры оказался столь удачным,
что IBM задействовала его во всех своих персональных компьюте-
рах, терминалах и рабочих станциях, выпускаемых с 1981 года. Этот
протокол также широко распространен и среди других производи-
телей ПК.
Разъемы
На рис. 10.5 показана розетка типа mini-DIN с шестью выводами, ус-
танавливаемая на корпусе ПК для подключения клавиатуры. Порт
клавиатуры обычно в состоянии обеспечить ток до 100 мА, что бо-
ПОРТЫ КЛАВИАТУРЫ И МЫШИ
Рис. 10.5
Розетка типа mini-DIN
1 - Данные ввода/вывода
2 - Не используется
3 - "Земля"
4 - Vcc(питание)
5 - Синхросигналы ввода/вывода
6 - Зарезервирован
лее чем достаточно. Для защиты источника напряжения питания
клавиатуры (+5 В) в некоторых случаях может использоваться плав-
кий предохранитель. Если устройства, подключаемые к порту, не
будут потреблять слишком много энергии, то можно обойтись и без
него.
Временные диаграммы интерфейса клавиатуры
На рис. 10.6 представлен протокол передачи данных от клавиатуры.
Бит паритета предназначен для проверки на нечетность, то есть
код данных (восемь бит) вместе с битом паритета должны содер-
жать нечетное число единиц. Сигнал линии данных DATA не должен
изменяться в течение по крайней мере 5 мкс с момента изменения
состояния тактовой линии CLOCK.
Clock
Юртовый Бит0 Бит1 Бит2
Data
Столовый
бит
Бит 7 четности
Рис. 10.6
Протокол передачи данных от клавиатуры на ПК
Длительность единичных и нулевых посылок тактового сигнала
должна быть не менее 30 мкс (типовое значение составляет 40 мкс).
Данные, отправляемые с системного блока на клавиатуру, имеют
аналогичный вид, но синхроимпульсы при этом инвертированы.
Данные меняются при низком уровне синхроимпульсов и «защелки-
ваются», когда он становится высоким, как показано на рис. 10.7.
Длительность битовых интервалов в обоих случаях одинакова.
ИНТЕРФЕЙСЫ ПК
с|°ск Л_Л_П_П_Пг • тъгъги
Data
г- 7 Бит Столовый
оит' четности бит
СтХтВЫЙ Бит0 Бит1 Бит2
Рис. 10.7
Протокол передачи данных от ПК на клавиатуру
Интерфейс клавиатуры можно использовать для подключения к ком-
пьютеру дополнительных устройств, как это показано на рис. 10.8.
Рис. 10.8
Параллельное подключение дополнительных устройств
к интерфейсу клавиатуры
Скан-коды клавиатуры
В операционной системе MS DOS коды клавиатуры, как правило,
представляют собой комбинацию скан-кодов клавиатуры и соответ-
ствующего кода ASCII. В табл. 10.4 приведены коды, передаваемые
при нажатии различных клавиш, а также при одновременном нажа-
тии клавиш Ctrl, Alt и Shift.
В таблице показаны коды в конфигурации скан/ASCII для симво-
лов расширенной клавиатуры. Стандартные коды - те же самые, за
исключением того, что клавиши F11 И F12, а также «центральная
клавиша» дополнительной клавиатуры не передают никаких кодов,
а для клавиш управления курсором и клавиш Insert, Home, Page Up,
Delete, End и Page Down код ACSII имеет вид 0x000.
Все величины представлены в шестнадцатеричном формате,
а скан-коды - в том виде, который они имели на ПК автора книги-
ПОРТЫ КЛАВИАТУРЫ И МЫШИ
Верхний и нижний регистры в таблице не различаются (приведен
только верхний регистр), поскольку они обрабатываются непосред-
ственно самим ПК. Идентификатор КР обозначает дополнительную
клавиатуру, а символ А указывает клавиши на ней. Так, следующие за А
символы UA, DA, LA, RA соотносятся с клавишами управления курсо-
ром ?, >1, —>.
Символы I, D, Н, PU, PD, Е, в сочетании с КР или А соответствуют кла-
вишам Insert, Delete, Home, Page Up, Page Down и End на допол-
нительной клавиатуре.
Цифры дополнительной клавиатуры при нажатой клавише Alt ис-
пользуются для введения специфичных кодов ASCII в десятичном
представлении. Например, нажатием клавиш Alt+6+5 в коде ASCII
вводится буква «А». Такие клавиши в табл. 10.4 отмечены знаком #.
Таблица 10.4
Скан-коды клавиатуры ПК
Клавиша Стандартные коды Коды комбинаций с клавишей Shift Коды комбинаций с клавишей Ctrl Коды комбинаций с клавишей Alt
Esc 01/1B 01/1В 01/1В 01/00
1 02/31 02/21 - 78/00
2 03/32 03/40 03/00 79/00
3 04/33 04/23 — 7А/00
4 05/34 05/24 - 7В/00
5 06/35 06/25 - 7С/00
6 07/36 07/5Е 07/1Е 7D/00
7 08/37 08/26 — 7Е/00
8 09/38 09/2А - 7F/00
9 OA/39 ОА/28 - 80/00
0 0B/30 ОВ/29 — 81/00
- 0C/2D 0C/5F 0C/1F 82/00
= 0D/3D 9С/2В - 83/00
BS 0E/08 0Е/08 0E/7F 0Е/00
Tab 0F/09 0F/00 94/00 А5/00
Q 10/71 10/51 10/11 10/00
W 11/77 11/57 11/17 11/00
E 12/65 12/45 12/05 12/00
R 13/72 13/52 13/12 13/00
T 14/74 14/54 14/14 14/00
Y 15/79 15/59 15/19 15/00
U 16/75 16/55 16/15 16/00
I 17/69 17/49 17/09 17/00
0 18/6F 18/4F 18/0F 18/00
P 19/70 19/50 19/10 19/00
_ t 1A/5B 1А/7В 1А/1В 1А/00
] 1B/5D 1B/7D 1B/1D 1В/00
Enter 1C/0D 1C/0D 1С/0А 1С/00
A 1D/61 1Е/41 1Е/01 1Е/00
ИНТЕРФЕЙСЫ ПК
Таблица, 10,4
Скан-коды клавиатуры ПК (продолжение)
Клавиша Стандартные коды Коды комбинаций с клавишей Shift Коды комбинаций с клавишей Ctrl Коды комбинаций с клавишей Alt
S 1F/73 1F/53 1F/13 1F/00
D 20/64 20/44 20/04 20/00 '
F 21/66 21/46 21/06 21/00
G 22/67 22/47 22/07 22/00
Н 23/68 23/48 23/08 23/00
J 24/бА 24/4А 24/ОА 24/00
К 25/6В 25/4В 25/ОВ 25/00
L 26/6С 26/4С 26/ОС 26/00
27/ЗВ 27/ЗА — 27/00
• 28/27 28/22 - 28/00
29/60 29/7Е - 29/00
\ 2В/5С 2В/7С 2В/1С 2В/00
Z 2С/7А 2С/5А 2С/1А 2С/00
X 2D/78 2D/58 2D/18 2D/00
с 2Е/63 2Е/43 2Е/03 2Е/00
V 2F/76 2F/56 2F/18 2F/00
в 30/62 30/42 30/02 30/00
N 31/6Е 31/4Е 31/ОЕ 31/00
М 32/6D 32/4D 32/0D 32/00
- 33/2С ЗЗ/ЗС - 33/00
34/2Е 34/3E - 34/00
/ 35/2F 35/3F - 35/00
КР* 37/2А 37/2А 96/00 37/00
SPACE 39/20 39/20 39/20 39/20
F1 ЗВ/ОО 54/00 5Е/00 68/00
F2 ЗС/00 55/00 5F/00 69/00
F3 3D/00 56/00 60/00 6А/00
F4 ЗЕ/00 57/00 61/00 6В/00
F5 3F/00 58/00 62/00 6С/00
F6 40/00 59/00 63/00 6D/00
F7 41/00 5А/00 64/00 6Е/00
F8 42/00 5В/00 65/00 6F/00
F9 43/00 5С/00 66/00 70/00
F10 44/00 5D/00 67/00 71/00
F11 85/00 87/00 89/00 8В/00
F12 86/00 88/00 8А/00 8С/00
КРН 47/00 47/37 77/00 # _
КР UA(T) 48/00 48/38 8D/00 # _
КР PU 49/00 49/39 84/00 # _
КР- 4A/2D 4A/2D 8Е/00 4А/00
КР 1_А(<—) 4В/00 4В/34 73/00 # _
КРС 4С/00 4С/35 8F/00 # -
КР RA(->) 4D/00 4D/36 74/00 # _
КР + 4Е/2В 4Е/2В 90/00 4Е/00 _
КРЕ 4F/00 4F/31 75/00 #
КР DA(T) 50/00 50/32 91/00 #
КР PD 51/00 51/33 76/00 #
ПОРТЫ КЛАВИАТУРЫ И МЫШИ
Таблица 10.4
Скан-коды клавиатуры ПК (окончание)
Клавиша Стандартные коды Коды комбинаций с клавишей Shift Коды комбинаций с клавишей Ctrl Коды комбинаций с клавишей Alt
KPI 52/00 52/30 92/00 -
KPD 53/00 53/2Е 93/00 -
КР Enter EO/OD EO/OD ЕО/ОА -
КР/ E0/2F E0/2F 95/00 -
PAUSE - - 72/00 -
BREAK - - 00/00 -
АН 47/EO 47/EO 77/ЕО 97/00
AUA(T) 48/EO 48/EO 8D/E0 98/00
APU 49/EO 49/EO 84/ЕО 99/00
ALA(«~) 4B/E0 4B/E0 73/Е0 9В/00
A RA (-») 4D/E0 4D/E0 74/ЕО 9D/00
AE 4F/E0 4F/E0 75/Е0 9F/00
A DA (I) 50/E0 50/E0 91/ЕО А0/00
APD 51/EO 51/E0 76/Е0 А1/00
Al 52/E0 52/E0 92/ЕО А2/00
AD 53/E0 53/E0 93/ЕО АЗ/00
Команды контроллера клавиатуры
ПК обладает определенным набором команд, которые он может
направлять на клавиатуру (табл. 10.5). Во всех перечисленных слу-
чаях (за исключением команд, которые игнорируются, и команды
«эхо») клавиатура отсылает обратно код подтверждения 0x0FA.
Таблица 10.5
Команды управления клавиатурой
Код Функция
OxOED Включение светодиодного индикатора Следующий выводимый байт определяет состояние светодиодного индикатора
ОхОЕЕ Эхо - клавиатура возвращает ОхОЕЕ
OxOEF - 0xF2 Игнорируются клавиатурой
0x0F3 Установка скорости автоповтора, следующий байт определяет скорость
0x0F4 Разрешение сканирования клавиш
OxOF5 Установка исходного состояния (светодиоды не горят, скорость автоповтора задана по умолчанию), сканирование клавиш запрещено
0x0F6 Установка исходного состояния (светодиоды не горят, скорость автоповтора задана по умолчанию), сканирование клавиш разрешено
0x0F7 - OxFD Игнорируются клавиатурой
OxOFE Запрос на отправку клавиатурой последнего знака
OxOFF Сброс микроконтроллера клавиатуры
ИНТЕРФЕЙСЫ ПК
Интерфейсы BIOS
При пересылке данных между процессором и контроллером клави-
атуры формируются флаги, приведенные в табл. 10.6.
Таблица Д 0.6 s
Байты флагов простой и расширенной клавиатуры
Бит Назначение (клавиша, при нажатии которой устанавливается бит)
Флаги клавиатуры
7 Insert
6 Caps Lock
5 Num Lock
4 Scroll Lock
3 Alt
2 Ctrl
1 Shift (слева)
0 Shift (справа)
Флаги расширенной клавиатуры
7 SysReq
6 Caps Lock
5 Num Lock
4 Scroll Lock
3 Alt (справа)
2 Ctrl (справа)
1 Alt (слева)
0 Ctrl (слева)
Для получения доступа к функциям BIOS клавиатуры (табл. 10.7)
используется прерывание int 16h.
Команды клавиатуры
Обработка нажатия на клавишу может быть упрощенно представле-
на при помощи следующего фрагмента кода в С:
switch ((Keysave = KEYREADQ) & OxOFF) { // Обработка клавиши.
case 0x000: // Клавиши специальных
// функций.
case ОхОЕО:
KeySave = (Keysave >> 8) & OxOFF; // Обработка
// скан-кода.
break;
case OxOOD: // Обработка нажатия клавиши
// Enter.
ПОРТЫ КЛАВИАТУРЫ И МЫШИ
Таблица 10.7
функции BIOS клавиатуры
Функция Выдает Принимает Примечания
Чтение символа АН = OOh АН = скан-код AL = символ ASCII Возвращает код следующей клавиши из буфера или ждет поступления кода клавиши
Чтение состояния AH = 01h АН = скан-код AL = символ ASCIIO (ZF = 1), если никаких символов нет Опрашивает буфер клавиатуры и возвращает код следующей нажатой клавиши или флаг 0 (ZF)
Чтение флагов АН = 02П АН = 00 AL = байт флагов клавиатуры Возвращает байт флагов клавиатуры
Установка задержки и скорости повтора АН = 03h AL = 5 ВН = задержка (мс): 0-250 1-500 2-750 3 -1000 BL = скорость (символов в секунду): 0-30 1-20 8-15 12-10 16-7,5 20-5 24-3,75 28 - 2,5 Нет Устанавливает задержку отпускания клавиши и скорость автоповтора Это функция операционной системы, а не приложения
Чтение задержки и скорости повтора АН = 03h AL = 6 ВН = задержка BL = скорость Считывает значение текущей задержки и скорости автоповтора
Запись в буфер клавиатуры АН = 05h ВН = скан-код BL = символ ASCII AL = 0, если запись в буфер была успешной Записывает новый символ в буфер клавиатуры
Определение параметров клавиатуры — АН = 09П AL = функциональный код: 3 - установлен, если можно считать задержку- скорость; 2 - установлен, если можно установить задержку-скорость; 1 - установлен, если нельзя установить задержку- скорость; 0 - установлен, если поддерживается возврат по умолчанию задержки- скорости Возвращает возможности клавиатуры по изменению скорости автоповтора и задержки
ИНТЕРФЕЙСЫ ПК
Таблица. 10.7
Функции BIOS клавиатуры (окончание)
Функция Выдает Принимает Примечания
Чтение расширенной клавиатуры АН = 10h АН = скан-код AL = символ ASCII Возвращает полный код клавиши, если в буфере клавиатуры есть непрочитанные коды клавиш, или ждет поступления кода клавиши для возврата
Чтение состояния расширенной клавиатуры AH = 11h АН = скан-код AL - символ ASCII 0 (ZF = 1) если никаких символов нет Проверяет буфер клавиатуры и возвращает значение кода нажатой клавиши или флаг 0 (ZF = 1)
Чтение флагов расширенной клавиатуры АН == 12h АН = флаги расширенной клавиатуры AL = байт флага клавиатуры Возвращает состояние переключателей Shift/Ctrl/Alt расширенной клавиатуры
break;
// Обработка нажатия других // специальных клавиш.
default: // Невостребованные клавиши
// Конец фрагмента.
ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
Последовательный порт ПК практически не изменялся с момента по-
явления IBM PC в 1981 году. Порт используется с разъемом, имею-
щим девять выводов (в PC/AT); сейчас добавилась возможность бу-
феризации данных последовательного порта.
Выводы разъема
На рис. 10.9 показаны разъемы типа DB-9 и DB-25 интерфейса RS 232.
В табл. 10.8 описано назначение контактов.
Таблица 10.8
Назначения выводов разъемов интерфейса RS-232
Вывод Разъем DB-25 Разъем DB-9 Вход (1)/выход (QL
TxD 2 3 o
RxD 3 2 i -
Gnd 7 5 Общий
RTS 4 7 О
CTS 5 8 I
DTR 20 4 0
DSR 6 6 I -
RI 22 9 I
DCD 8 1 I J
ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
DB-25 (вилка)
Рис. 10.9
DB-9 (вилка)
Разъемы типа DB-9 и DB-25 интерфейса RS-232
Блок-схема УАПП 8250
Для реализации последовательных интерфейсов в IBM-совмести
мых ПК используется универсальный асинхронный приемопере
датчик (УАПП, UART) 8250 (рис. 10.10).
Рис. 10.10
Блок-схема УАПП 8250
ИНТЕРФЕЙСЫ ПК
Базовые адреса последовательного порта
В табл. 10.9 представлены базовые адреса последовательного порта.
Таблица 10.9
Базовые адреса последовательного порта
Порт Базовый адрес Номер прерывания (вектор)
СОМ1 0x03F8 ОхООС
COM2 0x02F8 ОхООВ
COM3 ОхОЗЕ8 ОхООС
COM4 0х02Е8 ОхООВ
Каждый базовый адрес используется в качестве исходного для адре-
сации восьми регистров контроллера последовательного порта
(8250). Номер прерывания представляет собой вектор прерывания.
Порт COM4 имеет адреса, конфликтующие с графическим адапте-
ром 8514/А.
Регистры УАПП 8250
УАПП 8250 содержит восемь регистров, которые задаются смеще-
нием относительно базовых адресов. Назначение регистров и сме-
щение представлены в табл. 10.10. Спецификация разрядов дана
в табл. 10.11-10.17.
Таблица 10.10
Управляющие регистры последовательного порта ПК
Смещение от базового адреса Назначение регистра
0 Буферный регистр передачика/приемника/защелка младшего байта делителя
1 Регистр разрешения прерывания/защелка старшего байта делителя _
2 Регистр идентификации прерываний .
3 Регистр управления линии _
4 Регистр управления модемом
5 Регистр состояния линии _
6 Регистр состояния модема _
7 Оперативный регистр
Скорость передачи данных (Data Speed) определяется загрузкой 16'
разрядной величины коэффициента деления в регистр делителя-
Для загрузки 1 должна быть записана в седьмой разряд регистра
управления линии. После этого младший байт заносится при записи
в буфер порта, а старший - в регистр разрешения прерываний-
ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
Чтобы вычислить текущую скорость передачи данных, нужно частоту
1,8432 МГц разделить на коэффициент деления, умноженный на 16:
Скорость передачи данных = 1,8432 МГц / (16 х коэффициент де-
ления).
В табл. 10.11 представлены значения коэффициента деления для
некоторых стандартных скоростей передачи данных.
Таблица 10.11
Коэффициенты деления для различных стандартных скоростей передачи данных
Скорость передачи данных (бит/с) Коэффициент деления
110 0x0417
300 0x0180
600 ОхООСО
1200 0x0060
2400 0x0030
9600 ОхОООС
19200 0x0006
115200 0x0001
После получения символа устанавливается ряд флагов (включая
условия ошибки), которые можно сбросить, только если считать
символ в регистре буфера приема (Receive Holding Register). Имен-
но по этой причине логичнее считывать содержимое последова-
тельного порта в начале прикладной программы, что позволяет
выяснить статус и очистить буфер.
Для передачи символ загружается в буфер передачи путем записи
по базовому адресу. Эта загрузка может происходить, как только сдви-
говый регистр завершает отсылку предыдущего символа. Часто быва-
ет, что в начале передачи в сдвиговом регистре ничего нет, поэтому
символ загружается в него из буферного регистра мгновенно, осво-
бождая при этом буфер для следующего
символа.
УАПП 8250 формирует запросы на
Прерывание (рис. 10.11), которые ком-
пьютер может маскировать. В контрол-
лере для управления прерываниями
Используется регистр разрешения пре-
рываний (табл. 10.12), регистр иден-
тификации прерываний (табл. 10.13)
П бит _0ut2 регистра управления моде-
мом (табл. 10.15 и рис. 10.11).
_0ut2
Прерывание
Запрос
прерывания
Рис. 10.11
Схема управления запросом
прерывания последовательного порта
IBM-совместимого ПК
ИНТЕРФЕЙСЫ ПК
Таблица 10.12
Регистр разрешения прерываний последовательного порта ПК
Бит Назначение
4-7 Не используются, обычно установлены в 0
3 Запрос прерывания по изменению состояния линий интерфейса модема ~~
2 Запрос прерывания по изменению состояния буферного регистра приемника "
1 Запрос прерывания, если буферный регистр пуст
0 Запрос прерывания по приему символа "
Таблица 10.13
Регистр идентификации прерываний последовательного порта ПК .
Бит Назначение
3-7 Не используются, обычно установлены в 0
1-2 Биты идентификации прерывания (ID)
В2 В1 Приоритет Тип запроса
0 0 Низший Изменение состояния линий модема
0 1 Третий Буферный регистр передатчика пуст
1 0 Второй Получены данные
1 1 Высший Изменение состояния линии
Таблица 10.14
Регистр управления линии последовательного порта ПК
Бит Назначение
7 При установке в 1 буферный регистр передатчика и регистр разрешения прерываний используются для загрузки значения коэффициента деления
6 При установке в 1 контроллер 8250 выдает «пробелы» (индикатор останова) до тех пор, пока этот бит не будет сброшен
3-5 Определение контроля четности
В5 В4 ВЗ Вид контроля
0 0 0 Контроль не осуществляется
0 0 1 Контроль на нечетность
0 1 0 Контроль не осуществляется __
0 1 1 Контроль на четность _
1 0 0 Контроль не осуществляется _
1 0 1 Бит четности равен 1 _
1 1 0 Контроль не осуществляется „
1 1 1 Бит четности равен 0
2 Длительность стопового бита 1 - 2 такта, 0 - 1 такт
0-1 Разрядность данных
В1 ВО Формат
0 0 5 бит
0 1 6 бит
1 0 7 бит
1 1 8 бит
ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
Таблица 10.15
Регистр управления модемом последовательного порта ПК
Бит Вывод Назначение
2 5-7 - He используются, обычно установлены в 0
4 Loop Когда бит установлен в 1, данные передатчика непосредственно передаются на приемник
3 0ut2 Когда бит установлен в 1, запросы прерываний от 8250 не маскируются
2 Outl Не используется для управления
1 _RTS Когда бит установлен в 1, линия RTS находится в состоянии Mark (1)
0 _DTR Когда бит установлен в 1, линия DTR находится в состоянии Mark (1)
Таблица 10.16
Регистр состояния линии последовательного порта ПК
Бит Назначение
7 Не используется, обычно установлен в 0
6 Флаг «сдвиговый регистр передатчика пуст»
5 Флаг «буферный регистр передатчика пуст»
4 Устанавливается в 1, когда длительность состояния Space (0) линии приема больше длительности посылки
3 Флагошибки кадрирования. Устанавливается в 1, когда последний бит посылки (стоповый бит) равен значению Space
2 Флаг ошибки по четности
1 Флаг переполнения приемного буфера
0 Устанавливается в 1, если символ был получен, но не считан
Прерывания
Для разрешения прерываний последовательных портов СОМ1/
COM3 (с вектором ОхООС) может применяться следующая программа:
Setlnt ( ОхОС, SerlntHdlr ); // Указание программы
// обработки.
Dummy = inp ( RxHoldingRegister ); // Отмена всех
// отложенных прерываний.
outp ( IntMaskRegister, inp(IntМaskRegistег ) & OxOFB );
// Разрешение прерываний
// C0M1/C0M3 в контроллере.
outp ( InterruptEnableregister, 0x003 );
// Запрос прерываний
// по событиям
// «передающий буфер пуст»
// и «приемный буфер полон».
outp (ModemControlRegister, inp( ModemControlRegister ) | Out2);
// Разрешение прерываний
Ц от 8250.
ИНТЕРФЕЙСЫ ПК
Таблица 10.17
Регистр состояния модема последовательного порта ПК
Бит Вывод Назначение
7 DCD Флаг сигнала DCD
6 RI Когда бит установлен в 1, модем распознает сигнал вызова устройства, с которым он соединен
5 DSR Флаг сигнала DSR
4 CTS Флаг сигнала CTS
3 DCD Устанавливается в 1, когда изменяется состояние линии DCD
2 R1 Установка этого бита означает, что линия индикатора вызова (Ring Indicator) перешла из состояния Mark в состояние Space
1 DSR Устанавливается в 1, когда измененяется состояние линии DSR
0 CTS Устанавливается в 1, когда изменяется состояние линии CTS
Когда аппаратура запрашивает прерывание, управление перехо-
дит к вспомогательной программе:
SerlntHdlr: // Программа обработки прерываний
// последовательного порта.
Когда порт, запрашивающий прерывание, определен:
switch ( InterruptIDRegister ) { // Обработка
// запроса прерывания.
case 4:
InString[ i++ ] = RxHoldIngReg1stег;
Break;
case 2: // Передающий буфер
// пуст.
ТхНо 1diпgRegistег = OutString [j++]; // Посылка следующего
// символа.
break;
default: // Другие типы
// прерываний.
Dummy = RхНо 1dingRegistег; // Очистка принимаемых
// данных.
} // Конец switch.
InterruptControlRegister = EOI; // Сброс контроллера
// прерываний.
returnFromlnterrupt; // Выход из прерывания.
Функции прерывания 14h BIOS интерфейса RS-232
Приложение может использовать программное прерывание 14И
BIOS для реализации функций последовательного порта. Перечень
функций представлен в табл. 10.18.
ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
Таблица! 0.18
функции прерывания 14h BIOS
Функция Выдает Принимает Примечания
Инициализация порта АН = 00h AL = параметры инициализации DX = номер порта АН = состояние линии AL = состояние модема Инициализирует последовательный порт
Передача символа AH = 01h AL = символ DX = порт АН = состояние линии AL = состояние модема Отправляет символ после установки связи с модемом .
Получение символа АН = 02h DX - номер порта АН = статус линии AL = символ Ожидает символ, который должен поступить после установки связи с модемом
Получение состояния АН = 03h DX = номер порта АН = статус линии AL = статус модема Возвращает текущее состояние порта
Расширенная инициализация порта АН = 04h AL = 0 - при отсутствии прерывания, 1 - при отправке прерывания ВН = режим контроля по четности 0 - отсутствие; 1 - по нечетности; 2 - почетности; 3 - stick-нечетность; 4 - stick-четность BL - стоповый бит: 0 - один такт; 1 - два такта СН = длина слова: 0-5 бит; 1 - б бит; 2-7 бит; 3-8 бит CL = скорость передачи данных: 0 -110 бит/с; 1 -150 бит/с; 2 - 300 бит/с; 3 - 600 бит/с; 4 -1200 бит/с; 5 - 2400 бит/с; 6 - 4800 бит/с; 7 - 9600 бит/с; 8 -19200 бит/с DX = номер порта АН - состояние линии AL = состояние модема Речь идет о более полной инициализации последовательного порта
Чтение регистра Управления Модемом АН = 05h AL = 0 DX = номер порта BL = регистр управления модемом Выдает содержимое регистра управления модемом
ИНТЕРФЕЙСЫ ПК
Таблица 10.18
Функции прерывания 14h BIOS (окончание)
Функция Выдает Принимает Примечания
Запись в регистр управления модемом АН = 05h AL = 1 BL = новое значение регистра управления модемом АН = состояние линии AL = состояние модема Устанавливает регистр' управления модемом (новое значение)
ПАРАЛЛЕЛЬНЫЙ ПОРТ
Параллельный портявляется тем устройством, которое привлекает наи-
большее внимание пользователей, когда речь заходит о необходимос-
ти расширения системы ввода/вывода ПК. Схема, используемая
в PC/AT, состоит из семи ТТЛ микросхем и обеспечивает при этом
простой байтовый двунаправленный обмен с ПК.
Блок-схема и разъем параллельного порта
На рис. 10.12 представлена блок-схема параллельного порта ПК. Разъем
для подключения параллельного порта показан на рис. 10.13. Назна-
чения выводов разъема приведены в табл. 10.19.
Таблица 10.19 ,
Назначения выводов разъема параллельного порта
Вывод Обозначение Вход/выход Назначение
1 .STROBE Выход Строб-импульс, отрицательная логика
2 DO Двунаправленный Бит 0 данных
3 D1 Двунаправленный Бит 1 данных
4 D2 Двунаправленный Бит 2 данных
5 D3 Двунаправленный Бит 3 данных
6 D4 Двунаправленный Бит 4 данных
7 D5 Двунаправленный Бит 5 данных
8 D6 Двунаправленный Бит 6 данных
9 D7 Двунаправленный Бит 7 данных
10 _АСК Вход Подтверждение приема данных (низким уровнем)
11 BUSY Вход 1 - принтер занят
12 NOPAPER Вход 1 - отсутствует бумага в принтере
13 SELECTED Вход 1 - принтер выбран и находится в активном состоянии
ПАРАЛЛЕЛЬНЫЙ ПОРТ
Шина данных
Буфер
данных
(Base+0)
_Slctl
17
Init
16
-Auto
FDXT
14
-Ack
БитО
БитЗ
Бит 2
Бит 1
Буфер
контроля
(Base+2)
10
_Error
15
SlctO
13
Busy
11
PE
_______Бит 6
______БитЗс
_I Бит 4
Бит 7 с
--- Бит5 с
Бит 2^
Буфер
состояния
(Base+1)
Рис. 10.12
Блок-схема параллельного порта
Таблица 10.19
Назначения выводов разъема параллельного порта (окончание)
Вывод Обозначение Вход/выход Назначение
14 -AUTOFEED Выход с открытым коллектором Протяжка бумаги, если низкий уровень
15 .ERROR Вход Ошибка принтера, продолжение печати невозможно, если низкий уровень
16 .INIT Выход с открытым коллектором Низкий уровень переводит принтер в исходное состояние
17 .SELECT Выход с открытым коллектором Низкий уровень активизирует принтер
18-25 Ground - Общий провод
ИНТЕРФЕЙСЫ ПК
DB-25 (розетка)
Рис. 10.13
Разъем DB-25 параллельного порта IBM-совместимого ПК
Базовые регистры
Базовые адреса установленных параллельных портов могут быть считаны
из оперативной памяти по адресам: 0x00040 - 0x00008 и 0x040 - 0x00000
(табл. 10.20).
Таблица 10.20
Базовые адреса параллельных портов
Порт Базовый адрес Номер прерывания (вектор)
LPT1 0х0378/0х03ВС OxOOF/OxOOD
LPT2 0x0378 OxOOF
LPT3 0x0278 0x000
Регистры
Спецификация регистров параллельного порта дана в табл. 10.21-
10.23. Временные диаграммы сигналов при передаче данных на
принтер показаны на рис. 10.14.
Таблица 10.21
Регистр данных параллельного порта (базовый адрес + 0)
Бит Назначение
7-0 Биты данных Режим входа может быть задан для ввода данных путем установки бита 5 управляющего регистра
ПАРАЛЛЕЛЬНЫЙ ПОРТ
Данные '
Strobe |—i j
\ /
Busy 1 1 1 1 -//
1 _ц , 1
1 // \_1
Опрос * на "занятость" 1 завершен । Пересылка • байта 1 данных । Ожидание завершения . печати байта данных 1
Рис. 10.14
Диаграмма передачи байта на принтер, подключенный к параллельному порту
Таблица 10.22
Регистр состояния параллельного порта (базовый адрес + 1)
Бит Назначение
7 Бит линии BUSY параллельного порта (принтер занят)
6 Бит линии _АСК (подтверждение). Активный уровень - низкий
5 Когда равен 1, в принтере нет бумаги (NOPAPER)
4 Когда равен 1, принтер выбран (SELECTED)
3 Когда равен 0, ошибка принтера (_ERROR)
2-0 Не используются
Таблица 10.23
Регистр управления параллельного порта (базовый адрес + 2)
Бит Назначение
7-6 Не используются
5 Устанавливается для перевода порта в режим ввода
4 Устанавливается для разрешения запросов прерываний по сигналу с вывода .АСК принтера. Доступен по чтению
3 Бит линии .SELECT Активный уровень - низкий Доступен по чтению
2 Бит линии _ШТ Активный уровень - низкий. Доступен по чтению
1 Бит линии _AUTOFEED Активный уровень - низкий Доступен по чтению
0 Бит линии .STROBE Активный уровень - низкий Доступен почтению
ИНТЕРФЕЙСЫ ПК
Функции BIOS параллельного порта
Информация о состоянии принтера возвращается программе от
параллельного порта в старшем байте аккумулятора АН во время вы-
полнения функций BIOS параллельного порта. Назначение разря-
дов представлено в табл. 10.24.
Таблица 10.24
Назначение разрядов байта состояния принтера
Бит Назначение
7 Не занят
6 Подтверждение
5 Нет бумаги
4 Выбран
3 Ошибка
0 Закончилось время
Функции BIOS параллельного порта вызываются через про-
граммное прерывание int 17h BIOS. Перечень функций представлен
в табл. 10.25.
Таблица J 0.25
Функции прерывания mt 17h BIOS для параллельного порта
Функция Выдает Принимает Примечания
Посылка символа АН = 00h AL = СИМВОЛ DX = номер порта АН = состояние Отправляет указанный символ. Если принтера нет или он не включен, устанавливается бит Timeout
Инициализация порта принтера AH = 01h DX = номер порта АН = состояние Выполняет инициализацию порта принтера и принтера, подключенного к нему
Запрос состояния АН = 02h DX = номер порта АН = состояние Возвращает текущее состояние принтера
lAIAIIAIV
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
ПЕРЕХОД ЗА ПРЕДЕЛЫ ТЕКУЩЕЙ СТРАНИЦЫ
В общем случае для микроконтроллеров младшего подсемейства
межстраничный переход имеет вид:
movf STATUS, w ; Модификация трех старших бит
andlw 0x01F ; регистра состояния.
lorlw HIGH ((Label << 4) & ОхОЕО)
movwf STATUS
goto (Label & OxOIFF) | ($ & OxOEOO)
Межстраничный переход в PIC-микроконтроллерах, принадле-
жащих к среднему подсемейству, и в микроконтроллерах PIC 17Схх
выглядит так:
movlw HIGH label Получение номера текущего блока (256 команд).
movwf PCLATH Сохранение его таким образом, чтобы последующий переход был корректным.
goto Label & OxO7FF) | ($ & 0x01800)
Приведенный ниже фрагмент выполняет межстраничный пере-
ход (goto и call) в микроконтроллерах PIC 18Схх. Переход может
осуществляться в пределах всей памяти программ. В нем использо-
вана команда branch always - BRA:
movlw UPPER Label Получение номера текущего блока команд
movwf PCLATU Сохранение его таким образом, чтобы последующий переход был корректным.
movlw HIGH Label
movwf PCLATH
bra (Label & 0x07FF) | ($ & OxOIEOOO)
Если используется команда вызова (call) подпрограммы с другой
страницы, необходимо убедиться в том, что содержимое PCLATH
(и PCLATU) восстанавливается после возврата из подпрограммы.
ТАБЛИЦЫ
В общем случае программная таблица в Р1С-микроконтроллерах
младшего подсемейства описывается следующим образом:
Tablel ; Возврат значения из таблицы,
; расположенной в любом месте памяти,
; в регистр w.
ТАБЛИЦЫ
movwf Temp ; Сохранение табличного указателя.
movf STATUS, w ; Подготовка к модифицикации
; трех старших бит
andlw 0x01F ; регистра состояния.
iorlw HIGH ((TableEntries << 4) & ОхОЕ)
movwf STATUS
movlw LOW TableEntries ; Задание блока.
addwf Temp, w ; Вычисление смещения в блоке.
movwf PCL ; Запись правильного адреса
; в программный счетчик.
TableEntries
dt "Table", О
В PIC-микроконтроллерах младшего подсемейства указатель на
TableEntries ни при каких обстоятельствах не должен оказаться во
втором блоке страницы.
В общем случае программа табличной выборки микроконтролле-
ров среднего подсемейства и PIC РСхх имеет вид:
ТаЬ1е2 Возврат табличного значения в регистр w.
movwf Temp Сохранение табличного указателя
movlw HIGH TableEntries Получение номера текущего блока
movwf PCLATH Сохранение его таким образом, чтобы последующий переход был правильным.
movwf Temp, w Соответственно movfp Temp, WREG для PIC 17Схх.
addlw btfsc LOW TableEntries STATUS, C Прибавление младших разрядов.
incf PCLATH, f Если в следующем блоке, то инкрементируется содержимое PCLATH.
movwf PCL TableEntries dt "Table", 0 Запись правильного адреса в программный счетчик.
Если используется PIC-микроконтроллер 18Схх, необходимо умно-
жить указатель на два, прежде чем изменить PCL, а также обновить
содержимое PCLATU и PCLATH:
ТаЫеЗ ; Возврат табличного значения
; в регистр w.
movwf Temp ; Сохранение табличного указателя,
movlw UPPER TableEntries; Получение номера текущего блока.
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
movwf PCLATU ; ; Сохранение его таким образом, ; чтобы последующий переход ; был правильным.
movlw HIGH TableEntries
movwf PCLATH
bcf STATUS, C
rlcf Temp, w ; ; Умножение указателя на два.
btfss STATUS, C ; ; Если установлен перенос, ; инкрементируется PCLATH/PCLATU.
goto TableSkipl
infsnz PCLATH, f
incf PCLATU, f
TableSkipl
addlw LOW TableEntries ; Смещение в таблице.
btfss STATUS, C ; При необходимости инкрементируется PCLATH/PCLATU.
goto TableSkip2
infsnz PCLATH, f
incf PCLATU, f
movwf PCL ; Запись правильного адреса в программный- счетчик.
TableEntries
dt "Table", О
ВЕТВЛЕНИЕ ПО УСЛОВИЮ
В табл. 11.1 представлены фрагменты, используемые для различ-
ных типов сравнений и последующих переходов по условию. Обратите
внимание, что в нее включены команды, оперирующие и перемен-
ными, и константами.
ВРЕМЕННЫЕ ЗАДЕРЖКИ
Ниже приведен макрос, генерирующий задержку от 0 до 777 циклов.
DlayMacro Macro Cycles ; Задержка.
variables i, Tcycles, Value, Tflag
TCycles = Cycles
Value = 1 << 7
i = 7
TFlag = 0
TFlag = 0
if (TCycles > 5)
while (i >= 0)
if ((TFlag == 0) && ((Value * 3) <= TCycles))
bsf DlayCount, i
ВРЕМЕННЫЕ ЗАДЕРЖКИ
Таблица 11.1
Переходы по условию
Условие перехода Условия, подлежащие проверке Фрагменты программ
A == В А - В = 0 movf A, w/movlw А subwf В, w/sublw В btfsc STATUS, Z goto Label , Переход, если Z = 1.
A != В А - В = 0 movf A, w/movlw A subwf B, w/sublw В btfss STATUS, Z goto Label , Переход, если Z = 0.
A > В А - В < 0 movf B, w/movlw A subwf B, w/sublw В btfss STATUS, C goto Label , Переход, если С = 0
A >= В А - В >= 0 movf В, w/movlw В subwf A, w/sublw В btfsc STATUS, C goto Label , Переход, если С = 1
A < В А - В < 0 movf В, w/movlw В subwf A, w/sublw A btfss STATUS, C goto Label , Переход, если С = 0
A <= В В - А > 0 movf A, w/movlw A subwf A, w/movlw В btfsc STATUS, C goto Label , Переход, если С = 1
TFlag = 1
TCycles = TCycles - (Value * 3)
else
if ((TFlag != 0) && (((Value * 3) + 1) <= Tcycles))
bsf DlayCount, i
TCycles = TCycles - ((Value * 3) +1)
endif
endif
Value = Value >> 1
i = i - 1
endw
if (TCycles > 3)
Error "Задержки слишком велики для макроса”
endif
decfsz DlayCount, f
goto $ - 1
endif
while (TCycles > 1)
goto $ + 1
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
TCycles = TCycles - 2
endw
if (TCycles == 1)
nop ; Следующий цикл,
endif
endm
Ниже представлена 16-разрядная задержка. Каждая итерация
требует пяти командных циклов. Длительность задержки может
быть определена следующим образом:
Delay = (Inst ructionCycleDelay / 5).
Следует обратить внимание, что при инициализации перемен-
ных к переменной Inst ructionCycleDelay добавляется 256.
movlw HIGH ((InstructionCycleDelay / 5) + 256)
movwf HiCount
movlw LOW ((InstructionCycleDelay / 5) + 256)
Dlay
addlw OxOFF ; Декрементирование счетчика.
btfsc STATUS, Z
decfsz HiCount, f ; Декрементирование старшего байта
; счетчика.
goto Dlay
ПОЛУЧЕНИЕ ДОПОЛНИТЕЛЬНОГО КОДА
СОДЕРЖИМОГО РЕГИСТРА (ИЗМЕНЕНИЕ ЗНАКА)
Операция дополнения до двух (получение дополнительного кода)
без изменения содержимого регистра w выполняется следующим об-
разом:
comf Reg, f
incf Reg, f
Инвертирование битов в регистре.
Добавление единицы для получения
дополнительного кода.
Этот фрагмент не должен применяться для регистров спец-
функций.
Дополнение для содержимого регистра w может быть получено
для PIC-микроконтроллера младшего подсемейства с помощью сле-
дующих команд:
addwf Reg, w
subwf Reg, w
w - w + Reg.
w = Reg - w.
«ВРАЩЕНИЕ НА МЕСТЕ»
; w = Reg - (w + Reg).
; w = -w.
В этом фрагменте разрешается использовать любой регистр, по-
скольку его содержимое не изменяется.
Для PIC-микроконтроллера среднего подсемейства может при-
меняться одна команда:
sublw О
w = 0 - w.
ИНКРЕМЕНТИРОВАНИЕ/ДЕКРЕМЕНТИРОВАНИЕ
СОДЕРЖИМОГО РЕГИСТРА W
Для инкрементирования/декрементирования содержимого регис-
тра w в микроконтроллерах младшего подсемейства, не имеющих
команд addlw и sublw, удобна приведенная ниже подпрограмма.
В качестве регистра Reg способен выступать любой регистр, не
меняющийся во время выполнения трех команд. Для микрокон-
троллеров младшего подсемейства может использоваться любой
файловый регистр, поскольку они не обновляются обработчиком
прерываний.
Для инкрементирования содержимого регистра последователь-
ность команд такова:
xorlw OxOFF ; Обратный код (инвертирование)
addwf Reg, w ; w - Reg + (w"0x0FF).
subwf Reg, w ; w = Reg + ((Reg + ((Reg + ; ((w"0x0FF)) "OxOFF) + 1. ; w - w + 1.
Дл<* декрементирования она изменяется:
subwf Reg, w ; w = Reg + (2~0x0FF) + 1.
xorlw OxOFF ; Инвертирование.
addwf Reg, w ; w = w - 1.
«ВРАЩЕНИЕ НА МЕСТЕ»
Приведенные ниже строки обеспечивают циклический сдвиг содержи-
мого регистра. Эта подпрограмма дает возможность сдвига влево,
сдвиг вправо выполняется аналогично.
rlf Register, w rlf Register, f Загрузка старшего бита в перенос. Сдвиг влево, при котором старший бит становится младшим.
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
КОПИРОВАНИЕ БИТОВ ИЗ ОДНОГО РЕГИСТРА В ДРУГОЙ
Ниже представлен быстрый способ копирования битов одного регис-
тра в другой.
movf Source, w
xorwf Destination, w
andlw B’xxxxxxxx’
xorwf Destination, f
; Замена одного x на 1, чтобы
; скопировать соответствующий бит.
ПРЕОБРАЗОВАНИЕ ПОЛУБАЙТА В КОД ASCII
Наиболее очевидный способ преобразования полубайта в код ASCII
заключается в следующем:
NybbletoASCII
addwf PCL, f
dt "0123456789ABCDEF”
Есть и другой способ:
NybbletoASCII
addlw 0x036
btfsc STATUS, DC
addlw 7
addlw 0-6
return
Добавление содержимого полубайта
к PCL.
Возврат кода ASCII
через таблицу.
Преобразование полубайта
регистра w в ASCII.
Добавление 6 к значению.
Если бит десятичного переноса
установлен, это знаки от "А"
до «F».
Добавление разницы между ”9" и ’’А”.
Возврат ASCII-кода цифры
в регистр w.
ПРЕОБРАЗОВАНИЕ БАЙТА КОДА ASCII
В ШЕСТНАДЦАТЕРИЧНЫЙ ПОЛУБАЙТ
Преобразование кода ASCII в шестнадцатеричный полубайт можно вы-
полнить следующим образом.
Поскольку старший полубайт кода ASCII-символов от «А» до «F»
на 1 больше, чем старший полубайт кода символов от 0 до 9, следу-
ет добавить разность кодов, чтобы получился результат 0x000 '
OxOOF.
ASCIItoNybble
addlw ОхОСО ; Если символы от "А" до "F”,
; устанавливается флаг переноса.
ДЕЛЕНИЕ НА ТРИ
btfss STATUS, С
addlw 7 ; Добавление разности между ”9"
; и "А”.
addlw 9
return ; Возврат значения ASCII-кода
; цифры в регистр w.
Использование знаков кода ASCII, отличных от 0-9 и А-F, приве-
дет к неправильным результатам.
ИСПОЛЬЗОВАНИЕ ВХОДА TOCKI В КАЧЕСТВЕ ИСТОЧНИКА
ПРЕРЫВАНИЯ
Следующая программа сбрасывает таймер TMRO при поступлении положительного фронта сигнала на вывод TOCKI:
movlw B’ 1 1000000’ ; Сначала задается тактирование таймера
option ; частотой командных циклов.
movlw B’ 1 1 100000’ ; Вывод TOCKI определяется как источник
; сигнала.
clrf TMRO ; Загрузка в таймер TMRO кода OxOFF.
decf TMRO, f
option ; Разрешение тактирования таймера
; от внешнего сигнала.
btfsc TMRO, 1 ; Ожидание переднего фронта сигнала.
goto $ - 1
Этот код также может использоваться в PIC-микроконтроллере
младшего подсемейства для регистрации изменений на входе вмес-
то постоянного опроса входного вывода.
ДЕЛЕНИЕ НА ТРИ
Ниже приведен алгоритм деления положительной величины на три,
разработанный Энди Уорреном (Andy Warren). Он основан на том,
что «деление на три» может быть представлено в виде такого ряда:
х/3 = х/2 - х/4 + х/16 - х/32 - х/64...
Этот алгоритм применяется в PIC-микроконтроллере следую-
щим образом:
Div3: ; Деление содержимого регистра w на три.
movlw Dividend
clrf Quotient
Div3_Loop ; Цикл, пока значение Dividend не станет
; равным 0.
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
bef STATUS, C
rrf Dividend, f ; Делимое делится на 2
; (то есть х/2 в ряду).
movf Dividend, w ; Оно равно нулю?
btfsc STATUS, Z
goto Div3_Done ; Если да, завершение.
addwf Quotient ; Добавление значения к частному.
rrf Dividend, f ; Делимое делится на 2 (то есть х/4
; в ряду).
movf Dividend, w
btfsc STATUS, Z
goto Div3_Done
subwf Quotient, f ; Quotient = Quotient - (Dividend 4)
goto Div3_Loop
Div3_Done
movf Quotient, w ; Возврат частного Quotient
return
ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ ИМПУЛЬСА
С 16-РАЗРЯДНОЙ ТОЧНОСТЬЮ
Программа, измеряющая ширину импульса по высокому уровню, име-
ет вид:
clrf PulseWidth ; Сброс таймера.
clrf PulseWidth + 1
btfss PORTn, Bit ; Ожидание импульса.
goto $ - 1
incfsz PulseWidth, f ; Инкрементирование значения
; счетчика.
deef PulseWidth + 1, f
btfsc PORTn, Bit ; Цикл выполняется, ; пока высокий уровень.
goto $ - 3
movf PulseWidth, w ; Сохранение результата.
addwf PulseWidth + 1, f
РЕГИСТРАЦИЯ ИЗМЕНЕНИЙ
Этот код может применяться для регистрации изменений, происходя-
щих в портах ввода/вывода, таймерах и других регистрах, где изме-
нения не зависят от выполнения конкретных программ:
movf Reg, w
andlw Mask ; Маскирование неиспользуемых битов.
xorwf old, w ; Сравнение с предыдущим значением.
ПЕРЕСТАНОВКА СОДЕРЖИМОГО РЕГИСТРОВ
btfsc STATUS, Z ; Если ноль, то биты не изменились,
goto no_change
xorwf old ; Если биты отличаются,
; новый код сохраняется
; как старый (old).
ПРОВЕРКА ДИАПАЗОНА
Речь идет о коде, который проверяет попадание значения перемен-
ной Num в диапазон значений и при положительном ответе перехо-
дит к метке in_range.
Movf Num, w
addlw 255 - hi_lim ; Прибавление разности 255 - hi_lim.
addlw hi_lim - 10-lim + 1 ; Прибавление значения ширины
; диапазона.
btfsc STATUS, С ; Если в итоге перенос, то значение
; не попало в диапазон.
goto in_range
ПРЕОБРАЗОВАНИЕ СИМВОЛОВ ASCII В ВЕРХНИЙ РЕГИСТР
Речь идет о практическом использовании предыдущей подпро-
граммы.
ТоU рре г: addlw 255 - * z’ Проверка попадания в диапазон
Addlw ‘ z’ - ‘ a’ +1 значений кодов нижнего регистра.
btfss STATUS, C Если перенос установлен,
addlw h‘ 20’ то нижний регистр. Если переноса нет,
addlw ‘A’ восстанавливается символ. Добавление ‘А’ для восстановления
return символа.
ПЕРЕСТАНОВКА СОДЕРЖИМОГО РЕГИСТРА
И РАБОЧЕГО РЕГИСТРА W
Ниже представлен быстрый способ перестановки содержимого ре-
гистра и регистра w, не задействуя временный регистр.
xorwf Reg, f ; w = w, Reg = Reg w.
xorwf Reg, w ; w = w Reg w), Reg = Reg
; w = Reg, Reg = Reg w.
xorwf Reg, f ; w = Reg, Reg = Reg w Reg
; w = Reg, w = Reg.
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
ПЕРЕСТАНОВКА СОДЕРЖИМОГО ДВУХ РЕГИСТРОВ
Ниже приведена подпрограмма, позволяющая быстро поменять мес-
тами содержимое двух регистров'.
movf X, w
subwf Y, w
addwf X, f
subwf Y, f
w = Y - X.
X = X + (Y - X).
w = Y - (Y - X).
СРАВНЕНИЕ И ПЕРЕСТАНОВКА, ЕСЛИ Y < X
Эта подпрограмма удобна для пузырьковой сортировки:
movf X, w
subwf Y, w ; Y >= X?
btfsc STATUS, C ; Если перенос установлен, то да.
goto $ + 2 ; Не переносить содержимое.
addwf X, f ; В противном случае X = X + (Y - X)
subwf Y, f ; X = Y - (Y - X).
ПОДСЧЕТ ЧИСЛА 1 В БАЙТЕ
Код, представленный ниже, является оптимизированным решени-
ем классической проблемы подсчета числа 1 в байте (12 команд /12 цик-
лов). Речь идет о разработке, выполненной Дмитрием Кирашовым
(Dmitry Kirashov).
; © 1998 by Dmitry Kirashov
г rf X, w ; X содержит байт.
andlw 0x55 ; -a-c-e-g.
subwf X, f ; ABCDEFGH, где AB = a + b и т.д
movwf X
andlw 0x33 ; —CD--GH.
addwf X, f
rrf X, f ; OABOOEFO. ; OOCDOOGH.
addwf X, f ; OABOOEFO. ; OOCDOOGH.
rrf X, f ; OABCD.OEFGH.
swapf X, w
addwf X, у/
andlw OxOF ; Число 1 в регистре w.
ПОБИТОВЫЕ ОПЕРАЦИИ
ГЕНЕРАЦИЯ БИТА ЧЕТНОСТИ ДЛЯ БАЙТА
В конце программы бит 0 из регистра X будет иметь значение бита, до-
полняющего до четности: если сложить все единицы байта и бит парите-
та, в результате получится четное число.
swapf xorwf rrf xorwf btfsc incf X, w X, f X, w X, f X, 2 X, f
УДЕРЖАНИЕ ПЕРЕМЕННОЙ ВНУТРИ ДИАПАЗОНА
Иногда в процессе обработки данных возникает необходимость удер-
жать значения целых чисел внутри диапазона. Четыре команды,
приведенные ниже, гарантируют, что переменная Тетр будет посто-
янно находиться в диапазоне от 0 до значения Constant.
movlw subwf btfsc subwf Constant ; 0 <= Temp <= Constant. Temp, w STATUS, C Temp, f
ПЕРЕСТАНОВКА ЧЕТНЫХ И НЕЧЕТНЫХ БИТОВ
Для перемены местами четных и нечетных битов байта можно восполь-
зоваться следующим фрагментом:
; © 1998 by Dmitry Kirashov
movwf X ; Сохранение поступающего байта ; во временном регистре. ; w = X = ABCDEFGH.
andlw addwf rrf X, addwf 0x55 ; w = OBODOFOH. X, f ; X = ABCDEFGH + OBODOFOH. f ; X = (ABCDEFGH + OBODOFOh) >> 1. X, w ; w = BADCFEHG + OBODOFOH.
ПОБИТОВЫЕ ОПЕРАЦИИ
Подпрограмма установки бита путем выполнения операции логическо-
го И двух других битов имеет следующий вид:
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
bsf Result Установка бита результата в 1.
btfsc В11A Если В11A != 1, станет равен 0. то бит результата
btfss BitB Если BitB == 0, станет равен 0. то бит результата
bcf Result Когда BitB & Bi пропускается. tA =1, эта команда
Применение к двум битам операции ИЛИ аналогично примене-
нию операции И за исключением того, что ожидается получение О,
когда оба бита равны 0. Когда один бит равен 1, бит результата будет
также равен 1:
bcf Result Установка бита результата в 0.
btfss В11A Если ВitA != 0, станет равен 1. то бит результата
btfsc BitB Если BitB == 1, станет равен 1. то бит результата
bsf Result Когда BitB | Bi пропускается. tA = 0, эта команда
Существует два пути выполнения операции НЕ. Если операция
заключается в инвертировании бита, код выглядит так:
movlw 1 << EJitNumber ; Инвертирование заданного бита.
xorwf BitRegister, f
Если требуется инвертировать бит одного регистра в зависимос-
ти от значения тестируемого бита другого регистра, можно исполь-
зовать следующий код:
bcf Result Установка бита результата в 0
btfss Bit Если тестируемый бит равен результат не изменяется. 1,
bsf Result Если тестируемый бит равен результат инвертируется. 0,
УМНОЖЕНИЕ НА КОНСТАНТУ
Ниже представлен макрос, который позволяет выполнить умноже-
ние восьмибитной величины на константу'.
multiply macro Register, ; Умножение восьмибитной
Value variable i = 0, TValue; величины на константу.
Tvalue = Value ; Загрузка константы (множитель).
movf Register, w
movwf Temporary ; Использование Temporary
; в качестве сдвигаемой величины.
ДЕЛЕНИЕ НА КОНСТАНТУ
clrf Temporary + 1
clrf Product
clrf Product + 1
while (i < 8)
if ((TValue & 1) ! = 0) ; Если младший бит множителя
; равен 1, выполняется сложение.
movf Temporary + 1, w
addwf Product + 1, f
movf Temporary, w
addwf Product, f
btfsc STATUS, C
incf Product + 1, f
endif
bcf STATUS, С ; Сдвиг временного множимого
; в сторону старших разрядов.
rlf Temporary, f
rlf Temporary + 1, f
TValue = TValue >> 1 ; Сдвиг множителя в сторону
; младших разрядов, чтобы проверить
; следующий бит.
i = i + 1
endw
endm
ДЕЛЕНИЕ НА КОНСТАНТУ
Данная макрокоманда возвращает целое частное, полученное в ре
зультате деления переменной на константу:
divide macro Register, Value ; Деление восьмибитной
variable i = 0, TValue ; величины на константу.
TValue = 0x010000 / Value ; Загрузка константы (делитель).
movf Register, w
movwf Temporary + 1 ; Использование Temporary
; в качестве сдвигаемой величины.
clrf Temporary
clrf Quotient
clrf Quotient + 1
while (i < 8)
bcf STATUS, С ; Сдвиг Temporary
; в сторону младших битов.
rrf Temporary + 1, f
rrf Temporary, f
if ((TValue & 0x08000) != 0) ; Если младший бит равен 1,
; выполняется сложение.
movf Temporary + 1, w
addwf Quotient + 1, f
ПОЛЕЗНЫЕ ПОДПРОГРАММЫ
movf Temporary, w
addwf Quotient, f
btfsc STATUS, C
incf Quotient + 1, f
endif
TValue = TValue << 1 ; Сдвиг в сторону
; старшего разряда, чтобы
; проверить следующий бит
i = i + 1
endw
movf Quotient + 1, w ; Округление результата.
btfsc Quotient, 7
incf Quotient + 1, w
movwf Quotient
endm
НЫЕ
16-РАЗРЯДНЫЕ ЧИСЛА
ОПРЕДЕЛЕНИЕ 16-РАЗРЯДНЫХ ЧИСЕЛ
Адреса 16-разрядных чисел могут быть заданы следующим образом:
RAM eq u 12 Начало ОЗУ микроконтроллера 16C71
Reg_8 equ RAM Определение 8-разрядного регистра.
Reg_16 equ RAM + 1 Определение первого 16 - раз рядно го регистра.
Reg_16 equ RAM + 3 Определение второго 16 - раз рядно го регистра.
Есть и другой способ, основанный на использовании директивы
СВ LOCK макроассемблера MPASM:
CBLOCK 12 Начало ОЗУ PIC-микроконтроллера 16С71.
Reg_8 Определение 8-разрядного регистра.
Reg_16:2 Определение первого 16 - раз рядно го регистра.
Reg2_16:2 Определение второго 16 - раз рядно го регистра.
ENDC
ИНКРЕМЕНТИРОВАНИЕ И ДЕКРЕМЕНТИРОВАНИЕ
Инкрементирование 1 бразрядной величины для Р1С-микроконтролле-
ров младшего и среднего подсемейств выполняется следующим об-
разом:
incf Reg, f ; Инкрементирование младшего байта,
btfsc STATUS, Z ; Если он равен О,
incf Reg + 1, f ; инкрементируется старший байт.
В случае PIC 17Схх и PIC 18Схх для упрощения операции инкре-
ментирования 16-разрядной величины используется команда inf snz:
infsnz Reg, f
incf Reg + 1, f
Инкрементирование младшего байта
и пропуск следующей команды,
когда результат не равен 0.
Инкрементирование старшего байта.
Декрементирование 16-разрядной величины в Р1С-микрокоН-
троллере требует четырех команд (командных циклов):
movf Reg, f ; Установка флага Z,
; если младший байт равен 0.
СЛОЖЕНИЕ/ВЫЧИТАНИЕ
btfsc STATUS, Z
decf ' Reg + 1, f
decf Reg, f
Если младший байт равен О,
декрементируется старший.
Декрементирование младшего байта.
СЛОЖЕНИЕ/ВЫЧИТАНИЕ
Прибавление константы к 16-разрядному числу в PIC-микрокон-
троллерах младшего и среднего подсемейств имеет вид:
Reg = Reg + 0x01234.
и выполняется следующим образом:
movlw HIGH 0x01234 ; Сначала прибавляется старший байт
addwf Reg + 1, f
movlw LOW 0x01234 ; Затем прибавляется младший байт.
addwf Reg, f
btfsc STATUS, C ; Если перенос установлен,
то старший байт не
инкрементируется.
incf Reg + 1, f
В случае PIC 17Схх и PIC 18Схх для упрощения операции можно
использовать команду addwf с:
movlw LOW 0x01234 ; Сначала модифицируется ; младший байт.
addwf Reg, f
movlw HIGH 0x01234 ; Затем модифицируется старший байт
addwfc Reg + 1, f
Соответственно подпрограмма вычитания
Reg = Reg -0x01234
для PIC-микроконтроллеров младшего и среднего подсемейств вы-
глядит так:
movlw HIGH 0x01234 ; Сначала вычитается старший байт
subwf Reg + 1, f
movlw LOW 0x01234 ; Затем вычитается младший байт.
subwf Reg, f
btfss STATUS, C ; Если перенос установлен, ; то старший байт ; не декрементируется.
decf Reg + 1, f
16-РАЗРЯДНЫЕ ЧИСЛА
Для микроконтроллеров PIC 17СххиР1С 18Схх можно использо-
вать команду subwf Ь:
movlw LOW 0x01234 ; Сначала вычитается младший байт
bsf STATUS, C ; Проверка заема.
subwfb Reg, f ; Reg = Reg - w -!С
movlw HIGH 0x01234
subwfb Reg + 1, f ; Reg + 1 = Reg + 1 - w - ! С.
Усовершенствованные команды addwf с и subwf b могут применять-
ся во всех операциях сложения и вычитания 16-разрядных величин,
представленных ниже. При использовании этих команд сначала
получается младший байт результата, а затем старший, что противо-
положно последовательности выполнения операций в программах
микроконтроллеров младшего и старшего подсемейств.
При выполнении сложения и вычитания 16-разрядной перемен-
ной результат будет сохранен в ячейках другой переменной:
Destination = Source + 0x05678.
Программа для PIC-микроконтроллеров младшего и старшего
подсемейств имеет следующий вид:
movlw HIGH 0x05678 ; Сначала прибавляется старший байт
addwf Source + 1, w
movwf Destination + 1, f ; Сохранение результата
; в старшем байте Destination.
movlw LOW 0x05678 1 ; Затем прибавляется младший байт.
addwf Source, w
movwf Destination, f ; Сохранение результата.
btfsc STATUS, C ; Флаг переноса установлен'?
incf Destination + 1, f ; Да, инкрементируется старший
байт.
Сложение двух 16-разрядных переменных аналогично прибавле-
нию константы к 16-разрядной переменной.
Если приемник результата Destination совпадает с одной из вели-
чин, например:
а = а + Ь,
то фрагмент для PIC-микроконтроллеров младшего и среднего под-
семейств имеет вид:
movf b + 1,’w Сложение старших байтов.
addwf а + 1, f
ПОБИТОВЫЕ ОПЕРАЦИИ
movf b, w ; Сложение младших байтов.
addwf a, f
btfsc STATUS, C ; Перенос ; байту. прибавляется к старшему
incf a + 1, f
Если приемник результата Destination не совпадает ни с од-
ной из складываемых величин, например:
с = а + Ь,
то программа изменится. Промежуточные суммы будут располагать-
ся в регистре w, а затем пересылаться в байты регистра с:
movf a + 1, w ; Сложение старших байтов.
addwf b + 1, w
movwf c + 1
movf a, w ; Сложение младших байтов.
addwf b, f
movwf c
btfsc STATUS, C ; Инкрементирование при отсутствии ; переноса.
incf c + 1
Вычитание выполняется аналогичным образом. Для осуществле-
ния операции
с = а-Ь
используется следующий код (для PIC-микроконтроллеров младше-
го и среднего подсемейств):
movf b + 1, w Загрузка вычитаемой
величины в регистр w
(старший байт).
subwf a + 1, w Формирование старшего байта
movwf c + 1
movf b, w Загрузка вычитаемой
величины в регистр w
(младший байт).
subwf a, w
movwf c
btfss STATUS, C ; ; Проверка переноса.
decf c + 1
ПОБИТОВЫЕ ОПЕРАЦИИ С КОНСТАНТАМИ И ПЕРЕМЕННЫМИ
Код выполнения операции логическое И 16-разрядной переменной
с константой ОхОАББА имеет следующий вид:
16-РАЗРЯДНЫЕ ЧИСЛА
movlw HIGH 0x0A55A Загрузка старшего байта константы для операции И.
andlw Reg + 1, f Формирование старшего байта.
movlw LOW 0x0A55A Загрузка младшего байта константы для операции И.
andwf Reg, f Формирование младшего байта.
bcf STATUS, C Сброс флага переноса для нового бита.
rlf Reg, f Сдвиг младшего байта.
rlf Reg + 1, f Сдвиг старшего байта с переносом из младшего.
сдвиг вправо:
bcf STATUS, C Очистка флага переноса.
r rf Reg + 1, f Правый сдвиг старшего байта.
rrf Reg, f Правый сдвиг младшего байта с переносом.
СРАВНЕНИЕ 16-РАЗРЯДНЫХ ПЕРЕМЕННЫХ
Для сравнения чисел можно использовать следующий фрагмент:
movf Reg2 + 1, w Загрузка старшего байта Reg2 в w
subwf Reg1 + 1, w Вычитание из старшего байта Reg1
movwf _2 Сохранение результата во временном регистре.
movf Reg2,- w Загрузка младшего байта Reg2.
subwf Reg1, w Вычитание из младшего байта Reg1
btfss STATUS, C При необходимости старший байт уменьшается.
decf _2
После выполнения данной последовательности команд регистр w
содержит разность младших байтов Reg 1 Lo - Reg2Lo, a _2 - разность
старших байтов Reg 1 Hi - Reg2Hi с учетом переноса (заема), сформи-
ровавшегося при нахождении разности Reg 1 Lo - Reg2Lo.
В процессе работы можно столкнуться с шестью основными усло-
виями: равно, не равно, больше, больше или равно, меньше, меньше
или равно.
В случае сравнения на «равно - не равно» содержимое регистра W
подвергается операции логическое ИЛИ с содержимым регистра _2,
чтобы проверить, будет ли полученный результат равен 0:
iorwf _2, w ; Результат равен 0?
СРАВНЕНИЕ 16-РАЗРЯДНЫХ ПЕРЕМЕННЫХ
Для сравнения на «равно» добавляются строчки:
btfss STATUS, Z ; Выполнение следующей команды,
; если результат не равен 0.
goto Zero.Skip ; В противном случае (равен 0)
; эта команда пропускается.
а для сравнения на «не равно» соответственно:
btfsc STATUS, Z ; Выполнение следующей команды,
; если результат равен 0.
goto NotZero_Skip ; В противном случае (не равен 0)
; эта команда пропускается.
В случае проверки на «больше» (первая 16-разрядная переменная
больше, чем вторая) результат должен быть не 0 и не меньше 0. Для
тестирования используется следующий код:
btfsc _2, 7 ; Проверка 16-го разряда разности,
goto NotGreater.Skip ; пропуск, если он не равен 1.
iorwf _2, w ; Проверка на 0.
btfsc STATUS, z
goto NotGreater_Skip
Обратите внимание, что проверяется только старший бит 16-раз-
рядной разности. Если этот бит равен 1, то первая переменная
меньше, чем вторая. Если он равен 0, то первая переменная больше,
и необходимо проверить, не равен ли результат 0 (в противном слу-
чае равенство).
Соответственно для проверки на «меньше»:
btfss _2, 7 ; Проверка 16-го разряда разности,
goto NotLess_Skip ; пропуск, если он равен 1.
Чтобы проверить, выполняется ли условие «больше или равно»,
надо стереть три последние строчки кода проверки условия «боль-
ше». Для проверки условия «меньше или равно» три строчки из
фрагмента проверки «не равно» добавляются к проверке на «мень-
ше».
Ниже приведен полный код проверки условия «регистр Reg1
меньше или равен регистру Reg2»:
movf Reg2 + 1, w ; Загрузка старшего байта.
subwf Reg1 + 1, w ; Вычитание.
movwf _2 ; Сохранение во временном регистре.
16-РАЗРЯДНЫЕ ЧИСЛА
Movf Reg2, w ; Загрузка младшего байта.
subwf Reg1, w Вычитание.
btfss STATUS, C При необходимости
декрементируется старший байт
decf _2
iorwf _2, w Проверка на равенство 0.
btfsc STATUS, Z Если нет, то пропуск.
goto EqualLess_Skip Если равно, переход.
btfsc .2, 7 Если число отрицательное,
выполнение продолжается.
goto EqualLess_Skip В противном случае переход.
УМНОЖЕНИЕ
Ниже представлена программа умножения, требующая отдельного
байта для подсчета числа итераций в цикле:
clrf Product
clrf Product + 1
movlw 16 ; Работа c 16 битами.
movwf BitCount
Loop ; Цикл по всем битам.
rrf Multiplier + 1, f ; Сдвиг множителя вправо
rrf Multiplier, f ; на один разряд.
btfss STATUS, С ; Если перенос,
goto Skip ; то множимое добавляется
; к произведению.
movf Multiplicand + 1, w
addwf Product + 1, f
mov Multiplicand, w
addwf Product, f
btfsc STATUS, C
incf Product + 1, f
Skip ; Сдвиг множимого
; и «зацикливание».
bcf STATUS, С
rlf Multiplicand, f
rlf Multiplicand + 1, f
decfsz BitCount
goto Loop
Приведенная ниже программа максимально эффективна по вре-
мени при выполнении 16-разрядного умножения с 32-битным ре-
зультатом: на каждом шаге она вместо 32-разрядного сложения осу-
ществляет 16-разрядное (с переносом) сложение, и затем данные
сдвигаются вправо. Такой код изменяет не множимое, а множитель.
УМНОЖЕНИЕ
В этом коде для произведения используется 32-битная величина
(которая может быть задана строкой Product: 5 в директиве опреде-
ления переменных СВ LOCK).
Sk
clrf Product + 2 Обнуление
clrf Product + 3 байтов результата (Product)
movlw 16 Работа с 16 битами.
movwf BitCount
op Цикл по всем битам.
rrf Multiplier + 1, f Правый сдвиг
rrf Multiplier, f на один разряд.
btfss STATUS, C Если перенос, то множимое
goto Skip добавляется к произведению.
clrf Product + 4
movf Multiplicand + 1, w
addwf Product + 3, f
btfsc STATUS, C ; Если перенос,
incf Product + 4, f ; ; то инкрементирование.
movf Multiplicand, w
addwf Product + 2, f
btfsc STATUS, C
incfcz Product + 3, f ; : Учет переноса.
goto $ + 2
incf Product + 4, f
iP Правый сдвиг всех ячеек.
bef STATUS, C Сброс переноса.
rrf Product + 4, f Сдвиги.
rrf Product + 3, f
rrf Product + 2, f
rrf Product + 1, f
rrf Product, f
decfsz BitCount
goto Loop
Обе представленные программы могут работать как с положи-
тельными, так и с отрицательными числами.
Для PIC-микроконтроллеров, имеющих встроенные множители
8x8 (например, PIC 17СххилиР1С 18Схх), 16-разрядное умножение
выполняется следующим образом:
clrf Product + 2
clrf Product + 3
movf Al, w
; Очистка битов старших
; разрядов.
; Сначала выполняется
; L-умножение.
16-РАЗРЯДНЫЕ ЧИСЛА
mulwf Bl
movf PRODL, w ; Сохранение результата.
movwf Product
movf PRODH, w
movwf Product + 1
movf Al, w ; Выполнение 1-умножения.
mulwf Bh
movf PRODL, w ; Сначала сохраняется старший байт
addwf Product + 1, f
movf PRODH, w
addwf Product + 2, f ; Добавление к последнему ; результату.
movf Ah, w ; Выполнение 0-умножения.
mulwf Bl
movf PRODL, w ; Затем добавляется младший байт.
addwfc Product + 2, f
btfsc STATUS, C ; Добавление переноса.
incf Product + 3, f
movf Ah, w ; Выполнение F-умножения.
mulwf Bh
movf PORDL, w
addwf Product + 2, f
movf PRODH, w
addwfc Product + 3, f
ДЕЛЕНИЕ
Представленная здесь программа деления сначала определяет, на-
сколько далеко может быть сдвинут влево (в сторону старших разря-
дов) делитель, прежде чем сравнивать его с делимым. 16-разрядная
переменная Count в этой программе используется для подсчета би-
тов и добавления к частному, а переменная Тетр - для временного
хранения. После выполнения программы в регистрах делимого со-
держится остаток деления.
clrf Quotient
clrf movlw Quotient + 1 1 ; ; Инициализация счетчика.
movwf clrf StartLoop Count Count + 1 Определение разрядности делителя
btfsc Divisor +1, 7 Если «вершина»,
goto Loop то выполняется деление.
bcf STATUS, C Модификация переменной Count
rlf rlf Count, f Count + 1, f и сдвиг делителя влево.
ДЕЛЕНИЕ
rlf Divisor, f
rlf Divisor + 1, f
goto StartLoop
Loop Вычитание делителя из делимого.
movf Divisor +1, w Если делитель меньше делимого, вычитание не производится.
subwf Dividend +1, w
movwf Temp
movf Divisor, w
subwf Dividend, w
btfss STATUS, 0
decf Temp, f
btfsc Temp, 7 Если значение Тетр отрицательное,
Goto Skip то делитель меньше делимого.
movwf Dividend Сохранение делимого.
movf Temp, w
movwf Dividend + 1
movf Count, w ; ; Прибавление значения Count ; к частному.
addwf Quotient + 1, f
movf Count, w
addwf Quotient + 1, f;
Skip ; Сдвиг делителя/Count вправо.
bcf STATUS, C
rrf Divisor + 1, f
rrf Divisor, f
rrf Count + 1, f ; ; Если перенос установлен ; после сдвига переменной Count,
rrf Count, f ; ; то операция завершается.
Btfss STATUS, C ; ; Если перенос не установлен,
goto Loop ; ; обрабатывается следующий бит.
Представленная программа деления предназначена только для
работы с положительными числами. Общего алгоритма для поло-
жительных и отрицательных чисел, возвращающего частное и оста-
ток правильного знака, не существует.
Общий вид программы деления для работы с положительными
и отрицательными числами приведен ниже.
if (Dividend < 0) { // Если число отрицательное,
// то знак изменяется.
Dividend = 0 - Dividend;
dividendneg = 1; // Знак сохраняется.
} else
dividendneg = 0;
if (Divisor < 0) { // Повтор того же действия
13зак 132 II с делителем.
16-РАЗРЯДНЫЕ ЧИСЛА
Divisor = 0 - Divisor;
dividendneg = 1;
} else
divisordneg = 0;
Count = 0;
Quotient = 0;
while ((Divisor & 0x0400) != 0) {
Count = Count + 1
Divisor = Divisor << 1;
}
while (Count 1 = 0) {
if (Dividend > = Divisor) {
Quotient = Quotient + 2 Count;
Dividend = Dividend - Divisor;
}
Count = Count - 1
Divisor = Divisor >> 1;
if (Dividendneg == 1)
if (Divisorneg == 1) {
Quotient = Quotient;
Remainder = 0 - Dividend;
} else {
Quotient = 0 - Quotient;
Remainder = 0 - Dividend;
else
if (Divisorneg == 1) {
Quotient = 0 - Quotient;
Remainder = Dividend;
} else {
Quotient = Quotient;
Remainder = Dividend;
// Начало деления.
// Выравнивание делителя
// для начала деления.
// Инкрементирование
// счетчика сдвигов.
// Выполнение деления.
// Можно выполнить
// вычитание.
// Изменение значения.
// Делимое было
// положительным.
i ХАРАКТЕРИСТИКИ
ОКОНТРОЛЛЕРОВ
РАБОЧИЕ ХАРАКТЕРИСТИКИ Р1С-МИКРОКОНТРОЛЛЕРОВ
Представленные ниже сведения взяты из спецификаций фирмы
Microchip, опубликованных на момент написания книги. Предлагае-
мый материал может быть использован в качестве справочной ин-
формации по основным рабочим характеристикамРТС-микрокотрол-
леров. Поскольку существуют и «новейшие» версии спецификаций,
то некоторые из приведенных данных нельзя считать полными.
Значение тока потребления Idd относится к базовому ядру мик-
роконтроллеров и не включает потребление при выполнении пери-
ферийных функций.
ТОКИ НАГРУЗОК ВЫХОДОВ И ПОРТОВ
Значения токов нагрузок даны в табл. 13.1 в миллиамперах.
Таблица 13.1
Токи нагрузок портов ввода-вывода
Микро- контрол- лер Ток вывода (вытекающий/ втекающий), мА Суммарный ток порта (вытекающий/ втекающий), мА Суммарный ток портов микро- контроллера (вытекающий/ втекающий), мА Примечания
PIC 12С5ХХ 25/25 25/25 100/100 GPIO, используе- мый для ввода/ вывода данных, также может применяться для управления ЖКИ
PIC 14С000 25/25 200/200 250/300
PIC 16С5х 20/25 40/50 50/150
PIC16C55X 25/25 200/200 250/300
PIC 16С6х 20/25-50/80 100/150 100/150
PIC 16С62Х 25/25 200/200 250/300
PIC 16С7х 25/25 200/200 250/300
PIC16F84 20/25 50/80-100/150 100/150
PIC 16F87X 25/25 200/200 250/300
PIC 17С4х 20/35 100/150 200/250 RA2/RA3 обеспечи- вают втекающий ток 60 мА
PIC 18СХХ (х) 25/25 200/200 50/300
ЗНАЧЕНИЯ КОМПОНЕНТОВ RC-ГЕНЕРАТОРА
В табл. 13.2 приведены значения частот RC-генератора для различ-
ных величин сопротивлений и конденсаторов для микроконтрол-
леров младшего подсемейства и PIC 16F84. Согласно документации
Microchip, разброс рабочих характеристик RC-генератора может
ЗНАЧЕНИЯ КОМПОНЕНТОВ RC-ГЕНЕРАТОРА
Таблица 13.2
Значения частот RC-генераторов при различных значениях емкостей и сопротивлений
С, пФ R, кОм Среднее значение частоты RC-генератора при 5 В, 25 °C
Частота, кГц Допуск, ±%
20 3,3 4973 27
5 3820 21
10 2220 21
100 262,15 31
100 3,3 1630 13
5 1190 13 "
10 684,64 18
100 71,56 25
300 3,3 660 10
5,0 484,1 14
10 267,63 15
160 29,44 19
составлять до 30 %, поэтому его рекомендуется использовать только
в приложениях, нечувствительных к временным характеристикам.
Зависимость частоты RC-генератора от температуры для микро-
контроллера PIC 16F84 представлена на рис. 13.1. Данный микро-
контроллер очень популярен среди начинающих пользователей.
Рис. 13.1
Зависимость частоты RC-генератора от температуры для микроконтроллера
PIC16F84
РАБОЧИЕ ХАРАКТЕРИСТИКИ Р1С-МИКРОКОНТРОЛЛЕРОВ
Таблица 13.3
Значения частот RC-генераторов при различных значениях емкостей и сопротивлений
для микроконтроллера PIC 16F84
С, пФ R, кОм Среднее значение частоты RC-генератора при 5 В, 25 °C
Частота, кГц Допуск, ±%
20 3,3 4680 27
5,1 3940 25
10 2340 29
100 250,16 33
100 3,3 1490 25
5,1 1120 25
10 620,31 30
100 90,25 26
300 3,3 524,24 28
5,1 415,52 30
10 270,33 26
100 25,37 25
В табл. 13.3 приводятся комбинации номиналов резисторов и кон-
денсаторов для различных частот, а на рис. 13.2 показан ток, кото-
рый микроконтроллер потребляет при разных частотах.
Частота, Гц
Рис. 13.2
Зависимость тока потребления микроконтроллера PIC 16F84 от частоты тактового генератора
при С=300 пФ
РАБОЧИЕ ХАРАКТЕРИСТИКИ В РЕЖИМЕ ХТ-ГЕНЕРАТОРА
РАБОЧИЕ ХАРАКТЕРИСТИКИ В РЕЖИМЕ LP-ГЕНЕРАТОРА
В табл. 13.4 приведены номиналы конденсаторов кварцевых LP-гене-
раторов различных Р1С-микроконтроллеров. LP-режиму соответ-
ствует диапазон частот от 0 до 200 кГц. Здесь же приведены токи
потребления микроконтроллеров для частоты 32,768 кГц при на-
пряжении 5 В.
Таблица 13.4
Характеристики микроконтроллеров для LP-режима генератора
Микроконтроллер Значение емкости (пФ) для частоты Ток потребления Idd, мкА
32,768 кГц 200 кГц
PIC 12С5хх 15 Нет данных 10
PIC 16С5х 15 Нет данных 32
PfC 16С55Х 68-100 15-30 32
PIC 16С6х 33-68 15-47 21
PIC 16С62Х 68-100 15-30 32
PIC 1бС7х 15-47 15-33 48
PIC16F84 68-100 15-33 32
PIC 16F87X 33 15 48
PIC 18СХХ (х) 33 15 Нет данных
РАБОЧИЕ ХАРАКТЕРИСТИКИ В РЕЖИМЕ ХТ-ГЕНЕРАТОРА
В табл. 13.5 представлены номиналы конденсаторов ХТ-генераторов
с кварцевыми или керамическими резонаторами. XT-режиму соот-
ветствует диапазон частот от 0 до 4 МГц. В таблице указаны токи по-
требления различных микроконтроллеров для частоты 4 МГц.
Таблица 13.5
Характеристики микроконтроллеров для XT-режима генератора
Микро- контроллер Значение емкости (пФ) для частоты Ток потребления Idd, мА
200 кГц 1МГц 4 МГц
PIC 12С5ХХ 47-68 15 15 0,78
PIC 16С5х 15-30 15-30 15 1,8
PIC 16С55Х Нет данных 15-68 15-68 3,3
PIC 16С6х 33-68 15-68 15-33 1,6
PIC16C62X 33-68 15-58 15-68 3,3
PIC 16С7х 33-68 15-68 15-33 5
PIC16F84 68-100 15-33 15-33 4,5
PIC 16F87X 47-68 15 15 2
PIC 17F4X Нет данных 33-150 15-68 1,6
Р1С18Схх(х) 47-68 15 15 Нет данных
РАБОЧИЕ ХАРАКТЕРИСТИКИ Р1С-МИКРОКОНТРОЛЛЕРОВ
РАБОЧИЕ ХАРАКТЕРИСТИКИ В РЕЖИМЕ Н5-ГЕНЕРАТОРА
В табл. 13.6 приведены номиналы конденсаторов HS-генераторов
с кварцевыми или керамическими резонаторами. HS-режиму соот-
ветствует диапазон выше 4 МГц.
Как правило, предельная частота микроконтроллеров младшего
и среднего подсемейств с программной памятью типа EPROM со-
ставляет 20 МГц. Для микроконтроллеров с флэш-памятью -10 МГц
(если другое значение не указано явно). Для PIC 17Схх эта величи-
на равна 33 МГц, а для PIC 18Схх максимальная тактовая частота -
40 МГц.
Токи потребления указаны для максимальных частот микрокон-
троллеров и напряжения питания 5 В. Номиналы конденсатора
даны в пикофарадах, а ток потребления Idd - в миллиамперах.
Таблица 13.6
Характеристики микроконтроллеров для HS-режима генератора
Микро- контроллер Значение емкости (пФ) для частоты Ток потребления lddr мА
4 МГц 10 МГц 20 МГц 32 МГц
PIC 14С000 15-68 10-47 10-47 - 4
PIC 16С5х 15 15 15 — 5
PIC 16С55х 15-30 15-30 15-30 - 20
PIC 16С6х 15-47 15-47 15-47 - 35
PIC 16С62х 15-47 15-30 15-30 - 20
PIC 16С7х 15-47 15-47 15-47 - 30
PIC 16F84 15-33 15-33 - - 10
PIC16F87X 15 15-33 15-33 - 20
PIC 17F4x 15-68 15-47 15-47 0 40
PIC 18Схх (х) 15 15-33 15-33 Нет данных 45
ЫЕ
НОСТИ
В С PIC-
НТРОЛЛЕРАМИ
Таблица 14.1
Возможные неисправности устройств с PIC-микроконтроллерами и их устранение
Неисправность Возможная причина Проверка
Р1С-микроконтроллер не запускается 1 Отсутствие или неправильная величина напряжения питания 1а. Проверить, чтобы напряжение Vdd соответствовало диапазону 4,5-5,5 В (относительно Vss); 16. Проверить, чтобы колебания напряжения Vdd не превышали 100 мВ
2. Отсутствие или неправильное функционирование системы сброса 2а Проверить, чтобы на вывод _MCLR подавалось напряжение 4,5-5,5 В; 26 Проверить, чтобы напряжение на выводе _MCLR не было отрицательным (ниже Vss)
3. Отсутствие или несоответствующий номинал конденсатора фильтра За. Проверить наличие конденсатора номиналом 0,01-0,1 мкФ в непосредственной близости от вывода Vdd PIC-микроконтроллера
4. Неправильная ориентация компонентов 4а. Проверить правильность установки PIC-микроконтроллера; 46. Проверить, что PIC-микроконтроллер не перегревается
5. Не запускается генератор 5а. Проверить оба вывода 0SC1 и 0SC2 с помощью осциллографа или логического пробника; 56. При наличии внутреннего генератора проверить биты конфигурации на предмет правильности их установки; 5в. Проверить наличие и соответствие конденсаторов
6. Устройство неправильно запрограммировано ба. Проверить/уточнить программирование устройства; бб Проверить уровни сигналов на выводах
7. Разрешена работа сторожевого таймера 7а. Проверить, изменяются ли режимы работы выводов со входа на выход; 76. Проверить текущее значение бита конфигурации
8. Неинициализированная переменная/неправильная величина 8а. Проверить инициализацию переменной и запуск приложения; 86. После сброса имитируемого PIC-микроконтроллера загрузить в файловые регистры случайное значение (например, 0х05А)
9. Обработчик прерываний не дает разрешения на переход к основной программе 9а. Сымитировать обработчик прерываний и убедиться в том, что процесс выполнения может вернуться к основной программе, прежде чем будет подтвержден следующий запрос на прерывание; 96. Проверить, чтобы в обработчике был сброшен соответствующий флаг прерываний (IF)
ВОЗМОЖНЫЕ НЕИСПРАВНОСТИ
Таблица 14.1
Возможные неисправности устройств с PIC-микроконтроллерами и их устранение (продолжение)
Неисправность Возможная причина Проверка
Р1С-микроконтроллер не запускается 10. Адрес переменной перекрывается с областью управляющих регистров ввода/вывода 10а. Проверить, чтобы адрес переменной соответствовал области регистров общего назначения в ОЗУ
11. Переключения выходов происходят слишком быстро, чтобы быть замеченными 11а. Проконтролировать выходы с помощью логического пробника или осциллографа
Р1С-микроконтроллер самопроизвольно сбрасывается 1. Разблокирован сторожевой таймер 1а. Проверить значения битов конфигурации; 1б. Проверить, изменяются ли состояния выводов при сбросе
2. Высокий внутренний ток и ненадлежащая развязка по переменному току 2а. Проверить взаимосвязь сброса микроконтроллера сего потреблением; 26. Проверить «провалы» в напряжении питания при сбросе
3. Колебания и «шумы» напряжения источника питания За. Проверить, что пульсации напряжения питания не превышают 100 мВ
4 Скачки в исполнении программы после окончания работы приложения 4а. Проверить все подпрограммы на наличие команд return, а также проверить отсутствие таблиц, к которым может быть обращение после завершения программы
5. Неинициализированная переменная/неправильная величина 5а. Проверить инициализацию переменных на предмет пропуска переменной, 56. Установить случайные величины переменных (например, 0х05А), прежде чем приступить к имитации
Периферийные модули не работают 1 Неправильно специфицированы выводы 1а Проверить назначение портов; 1б. Проверить регистры TRIS на предмет обнаружения кодов, блокирующих работу периферийных устройств
2. Неправильно выбран компонент (микроконтроллер) 2а. Убедиться в том, что микроконтроллер, используемый в данный момент, имеет соответствующие аппаратные модули, 26 Убедиться в том, что используемый компонент имеет соответствующие аппаратные регистры
3 Аппаратурные переключения происходят слишком быстро, чтобы можно было их отследить За Проверить аппаратное обеспечение при помощи логического пробника или осциллографа
ВОЗМОЖНЫЕ НЕИСПРАВНОСТИ
Таблица 14.1
Возможные неисправности устройств с PIC-микроконтроллерами и их устранение (продолжение)
Неисправность Возможная причина Проверка
Нет режима выхода порта 1. Неправильная спецификация регистров TRIS 1а. Проверить величины, записанные в регистрах TRIS; 16 Убедиться в отсутствии ошибок в программе, 1в. Отключить вывод и с помощью логического пробника проверить, находится ли регистр в текущий момент в режиме выхода
2 Неправильно выполнена активизация периферийных модулей, подключенных к данному выводу 2а. В среде MPLAB эта проблема может быть неочевидна, поскольку периферийные модули обычно не симулируются, 26. Если вывод выделен для входа TOCKI в PIC 12С5хх или 16С505, то проверить содержимое регистра OPTION
3. Вывод не допускает режим выхода За. Если это вывод _MCLR в PIC 12С5хх или 16С505, то работать в режиме выхода он не может; 36 Если вывод выделен для TOCKI в PIC 12С5хх или 16С505, то проверить содержимое регистра OPTION
Выход не меняет своего состояния 1. Выводу не задан режим выхода 1а. Отключить вывод от схемы, чтобы с помощью логического пробника проверить, находится ли он в текущий момент в режиме выхода, 1б. Проверить возможные причины запрета режима выхода
2. Вывод замкнут с мощным выходом 2а. Отключить вывод от схемы, чтобы проверить, изменится ли состояние при отключении вывода; 26. Проверить короткие замыкания с выводами Vcc/Gnd; 2в. Проверить наличие и номиналы резисторов и других внешних компонентов
3. Состояние на выходе изменяется слишком быстро, чтобы его можно было наблюдать За. Проверить выход с помощью логического пробника или осциллографа
Произвольно изменяются состояния вывода 1. Неверные комбинации команд bef, movf/movwf, которые могут обнулять сигнал выхода 1а. Проверить величину, записанную в порт ввода/вывода; 16. Проверить значения, используемые для изменения состояний на выводе; 1в. Проверить правильность сохраненных значений порта
2. Неправильно работают внешние узлы, подключенные к данному выводу 2а. Отключить вывод от схемы, чтобы убедиться в правильности состояния; 26. Проверить выводы разрешения выхода микросхем драйверов стремя состояниями, подключенных к данному выводу
ВОЗМОЖНЫЕ НЕИСПРАВНОСТИ
Таблица 14.1
Возможные неисправности устройств с PIC-микроконтроллерами и их устранение (продолжение)
Неисправность Возможная причина Проверка
Произвольно изменяются состояния вывода 3. Адрес переменной попадает в область адресов управляющих регистров ввода/вывода За. Проверить, чтобы переменной соответствовал адрес области регистров общего назначения ОЗУ
Временные соотношения сигналов на выходе не соответствуют ожидаемым 1. Временные задержки вычисляются неправильно 1а. Убедиться в том, что вычисления соответствуют данному выходу, 16. Для расчета задержек и определения их соответствия значениям, заданным разработчиком, воспользоваться ассемблерным калькулятором
2 Программа обработки прерываний активна во время формирования сигнала выхода 2а. Проверить активизированные прерывания; 26. Запретить прерывания посредством команды bcf INTCON, GIE перед началом формирования сигнала, а затем командой bsf INTCON, GIE разрешить их
3. Неправильное хронометрирование команд За. Обратить внимание, что команды goto, call, return, а также модификации PCL требуют двух командных циклов
Неправильные значения регистра/произвольные изменения 1 Обработчик прерываний не активен 1а. По изменениям состояния регистра пронаблюдать за функционированием обработчика прерываний; 16 Маскировать обработчик прерываний на время критических операций с регистром; 1в. В обработчике прерываний использовать другой регистр и обновить соответствующим образом версию основной ветви программы
2 Переменные располагаются в пространстве адресов управляющих регистров 2а. Проверить реальный адрес регистра по листингу на попадание в область адресов аппаратных регистров, 26 Убедиться в том, что переменные располагаются в области памяти выше адресов аппаратных регистров
3. Переменные располагаются в «теневом» пространстве памяти За. Проверить, чтобы регистры не указывали на «теневые» регистры; 36 Пометить неиспользуемые «теневые» регистры как BADRAM (запрещенная область)
Не зажигается светодиод 1. Не соблюдена полярность светодиода 1а. Заземлить вывод PIC-микроконтрбллера, чтобы проверить, загорится ли светодиод
2 Вывод микроконтроллера не изменяет свое состояние 2а Проверить вывод PIC-микроконтроллера, как указывалось выше
ВОЗМОЖНЫЕ НЕИСПРАВНОСТИ
Таблица 14.1
Возможные неисправности устройств с PIC-микроконтроллерами и их устранение (окончание)
Неисправность Возможная причина Проверка
Не зажигается светодиод 3 На выходе активизирован сигнал ШИМ с параметрами, отключающими светодиод За. Проверить состояние на выходе ШИМ с помощью осциллографа или логического пробника, 36 Проверить программу активизации ШИМ
4 Р1С-микроконтроллер не работает 4а. Проверить PIC-микроконтроллер, как указано выше
5 Состояние на выходе изменяется слишком быстро, чтобы его можно было наблюдать 5а Проверить выход с помощью логического пробника или осциллографа
Нет реакции на нажатие кнопки 1 Неправильная «подтяжка» входов 1а Проверить правильность подключения кнопки к микроконтроллеру, выводам Vcc и Gnd, 16 Проверить работоспособность внутренней «подтяжки» выводов микроконтроллера
2 Выводу задан режим выхода 2а. Убедиться в том, что выводу назначен режим входа; 26. Проверить отсутствие непреднамеренных изменений в регистре TRIS
3. Состояние на выходе изменяется слишком быстро, чтобы его можно было наблюдать За. Проверить выход с помощью логического пробника или осциллографа
Нажатие на кнопку вызывает неожиданную реакцию 1. Влияние дребезга контактов 1а Несколько раз нажать кнопку и проверить, реагирует ли на это программа; 16 Проверить, чтобы уровень напряжений на контактах кнопки был близок к Vcc и Gnd (отличался не более чем на 0,2 В)
2. Обработчик прерываний выдает ошибочную реакцию 2а Проверить функционирование обработчика прерываний с входными условиями (воздействиями)
Отсутствие изображения на ЖК дисплее 1 Неправильное подключение 1а Проверить, чтобы на выводе 1 был потенциал «земли», 16. Проверить выводы данных; 1в. Убедиться в том, что линия R/W имеет низкий уровень во время записи
2 Неправильно задана контрастность 2а. Различная контрастность для различных ЖК дисплеев
3 Ошибочное хронометрирование За. Убедиться в том, что длительность строб-им пульсов Е ЖК дисплея составляет минимум 450 нс, 36. Убедиться в том, что сигналы во время строб-импульсов Е не изменяются
ВОЗМОЖНЫЕ НЕИСПРАВНОСТИ
РАЗРАБОТКИ
ИЙ
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
ФУНКЦИИ КЛАВИШ ТЕКСТОВОГО РЕДАКТОРА
Речь идет о функциях клавиш и их комбинаций Microsoft-совмести-
мого тектового редактора.
Таблица 15.1
Функции клавиш
Клавиши Операция
Стрелка вверх (?) Перемещение курсора на одну строку вверх
Стрелка вниз (4) Перемещение курсора на одну строку вниз
Стрелка налево (<-) Перемещение курсора на один знак влево
Стрелка направо (->) Перемещение курсора на один знак вправо
Page Up Перемещение просматриваемого окна вверх
Page Down Перемещение просматриваемого окна вниз
Ctrl+<- Переход к началу слова
Ctrl+-> Переход к началу следующего слова
Ctrl+Page Up Перемещение курсора в верхнюю часть просматриваемого окна
Ctrl+Page Down Перемещение курсора в нижнюю часть просматриваемого окна
Home Перемещение курсора в начало строки
End Перемещение курсора к концу строки
Ctri+Home Переход в начало файла
Ctrl4-End Переход в конец файла
Shift+<- Увеличение выделенного фрагмента на один знак в правую сторону
Shift+—» Увеличение выделенного фрагмента на один знак в левую сторону
Shift+T Увеличение выделенного фрагмента на одну строку вверх
Shift+4 Увеличение выделенного фрагмента на одну строку вниз
Ctrl+Shift+<- Увеличение выделенного фрагмента на одно слово в левую сторону
Ctrl+Shift+-» Увеличение выделенного фрагмента на одно слово в правую сторону
ФАЙЛ MPSIM.INI
Стандартный файл MPSIM.INI для приложения имеет вид:
MPSIM File for PR0G2 - включение светодиода
Муке Predko - 96.05.20
Р 84
SR X
ZR
RE
DW D
Использование 16С84.
Шестнадцатеричное представление
чисел в симуляторе.
Сброс регистров.
Сброс счетчика времени исполнения
и счетчика шагов.
Запрет сторожевого таймера (WDT).
СРЕДА РАЗРАБОТКИ MPLAB
Отображение на экране состояние регистров:
V Al, X, 2 регистра W,
AD F3, B, 8 регистра состояния (Status),
AD F4, X, 8 регистра индекса (FSR),
AD ОРТ, B, 8 регистра Option,
AD FB, B, 8 регистра управления прерываниями (INTCON),
AD F2, X, 3 регистра младшего байта программного счетчика (PCL),
AD FA, X, 3 регистра старшего байта программного счетчика (PCLATH),
AD F1, X, 2 регистра таймера TMRO,
AD I0A, X, 2 TRIS-ре гистра порта А,
AD F5, X, 2 регистра данных порта А,
AD I0B, X, 2 TRIS-регистра порта В,
AD F6, X, 2 регистра данных порта В,
AD rs sc F6, 4 X, 2 регистра Test (06h). Сброс микроконтроллера. Установка времени цикла в 4 такта.
10 di prog2 0, 0 Загрузка объектного файла ргод2. Отображение области памяти (в данном
случае только первой команды).
СРЕДА РАЗРАБОТКИ MPLAB
MPLAB представляет собой полную интегрированную среду разра-
ботки (Integrated Development Environment - IDE) для PIC-микро-
контроллеров, принадлежащих к различным архитектурным семей-
ствам. Она функционирует в среде Windows 3.1х или в более поздних
операционных системах фирмы Microsoft. MPLAB поддерживает
различные этапы создания программного обеспечения для микро-
контроллерных устройств и включает множество функций, исполь-
зуемых при разработке.
Общий вид окна управления MPLAB показан на рис. 15.1.
В состав MPLAB входят:
♦ редактор;
♦ ассемблеры;
♦ компиляторы;
♦ компоноёщики;
♦ программаторы;
♦ эмуляторы.
MPLAB оперирует типами файлов, указанных в табл. 5.2.
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Рис. 15.1
Окно интегрированной среды разработки MPLAB
Таблица 5.2
Типы файлов в среде MPLAB
Расширение файла Функция
asm Исходный файл приложения
$$$ Резервный исходный файл приложения
.cod Файл символических имен и объектный код для симулятора MPLAB
err Суммарный файл ошибок
1st Файл листинга
hex Шестнадцатеричный файл, загружаемый в Р1С-микроконтроллер
bkx Резервный шестнадцатеричный файл
pjt Файл проекта
MPLAB позволяет отображать содержимое регистров PIC-микро-
контроллера, в том числе и специальных. Одно из окон - Watch
Window (Окно просмотра), предназначенное для просмотра содер-
жимого регистров, показано на рис. 15.2. В нем разрешается указать
набор интересующих регистров. Для отображения времени исполне-
ния программы и количества циклов можно вызвать окно Stopwatch
(Окно останова).
СРЕДА РАЗРАБОТКИ MPLAB
Address Synb
|l* BVTE
(15 COlJtf
|17 OFF©
Рис. 15.2
Пример окна Watch Window
Сброс счетчика таймера останова
I ____
Число выполненных
циклов
------ Время выполнения
------ Тактовая частота
I
Кнопка разрешения сброса таймера
при сбросе микроконтроллера
Рис. 15.3
Окно Stopwatch MPLAB
Среда MPLAB во время симулирования работы приложения позво-
ляет задавать асинхронные и синхронные воздействия на выводы
микроконтроллера (стимулы). На рис. 15.4 показано окно асинхрон-
ных воздействий Asynchronous Stimulus (Асинхронные стимулы),
являющееся основным инструментом ввода воздействий. Оно состо-
ит из ряда кнопок, которые можно запрограммировать для управле-
ния любыми выводами PIC-микроконтроллера. С помощью этих
кнопок допустимо менять состояние выводов посредством опций:
♦ Pulse - подать импульс;
♦ Low - установить низкий уровень;
♦ High - установить высокий уровень;
♦ Toggle - переключить уровень.
Опция Pulse посылает на вывод импульс длительностью в один
цикл команды. Этот режим удобен для синхронизации таймера
TMRO или запроса на внешнее прерывание. Опции установки вывода
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Рис. 15.4
Окно асинхронных стимулов
в высокое (High) и низкое (Low) состояния передают заданную ве-
личину на вывод. Для произвольного изменения состояния входа
можно запрограммировать две кнопки, одна из которых будет зада-
вать 1, а другая - 0. Тот же результат достижим при помощи одной
кнопки в режиме Toggle, каждое нажатие которой меняет состоя-
ние на входе.
Тактируемые сигналы вводятся в имитируемый Р1С-микрокон-
троллер посредством меню диалогового окна Clocked Stimulus
Dialog (Окно тактируемых стимулов), которое вызывается при выбо-
ре из меню Debug (Отладка) пунктов Simulator Stimulus (Стимулы
симулятора) или Clock Stimulus (Тактируемые стимулы). С помощью
этого окна (рис. 15.5) можно задать микроконтроллеру и обычные
Рис. 15.5
Окно тактируемых стимулов
СРЕДА РАЗРАБОТКИ MPLAB
тактовые сигналы. Для этого выбирается вывод, затем состояния
High и Low для определения тактового периода, а также отмечает-
ся, инвертирован или нет тактовый сигнал (это означает, что при
сбросе тактовый сигнал будет в состоянии 0 или 1). Длительность
состояний указывается в командных циклах*
Тактируемые стимулы могут применяться для обычного тестиро-
вания входа, но более целесообразно использовать их при генера-
ции повторяющихся воздействий, тактирующих сигналов или сиг-
налов прерываний.
Функция Register Stimulus (Регистровые стимулы) позволяет при-
сваивать значение содержимому выбранного регистра каждый раз,
когда при выполнении симулируемого приложения встречается спе-
цифический адрес. Для программирования регистровых стимулов
нужно войти в меню Debug, затем последовательно отметить Simu-
lator Stimulus и Register Stimulus, после чего подтвердить свой
выбор, щелкнув по кнопке Enabled (Разрешить). Эти манипуляции
приводят к появлению небольшого окна, показанного на рис. 15.6,
где указывается имя специфицируемого регистра, а также адрес,
по которому происходит изменение. Когда адреса заданы, файл
регистровых стимулов выбирается с помощью кнопки Browse
(Обзор).
Рис. 15.6
Окно регистровых стимулов
Для изменения содержимого регистров предназначено также
окно Modify (Модификации), представленное на рис. 15.7. Оно вы-
зывается из меню Window (Окно), пункт Modify. Через это окно мож-
но получить доступ к любому регистру имитируемого устройства,
включая регистр w, который в микроконтроллерах младшего и сред-
него подсемейств не адресуется.
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Рис. 15.7
Окно модификации содержимого регистров
Modify
Файлы стимулов
Файлы стимулов специфицируют шаги (Step), а также соответству-
ющие выводы, на которые подаются стимулы. Ниже приведен при-
мер файла стимула (который всегда имеет расширение .sti). Ком-
ментарии в файле предваряются восклицательным знаком (!):
! 1 । Пример файла стимула.
Step MCLR RB4 ! Определение управляемых выводов.
1 1 1 ! Инициализация выводов.
! Ожидание инициализации программы
! и аппаратуры.
500 0 1 ! Сброс Р1С-микроконтроллера.
1000 1 1
1500 1 0 ! Изменение состояния порта.
2000 1 1 ! Восстановление его
! для оставшейся части программы.
Файл стимулов (Stimulus File) рекомендуется применять для ими-
тации работы приложения, чтобы выяснить, какие проблемы могут
возникнуть с программным обеспечением.
Директивы ассемблера
Директивы ассемблераЪ/lVLAE) приведены в табл. 15.3.
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
Компанией Microchip созданы стандартные включаемые файлы (.inc),
рекомендуемые к включению в исходные коды. Эти файлы содержат
определения всех идентификаторов (имен), связанных с выбранным
Таблица 15.3
Директивы ассемблера MPLAB
Директива Пример использования Примечания
BADRAM BADRAM Start, End Отмечает файловые регистры, которые не используются
BANKISEL BANKISEL <label> Обновляет бит выбора банка при индексной адресации через регистр FSP (бит IRP регистра STATUS). Обычно эта директива задействуется, когда генерируются объектные файлы
BANKSEL BANKSEL Label Обновляет биты выбора банка RPx регистра STATUS. Эта директива не применяется для микроконтроллеров младшего подсемейства (в таком случае для адресации служит регистр индекса FSP). Кроме того, директива недоступна и для PIC-микроконтроллеров старших подсемейств, поскольку последние работают с командой movlb
CBLOCK CBLOCK Address Vari, Var2 VarA.2 ENDC Используется для определения переменных и констант (выделения памяти для них). Чтобы задать многобайтовые переменные и константы, при их определении после соответствующего имени через двоеточие (.) указывается объем занимаемой ими памяти. В примере это показано для VarA. Директива ENDC завершает CBLOCK
CODE CODE (Address) Применяется с объектным файлом для определения начала кода приложения в исходном файле. Перед директивой может стоять метка для именования блока. Если никакого адреса не указано, то компоновщик MPLINK сам назначает адреса для оператора CODE и следующих за ним команд
.CONFIG .CONFIG Value Эта директива используется для установки битов конфигурации PIC-микроконтроллера. .CONFIG автоматически задает необходимый адрес конфигурационного слова конкретному PIC-микроконтроллеру. Value состоит из конфигурационных констант, описанных в файле .inc каждого PIC-микроконтроллера
constant/=/equ CONSTANT Label = Value или Label = Value или Label EQU Value Определяет константы при помощи одного из трех методов, показанных в примере. Константа Value связывается с именем Label и вычисляется, когда имя Label встречается в программе. Для замены Label на строку символов (string) служит директива «DEFINE
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
Таблица 15.3
Директивы ассемблера MPLAB (продолжение)
Директива Пример использования Примечания
DA/DATA/DB DA Value | string или DATA Value | string или DB Value | string Определяет данные в памяти программ. Если задана строка, то каждый ее байт размещается в отдельном слове. Вместо директив DATA или DB рекомендуется использовать директиву DW, поскольку она более определенно указывает адрес размещения. Директивы DATA/DB/DW сохраняют соответствующие данные не в качестве фрагмента (полей) команды retlw. Для определения последней необходима директива DT. Упомянутые выше директивы удобнее для применения в исходных файлах последовательного EEPROM
DE ORG 0x02100 DE Value | string Эта команда используется для сохранения данных в EEPROM данных PIC-микроконтроллера. Директиве de должен предшествовать оператор org 0x02100, чтобы программный счетчик PIC-микроконтроллера находился по требуемому для программирования EEPROM адресу
«DEFINE «DEFINE Label [string] Данная директива указывает компилятору на то, что каждый раз, когда в тексте программы будет встречаться имя Label, он должен заменить его на строку string. Строка является факультативной, и Label может использоваться для условной компиляции программы Если имя Label должно быть заменено константой, то следует применить одну из директив объявления константы. Эта директива размещается в первом столбце исходного файла
DT DT Value [ Value .] | string Создает таблицу в программной памяти, то есть помещает значение Value в поле операторов retlw. Если параметром директивы DT является строка, то каждый байт последней размещается в отдельной команде retlw
DW DW Value [, Value ] Резервирует память программ для указанной величины Value. Последняя будет занимать целиком слово программной памяти
ELSE Используется в сочетании с директивами IF, IFDEF и IFNDEF для определения альтернативного пути ассемблирования
END END Завершает программный блок. Эта директива должна ставиться в конце всех исходных файлов приложений
ENDC Используется для завершения блока констант CBL0CK
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.3
Директивы ассемблера MPLAB (продолжение)
Директива Пример использования Примечания
ENDIF Применяется для обозначения конца блока условного ассемблирования, открываемого директивой if (следует обратиться к описанию директив IF, IFDEF и IFNDEF)
ENDM Используется для завершения макроопределения MACRO
ENDW Служит для обозначения конца (последней команды) директивы цикла WHILE. Следует обратиться к описанию директивы WHILE, чтобы понять, как используется данная директива
ERROR ERROR string Вводит в код сообщения об ошибке ERROR, при этом сообщение string заносится в файлы листинга и ошибки (Listing/Error File)
ERRORLEVEL ERRORLEVEL 0 | 1 | 2, + # | - # Задает типы сообщений, которые будут вводиться в файлы листинга и ошибок (it - номер, 2 - ошибка, 1 - предупреждение, 0 - сообщение). Указание «минуса» (-) перед числом приводит к тому, что любые ошибки, предупреждения или сообщения игнорируются ассемблером и сообщаться о них ничего не будет. При указании «плюса» (+) любые ошибки, предупреждения или сообщения будут выводиться ассемблером
EXITM Используется для возврата из макроса при ассемблировании. Применять эту директиву рекомендуется только в том случае, когда при выполнении макроса возникла ошибка и необходимо прервать работу до выяснения ошибки. Действие EXITM внутри тела макроса может привести к появлению сообщения Phase Error (Ошибка фазы), которую будет очень сложно выявить
EXPAND EXPAND Разрешает печать расширений макроса в файле листинга после того, как это было запрещено директивой N0EXPAND. Печать расширений макроса в MPLAB разрешается по умолчанию
EXTERN EXTERN Label Объявляет внешние имена, то есть разрешает использовать в данном объектном файле имена, объявленные в других файлах
FILL FILL Value, Count Записывает значение Value в Count слов программной памяти. Если Value заключено в скобки, то это команда ассемблера (например, (goto 0)). В более ранних версиях MPLAB директива Fill не имела параметра Count и заполняла значением Value любой адрес памяти программ, который не содержал команды, или области, не зарезервированные с помощью RES
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
Таблица 15.3
Директивы ассемблера MPLAB (продолжение)
Директива Пример использования Примечания
GLOBAL GLOBAL Label Задает имя в объектном файле, доступ к которому осуществляется из других объектных файлов. Директива GLOBAL отличается от EXTERN тем, что может быть размещена в исходном коде только после того, как будет определено имя (Label)
IDATA IDATA Address Используется для задания области данных внутри объектного файла. Если никакого адреса не указано, то последний назначается ассемблером. С директивой IDATA может применяться метка для ссылки
-IDL0CKS -IDLOCKS Value Устанавливает значение четырех идентификационных ячеек PI С-микроконтрол л ера с помощью четырех полубайт величины Value. Эта директива не применяется для микроконтроллеров 17Схх
IF IF Parml COND Parm2 • , “True” Code ELSE : ; “False” Code ENDIF Если выражение Parml COND Parm2 является истинным (True), то ассемблируется код ветви True. В противном случае ассемблируется код ветви False. Директива ELSE и код ветви False являются факультативными
IFDEF IFDEF Label : , “True” Code ELSE : ; “False” Code ENDIF Если имя Label было определено (с помощью директивы «DEFINE), то ассемблируется код ветви True. В противном случае ассемблируется код ветви False. Директива ELSE и код ветви False являются факультативными
IFNDEF IFDEF Label . , “True” Code ELSE ; “False” Code ENDIF Если имя Label не было определено (с помощью директивы «DEFINE), то ассемблируется код ветви True. В противном случае ассемблируется код ветви False. Директива ELSE и код ветви False являются факультативными
’ INCLUDE INCLUDE “FileName Ext" Загружает файл FileName. Ext в исходный файл с позиции директивы INCLUDE
LIST LIST option [, ] Определяет опции ассемблера для исходного файла. Существуют следующие опции:
Опция По умолчанию Описание
b = nnn 8 Задает шаг табуляции
с = nnn 132 Указывает ширину столбца
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.3
Директивы ассемблера MPLAB (продолжение)
Директива Пример использования Примечания
LIST LIST option [, ..] Опция По умолчанию Описание
f = format INHX8M Устанавливает формат выходного hex-файла
Free FIXED Использует синтаксический анализатор свободного формата
Fixed FIXED Применяет синтаксический анализатор фиксированного формата
mm = ON/OFF ON Печатает карту памяти в файле
n = nnn 60 Устанавливает число строк на листе
p = type None Определяет тип PIC-микроконтроллера
r = radix HEX Задает основание системы исчисления по умолчанию (существуют HEX, DEC или ОСТ)
st = ON/OFF ON Печатает таблицу символов в файле
t = ON/OFF OFF Усекает строки листинга
w = 0 | 1 | 2 0 Устанавливает уровень сообщения
x = ON/OFF ON Разрешает или запрещает расширение макроса
LOCAL Fillup MACRO Size Local i 1 = 0 WHILE (i < Size) DW 0x015AA 1 = 1 + 1 ENDW ENDM Определяет внутреннюю переменную макроса, к которой невозможно получить доступ извне
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
Таблица 15.3
Директивы ассемблера MPLAB (продолжение)
Директива Пример использования Примечания
MACRO Label MACRO [Parm [, ] ] bsf Parm, 0 ENDM Определяет блок кода, заменяющий Label, каждый раз, когда он встречается. Параметры (факультативные) заменяют формальные параметры самого макроса
.MAXRAM .MAXRAM End Определяет последний адрес регистра общего назначения ОЗУ PIC-микроконтроллера, который может использоваться
MESSG MESSG string Вставляет сообщение в исходный файл по месту оператора MESSG По этой команде ошибки и предупреждения не генерируются
NOEXPAND NOEXPAND Запрещает расширение макроса в файле листинга
NOLIST NOLIST Запрещает печать (внесение) исходного кода в файл листинга
ORG ORG Address Задает начальный адрес программной памяти, по которому будет размещаться следующий код
PAGE PAGE Обозначает конец страницы по месту директивы PAGE
PAGESEL PAGESEL Label Goto Label Вставляет код выбора страницы (соответствующий метке Label) в объектный файл при компоновке перед переходом именно к этой метке или вызову подпрограммы по этой метке
PROCESSOR PROCESSOR type Применяется для совместимости с ранними версиями ассемблеров PIC-микроконтроллеров Вместо нее должна использоваться опция Processor из директивы LIST
RADIX RADIX Radix Применяется для совместимости с ранними версиями ассемблеров PIC-микроконтроллеров. Существуют опции HEX, DEC и ОСТ. Взамен этого по умолчанию основание выбирается в директиве LIST
RES RES MemorySize Резервирует блок программной памяти в объектном файле для использования другими файлами. Перед директивой RES может быть поставлена метка для обозначения
SET Label SET Value Устанавливает значение переменной. Директива SET аналогична директивам CONSTANT, EQU и = за исключением того, что ее значение допустимо изменить позднее в коде с другим оператором SET
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.3
Директивы ассемблера MPLAB (окончание)
Директива Пример использования Примечания
SPACE SPACE Value Определяет число пустых строк в файле листинга
SUBTITLE SUBTITLE string Вводит строку string на строке, следующей за строкой TITLE (то есть вставляет подзаголовок)
TITLE TITLE string Вводит строку string на верхней строке каждой страницы файла листинга
U DATA UDATA [Address] Labell RES 1 Label2 RES 2 Сообщает о начале блока неинициализированных данных. Для объявления переменных на пространстве неинициализированных данных (то есть для резервирования памяти) следует использовать директиву RES. Эта директива разработана для последовательных EEPROM
UDATA.ACS UDATA_ACS [Address] Labell RES 1 Label2 RES 2 Сообщает о начале блока неинициализированных данных в микроконтроллере PIC 18Схх. Для объявления переменных на пространстве неинициализированных данных (то есть для резервирования памяти) следует использовать директивы RES
UDATA_0VR UDATA_0VR [Address] Labell RES 1 Label2 RES 2 Сообщаете начале блока неинициализированных данных, в который могут быть записаны данные других блоков с таким же именем. Для объявления переменных в пространстве неинициализированных данных (то есть для резервирования памяти) необходимы директивы RES. Эта команда разработана для последовательных EEPROM
UDATA.SHR UDATA.SHR [Address] Labell RES 1 Определяет область памяти данных, которая является общей для всех банков регистров
ttUNDEFINE «UNDEFINE Label Удаляет объект (символ), который был определен директивой «DEFINED
VARIABLE VARIABLE Label [= Value] Объявляет переменную, значение которой может быть изменено внутри программы, при помощи простого оператора присваивания
WHILE WHILE Parml COND Parm2 , while “True" ENDW Определяет цикл. Код в пределах директив WHILE/ENDW будет выполняться, когда выполняется условие Parml COND Parm2. В файле листинга код тела цикла появляется несколько раз
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
микроконтроллером. При их использовании разработчикам про-
грамм не придется самим определять имена и адреса регистров, име-
на битов и т.п. Каждой модели PIC-микроконтроллера соответствует
свой файл .inc, название которого задается в формате:
р < I > PICmicro® MCU < /I >. inc
где PICmicro® MCU представляет собой тип Р1С-микроконтроллера.
КОМПОНОВКА ПРИЛОЖЕНИЙ
Прежде чем создать объектный файл приложения, необходимо под-
готовить все исходные файлы, а затем «связать» их. Когда все нуж-
ные файлы имеются, выполняется компоновка (links), при которой
обобщаются адреса различных файлов. Важно помнить о том, что
обобщаются также адреса переменных и команд.
Ниже приведены два примера файлов исходных кодов, показыва-
ющие, как адреса связываются друг с другом. В первом примере
представлена основная программа:
TITLE - Test3 - Jump to Test3A
; Пример приложения, использующего MPLAB-компоновщик.
; Муке Predko
; 2000.02.02
; Применяется микроконтроллер PIC 16F84.
list r=dec ; Перечень директив
; для определения процессора
; и режимов компилятора.
tfinclude "pl6F84.inc" ; Специальные переменные процессора.
; Определение битов конфигурации.
.CONFIG _CP_OFF & _WDT_0N & __PWRTE_ON & _XT_0SC
EXTERN TEST3A ; Определение основной программы.
GLOBAL TEST3Astart
GLOBAL flag ; Глобальные переменные.
; ***** ОПЕРЕДЕЛЕНИЯ ПЕРЕМЕННЫХ.
; Пример использования блочных данных.
INT.VAR UDATA OxOC
w.temp RES 1 Переменная, используемая для сохранения контекста
status_temp RES 1 Переменная, используемая для сохранения контекста
flag RES 2 Временная переменная (общие ячейки - G.DATA).
КОМПОНОВКА ПРИЛОЖЕНИЙ
**********************************************************
RESET VECTOR CODE 0X00 Вектор сброса процессора. Переход в начало программы.
goto start
INT.VECTORCODE 0x004 Ячейка вектора прерываний.
movwf w_temp
PROG CODE 0x005 movf STATUS, W
movwf status_temp
; Код обработки прерывания (i sr) может начинаться здесь
; или размещаться в другом ме сте в качестве подпрограммы.
movf status_temp, w ' ; Восстановление контекста
movwf STATUS
swapf w.temp, f
swapf w_temp, w
retfie start goto TEST3A
TEST3Astart END ; Директива конца программы.
Второй файл, который связывается с головной программой, вы-
глядит так:
TITLE "Test3A - Actually Execute the Code"
Пример программы, использующей MPLAB-компоновщик.
Муке Predko
2000.02.02
Применяется микроконтроллер PIC 16F84.
EXTERN flag ; EXTERN TEST3Astart list r = dec # include “p16f84.inc” TEST3AC0DE CODE Внешние переменные.
TEST3A
GLOBAL TEST3A Глобальные переменные
banksei flag ; Пример.
clrf flag ; Пример.
; Здесь вставляется оставшаяся часть кода.
movlw 77
movwf Hag
movlw 0x001
subwf Hag, f
btfss STATUS, Z
goto $ - 2
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
goto $ ; Зацикливание.
END ; Директива конца программы.
ШАБЛОН ПРОГРАММЫ ПРИЛОЖЕНИЯ
Представленный ниже файл может использоваться в качестве шаб-
лона исходного кодаддя приложений PIC-микроконтроллеров:
Title "FileName - One Line Description"
#define.version "x.xx"
; Описание приложения. Комментарии.
; Автор
; Замечания к аппаратуре:
LIST R = DEC ; Спецификация микроконтроллера,
include "р16схх.inc" ; Включаемые файлы.
; Объявление регистровых переменных.
; Макросы.
.CONFIG _CP_OFF & _XT_0SC & _PWRTE_ON & _WDT_0FF & _BODEN_OFF
org 0
Mainline
goto Mainline.Code
org 4 ; Программа обработки
; прерываний по адресу 4.
INT
Mainline_Code ; Основная программа.
; Подпрограммы,
end
ЯЗЫК BASIC
Переменные BASIC должны описываться только в исключительных
случаях. Имя переменной начинается с буквы или знака подчеркива-
ния (_), за которым идут буквенно-цифровые символы и опять под-
черкивание. Имена переменных (а также метки адресов) зависят от
рассматриваемой версии.
Для обозначения типов Эашшх к имени переменной добавляется
так называемый суффикс (табл. 15.4).
В табл. 15.5 перечислены различные функции и операторы Basic.
Для записи операторов в программах Basic используются операции,
представленные в табл. 15.6.
ЯЗЫК BASIC
Таблица 15.4
Суффиксы числовых данных
Суффикс Описание
$ Строка данных (знаков)
% Целое
& Длинное целое (32 бита) - расширение BASIC Microsoft
t Действительное число одинарной точности (32 бита) - расширение Basic Microsoft
# Действительное число двойной точности (64 бита) - расширение Basic Microsoft
Таблица 15.5
Функции и операторы BASIC
Оператор/функция Описание
DATA Заголовок блока данных
DIM Объявление размеров массива
OPTION BASE Объявление нижней границы индекса массива
LET Оператор присваивания (не обязателен)
RANDOMIZE Инициализация генератора случайных чисел
INPUT [Prompt , ] Считывание данных из файла/входных данных от терминала
PRINT Вывод на терминал/в файл
? Вывод на терминал
READ Получение данных
GOTO Переход к строке/метке
GOSUB Вызов подпрограммы по строке/метке
RETURN Возврат к вызывающей подпрограмме
IF Condition {THEN] Условный оператор
FOR Variable = Init TO Last [STEP Inc] NEXT Оператор цикла
ON Event GOTO Переход по событию к строке/метке
RESTORE Восстановление указателя данных
STOP Останов выполнения программы
END Окончание выполнения программы
> Комментарий все, что располагается справа, игнорируется
REM Комментарий все, что располагается справа, игнорируется
ABS Возврат абсолютного значения числа
SGN Возврат знака числа
COS Возврат косинуса угла (входные данные обычно выражаются в радианах)
SIN Возврат синуса угла (входные данные обычно выражаются в радианах)
TAN Возврат тангенса угла (входные данные обычно выражаются в радианах)
ATN Возврат арктангенса
INT Возврат целой части числа
SQR Возврат квадратного корня числа
EXP Возврат экспоненты числа
LOG Возврат натурального логарифма числа
RND Возврат случайного числа
TAB Табуляция столбцов на принтере
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.6
Операции Basic
Операции Описание
+ Сложение
- Вычитание
* Умножение
/ Деление
Возведение в степень
U » Начало/конец текстовой последовательности
Разделитель
Конкатенация
$ Идентификатор строки
- Присваивание/равенство при сравнении
< Меньше
<= Меньше или равно
> Больше
>- Больше или равно
о Не равно
Порядок выполнения операций в Basic вполне стандартен для язы-
ков программирования (табл. 15.7).
Таблица 15.7
Порядок выполнения операций в Basic (приоритет)
Операции Приоритет Описание
Функции Вычисление выражений
= <><<=>>= Высший Проверка условий
Возведение в степень
* / Умножение/деление
+ - Низший Сложение/вычитание
РАСШИРЕННАЯ ВЕРСИЯ BASIC
В табл. 15.8 представлены функции расширенной версии Basic Micro-
soft для ПК, а также некоторые функции Basic для PIC-микрокон-
троллера.
PICBASIC
PicBasic, разработанный в лаборатории microEngineering Labs, Inc.
(meLab’s), является превосходным инструментом для изучения PIC-
микроконтроллеров. В дальнейшем полученный опыт позволит эф-
фективно программировать на ассемблере. Исходные коды сходны
с программами на PBASIC фирмы Parallax (Basic Stamp BS2), но
PicBasic имеет значительные усовершенствования.
PicBasic на данный момент не позволяет компоновать несколько
исходных файлов, из-за чего последние приходится включать в об-
щий исходный код. Команды ассемблера могут вставляться в текст
РАСШИРЕННАЯ ВЕРСИЯ BASIC
Таблица 15.8
Расширенные функции Basic
Функции/операторы Описание
AND Логическое И
OR Логическое ИЛИ
XOR Исключающее ИЛИ
EQV Проверка эквивалентности
IMP Импликация
MOD Возврат модуля (остатка) целочисленного деления
FIX Возврат целой части числа
DEFSTR Variable Объявление строки
DEFINT Variable Объявление целой переменной
DEFLNG Vanble Объявление длинного целого
DEFSNG Variable Объявление действительной переменной одиночной точности
DEFDBL Variable Объявление действительной переменной двойной точности
REDIM Variable ([low TO ] High [ , [low TO ] High ]) [AS Type] Переопределение переменной
ERASE Стирание массива из памяти
LBOUND Возврат значения нижней границы индекса массива
UBOUND Возврат значения верхней границы индекса массива
CONST Variable = Value Объявление константы
DECLARE Function | Subroutine Объявление прототипа подпрограммы/функции
DEF FNFunction ( Arg [. Arg ]) Объявление функции
END DEF Завершение определения
FUNCTION Function ( Arg [. Arg ]) Объявление функции
END FUNCTION Завершение объявления функции
SUB Subroutine ( Arg [. Arg ]) Объявление подпрограммы
END SUB Завершение объявления подпрограммы
DATA Value [, Value ] Спецификация данных
READ Variable [, Variable ] Считывание данных из файла
IF Condition THEN Statements ELSE Statements END IF Условный оператор
ELSEIF Проверка условия (вместо простого оператора Else)
ON ERROR GOTO Label Переход к метке при ошибке
RESUME [Label] Возврат после обработки ошибки. Может возвратиться либо к текущей позиции, либо к началу, либо к метке
ERR Возврат номера текущей ошибки
ERL Возврат строки, на которой расположена ошибка
ERROR # Оператор' эмулирует ошибку (номер #) с выполнением соответствующей подпрограммы. Функция’ возвращает текст сообщения об ошибке
DO WHILE Condition Statements LOOP Выполнение Statements, пока Condition истинно
DO Statements LOOP WHILE Condition Выполнение Statements, пока Condition истинно
DO Statements LOOP UNTIL Condition Выполнение Statements, пока Condition истинно
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.8
Расширенные функции Basic (продолжение)
Функции/операторы Описание
EXIT Завершение выполнения цикла FOR, WHILE и UNTIL без проверки
SELECT Variable Выполнение одного или нескольких операторов в зависимости от значения переменной Variable
CASE Value Выполнение внутри оператора SELECT. CASE задает список значений Value и операторов, CASE ELSE определяет оператор по умолчанию
END SELECT Завершение оператора SELECT
LINE INPUT Считывание строки
INPUTS ( #) Получение от пользователя заданного числа (#) символов
INKEYS Проверка клавиатуры и возврат символа (клавиши) или 0
ASC Возврат числового кода символа ASCII
Code CHRS Преобразование целого числа в символ ASCII
VAL Возврат числового представления строки
STRS Возврат строкового представления числа
LEFTS (String, it) Возврат заданного числа (#) крайних слева символов строки
RIGHTS (String, #) Возврат заданного числа (#) крайних справа символов строки
MIDS (String, Start, #) Возврат/замена заданного числа (#) символов с позиции Start строки
SPACES (#) Возврат строки, содержащей определенное число # пробелов
LTRIMS Удаление начальных пробелов из строки
RTRIMS Удаление конечных пробелов из строки
INSTR (String, SubString) Возврат первой найденной позиции подстроки SubString в строке String
UCASES Преобразование всех символов нижнего регистра строки в символы верхнего регистра
LCASES Преобразование всех символов верхнего регистра строки в символы нижнего регистра
LEN Возврат длины строки
CLS Очистка экрана
CSRLIN Возврат текущей строки, на которой стоит курсор
POS Возврат текущего столбца, на котором стоит курсор
LOCATE X, Y Указание позиции (ряд/столбец) курсора (верхняя левая позиция имеет вид 1,1)
SPC Сдвиг изображения на заданное число пробелов
PRINT USING “Format" Печать значения в указанном формате. Символы +, #, ," используются в качестве форматов чисел
SCREEN mode [,[Color][, [Page][, Visual] Режим экрана. Color устанавливается в 0 для цветного режима дисплея и в 1 - для монохромного Раде - страница, на которую поступают данные ввода/вывода. Visual - страница, активная в текущий момент
COLOR [foreground^, [background^, border]] Цвета, активные в текущий момент
PALETTE [attribute, color] Изменение палитры
VIEW [[SCREEN] (x1, y1) - (x2, y2) [, [color]][,, border]]] Создание небольшого графического окна Viewport
WINDOW [[SCREEN] (x1, y1) - (x2, y2)] Указание логической позиции Viewport на дисплее
PSET (x, y) [, color] Запись пиксела (точки) на экране
PRESET (x, y) Стирание точки (позиции) Присвоение точке цвета фона
PICBASIC
Таблица 15.8
Расширенные функции Basic (продолжение)
Функции/операторы Описание
LINE (х1, у1) - (х2, у2) [, [Color] [, B|BF] [, style]]] Получение линии между двумя указанными точками. Если выбраны В или BF, то нарисовать прямоугольник (BF - закрашенный прямоугольник, Filled)
CIRCLE (x, у), radius [, [color] [, [start] [, end] [, aspect]]] Рисование дуги заданного радиуса с указанным центром, start и end являются начальным и конечным углами (выраженными в радианах). Aspect служит параметром при изображении эллипсов
DRAW Commandstring Рисование произвольной графической фигуры. Между командами должны стоять пробелы U# - перемещение курсора вверх на # пикселов; D# - перемещение курсора вниз на # пикселов; E# - перемещение курсора вверх и вправо на # пикселов; F# - перемещение курсора вниз и вправо на и пикселов; G# - перемещение курсора вниз и влево на # пикселов; H# - перемещение курсора вверх и влево на # пикселов; L# - перемещение курсора влево на # пикселов; R# - перемещение курсора вправо на # пикселов; Мху - перемещение курсора в заданную позицию х, у; В - отключение режима рисования пикселов (шаговый режим); N - активизация курсора и перемещение его в исходную позицию
Position A# - разворот фигуры с приращением 90°; Си - указание цвета рисования, P#Color#Bordeг - определение цвета заливки фигуры и обводки; S# - задание масштаба рисования; T# - поворот на # градусов
LPRINT Отправление выходных данных на принтер
BEEP Активизация звукового сигнала громкоговорителя
SOUND Frequency, Duration Задание указанного звука в громкоговорителе ПК
PLAY NoteStnng Вывод указанной последовательности нот на громкоговоритель ПК
DATES Возврат текущей даты
TIMES Возврат текущего времени
TIMER Возврат числа секунд после полуночи
NAME FileName AS NewFileName Изменение имени файла
KILL FileName Удаление файла
FILES [FileName Ext] Возврат списка файлов (эквивалент команде MS DOS dir)
OPEN FileName [FOR Access] AS It Handle Открытие файла в соответствии с указанным идентификатором (последнему предшествует символ #) Доступ: I - открыть, чтобы ввести текстовые данные; 0 - открыть, чтобы вывести текстовые данные, А - открыть, чтобы присоединить текстовые данные; В - открыть файл для доступа к одиночным байтам; R - открыть для считывания и записи структурированных переменных
CLOSE it Handle Закрытие указанного файла
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.8
Расширенные функции Basic (окончание)
Функции/операторы Описание
RESET Закрытие всех открытых файлов
EOF Тrue, если достигнут конец файла
READ # Handle, Variable Считывание данных из файла
GET # Handle, Variable Считывание переменных из файла
INPUT # Handle, Variable Считывание отформатированных данных из файла при помощи форматов INPUT, INPUT USING и INPUTS
WRITE it Handle, Variable Запись данных в файл
PUT it Handle, Variable Запись переменных в файл
PRINT # Handle, Output Запись отформатированных данных в файл при помощи форматов PRINT и PRINT USING
SEEK ft Handle, Offset Передвижение указателя файла в специфицированную позицию Offset
программ. Компилятор PicBasic генерирует либо файлы на ассемб-
лере, либо hex-файлы. Он не создает объектных файлов для компо-
новки.
За дополнительной информацией и для ознакомления с новейши-
ми библиотеками обращайтесь к Web-странице microEngineering
Labs, Inc., расположенной по адресу http: / /www.melabs.com /mel/
home.htm.
PicBasic Pro вызывается следующей командной строкой:
РВР [W] [options...] source
Поля Options задают различные режимы работы компилятора,
представленные в табл. 15.9.
PicBasic позволяет назначать конфигурацию микроконтроллера.
В табл. 15.10 представлены значения битов конфигурации, приме-
няемые для большинства Р1С-микроконтроллеров.
Каждый байт рассматривается как один из байтов слова. Напри-
мер, Ь4 является младшим байтом слова w2.16-разрядные переменные
рассматриваются как 16-разрядные слова (например, слово wO,
включающее байты ЬО и Ы).
Указанный метод работает хорошо, однако необходимо следить,
чтобы переменные не перекрывались. Это общая проблема для всех
пользователей нового Basic Stamp.
Для включения переменных Basic Stamp можно использовать два
включаемых файла, задаваемых директивой include:
include "bsldefs.bas"
include "bs2defs.bas"
PICBASIC
Таблица 15.9
Режимы работы компилятора
Поле Option Назначение
-h/-? Отображать справочный экран Справочный экран также выводится в том случае, когда никаких опций или названий исходного файла не указано
-ampasm Использовать ассемблер MPASM, а не PicBasic
-с Вставить комментарии в ассемблерный файл, созданный компилятором PicBasic. Данную опцию рекомендуется использовать, если нужно получить исходный код MPASM ассемблера из программы на PicBasic
-iPath Указать новую директорию для включения ее файлов в текст программы на PicBasic
-ILibrary Указать различные библиотеки, необходимые в процессе компиляции. Специальные библиотеки микроконтроллеров обеспечиваются PicBasic, если указан его тип
-od Генерировать листинг, таблицу символов и файлы распределения памяти
-01 Генерировать файл листинга
-pPICmicro MCU Указать PIC-микроконтроллер, для которого должен компилироваться исходный код. Если этот параметр не задан, то в качестве процессора применяется PIC 16F84. Микроконтроллер задается в формате 16F84 (аббревиатура PIC в начале типа Microchip микроконтроллера не указывается)
-s Не ассемблировать скомпилированный код
-V Активизировать режим отображения всей информации (Verbose Mode), обеспечивающий дополнительную информацию, когда приложение компилируется
Таблица 15.10
Биты конфигурации
Функции Установки PicBasic
Защита кода Отключена
Генератор XT или внутренний RC в случае PIC 12Сххх
Сторожевой таймер (WDT) Включен
Таймер задержки при включении питания (PWRTE) Выключен
Значительно более эффективным способом описания переменных
является использование директивы va г, что дает PicBasic-компилятору
возможность самому назначать адреса переменных и обеспечивать
доступ к ним. Наряду с директивой var применяются директивы word,
byte и bit, позволяющие задать «размер» переменной:
WordVariable var word
ByteVariable var byte
BitVariable var bit
Объявление 16-разрядной переменной.
Объявление 8-разрядной переменной.
Объявление битовой переменной.
Исходные значения переменных не могут задаваться при их
объявлении.
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
С помощью директивы va г допустимо объявлять производные пе-
ременные, которые определяются на основе предварительно объяв-
ленных переменных. Так, для приведенных выше переменных разре-
шается объявить новые переменные, являющиеся их частями:
WordVariableTop var WordVariable.byte1
WordVariableBottom var WordVariable.byteO
BitVariableMSB var BitVariable.bit7
BitVariableLSB var BitVariable.0
В данном случае это старший и младший байты, а также старший
и младший разряды соответствующих переменных.
Кроме того, переменные определяются через регистры. Стандарт-
ные имена регистров PIC-микроконтроллера могут быть использованы
в программе приложения, а имена портов - для объявления переменных.
Например, для определения битов, необходимых при управлении
ЖКИ, применяются следующие объявления:
LCDData var PORTB ' PORTB как 8 бит данных.
LCDE var PORTA.0 ’ RAO задает сигнал Е (строб-импульс)
LCDRS var PORTA.1 ’ RA1 - линия выбора данные/команда.
LCDRW , var PORTA.2 1 RA2 - линия выбора чтение/запись.
При объявлении переменных с помощью директив var и system
иногда указываются фиксированные адреса. Например, оператор
int_w var byte $00 system
определяет переменную _w по адресу ОхООС. Это резервирует упомя-
нутый адрес и не позволяет использовать его для других перемен-
ных. Банк для переменных задается с помощью директивы system
вида:
int_status var byte bankO system
Обе рассмотренные опции директивы var удобны для задания
переменных в программах обработки прерываний, что и будет по-
казано ниже.
Для определения переменных в PicBasic имеется не только ди-
ректива var, но и директива symbol. Ее возможности абсолютно
идентичны директиве var, и используется она исключительно для
обеспечения совместимости с Basic Stamp 1. Если разрабатываются
только приложения PicBasic, рекомендуется применять оператор
var и избегать директивы symbol.
PicBasic позволяет определять одномерные массивы для каждого из
трех типов данных:
PICBASIC
WordArray var word [10]
ByteArray var byte [11]
BitArray var bit [12]
Массив из десяти слов.
Массив из одиннадцати байт
Массив из двенадцати бит.
Биты могут обрабатываться как элементы массивов. В табл. 15.11
приведены максимальные размеры массивов (реальные зависят от
типа PIC-микроконтроллера).
Таблица 15.11
Максимальные размеры массивов
Тип переменной Максимальное число элементов
Слово 32
Байт 64
Бит 128
Линии портов ввода/вывода определяются в PicBasic как элементы
массива битов. Таким образом (при помощи формата Pin#, где # яв-
ляется номером линии) можно адресовать до 16 линий. Характер
доступа изменяется в зависимости от модели PIC-микроконтролле-
ра, для которого разработано приложение. Соответствие портов
элементам битового массива для микроконтроллеров с различным
числом выводов дано в табл. 15.12.
Таблица 15.12
Соответствие портов элементам битового массива для микроконтроллеров
с различным числом выводов
Число выводов микроконтроллера Выводы 0-7 Выводы 8-15
8 GPIO Имеют номера 0-5
18 PORTB PORTA
28 - не PIC 14С000 PORTB PORTC
28 - PIC 14С000 PORTC PORTD
40 PORTB PORTC
Не все порты имеют по восемь выводов, поэтому попытка досту-
па к выводу RA6 устройства, имеющего 18 выводов (но не имеющего
бита RA6), ни к чему не приведет.
Константы объявляются аналогично переменным, однако для
этого используется директива con с параметром, задающим значе-
ние константы:
Sampleconstant con 3 + 7 ‘ Пример объявления константы.
Постоянные величины представимы в четырех различных форма-
тах. В табл. 15.13 приведены форматы и модификаторы, позволяю-
щие указать компилятору PicBasic, какой тип данных задается.
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.13
Форматы и модификаторы для определения типа данных
Тип данных Модификатор Комментарии
Десятичный Нет По умолчанию в PicBasic данные представляются в десятичном виде
Шестнадцатеричный $ $ ставится перед числом
Двоичный % % ставится перед числом
ASCII •• В двойные кавычки заключается одиночный символ
Из приведенной выше таблицы следует, что в двойных кавычках
может стоять только код ASCII. Некоторые команды (описанные
ниже) вводятся с последовательностями символов, заключенными
в двойные кавычки.
Если при запуске откомпилированного приложения PicBasic
надо изменить заданные по умолчанию постоянные в PIC-микро-
контроллере, используется оператор define:
DEFINE Label NewValue
В табл. 15.14 представлены служебные идентификаторы, их зна-
чения по умолчанию, а также возможные значения.
Константа OSC должна быть определена в том случае, если в PIC-
микроконтроллере применяется последовательный ввод/вывод.
Эта величина нужна компилятору для вычисления временных за-
держек.
В любой момент в программе приложения PicBasic можно ис-
пользовать фрагменты на ассемблере. Отдельные команды вставля-
ются с помощью символа @ в начале строки:
@bcf INTCON,TOIF ; Сброс флага TOIF.
Если вставляется несколько строк, написанных на ассемблере, то
им должен предшествовать оператор asm, а заканчивать такой фраг-
мент должен оператор endasm:
asm
movlw 8 ; Цикл = 8.
Loop
bsf PORTA, 0 ; Формирование импульса.
bef PORTA, 0
addlw $OFF ; Вычитание 1 из значения регистра w.
btfss STATUS, 1 ; Выполнение 8 раз.
goto Loop
endasm
Таблица 15.14
Значения служебных идентификаторов
Идентификатор Значение no умолчанию Возможные значения Комментарии
BUTTON.PAUSE 10 Любое положительное целое Задержка на «дребезг» кнопки, в мс
CHAR.PACING 1000 Любое положительное целое Промежуток времени между выдаваемыми символами
DEBUG.BAUD 2400 Любое Установленная скорость передачи данных при отладке
DEBUG.BIT 0 О-7 Вывод для последовательного выхода при отладке
DEBUG_MODE 1 0,1 Логическая полярность выходных данных: 0 - положительная, 1 - отрицательная
DEBUG_PACING 1000 Любое положительное целое Промежуток времени между выводом символов DEBUG-операторов
DEBUG_REG PORTB Любой порт Порт выхода
DEBUGIN_BIT 0 0-7 Вывод для последовательного входа, соединенного с последовательным выходом данных
DEBUGIN-MODE 1 0,1 Логическая полярность выходных данных. 0 - положительная, 1 - отрицательная
DEBUG_REG PORTB Любой порт Порт входа
HSER.BAUD 2400 Любое Скорость передачи данных по последовательному порту
HSER.SPBRG 25 O-OxOFF Значение регистра SPRBG последовательного порта
HSER-RCSTA 0x090 O-OxOFF Значение инициализации регистра RCSTA модуля последовательного порта По умолчанию устанавливается асинхронный режим обмена
HSER.TXSTA 0x020 O-OxOFF Значение инициализации регистра TXSTA последовательного порта. По умолчанию устанавливается асинхронный режим обмена
HSER.EVEN 1 0,1 Бит выбора режима контроля четности последовательного порта Используется только в случае необходимости контроля
PICBASIC
Таблица 15.14
Значения служебных идентификаторов (окончание)
Идентификатор Значение по умолчанию Возможные значения Комментарии
HSER.0DD 1 0,1 Бит выбора режима контроля четности последовательного порта. Используется только в случае необходимости контроля
I2C_H0LD 1 0,1 Остановка передачи по шине 12С, пока на линии SCL низкий уровень
I2C.INTERNAL 1 0,1 Бит устанавливается при использовании внутреннего EEPROM микроконтроллера PIC 12СЕххх
I2C.SCL0UT 1 0,1 Бит задает использование биполярного драйвера вместо драйвера тактовых импульсов с открытым стоком шины 12С
I2C_SL0W 1 0,1 Задание низкой скорости передачи данных по шине 12С (не более 100 Кб/с)
LCD.BITS 4 4,8 Разрядность интерфейса ЖКД
LCD.DBIT 0 0,4 Линия данных для ЖКД
LCD.DREG PORTA Любой порт Выбор порта данных ЖКД
LCD.EBIT 3 0-7 Линия для передачи тактового сигнала ЖКД
LCD.EREG PORTB Любой порт Порт для тактового сигнала Е ЖКД
LCD.LINES 2 1,2 Определение числа строк на экране ЖКД (проверьте спецификацию ЖКД)
LCD-RSBITS 4 Любой порт Выбор линии для сигнала RS ЖКД
LCD_RSREG PORTA Любой порт Регистр для бита сигнала RS ЖКД
OSO 4 3,4,8,10,12,16,20 Указание рабочей частоты PIC-микроконтроллера, в мегагерцах. 3 соответствует 3,58 МГц
0SCCAL.1K 1 0,1 Установка OSCCAL для PIC 12С672
0SCCAL_2K 1 0,1 Установка OSCCAL для PIC 12С672
SER2_BITS 8 4-8 Задание числа битов в посылках для команд SERIN2 и SE0UT2
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
PICBASIC
Обратите внимание, что метки в операторах ассемблера не име-
ют двоеточия и применяется обычный для ассемблера индикатор
комментария - точка с запятой (;).
Обработка прерываний в PicBasic осуществляется двумя способа-
ми. Наиболее простой способ заключается в использовании опера-
тора ON INTERRUPT GOTO Label. В этом случае каждый раз при получении
запроса на прерывание реализуется переход к метке Label, указан-
ной в операторе ON INTERRUPT GOTO, и выполняется соответствующая
программа до оператора resume, который выводит микроконтрол-
лер из прерывания. Здесь можно обойтись без команд ассемблера.
Основная операция выглядит следующим образом:
ON INTERRUPT GOTO IntHandler
IntHandler:
disable
enable
resume
Запрещение прерываний.
Обработка прерывания.
Разрешение других прерываний.
Возврат к исходному коду.
Однако при использовании этого метода возникает проблема:
программа обработки прерываний запускается, когда завершается
исполнение текущего оператора. Поэтому при выполнении очень
длинного оператора (например, при пересылке последовательного
кода) прерывание может не произойти в требуемый срок.
Оптимальным способом для обработки прерываний является при-
менение ассемблера. Ниже для обозначения упомянутого обработчи-
ка служит директива define I NTH AND Label, указывающая метку, по ко-
торой располагается код ассемблера. В случае микроконтроллеров
среднего подсемейства вектор обработки прерываний находится по
адресу 0x004.
Шаблон программ обработки прерываний для PIC-микрокон-
троллеров среднего подсемейства выглядит следующим образом:
int.w var byte 0x020 system
int.fsr var byte 0x021 system
int_pclath var byte 0x022 system
Variables
int_status var byte bankO system
int_fsr var byte bankO system
int.pclath var byte bankO system
define INTHANDLER IntHandler
Определение регистров
’ сохранения контекста.
Спецификация прерывания.
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
’ Программа обработки прерываний с вектором по адресу 0x00004.
asm IntHandler movwf int_w ; Сохранение контекстных регистров
movf STATUS, w
bcf STATUS, RPO ; Банк 0.
bcf STATUS, RP1
movwf int_status
movf FSR, w
movwf int_fsr
movf PCLATH, w
movwf int_pclath
clrf PCLATH
; ### - В этом месте располагается подпрограмма обработки
; прерываний.
movf Int.pclath, w ; Прерывание закончено,
; восстанавливается содержимое
movwf PCLATH ; регистров контекста.
movf int_fsr, w
movwf FSR
movf intstatus, w
movwf STATUS
swapf int_w, f
swapf int_w, w
retfie
endasm
Обратите внимание, что в шаблоне показано сохранение содер-
жимого регистров контекста в максимальном составе.
Математические операторы, используемые в операторах присваи-
вания и командах PicBasic, очень просты и работают совершенно
стандартным образом. Необходимо напомнить, что в Basic Stamp
PBASIC операции выполняются слева направо; например, оператор
А = В + С х D,
как и ожидается, должен выполняться в следующем порядке:
1. Умножить С на D.
2. Прибавить полученный результат к В.
В случае Parallax PBASIC значение А получается следующим образом:
1. Сложить В и С.
2. Умножить полученный результат на D.
PicBasic следует обычным правилам вычисления, поэтому отпада-
ет необходимость разбивать упомянутые сложные операторы на
PICBASIC
одиночные операции, как это происходит в PBASIC. При «перево-
де» приложения PicBasic в Basic Stamp нужно разделить сложные
операторы и использовать временные величины.
В табл. 15.15 представлены математические операторы, приори-
тет их выполнения и параметры. Все математические операторы
работают с 16-разрядными величинами.
Таблица 15.15
Математические операторы
Приоритет Операторы Описание
Низший Parml + Parm2 'Возвращает сумму Parml и Parm2
Parml - Parm2 Возвращает результат вычитания Parm2 из Parml
Parml * Parm2 Возвращает младшие 16 бит произведения Parml и Parm2. Часто они обозначаются байтами 0 и 1 результата
Parml */ Parm2 Возвращает средние 16 бит произведения Parml и Parm2 Часто они обозначаются байтами 1 и 2 результата
Parml ** Parm2 Возвращает старшие 16 бит произведения Parml и Parm2. Часто они обозначаются байтами 2 и 3 результата
Parml / Parm2 Возвращает частное отделения Parm2 на Parml
Parml // Parm2 Возвращает остаток отделения Parm2 на Parml. Эта операция известна под названием «деление по модулю»
Parml & Parm2 Возвращает результат логического И Parml и Parm2
Parml | Parm2 Возвращает результат логического ИЛИ Parml и Parm2
Parml " Parm2 Возвращает результат операции Исключающее ИЛИ Parml и Parm2
-Parml Возвращает инвертированное значение Parml
Parml &/ Parm2 Возвращает результат логического И-НЕ Parml и Parm2
Parml 1/ Parm2 Возвращает результат логического ИЛИ-НЕ Parml и Parm2
Parml "/ Parm2 Возвращает результат операции Исключающее ИЛИ-НЕ Parml и Parm2
Parml « Parm2 Сдвигает Parml влево на Parm2 бит. Все младшие биты будут равны 0
Parml » Parm2 Сдвигает Parml вправо на Parm2 бит. Все старшие биты будут равны 0
ABS Parml Возвращает модуль числа (ABS - 4 равно ABS 4, и возвращается 4)
Parml MAX Parm2 Возвращает наибольшее значение из двух
Parml MIN Parm2 Возвращает наименьшее значение
Parml DIG Parm2 Возвращает цифру с номером Parm2 (отсчет от 0) из Parml (123 DIG 1 возвращает 2)
DCD Parml Возвращает байт, в котором только бит Parml равен 1 (DCD 4 возвращает %00010000)
NOD Parml Возвращает номер старшего бита Parml, установленного в 1
Parml REV Parm2 Инвертирует биты в Parml начиная с нулевого до Parm2 (%10101100 REV 4 возвращает %10100011)
SQR Parml Возвращает целый квадратный корень из Parml
SIN Parml Возвращает синус от Parml. Выданная величина будет основана на окружности радиусом 127° и 256° (а не на обычных 360°)
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.15
Математические операторы (окончание)
Приоритет Операторы Описание
Высший COS Parml Возвращает косинус от Parml Выданная величина будет основана на окружности радиусом 127° и 256° (а не на обычных 360°)
Помимо математических операторов существует условный
оператор if, обеспечивающий проверку разнообразных условий
(табл. 15.16). Для записиусловий применяется такая же форма, как
в языках Basic и С. Parml и Parm2 представляют собой константы, пе-
ременные или выражения, составленные из других операторов
и выражений.
Таблица 15.16
Условия, проверяемые с помощью оператора if
Проверка условия Описание
Parml = Parm2 Возвращает! (True), если Parml равно Parm2
Parml == Parm2 Возвращает 1, если Parml равен Parm2
Parml <> Parm2 Возвращает 1, если Parml не равен Parm2
Parml1= Parm2 Возвращает 1, если Parml не равен Parm2
Parml < Parm2 Возвращает 1, если Parml меньше Parm2
Parml <= Parm2 Возвращает 1, если Parml меньше или равен Parm2
Parml > Parm2 Возвращает 1, если Parml больше Parm2
Parml >= Parm2 Возвращает 1, если Parml больше или равно Parm2
Parml AND Parm2 Возвращает 1, если Parml не равен 0 и Parm2 не равен 0
Parml && Parm2 Возвращает 1, если Parml не равен 0 и Parm2 не равен 0
Parml OR Parm2 Возвращает 1, если Parml не равен 0 или Parm2 не равен 0
Parml || Parm2 Возвращает 1, если Parml не равен 0 или Parm2 не равен 0
Parml XOR Parm2 Возвращает 1, если Parml и Parm2 имеют разные логические значения
Parml ~~ Parm2 Возвращает 1, если Parml и Parm2 имеют разные логические значения
Parml NOT AND Parm2 Возвращает 0 (False), если Parml не равен 0 и Parm2 не равен 0
Parml NOT OR Parm2 Возвращает 0, если Parml не равен 0 или Parm2 не равен 0
Parml NOT XOR Parm2 Возвращает 1, если Parml и Parm2 имеют одинаковые логические значения
Когда логическое выражение истинно, возвращается ненулевой
результат; если оно ложно, то выдается 0.
Команды PicBasic основаны на языке Parallax Basic Stamp (PBASIC),
и хотя между ними много общего, речь тем не менее идет о двух
совершенно разных языках. В табл. 15.17 перечислены инструкции
PicBasic, а также приведена информация, необходимая для их
применения при создании приложений с PIC-микроконтролле-
рами.
Таблица 15.17
Инструкции PicBasic
Инструкции (операторы. функции) Описание
BRANCH Index, [Label (, Label }] Переход к метке Label, указанной значением индекса Index. В последнем отсчет ведется с 0, поэтому если индекс равен 0, то произойдет переход к первой метке, а если 1 - ко второй и т.д Эта команда выполняет переходы только в пределах текущей страницы При использовании PIC-микроконтроллера, память программы которого занимает больше одной страницы, рекомендуется использовать команду BRANCHL
BRANCHL Index, [Label {, Label }] Переход к метке Label, указанной значением индекса Index. В последнем отсчет ведется с 0, поэтому если индекс равен 0, то произойдет переход к первой метке, а если 1 - ко второй и т д. Эта команда может переходить в любое место памяти программ PIC-микроконтроллера
Button Pin, Action .[Label, Delay, Rate, Bvar] Переход к метке Label, когда кнопка была нажата в течение заданного числа миллисекунд. Rate показывает, сколько опросов после нажатия кнопки Button должно произойти, чтобы был выполнен автоповтор. Bvar является байтовой переменной, используемой только в этой функции. Action говорит о том, что переход должен произойти, когда клавиша нажата (1) или отпущена (0)
CALL Label Выполнение команды ассемблера «вызов» (Call)
CLEAR Обнуление всех переменных
COUNT Pin, Period, Variable Подсчет числа импульсов на Pin, происшедших за Period, выраженный в мс
DATA ©Location, Constant {, Constant.} Сохранение константы в памяти EEPRPOM данных, начиная с Location, при программировании PIC-микроконтроллера Для данных, расположенных по разным адресам, применяется несколько операторов DATA
DEBUG Value {, Value. } Определение вывода DEBUG как последовательного выхода с параметрами, используемыми в DEBUG-определениях. При выполнении этой команды передаются данные параметров Если перед величиной Value пересылается символ # (0x023), значит, отправляется десятичная цифра, а не ASCII-байт. Такая команда (и DEBUGIN) может использоваться для последовательного ввода/вывода, поскольку она занимает меньше места, чем команды SERIN и SEROUT
DEBUGIN {TimeOut, Label, } [Variable {, Variable...}] Определение вывода DEBUGIN как последовательного входа с параметрами, используемыми в DEBUGIN-определениях. При выполнении этой команды следует дождаться появления байта данных или перейти к указанной метке, если превышено время ожидания TimeOut
DISABLE Запрещение операций прерывания и отладки. Прерывания, определяемые операцией ON INTERRUPT GOTO, исполняться не будут
PICBASIC
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
DISABLE INTERRUPT Запрещение заций прерывания и отладки Прерывания, определяемые операцией ON ™”.RRUPT GO 10, исполняться не будут
DTMFOUT Pin, {On, O-ff, } [Tone {, Tone }] Выдача последовательности сигналов тонального набора на указанный вывод Тона с 0 по 9 соответствуют клавишам набора телефонной клавиатуры. Тон 10 соответствует кнопке *, а тон 11 - # Тона с 12 по 15 сопоставлены с клавишами расширенной клавиатуры с А до D. Для сглаживания выдаваемого сигнала необходим выходной фильтр
EEPROM Location, [Constant {[, Constant }] Запись данных в EEPROM при программировании PIC-микроконтроллера Эта команда аналогична команде DATA
ENABLE Разрешение операций прерывания и отладки, запрещенных DISABLE
ENABLE DEBUG Разрешение операций отладки, запрещенных DISABLE
ENABLE INTERRUPT Разрешение операций прерывания и отладки, запрещенных командами DISABLE и DISABLE INTERRUPT
END Останов работы приложения и переход PIC-микроконтроллера в ждущий (sleep) режим с низким потреблением энергии
FOR Variable = Start TO Stop {Step Value} NEXT {Variable} Выполнение цикла, при котором переменная Variable сначала получает значение Start. Это значение модифицируется с шагом STEP до тех пор, пока не будет достигнуто значение Stop Если значение шага не указано, то величина приращения по умолчанию берется равной 1
FREQOUT Pin, On, Frequency {, Frequency} Выдача указанной частоты Frequency на вывод Pin в течение On (в мс). Если указана и вторая частота, то она также выдается в течение заданного времени. Для сглаживания выходного сигнала требуется фильтрация
GOSUB Label Вызов подпрограммы, которая начинается по адресу Label. Существование последнего проверяется во время компиляции
GOTO Label Переход к коду, который начинается по адресу Label
HIGH Pin Перевод Pin в режим выхода и установка высокого уровеня сигнала
HSERIN {ParityLabel, } {TimeOut, Label, } [Variable {[, Variable }] Получение одного или нескольких байтов от встроенного USART (если он имеется) Если в данных ошибка по четности, то происходит переход к ParityLabel. Перед переходом следует убедиться в том, что были определены режимы контроля по четности HSER.EVEN или нечетности HSER_ODD
HSEROUT [Value {, Value }] Передача одного или нескольких байтов со встроенного USART (если он имеется) !
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
I2CREAD DataPin, ClockPin, Controlbyte, {Address, } [Variable {, Variable }] {, NoAckLabel} Считывание последовательности байтов из устройства шины I2C. ControlByte используется для получения доступа посредством битов выбора блока или устройства. Эта команда применяется для доступа к внутреннему EEPROM микроконтроллера PIC 12СЕххх путем ввода оператора define I2C_INTERNAL 1 в начало кода приложения
I2CWRITE DataPin, ClockPin, Controlbyte, {Address, } [Variable {, Variable. }] {, NoAckLabel} Посылка последовательности байтов к устройству шины I2C. ControlByte используется для получения доступа посредством битов выбора блока или устройства. Эта команда применяется для доступа к внутреннему EEPROM микроконтроллера PIC 12Сеххх путем ввода оператора define I2C_INTERNAL 1 в начало кода приложения
IF Comp THEN Label Label Вычисление выражения Comp; если оно не равно 0, то осуществляется переход к Label
IF Comp THEN Statement {ELSE Statement • } ENDIF Вычисление выражения Comp; если оно не равно 0, то выполняются операторы, указанные ниже, до операторов ELSE или ENDIF. При этом код, стоящий между ELSE и ENDIF, игнорируется. Если Comp равен 0, то выполняются операторы альтернативной ветви, стоящие между операторами ELSE или ENDIF
INCLUDE “file” Загрузка файла f ile.bas из текущей директории и размещение его по текущему адресу в исходном коде
INPUT Pin Задание режима входа (Input Mode) для указанного вывода
{LET} Assignment Дополнительная форма оператора присваивания
LCDOUT Value{, Value } Отправка указанных байтов к ЖК дисплею, подключенному к PIC-микроконтроллеру. Рабочие параметры дисплея устанавливаются в соответствии с его определениями (характеристиками). Перед передачей байта команды на ЖК дисплей передается байт $OFE
LOOKDOWN offset, [Constant {Constant }], Variable Присвоение переменной Variable значения из списка констант, по смещению Offset. Если offset больше, чем числа констант, то Variable присваивается значение 0 Отсчет величины Offset начинается с 0; если оно равно 0, то считывается первая константа
PICBASIC
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
L00KD0WN2 offset, {Test} [Constant {, Constant }], Variable Поиск в списке и нахождение константы, отвечающей условию Test. Если Test пропускается, то команда L00KD0WN2 аналогична команде LOOKDOWN
LOOKUP Variable, [Constant {, Constant.}], Variable Поиск в списке констант и возврат найденного смещения во второй переменной Variable. Если совпадения отсутствуют, то вторая Variable остается без изменения
L00KUP2 Variable, [Valuet {. Value }], Variable Поиск в списке значений и возврат найденного смещения во второй переменной Variable. Если совпадения отсутствуют, то вторая Variable остается без изменения L00KUP2 отличается от LOOKUP тем, что значения Value могут представлять собой 16-битные переменные величины
LOW Pin Перевод вывода Pin в режим выхода и установка на нем низкого уровня напряжения
NAP Period Перевод PIC-микроконтроллера в спящий режим на период времени, указанный ниже
Период Время задержки, мс
0 18
1 36
2 73
3 144
4 288
5 576
6 1152
7 2304
ON DEBUG GOTO Label Переход к метке Label управляющей программы отладки. Две переменные, слово DEBUG_ADDRESS и байт DEBUG_STACK должны определяться как байты банка 0 памяти. Для выхода из программы отладки применяется команда RESUME
ON INTERRUPT GOTO Label Переход к программе обработки прерываний по метке Label. Когда обработка прерываний завершена, выполняется команда возврата RESUME
OUTPUT Pin Установка вывода Pin в режим выхода
PAUSE Period Задержка выполнения следующей команды на заданное время (Period), выраженное в мс. Микроконтроллер при этом не вводится в спящий режим, как при NAP
PAUSEUS Period Задержка выполнения следующей команды на заданное время (Period), выраженное в мс
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
PEEK Address, Variable Присвоение переменной Variable значения регистра Address
POKE Address, Value Запись в регистр Address значения Value
POT Pin, Scale Variable Считывание показаний движка потенциометра, подключенного к конденсатору Параметр Scale является масштабирующей величиной, которая изменяет выданное значение до тех пор, пока оно не окажется в диапазоне от 0 до OxOFF (255)
PULSIN Pin, State, Variable Измерение ширины импульса, поступающего на Pin. State указывает тестируемое состояние импульса При использовании PIC-микроконтроллера, работающего на частоте 4 МГц, дискретность измерения временных интервалов составляет 10 мкс
PULSOUT Pin, Period Выдача на вывод Pin импульса длительностью Period. Если микроконтроллер работает на частоте 4 МГц, то длительность задается с дискретностью 10 мкс
PWM Pin, Duty, Cycle Выдача на Pin ШИМ сигнала При тактировании микроконтроллера частотой 4 МГц каждый цикл длится 5 мс. Ширина импульса (Duty) определяется набором (от 0 до 255) фрагментов цикла Параметр Cycle определяет число выводимых циклов
RANDOM Variable Загрузка в Variable псевдослучайного значения
RCTIME Pin, State, Variable Измерение постоянной времени RC-цепочки. При тактировании микроконтроллера частотой 4 МГц дискретность измерения равна 10 мкс
READ Address, Variable Считывание байта из внутреннего ЗУ EEPROM данных по заданному адресу Address и присвоение его значения переменной Variable. Эта команда не работает со встроенным EEPROM моделей Р1СС12Еххх
RESUME {Label} Восстановление выполнения основной программы после исполнения программы отладки или обработки прерываний Если метка Label указана, то управление будет передано команде, следующей после Label
RETURN Возврат из подпрограммы
REVERSE Pm Инвертирование назначения указанного вывода Pin. Например, если он находился в режиме выхода, то будет режим входа
SERIN Pin, Mode, {Timeout, Label,} {Qual, . } [Variable {.Variable }] Получение на выводе Pin в режиме асинхронного последовательного приема одного или нескольких байтов данных Pin может быть задан временно. Байты Dual представляют собой контрольные квалификаторы данных, идентифицирующие первый байт поступающей последовательности. Только в этом случае последующие байты обрабатываются. Величина Timeout выражается в мс. Выполнение переходит к метке Label, когда длительность паузы при приеме превышает Timeout. Строка (переменная) Mode определяет режим работы интерфейса
PICBASIC
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
SERIN Pin, Mode, {Timeout, Label,} {dual, } [Variable {.Variable }] Режим Скорость передачи в бодах Логическая полярность
T300 300 Положительная
T1200 1200 Положительная
T2400 2400 Положительная
T9600 9600 Положительная
N300 300 Отрицательная
N1200 1200 Отрицательная
N2400 2400 Отрицательная
N9600 9600 Отрицательная
SERIN2 Pin {\FlowPin}, Mode, {ParityLabel,} {Timeout, Label,} [Specification] Получение на выводе Pin в режиме асинхронного последовательного приема одного или нескольких байтов данных. FlowPin используется для предотвращения перегрузки. Если задан режим контроля по четности, то каждый раз при приеме недействительного байта выполнение переходит к ParityLabel. Время Timeout задается с дискретностью в 1 мс, отсутствие поступления данных в указанный период вызывает переход к Label Режим Mode определяется 16-битной переменной
Бит Назначение
15 He используется
14 Устанавливается, если входные данные в отрицательной логике
13 Устанавливается, если задается контроль на четность
12-0 Спецификация скорости передачи данных, вычисляемой по формуле. Rate = (1, 000, ООО/Baud) - 20
Specification представляет собой последовательность квалификаторов-модификаторов данных и переменных назначения, используемых для фильтрации и обработки поступающих данных. Квалификаторы-модификаторы представлены ниже
Модификатор Операция
Bin{1 16} Var Прием до 16 двоичных чисел и сохранение их в Var
DEC{1 5} Var Прием до 5 десятичных чисел и сохранение их в Var
НЕХ{1 4} Var Прием до 4 шестнадцатеричных чисел и сохранение их в Var
SKIP# Пропуск # полученных символов
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
SERIN2 Pin {\FlowPm}, Mode, {PantyLabel,} {Timeout, Label,} [Specification] Модификатор Операция
STR Array\n\c Прием строки из п символов и сохранение их в Array. Факультативно может заканчиваться символом С
WAIT (“String”) Ожидание заданной последовательности String символов
WAITSTR Array\n Ожидание строки длиной в п символов
SEROUT Pin, Mode, [Value{Value }] Передача одного или н через вывод Pin После определения режима с 1ескольких байтов данных в последовательном асинхронном режиме дний может задаваться временно. Поле Mode используется для функционирования интерфейса и выходного драйвера
Режим Скорость передачи (в бодах) Логическая полярность Драйвер
ТЗОО 300 Положительная КМОП
Т1200 1200 Положительная КМОП
Т2400 2400 Положительная КМОП
Т9600 9600 Положительная КМОП
N300 300 Отрицательная КМОП
N1200 1200 Отрицательная КМОП
N2400 2400 Отрицательная КМОП
N9600 9600 Отрицательная КМОП
ОТЗОО 300 Положительная Открытый сток
ОТ1200 1200 Положительная Открытый сток
ОТ2400 2400 Положительная Открытый сток
ОТ9600 9600 Положительная Открытый сток
ON300 300 Отрицательная Открытый сток
ON1200 1200 Отрицательная Открытый сток
ON2400 2400 Отрицательная Открытый сток
ON9600 9600 Отрицательная Открытый сток
SER0UT2 Pin {\FlowPin}, Mode, {Pace,} {Timeout, Label,} [Specification] Передача через вывод Pin одного или нескольких байтов данных в> режиме последовательной асинхронной передачи Дополнительный вывод FlowPin используется для предотвращения перегрузки. Время допустимой паузы Timeout может быть указано с интервалами 1 мс, выход за этот период вызывает переход к Label. Дополнительный параметр Расе применяется для задания длительности паузы (измеряемой в мкс) в передаче последовательных символов. Выбор режима Mode производится с помощью 16-битной переменной
PICBASIC
Таблица 15.17
Инструкции PicBasic (продолжение)
Инструкции (операторы, функции) Описание
SER0UT2 Pin {\FlowPin}, Mode, {Расе,} {Timeout, Label,} [Specification] Бит Назначение
15 Спецификация драйвера' 0 - КМОП, 1 - открытый сток
14 1 - логическая полярность отрицательная
13 1 - контроль на четность
12-0 Спецификация скорости передачи данных, вычисляемой по формуле. Rate = (1, 000, ООО/Baud) - 20
Specification представляет собой последовательность квалификаторов-модификаторов данных и исходных величин, используемых для форматирования выдаваемых данных. Формат выдаваемых данных может быть специфицирован префиксом I (тип данных передается перед ними) или префиксом S (отрицательные числа отмечаются символом минуса (-))
SHIFTIN DataPin, ClockPin, Mode, [Variable{\Bits} {, Variable..}] Синхронное получение микроконтроллером данных в последовательном виде. Параметр Bits применяется для указания числа принимаемых битов (если этот параметр не задан, то по умолчанию число равно 8) Параметр Mode служит для определения способа (режима) пересылки
Режим Назначение
MSBPRE Старший бит - первый
LSBPRE Младший бит - первый, данные считываются перед тактовым импульсом
MSBPOST Старший бит - первый, данные считываются после тактового импульса
LSBPOST Младший бит - первый, данные считываются после тактового импульса
SHIFTOUT DataPin, ClockPin, Mode, [Variable{\Bits} {, Variable }] Синхронная выдача данных в последовательном коде из микроконтроллера. Параметр Bits используется для указания числа битов передаваемых слов (если этот параметр не задан, то по умолчанию число равно 8). Параметр Mode нужен для определения того, каким образом перемещаются данные
Режим Назначение
LSBFIRST Впереди младший бит
MSBFIRST Впереди старший бит
SLEEP Period Перевод PIC-микроконтроллера в спящий режим на Period секунд
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.17
Инструкции PicBasic (окончание)
Инструкции (операторы, функции) Описание
SOUND Pin, [Note, Duration {, Note, Duration.}] Вывод на Pin последовательности звуковых тонов с заданными длительностями (которые могут использоваться для формирования мелодии). Значению 0 тона соответствует тишина, а значениям 128-255 - белый шум Тон 1 (78,5 Гц при частоте 4 МГц микроконтроллера) является самой низкой нотой, а 127 - самой высокой (10 кГц при частоте 4 МГц микроконтроллера) Длительность указывается с дискретностью 12 мс
STOP Установка PIC-микроконтроллера в режим бесконечного цикла, но не в sleep-режим
SWAP Variable, Variable Изменение значений двух переменных Variable
TOGGLE Pin Переключение выходного значения указанного вывода
WHILE Cond WEND Задание цикла Выполняется код между операторами WHILE и WEND, пока условие Cond не равно 0 Цикл заканчивается, когда Cond станет равно 0
WRITE Address, Value Запись байта Value во встроенную EEPROM данных. Эта команда не работает со встроенной EEPROM микроконтроллера PIC 12СЕххх
XIN DataPin, ZeroPin, {Timeout, Label,} [Variable {, Variable. }] Прием данных от Х-10 устройств. ZeroPin используется для обнаружения прохождения через 0 входного переменноточного сигнала. И линия DataPin, и ZeroPin «подтягиваются» резисторами номиналом 4,7 кОм. Дополнительно можно задать максимальный интервал паузы Timeout (с дискретностью 8,33 мс). Превышение времени паузы приводит к тому, что выполнение передается Label. Если приемник первой переменной является 16-битным, то сохраняются и House Code, и Key Code. Если размер первой переменной составляет восемь бит, то сохраняется только Key Code
XOUT DataPin. ZeroPin, [HouseCode\KeyCode {\Repeat}{, Value.}] Отсылка данных к другим устройствам Х-10. ZeroPin является вводом и должен быть «подтянут» резистором номиналом 4,7 кОм HouseCode представляет собой число от 0 до 15, соответствующее House Code набору на модулях Х-10 от А до Р. Key Code может быть либо номером Х-10 приемника, либо функцией, подлежащей выполнению модулем
PICBASIC
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Такие инструкции в действительности представляют собой «биб-
лиотечные подпрограммы», вызываемые из основной программы.
Об этом стоило упомянуть, поскольку размер приложения заметно
изменяется в зависимости от числа используемых команд. Можно
значительно сократить занимаемый объем памяти программы,
если заменить некоторые инструкции фрагментами на ассемблере
или явными операторами PicBasic.
В нескольких командах квадратные скобки ([ и ]) служат для обо-
значения таблиц данных. Поэтому дополнительные (факультатив-
ные) величины заключаются в фигурные скобки ({ и }), что расхо-
дится с правилами, принятыми в остальной части книги.
VISUAL BASIC
Возможно, программирование на Visual Basic, предложенном корпо-
рацией Microsoft, является наиболее коротким путем получения
приложений для Windows. Простота использования языка и систе-
мы разработки превращают его в мощный инструмент для быстро-
го написания приложений, в том числе экспериментальных.
Прежде всего создается первичное диалоговое окно (известное
под названием формы (form) и показанное на рис. 15.8) и определя-
ются соответствующие ему свойства и объекты (окна ввода/вывода,
кнопки и т. д.). В Visual Basic последние именуются управляющими
элементами. После того как окно задано, посредством простого щел-
канья по различным управляющим кнопкам автоматически созда-
ются прототипы подпрограмм, позволяющих обслуживать собы-
тия (например, щелчок мышью по какому-либо объекту). Редактор
исходного кода Visual Basic дает возможность задавать управляющие
параметры - свойства (Properties).
Приложения в Visual Basic создаются на рабочем столе Dialog Box
Editor. Сначала Visual Basic отображает исходное диалоговое окно,
представленное на рис. 15.9. После этого из панели инструментов
выбираются «диалоговые ресурсы», которые затем размещаются
в окне.
Управляющие атрибуты (свойства) могут устанавливаться из ин-
тегрированной среды разработки или из обработчиков событий.
Код последних пишется на всем известном стандартном языке
Microsoft Basic. Когда Visual Basic завершит создание прототипов
обработчиков событий, останется лишь добавить соответствую-
щий функциям приложения код.
VISUAL BASIC
a
Рис. 15.8
Система разработки Visual Basic
Visual Basic предлагает большое число встроенных функций,
включая тригонометрические и логарифмические, а также возмож-
ность взаимодействия с файловой системой.
Целые числа в Visual Basic могут быть 16-разрядными числами от
-32768 до +32768 и 32-разрядными. 32-битные целые переменные за-
даются путем добавления знака % в конце идентификатора перемен-
ной. Важно отметить, что переменные либо являются локальными
переменными программ обработки событий, в которых они исполь-
зуются, либо объявляются как глобальные переменные в «общем мо-
дуле», который выполняется в начале приложения.
В Visual Basic существует ряд собственных базовых управляющих
элементов. Другие можно найти в Internet, тем самым расширив
функции и сделав приложения Visual Basic более эффективными.
Перечень управляющих элементов приведен в табл. 15.18.
Существует также ряд управляющих элементов, которые нельзя
вызвать щелчком левой кнопкой мыши и увидеть в форме прило-
жения. Из них наиболее часто используется таймер (Timer). Этот
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Панель
управления
I
Окно управления Окно
свойствами отображения файла
I I
I I
Панель Рабочий стол с окнами
инструментов файлов и диалоговыми окнами
I
Окно размещения
формы
Рис. 15.9
Рабочий стол Visual Basic
управляющий элемент обеспечивает появление события по истече-
нии заданного периода времени, выраженного в микросекундах. Та-
кой элемент может устанавливаться из диалогового редактора или
модифицироваться внутри собственно приложения. Timer предо-
ставляет в распоряжение пользователя несколько эффективных функ-
ций, которым не требуются интерфейсы прерываний.
УПРАВЛЕНИЕ ВВОДОМ/ВЫВОДОМ С ПОМОЩЬЮ MSCOMM
Рекомендуемая последовательность инициализации MSComm такова:
1. Указать используемый последовательный порт.
2. Задать скорость передачи и формат данных.
УПРАВЛЕНИЕ ВВОДОМ/ВЫВОДОМ
Таблица 15.18
Управляющие элементы Visual Basic
Управляющий элемент Описание
Pull Down Работа с меню пиктограмм редактора на панели инструментов
PictureBox Отображение Bitmaps и других графических файлов в диалоговом окне
Label Размещение текста в диалоговом окне
TextBox Окно ввода/вывода текста
Frame Создание рамки вокруг ресурсов
CommandButton Кнопка для выполнения операций
CheckBox Проставление галочек по отобранным вариантам
OptionButton Радиокнопка, используется для отметки одной из нескольких предложенных опций
ComboBox Выбор или ввод текста в окно или список
ListBox Список данных (с управляемым скроллингом)
HScrollBar Горизонтальная прокрутка в окне вывода текста или графики
VscrollBar Вертикальная прокрутка в окне вывода текста и графики
Timer Вызов периодических прерываний
DnveListBox Выбор диска для ввода/вывода файла
DirLstBox Выбор поддиректории на указанном диске для ввода/вывода файла
FileListBox Отображение файлов из заданной поддиректории на заданном диске
Shape Размещение графического рисунка в диалоговом окне
Line Рисование линии в диалоговом окне
Image Отображение графического файла в диалоговом окне
OLE Ввод объектов OLE в диалоговое окно
3. Определить размер буфера.
4. Открыть порт и начать обмен.
Команды, применяемые для выполнения указанных функций,
размещаются в подпрограмме Form_Load, что означает разрешение
порта до начала использования диалогового окна. Ниже представ-
лен код, который служит примером инициализации элемента
MSComm:
Private Sub Form_Load()
' Инициализация порта Port 3
' для YAP-npoграмматора.
MSComm3.CommPort = 3
MSComm3.Settings = "1200,N,8,1”
MSComm3.InputLen = 0
MSComm3.PortOpen = True
Textl.Text = "Запустить YAP-программатор"
End Sub
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Для непрерывного просмотра последовательного порта и отоб-
ражения полученных данных в текстовом окне удобен таймер 50 мс:
Private Sub Timerl_Timer()
’ Прерывание каждые 50 мс и считывание данных порта в буфер
Buffer Dim Inputstring.
Inputstring = MSComm3.Input
If (Inputstring <> Then
If (Textl.Text = ” Запустить YAP-программатор ”)
Then Textl.Text = ....Очистка буфера отображения.
End If
Textl.Text = Textl.Text + Inputstring
End If
End Sub
В табл. 15.19 приведены функции управления MSComm.
Таблица 15.19
Функции управления MSComm
Свойство Значения Описание
Break True/False Если свойство установлено в Тrue, то отправляется сигнал прерывания 0 до тех пор, пока свойство не изменится на False
CDHolding True/False Свойство только для считывания Указывает на активность линии Carrier Detect (Обнаружена несущая). Эту линию важно опрашивать в приложениях, использующих модем
CommEvent Целое Свойство только для чтения, доступное исключительно во время работы приложения. Если приложение функционирует без проблем, то выдается 0 Это свойство считывается кодом обработчика событий OnComm с целью проведения анализа причины, вызвавшей появление события
CommID Объект Свойство только для чтения, выдает идентификатор последовательного порта, назначенного для MSComm
CommPort Целое Указывает последовательный порт СОМх (1-3), используемый MSComm
CTSHolding True/False Свойство только для чтения, выдает текущее состояние линии CTS последовательного порта (Clear То Send - Сбросить для передачи)
DSRHolding True/False Свойство только для чтения, выдает текущее состояние линии DSR последовательного порта (Data Set Ready - Готовность данных)
DTREnable True/False Свойство только для чтения, выдает текущее состояние линии DTR последовательного порта (Data T&rminal Ready - Готовность терминала)
УПРАВЛЕНИЕ ВВОДОМ/ВЫВОДОМ
Таблица 15.19
Функции управления MSComm (продолжение)
Свойство Значения Описание
EOFEnable True/False Указывает, будет ли генерироваться событие OnComm при появлении символа конца файла (OxOIA)
Handshakng 0,1, 2 или 3 Устанавливает протокол текущего подтверждения связи для последовательного порта (логика подтверждений)
0 Без подтверждения (по умолчанию)
1 Подтверждение XON/XOFF'
2 Подтверждение RTS/CTS (аппаратное)
3 Подтверждение XON/XOFF и RTS/CTS
InBufferCount Целое Свойство только для чтения, показывает, сколько знаков было принято через последовательный порт
InBufferSize Целое Свойство, используемое для указания числа байтов, выделенных для буфера входных данных По умолчанию это число составляет 1024 байт
Input Строка Возвращает строку знаков из входного буфера
InputMode Целое Указывает, каким образом должны приниматься данные, используемые свойством Input. 0 говорит о том, что данные будут приниматься в виде текста (по умолчанию), 1 - что данные будут передаваться без редактирования (имеется в виду двоичный формат)
InputLen Целое Задает максимальное число знаков, которые будут возвращаться при обращении к свойству Input. При установлении этого значения в 0 возвращается все содержимое буфера
NullDiscard True/False Указывает, будут ли перемещаться нулевые знаки из порта в буфер приемника
OutBufferCount Целое Свойство только для считывания, выдает число знаков, ждущих в выходном буфере
OutBuferSize Целое Задает размер выходного буфера. По умолчанию он составляет 512 байт
Output Целое Выдает строку знаков через последовательный порт
PantyReplace Целое Задает символ, который будет заменять символы, имеющие ошибку паритета По умолчанию это знак 9
PortOpen True/False Открывает порт. Указывает, может ли порт данных передавать или принимать данные. Обычно порт закрыт (False)
Rthreshhold Целое Указывает число принятых знаков до появления события OnComm. Значение 0, устанавливаемое по умолчанию, запрещает генерацию события Задание значения 1 приводит к появлению события OnComm при каждом приеме знака
RTSEnable True/False Задает значение на линии RTS (Request То Send - Запрос на передачу)
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.19
Функции управления MSComm (окончание)
Свойство Значения Описание
Settings Строка Отправляет строку на последовательный порт с целью задания его рабочих характеристик. Строка представлена в формате: «скорость, паритет, длина, столовый бит» при следующих допустимых значениях параметров: Скорость передачи данных: 110 300 600 1200 2400 9600 (по умолчанию) 14400 19200 28800 38400 56000 128000 256000
Settings Строка Паритет (тип проверки на наличие ошибки, отправляемый вместе с байтом). Е - четный паритет; М - бит паритета равен Mark (1); N - отсутствие паритета (по умолчанию), О - нечетный паритет; S - бит паритета равен Spase (0) Длина (число битов в слове): 4-4 бита, 5-5 бит; 6-6 бит; 7-7 бит; 8-8 бит (по умолчанию) Столовый бит (длительность стопового бита посылки). 1 - 1 такт (по умолчанию); 1,5 -1,5 такта; 2-2 такта
Sth reshold Целое Указывает число байтов, которые должны быть переданы до генерации события OnComm По умолчанию равно 0 (что означает отсутствие OnComm события при передаче) Установка этой величины в 1 приведет к появлению OnComm события после каждого переданного знака
Дальнейшее совершенствование MSComm привело к появлению под-
программы OnComm. Последняя похожа на прерывание, поскольку вы-
зывается после регистрации заданных событий в последовательном
язык с
порте. Свойство CommEvent содержит код причины события.
В табл. 15.20 представлен ряд таких кодов.
Таблица 15.20
Коды причины события
Идентификатор события CommEvent Код CommEvent Описание
comEvSend 1 Отправлено указанное число знаков
comEvReceive 2 Получено указанное число знаков
comEvCTS 3 Изменения в линии Clear То Send
comEvDSR 4 Изменения в линии Data Set Ready
comEvCD 5 Изменения в линии Carrier Detect
comEvRing 6 Обнаружен звонок
comEvEOF 7 Обнаружен знак конца файла
comEventBreak 1001 Получен сигнал разрыва
comEventFrame 1004 Ошибка кадрирования во входных данных
comEventOverrun 1006 Переполнение порта
comEventRxOver 1008 Переполнение приемного буфера
comEventRxPanty 1009 Ошибка паритета в полученных данных
comEventTxFull 1010 Буфер передачи полон
comEventDCB 1011 Неизвестная ошибка в блоке управления устройства
язык с
Программы приложений, использующих PIC-микроконтроллеры,
могут разрабатываться и на языке С.
Объявления
В языке С объявление констант выполняется следующим образом:
const int Label = Value;
const тип имя_константы = значение_константы;
Объявление переменной:
type Label [= Value];
тип имя_переменной [= начальное.значение];
где Value (начальное_значение) не обязательно присутствует и задает
значение переменной при инициализации, a type указывает тип
и может быть:
♦ char (символьный);
♦ int (целый);
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
♦ unsigned int (целый без знака);
♦ float (с плавающей точкой).
Разрядность целочисленных данных int обычно равна размеру
слова процессора или операционной системы. Для PC int может
быть словом (16 бит) или двойным словом (32 бита). Для PIC-микро-
контроллера int, как правило, составляет 8 бит (байт).
В реализации языка могут задаваться и другие базовые типы. Одно-
мерные массивы объявляются следующим образом:
Тип имя.массива [размер] [= {начальные значения...}];
Обратите внимание, что размер (Size) массива заключен в квад-
ратные скобки ([ и ]) и его не надо путать с необязательными пара-
метрами, например значением при инициализации.
Строки определяются в виде одномерных ASCIIZ-массивов
char String [11] = "Это строка”;
где последний знак - ASCII-ноль (NUL).
Строки также могут задаваться как указатели знаков:
char *String = "Это строка";
хотя при такой реализации текст 'Это строка" должен сохраняться
в двух местах (в программе и в области данных). В случае PIC-микро-
контроллеров и других процессоров с гарвардской архитектурой
текстовые данные могут записываться в пространство данных в то
время, когда приложение запускается как аргумент (то есть как
объект обработки) компилятора языка.
При определении многомерных массивов каждый размер указы-
вается отдельно в квадратных скобках:
int ThreeDSpace [32][32][32];
Размерность массива необходимо задавать всегда, если это не ука-
затель одномерного массива.
Указатели объявляются с помощью знака «звездочка» (*), стояще-
го после типа:
char *String = "Это строка";
Адрес (значение указателя) объекта в памяти может быть полу-
чен при помощи знака (операции) &:
StringAddr = &String;
язык с
Адрес определенного элемента в строке получается с помощью
знака (операции) & следующим образом:
Stringstart = &String [n];
Для ПК, работающих с MS DOS, рекомендуется, чтобы «длин-
ные» 32-разрядные указатели (far) внутри пространства памяти ПК
всегда использовались с абсолютными адресами в формате «сег-
мент: смещение», что позволит избежать проблем, связанных с из-
менением сегментов. Что касается PIC-микроконтроллеров, в этом
случае все адреса могут задаваться двумя байтами.
Тип переменной легко переопределить, если поставить перед
ней новый тип, заключенный в круглые скобки:
(long) StringAddr = 0x0123450000;
Операторы
Главная программа приложения имеет следующий вид:
main (envp)
char *envp;
{ // Начало программы приложения.
*: // Код приложения.
} // Конец программы приложения.
Формат функции выглядит так:
тип_функции имя_функции (спецификация формальных параметров)
тело функции
и записывается следующим образом:
Return_Type Function ( Type Parameter [, Type
Pa ramete r...])
{ // Начало функции.
и Код функции.
return value // Возвращаемое значение
} // Конец функции.
Прототип функции (описание функции) обозначается как:
Тип_функции имя_функции (спецификация формальных параметров)
тело функции;
Пример записи:
Return_Type Function ( Type Parameter [, Type
Parameter...]);
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Выражения представляются в виде:
[(..] переменная | константа [оператор [(..] переменная |
константа ] [)..]]
Оператор присваивания языка С:
Variable = Expression; (Переменная = Выражение).
Условные операторы языка С
В языке С существуют следующие условные операторы: if, ?, while, do,
for и switch.
Оператор if определяется таким образом:
if ( Оператор );
| {оператор присваивания | условный
оператор..} | оператор присваивания | условный
оператор
[else; | { оператор присваивания | условный
оператор..} | оператор присваивания | условный
оператор
Оператор ?: (условное выражение задается лексемами ? и :) ана-
лизирует выражение (обычно это сравнение). Если оно не равно О,
то выполняется первый оператор, в противном случае - оператор,
стоящий после двоеточия:
оператор ? оператор присваивания | условный
оператор : оператор присваивания | условный
оператор
Оператор while применяется согласно следующему определению:
while ( оператор ); (оператор присваивания | условный
оператор..) | оператор присваивания | условный
оператор
или
While (выражение.условие)
тело.цикла
Оператор for определяется так:
for ( инициализация.цикла; выражение_условие; список выражений)
тело.цикла
Для выхода из текущего цикла предназначен оператор break:
break;
язык с
Оператор continue используется только в операторах цикла (while,
for и do/while). Он завершает текущую итерацию цикла и переходит
непосредственно к проверке условий его продолжения. Данный опе-
ратор имеет следующий формат:
continue;
Оператор цикла в форме do/while применяется для выполнения
цикла до тех пор, пока заданное условие не будет выполнено:
do
тело_цикла
while (выражение);
Оператор switch (переключатель) служит для условного ветвле-
ния в зависимости от значения выражения:
switch (переключающее_выражение)
{case константное_выражение_1: операторы_1;
case константное_выражение_2: операторы_2;
case константное_выражение_п: операторы_п;
default: операторы // Если ни один из операторов
// выбора не является истинным.
И наконец, оператор goto Label нужен для перехода к заданному
адресу:
goto Label;
Label:
Для возвращения величины функции предназначен оператор
return:
return Statement;
Операции
В языке С используются операции, специфицируемые в табл. 15.21-
15.23.
Директивы
Все директивы начинаются со знака # и выполняются препроцессо-
ром до начала компиляции кода (табл. 15.24).
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.21
Операции языка С
Операция Описание
। Логическое отрицание4
। Поразрядное отрицание
&& Логическое И
& Поразрядное И, адрес
1 1 Логическое ИЛИ
1 Поразрядное ИЛИ
Поразрядное Исключающее ИЛИ
+ Сложение
++ Инкрементирование
- Вычитание, отрицание
— Декрементирование
* Умножение, разыменование
/ Деление
% Модуль (остаток от деления)
-- Равно
। - Не равно
< Меньше
< = Меньше или равно
<< Сдвиг влево
> Больше
>= Больше или равно
» Сдвиг вправо
Таблица 15.22
Операции присваивания
Операции Описание
&= Операция И левой переменной с правой переменной и сохранение полученного результата в левой переменной
1= Операция ИЛИ левой переменной с правой переменной и сохранение полученного результата в левой переменной
Операция Исключающее ИЛИ левой переменной с правой переменной и сохранение полученного результата в левой переменной
+= Сложение переменных и сохранение результата в левой переменной
-= Вычитание из левой переменной правой и сохранение результата в левой переменной
*= Умножение переменных и сохранение результата в левой переменной
/= Деление левой переменной на правую и сохранение частного в левой переменной
%= Получение модуля и сохранение результата в левой переменной
<<= Сдвиг левой переменной влево на количество разрядов, определяемое правой переменной, и сохранение полученного результата в левой переменной
>>= Сдвиг левой переменной вправо на количество разрядов, определяемое правой переменной, и сохранение полученного результата в левой переменной
ЯЗЫК С
Таблица 15.23
Приоритеты операций
Операции Приоритет Примечания
()[].> Высший Вычисление выражений
- " • & * ++ — Унарные операции
* / % Мультипликативные операции
+ - Аддитивные операции
« » Сдвиг
<<=>=> Сравнение
== । = Сравнение
& Поразрядное И
Поразрядное Исключающее ИЛИ
1 Поразрядное ИЛИ
&& Логическое И
1 1 Логическое ИЛИ
? • Условное выполнение
= &= |= -= += -= ♦= /= %= »= Операции присваивания
• Низший Операция «запятая». Последовательное выполнение
Таблица 15.24
Директивы языка С
Директива Функция
«define Label [(Parameters)] Text Определяет идентификатор Label, который будет заменяться текстом Text каждый раз, когда он будет встречаться в коде. Если параметры Parameters заданы, они должны заменяться в коде. Аналогична макросу
«undef Label Делает идентификатор неопределенным для препроцессора
«include “File" | <File> Включает указанный файл в текст. Когда название файла Filename заключено в угловые скобки < и >, тогда он отыскивается в стандартных системных каталогах. Если название поставлено в кавычки “ ”, поиск файла начинается с текущей директории, а затем продолжается в стандартных системных каталогах (маршрут INCLUDE)
«error Text Приводит к выдаче сообщений об ошибках, перечисленных в Text
«if Condition Если условие Condition выполняется, компилируется код, следующий за «elif, «else или «endif. В противном случае код, следующий за «elif, «else или «endif, игнорируется
«ifdef Label Если идентификатор Label определен директивой «define, компилируется следующий за директивой код
«ifndef Label Если идентификатор Label не определен директивой «define, компилируется следующий за директивой код
«elif Condition Эта директива работает как сочетание директив «else «if и позволяет избежать многочисленных вложенных «if. Если предыдущее условие не выполнилось, следует проверить условие Condition
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.24
Директивы языка С (окончание)
Директива Функция
«else Размещается после «if или «elif и задает альтернативную ветвь компиляции
«endif Используется для завершения директив «elif, «if «else или «ifdef и «ifndef
«pragma String Определяет действия, зависящие от конкретной версии компилятора
Следующие слова являются служебными и не могут применяться
в приложениях на языке С в качестве имен (идентификаторов):
♦ break;
♦ case;
♦ continue;
♦ default;
♦ do;
♦ else;
♦ for;
♦ goto;
♦ if;
♦ return;
♦ switch;
♦ while.
Управляющие последовательности
Управляющие последовательности (esc-последовательности) приведе-
ны в табл. 15.25.
Таблица 15.25
Управляющие последовательности
Последовательность Код ASCII Описание
\г OxOOD Возврат каретки (CR)
\п ОхООА Перевод строки (LF)
V ОхООС Перевод страницы (FF)
\ь 0x008 Возврат на шаг(ВБ)
\t 0x009 Горизонтальная табуляция (НТ)
\v ОхООВ Вертикальная табуляция (VT)
\а 0x007 Звуковой сигнал (BEL)
V 0x027 Одинарная кавычка, апостроф (')
\” 0x022 Двойные кавычки (")
\\ 0х05С Обратная косая черта (\ )
\ddd - Восьмеричный код
\xddd OxOdd Шестнадцатеричный код
язык с
Функции С
По определению Кернигана (Kernighan) и Ричи (Ritchie), в С суще-
ствуют функции, представленные в табл. 15.26.
Таблица 15.26
Библиотечные функции языка С
Функция Описание
int getchar (void) Получить символ из стандартного входного потока (обычно с клавиатуры). Если никаких символов нет, то ждать их появления
int putchar (int) Записать символ в стандартный поток вывода (обычно на экран)
int printf (char *Const [, arg..]) Функция форматированного вывода в стандартный поток. Вывести строку Const. В строку могут быть включены символы управляющей последовательности (Escape Sequence). Выходные данные определяются с помощью различных символов преобразования: %d, %i - десятичное целое; %о - восьмеричное целое; %х, %Х - шестнадцатеричное целое (с величинами верхнего или нижнего регистров) В начале строки символ Ох не ставится; %и - беззнаковое целое; %с - одиночный ASCII-символ, %s - ASCIIZ-строка; %f - числа с плавающей запятой; %#е, %#Е - числа с плавающей запятой заданной точности #; %g, %G - числа с плавающей запятой; %р - указатель; %% - % символ. Разным реализациям С будут соответствовать разные параметры printf
int scant (char *Const, arg [, *arg..]) Функция форматированного ввода из стандартного потока. Обеспечивает форматированный ввод данных от пользователя. ASCIIZ-строка Const используется в качестве приглашения (Prompt). Входные параметры всегда являются указателями. Символы преобразования аналогичны printf: %d - десятичное целое; %i - целое, В восьмеричном представлении, если впереди стоит 0, и в шестнадцатеричном, если впереди стоит Ох или ОХ;
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Таблица 15.26
Библиотечные функции языка С (продолжение)
Функция Описание
int scanf (char «Const, arg [, *arg..]) %o - восьмеричное целое (впереди стоящего 0 не требуется); %х - шестнадцатеричное целое (впереди стоящего Ох или ОХ не требуется); %с - одиночный символ; %s - ASCIIZ-строка. При сохранении в конце ставится символ NUL; %е, %f, %g - числа с плавающей запятой (с дополнительным знаком, десятичной запятой и экспонентой); %% - отображает % символ в приглашении
handle fopen (char *FileName, char *mode) Открыть файл (возвращает 0 в случае ошибки). Режим mode представляет собой строку вспомогательных знаков: г - открыть файл для чтения; w - открыть файл для записи; а - открыть файл для присоединения к существующим файлам. Некоторые системы обрабатывают текстовые и двоичные файлы. В текстовом файле символы CR/LF представлены в виде одного CR. В двоичном файле никакие знаки не удаляются
int fclose (handle) Закрыть файл
int getc (handle) Считать один символ из файла. По завершении входного файла возвращается EOF
int putc (handle, char) Вывести один символ данных в файл. Наличие ошибки обозначается выдачей EOF
int fpnntf (handle, char *Const [, arg...])) Вывести строку данных в файл. При этом используются символы преобразования и параметры, аналогичные упомянутым выше для функции printf
int fscanf (handle, char «Const, arg [, arg .])) Ввести и обработать строку данных из файла. При этом используются символы преобразования и параметры, аналогичные упомянутым выше для функции scant
int fgets (char «Line, int LineLength, handle) Получить ASCIIZ-строку из файла
int fputs (char «line, handle) Вывести ASCIIZ-строку в файл
strcat (Old, Append) Поместить ASCIIZ-строку Append в конце ASCIIZ-строки Old
strncat (Old, Append, #) Поместить # символов из ASCIIZ-строки Append в конце ASCIIZ-строки Old
int strcmp (Stnngl, String2) Сравнить две ASCIIZ-строки. В случае совпадения возвращается 0, если Stnngl < String2, то отрицательное значение, а при Stnngl > String2 - положительное
язык с
Таблица 15.26
Библиотечные функции языка С (окончание)
Функция Описание
int strncmp (Stringl, Stnng2, #) Сравнить # символов двух ASCII-строк. В случае совпадения возвращается 0, если Stringl < Stnng2, то возвращается отрицательное значение, а при Stringl > Stnng2 - положительное
strcpy (Stringl, Stnng2) Скопировать содержимое ASCIIZ-строки Stnng2 в строку Stringl
strncpy (Stringl, String2, ft) Скопировать # символов ASCI ^-строки Stnng2 в строку Stringl
strlen (String) Возвратить длину ASCIIZ-строки
int strchr (String, char) Возвратить позицию первого знака char в ASCIIZ-строке
int strrchr (String, char) Возвратить позицию последнего знака char в ASCIIZ-строке
system (String) Выполнить командную строку системы
*malloc (size) Разместить заданное число байтов в памяти. При недостатке свободного пространства возвращает NUL
*calloc (#, size) Распределить память для указанных # элементов данных объема size
free (*) Очистить память
float sin (angle) Найти синус угла angle (выраженного в радианах)
float cos (angle) Найти косинус угла angle (выраженного в радианах)
float atan2 (y, x) Найти арктангенс X и Y (выраженный в радианах)
float exp (x) Вычислить экспоненту
float log (x) Вычислить натуральный логарифм
float log10 (x) Вычислить десятичный логарифм
float pow (x, y) Вычислить х в степени у
float sgrt (x) Вычислить квадратный корень из х
float fabs (x) Вычислить абсолютное значение х
float frand () Получить случайное число
int isalpha (char) Возвратить ненулевое значение, если символ является буквой (a-z или A-Z)
int isupper (char) Возвратить ненулевое значение, если символ является прописной буквой (A-Z)
int islower (char) Возвратить ненулевое значение, если символ является строчной буквой (a-z)
int isdigit (char) Возвратить ненулевое значение, если символ является цифрой (0-9)
int isalnum (char) Возвратить ненулевое значение, если символ является буквой или цифрой (a-z, A-Z или 0-9)
int isspace (char) Возвратить ненулевое значение, если символ является одним из следующих: “”,НТ, LF, CR, FF ИЛИУТ
int toupper (char) Преобразовать в знаки верхнего регистра
int tolower (char) Преобразовать в знаки нижнего регистра
СРЕДСТВА РАЗРАБОТКИ ПРИЛОЖЕНИЙ
Функции С для Р1С-микроконтроллеров
В табл. 15.27 приведены функции языка С, полезные для работы
с PIC-микроконтроллерами.
Таблица 15.27
Функции языка С для PIC-микроконтроллеров
Функция Назначение
inp, outp Непосредственный доступ к системным регистрам
Serin, SerOut Последовательный ввод/вывод
I2C Интерфейс 12С
PWM Функции модуля PWM (ШИМ)
ДАННЫХ
ВЖ ... КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
МАТЕМАТИЧЕСКИЕ И ФИЗИЧЕСКИЕ ПОСТОЯННЫЕ
При работе с PIC-микроконтроллерами часто требуется информа-
ция о математических и физических постоянных. Важнейшие из
них приведены в табл. 16.1.
Таблица 16.1
Математические и физические постоянные
Обозначение Значение Величина
AU 149,59787 x 10s км Астрономическая единица (расстояние то Солнца до Земли)
с 2,99792458 x10s м/с Скорость света в вакууме
е 2,7182818285 Основание натуральных логарифмов (число е)
ео 8,854187817 x Ю’12 Ф/м Диэлектрическая проницаемость вакуума
Ev 1,60217733 x 10'” Дж Электрон-вольт, энергия
g 9,807 м/с2 Ускорение свободного падения
h 6,626 x 10'34 Дж-с Постоянная Планка
k 1,380658 х 10’23Дж/К Постоянная Больцмана
me 9,1093897 х Ю’31 кг Масса покоя электрона
mn 1,67493 х Ю'27 кг Масса покоя нейтрона
mp 1,67263 х Ю"22 кг Масса покоя протона
PC 2,06246 х ТО5 AU Парсек
л 3,1415926535898 Отношение длины окружности к радиусу
R 8,314510 Дж/К-моль Газовая постоянная
о 5,67051 х Ю’8 Вт/м2 -К4 Постоянная Стефа на-Больцмана
u 1,66054 х 10’27 г Единица атомной массы
Ho 1,25664 х 10-27 Н/А2 Магнитная проницаемость вакуума
331,45 м/с Скорость звука на уровне моря, в сухом воздухе при температуре 20 °C
- 1480 м/с Скорость звука в воде при температуре 20 °C
КОД ASCII
В коде ASCII используется семибитное кодирование символов
(табл. 16.2).
УПРАВЛЯЮЩИЕ СИМВОЛЫ КОДА ASCII
Управляющие символы кода ASCII (спецсимволы) были разработаны
как средство общения и управления одного компьютера другим
(табл. 16.3). При попытке вывода их на экран монитора будут отоб-
ражаться графические символы.
Как правило, для перехода к новой строке используются команды
Carriage Return/Line Feed (Возврат каретки/Переход строки). Null
УПРАВЛЯЮЩИЕ СИМВОЛЫ КОДА ASCII
Таблица 16.2
Код ASCII
Разряды 6-4
Разряды ООО 001 010 | 011 | 100 I 101 I | 110 | 111
3-0 Управляющие символы Знаки
0000 NUL DLE Пробел 0 @ p P
0001 SOH DC1 ! 1 A Q a q
0010 STX DC2 2 В R b r
0011 ЕТХ DC3 # 3 C S c s
0100 EOT DC4 $ 4 D T -d t
0101 ENQ NAK % 5 E u e u
0110 АСК SYN & 6 F V f V
0111 BEL ETB * 7 G w g w
1000 BS CAN ( 8 H X h X
1001 НТ EM ) 9 I Y i У
1010 LF SUB * J Z J z
1011 VT ESC + К [ k (
1100 FF FS < L \ I I
1101 CR GS - = M ] m }
1110 SO RS > N n
1111 SI US / 7 0 0 DEL
Таблица 16.3
Кодирование и функции специальных символов кода ASCII
Код (шестнадцатеричны й) Мнемоника Описание
00 . NUL Null - обозначение конца строки
01 SOH Start of Header (Начало заголовка)
02 STX Start of Text (Начало текста)
03 ETX End of Text (Конец текста)
04 EOT End of Transmission (Конец передачи)
05 ENQ Enquire (Запрос) - запрос на идентификацию или информацию
06 ACK Acknowledge (Подтверждение) - подтверждение предыдущей передачи
07 BEL Bell (Звуковой сигнал)
08 BS Backspace (Возврат) - перемещение курсора на один столбец влево
09 HT Horizontal Tab (Горизонтальная табуляция) - перемещение курсора вправо, к следующей позиции табуляции (обычно столбец равномерно разделен на восемь частей)
0A LF Line Feed (Перевод строки) - перемещение курсора вниз на одну строку
OB VT Vertical Tab (Вертикальная табуляция) - перемещение курсора к следующей линии таблицы
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.3
Кодирование и функции специальных символов кода ASCII (продолжение)
Код (шестнадцатеричны й) Мнемоника Описание
ОС FF Form Feed (Перевод страницы) - переход к началу новой страницы. В случае ЖК дисплеев часто используется для очистки экрана
0D CR Carriage return (Возврат каретки) - перемещение курсора в крайнюю левую позицию
ОЕ S0 Shifted Out - следующая группа символов переводится в верхний регистр
OF SI Shifted In - следующая группа символов переводится в нижний регистр
10 DLE Data Link Escape - символ начала управляющей последовательности. В настоящее время для этой цели используется Escape (0x01В)
11 DC1 Не определено. Обычно применяется для конкретных приложений (управление устройством 1)
12 DC2 Не определено. Обычно задействуется для конкретных приложений (управление устройством 2)
13 DC3 Не определено Обычно используется для конкретных приложений (управление устройством 3)
14 DC4 Не определено. Обычно используется для конкретных приложений (управление устройством 4)
15 NAK Negative Acknowledge (Неподтверждение приема) - предыдущая передача не была принята соответствующим образом
16 SYN Synchronous Idle (Синхронизация) - если при последовательной передаче используется синхронный протокол, то этот символ отправляется для синхронизации передатчика и приемника
17 ETB End of Transmission Block (Конец передаваемого блока)
18 CAN Cancel (Отмена предыдущей передачи)
19 EM End of Medium (Конец носителя) - указание на конец файла. В файлах MS DOS вместо этого часто используется 0х01А
1А SUB Substitute (Замена символа)
1В ESC Escape (Выход) - временная остановка исполнения приложения или задание режима приема информации
1С FS File Separation (Разделитель файлов)
1D GS Group Separation (Разделитель групп)
УПРАВЛЯЮЩИЕ ANSI-ПОСЛЕДОВАТЕЛЬНОСТИ
Таблица 16.3
Кодирование и функции специальных символов кода ASCII (окончание)
Код (шестнадцатеричный) Мнемоника Описание
1Е RS Record Separation (Разделитель записей)
1F US Unit Separation (Разделитель блоков)
указывает конец строки ASCIIZ-символов. Backspace (Возврат) пере-
мещает курсор на одну позицию назад. Громкоговоритель ПК издаст
звуковой сигнал, если в MS DOS отправить символ Bell. Horizontal Tab
(Горизонтальная табуляция) применяется для перемещения курсо-
ра к началу следующего столбца. Символ Fo rm Feed служит для очист-
ки экрана.
УПРАВЛЯЮЩИЕ ANSI-ПОСЛЕДОВАТЕЛЬНОСТИ
Существует два способа управления отображением информации на
экране монитора из приложений MS DOS. Первый путь - использо-
вать функции BIOS для изменения содержимого видеопамяти (или
непосредствено обратившись к видеопамяти из программы). Второй
способ заключается в применении драйвера устройства ANSI.SYS,
загрузить который можно из файла config.sys и с помощью строки:
device = [d:] [path] ANSI.SYS
Функции данного драйвера, перечень которых дан ниже, испол-
няются посредством передачи на стандартное устройство вывода
управляющих последовательностей (esc-последовательностей, esca-
pe sequences).
ANSI используется достаточно редко по двум причинам. Во-пер-
вых, его функции исполняются значительно медленнее, чем функ-
ции BIOS и непосредственная запись в видео-ОЗУ. Для приложений,
которые должны изменять изображение незаметно для глаза, esc-
последовательности не подходят.
Во-вторых, драйвер ANSI.SYS занимает 10 Кб памяти, которая
в противном случае была бы отведена под приложения.
Тем не менее esc-последовательности имеют и два преимущества.
Первое состоит в том, что они делают приложения очень мобильны-
ми. Преобразование программы, применяющей функции ANSI.SYS,
для другой системы требует только перекомпиляции. Второе пре-
имущество заключается в унификации управления. Происходит
эмуляция взаимодействия с терминалом VT100 (или совместимым
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
с VT100), и перечень функций практически не зависит от конкрет-
ного устройства.
В табл. 16.4 символу Esc соответствует код 0x01 В (Escape в кодиров-
ке ASCII).
Таблица 16.4
Управляющие е$с-последовательности
Последовательность Функция
Esc[= #h Выбор режима дисплея ПК # = 0 - 40x25, монохромный; # = 1 - 40x25,16-цветный, текстовый; # = 2 - 80x25, монохромный, текстовый; # = 3 - 80x25,16-цветный, текстовый; # = 4 - 320x200, 4-цветный, графический, # = 5 - 320x200, монохромный, графический; # = 6 - 640x200, монохромный, графический; # = 13 - 320x200, цветной, графический; # = 14 - 640x200,16-цветный, графический, # = 15 - 640x350, монохромный, графический; # = 16 - 640x350,16-цветный, графический; # = 17 - 640x480, монохромный, графический; # = 18 - 640x480,16-цветный, графический; # = 19 - 320x200, 256-цветный, графический
Esc[= #1 Выбор режима дисплея ПК- # = 0 - 40x25, монохромный, текстовый; # = 1 - 40x25,16-цветный, текстовый; # = 2 - 80x25, монохромный, текстовый; # = 3 - 80x25,16-цветный, текстовый; # = 4 - 320x200, цветной, графический, # = 5 - 320x200, монохромный, графический; # = 6 - 640x200, монохромный, графический
Esc[ #m Установка атрибутов символов: # = 0 - нормальный (белый на черном), # = 1 - повышенная яркость цвета знака; # = 4 - подчеркивание символов в MDA; # = 5 - мигание символа в MDA, # = 7 - инверсный (черные символы на белом фоне); # = 8 - символы невидимы в MDA; # = 30 - черные знаки; # = 31 - красные знаки; # = 32 - зеленые знаки; # = 33 - желтые знаки; # = 34 - синие знаки, # = 35 - малиновые знаки, # = 36 - светло-голубые знаки, # = 37 - белые знаки, # = 40 - черный фон, # = 41 - красный фон; # = 42 - зеленый фон; # = 43 - желтый фон, # = 44 - синий фон;
РАСШИРЕННЫЙ НАБОР СИМВОЛОВ КОДА ASCII
Таблица 16.4
Управляющие е$с-последовательности (окончание)
Последовательность Функция
Esc[ #m # = 45 - малиновый фон, # = 46 - светло-голубой фон, # = 47 - белый фон
Esc[2] Очистка экрана
Esc[K Стирание символов, начиная с текущей позиции курсора до конца строки
Esc[6n Опрос состояния устройства - запрос текущей позиции, которая должна быть возвращена устройству стандартного ввода
Esc[#, %R Возврат текущей строки (#) и столбца (%) курсора в устройство стандартного ввода после опроса состояния устройства
Esc[#; %f Перемещение курсора на # строку и в % столбец
Esc[#, %F Перемещение курсора на # строку и в % столбец
Esc[#, %H Перемещение курсора на # строку и в % столбец
Esc[# A Перемещение курсора вверх на # строк
Esc[# В Перемещение курсора вниз на # строк
Esc[# C Перемещение курсора вправо на # столбцов
Esc[# D Перемещение курсора влево на # столбцов
Esc[s Сохранение текущей позиции курсора
Esc[u Восстановление сохраненной позиции курсора
Esc[F Перемещение курсора в позицию Ноте (строка = столбец = 1)
Esc[H Перемещение курсора в позицию Ноте (строка = столбец = 1)
Esc[#, %p Изменение ключа # на %
Esc[#, %STRp Изменение ключа # на STR
РАСШИРЕННЫЙ НАБОР СИМВОЛОВ КОДА ASCII
Ha рис. 16.1 представлены дополнительные 128 символов, способ-
ные в значительной степени усовершенствовать приложения, рабо-
тающие в текстовом режиме, не прибегая к использованию графики.
В число упомянутых символов входят буквы различных алфавитов
(которых нет в английском), технические символы, а также псевдо-
графические знаки. Последние позволяют создавать в приложениях
линии, прямоугольники, таблицы и т.п. (рис. 16.1 и 16.2).
СИМВОЛЫ КОДА ASCII ДЛЯ WINDOWS
Управляющие символы ASCII-кода имеют определенное значение
в приложениях Windows и не обладают графическим представлени-
ем. Набор символов для Windows начинается с символа Blank (про-
бел, код 0x020). Для него определены только 232 верхних символа.
Этот набор символов основан на коде ASCII, где верхние 128 симво-
лов отведены для специальных функций и букв иностранных алфа-
витов (рис. 16.3).
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Hex 0 х 1 X 2 х 3x 4x 5 x 6 X 7x
х 0 0 ► 16 SP 32 о4Э @64 P 80 II 96 P 112
х 1 © , ◄ 17 I • 33 1 49 A 65 Q 81 97 я из
х2 см $ 18 II 34 8 04 В 66 £4 co Ь 98 Г 114
хЗ V 3 II " 19 a lo co C67 СЛ 8 C 99 S 115
х4 ♦ 4 и» C) 4 52 D fi_ oo T34 d 100 t 116
х 5 ♦ 5 § 21 % 37 й| Ю £ 69 uS5 ® 101 U 117
х 6 ♦ 6 22 a об 6 54 F 20 V v 86 f 102 118
х7 7 23 z 39 7 55 Q w ¥ 87 g юз W 119
х 8 □ 8 t ' 24 ( 40 8 CO H72 X88 h 104 X 120
х9 0 9 25 ) 41 CD СЛ 73 Y89 ' 105 У 121
х А ® ю 26 * 42 • 58 74 N s J 106 z 122
хВ cf „ Ч— 27 + 43 ’ 59 K75 [ 91 k 107 { 123
хС 9 ,г t~28 J 44 < 60 I" 76 92 ' 708 I I 124
xD О 29 45 = 61 M77 ] 93 mr09 } 725
хЕ л 14 ▲ 30 * 46 > 62 N78 К 94 П 110 726
xF * 15 V 31 ! 47 ? 63 O79 95 0 111 A 127
Рис. 16.1
Расширенный набор символов ASCII-кода для IBM-совместимых ПК (столбцы 0-0x07)
СИМВОЛЫ КОДА ASCII ДЛЯ WINDOWS
Hex 8 х 9 x Ax Bx Cx Dx Ex Fx
х 0 Q 128 Ё 144 *□ ° 160 : 176 L 192 JL 208 0 224 = 240
х 1 U 129 ^145 I 161 1 L 1 193 T 209 P 225 + "" 247
х2 ® 130 ^146 0 162 1 L T 194 IT 210 1" 226 — 242
хЗ а /3, o> U 163 179 F 195 IL 211 ТГ 227 — 243
х 4 о ° 132 0 148 S ic d 180 196 L 212 228 f»
х 5 О 133 0 149 N<65 d 181 "F 197 Г 213 229 J 245
х 6 ® 134 О On о 8 700 d! I 182 F 198 IT 214 M 230 246
х7 Q 135 U 151 IO on Ц 183 II" 199 dL» T 237 ~ 247
х8 e,36 У 152 6 168 =1 184 IL 200 + 216 Ф 232 о 248
х9 ® 137 ® 153 Г 169 dl 185 IF 201 J 217 02SS • 249
х А 6 loo ^154 1 170 I 186 JL 202 Г 218 234 250
хВ 1 139 Q <55 1/2<7< =0 187 1Г 203 219 235 251
х С ' 140 £ 156 1/4 m JI 188 IL 1Г 204 QI 220 00 236 n 252
xD i 4K On I 173 JI 189 205 1 221 0 237 2 253
хЕ A М2 R 73o « 174 =1 190 JL 1Г 206 1 222 238 1 254
xF A M 143 159 » 175 1 191 _L 207 n 223 ООП 239 255
Рис. 16.2
Расширенный набор символов ASCII-кода для IBM-совместимых ПК (столбцы 0x08 - OxOF)
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
в 1 ! и $ % & । ( ) * + - / 0 1 2 3 4 5 6 7 8 9 < = > ?
А В С D Е F G н 1 J К L М N 0 р Q R S Т и V /V X Y Z [ ] А
а b с d е f g h i j к 1 m п 0 р q г S t и V W X У Z { I } □
€ □ f и t t S < СЕ □ □ □ □ । । и и ' — гм S > ое □ □ Y
i ф £ и ¥ 1 1 § © а •л - ® — а + 2 3 М 1F 1 о % /2 с
А А А А А д ДЕ Ё Ё Ё Ё 1 1 1 Т D N 0 0 б б б X 0 и и и и Y Ь В
а а а а а а ае <? ё ё ё ё 1 I Г т 3 п 0 6 6 б б -7 0 U й й й У У
Рис. 16.3
Шрифт Arid для Microsoft Windows
КОД EBCDIC
Речь идет о расширенном двоично-десятичном коде обмена инфор-
мацией (EBCDIC), см. табл. 16.5. EBCDIC представляет собой вось-
мибитный код.
Таблица 16.5
Код EBCDIC
Биты 3-0 / 7-4 0 1 2 3 4 5 6 7 8 9 A В C D E F
0 Пробел & - 0
1 / а J A J 1
2 b к s В К S 2
3 с I t C L T 3
4 d m u D M и 4
5 LF е n V E N V 5
6 f 0 w F 0 w 6
7 9 P X G P X 7
8 h q у H Q Y 8
9 i r z I R Z 9
А 7 !
В $ #
С < %
D ( )
Е + ". > =
F I 7
НОТЫ
В табл. 16.6 представлены частоты нот в диапазоне среднего «си». Об-
ратите внимание, что частота нот верхней октавы в два раза выше
частот текущей октавы, а нижней октавы - соответственно в два раза
ниже.
ЧАСТОТЫ ТЕЛЕФОНОВ С ТОНАЛЬНЫМ НАБОРОМ
В табл. 16.7 указаны частоты тонального набора (вызова).
АТ-КОМАНДЫ МОДЕМА
Таблица 16.6
Частоты нот
Нота Частота, Гц
G 392
G# 415,3
А 440
A# 466,2
В 493,9
С 523,3
C# 554,4
D 587,3
D# 622,3 '
Е 659,3
F 698,5
F# 740,0
G 784,0
G# 830,6
А 880,0
A# 932,3
В 987,8
Таблица 16.7
Частоты тонального набора
Частота, Гц 1209 1336 1477
697 1 2 3
770 4 5 6
852 7 8 9
941 * 0 #
АТ-КОМАНДЫ МОДЕМА
АТ является префиксом команды, который отправляется на модем
непосредственно перед командой. Все команды (за исключением А/)
должны начинаться с символа АТ, а заканчиваться символом ASCII
Carriage Return (Возврат каретки) с кодом 0x000.
Команда А/ заставляет модем повторять последнюю поступив-
шую команду, а команда +++ - перейти из режима on-line в автоном-
ный. В течение 1 с до и после этой команды данные на модем пере-
даваться не должны.
Регистры модема
Все регистры являются восьмибитными и занимают адреса в диа-
пазоне от 0x000 до OxOFF, если не оговорено другое. Регистры ра-
ботают с цифровыми данными преимущественно десятичного,
а не шестнадцатеричного формата. В табл. 16.9 тем не менее при-
водятся шестнадцатеричные величины, что соответствует фор-
мату, принятому в данной главе.
Таблица J 6.8
Команды модема
Команда Операция Ожидаемый ответ
АТ Префикс команды. Если АТ-команда отправляется без префикса, то модем тестируется ОК
А Команда АТА заставляет модем занять линию ок
B# Выбор протокола: # = 0, CCITT; it = 1, Bell 103/212А по умолчанию - V.21/V.22 (высокая скорость) ок
DP ADTP ####### осуществляет набор заданного номера при помощи Pulse Dialing (импульсного набора). Запятая (,) в цифровой строке вызывает задержку. Символ W, стоящий в строке, заставляет модем подождать с продолжением операций до появления тонального набора. Двоеточие (:) заставляет ждать появления вызывающего тона, а символ @ - периода успокоения. Восклицательный знак (!), стоящий в цифровой строке, вызывает моментальный переход модема из режима on hook (положить трубку, сигнал отбоя) в режим off hook (поднять трубку, сигнал ответа абоненту). Символ R, стоящий в конце цифровой строки, по окончании набора номера приводит к переходу модема в режим отбоя, а также в режим автоответа. Точка с запятой (;), стоящая в конце цифровой строки, приводит модем к переходу в состояние локальной команды после соединения. S# осуществляет набор номера, хранящегося по адресу # NO DIALTONE NO ANSWER NO CARRIER BUSY CONNECT 300 CONNECT 300/REL CONNECT 1200 CONNECT 1200/REL CONNECT 2400 CONNECT 2400/REL CONNECT 4800 CONNECT 4800/REL CONNECT 7200 CONNECT 7200/REL CONNECT 9600 CONNECT 9600/REL CONNECT 12000 CONNECT 12000/REL CONNECT 14400 CONNECT 14400/REL
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.8
Команды модема (продолжение)
Команда Операция Ожидаемый ответ
DT ATDT й й й й й й # осуществляет набор заданного номера при помощи Tone Dialing (тонального набора). Запятая (,) в цифровой строке вызывает задержку. Символ W, стоящий в упомянутой строке, заставляет модем подождать с продолжением операций до появления тонального набора. Двоеточие (:) заставляет ждать появления сигнала вызывающего тона, а символ @ - периода успокоения. Восклицательный знак (•), стоящий в цифровой строке, вызывает моментальный переход модема из режима on hook (положить трубку, сигнал отбоя) в режим off hook (поднять трубку, ответ абоненту). Символ R, стоящий в конце цифровой строки, по окончании набора номера приводит к переходу модема в режим отбоя, а также в режим автоответа. Точка с запятой (;), стоящая в конце цифровой строки, приводит модем к переходу в состояние локальной команды после соединения. S# осуществляет набор номера, хранящегося по адресу й NO DIALTONE NO ANSWER NO CARRIER BUSY CONNECT 300 CONNECT 300/REL CONNECT 1200 CONNECT 1200/REL CONNECT 2400 CONNECT 2400/REL CONNECT 4800 CONNECT 4800/REL CONNECT 7200 CONNECT 7200/REL CONNECT 9600 CONNECT 9600/REL CONNECT 12000 CONNECT 12000/REL CONNECT 14400 CONNECT 14400/REL
Ей Включает или отключает эхо модемных команд: й = 0, отключает режим эхо; й = 1, включает режим эхо (по умолчанию) OK
Н[#] Сначала вводится команда + + +, а затем отправляется АТНй. й = 0, устанавливает модем в режим on hook (положить трубку); й = 1, устанавливает модем в режим off hook (поднять трубку) OK
I# Запрос информации от модема й = 0, выдает ID (идентификатор); й = 1, код модема; й = 2, OK; й = 3, код страны; й = 4, возвращает параметры
АТ-КОМАНДЫ МОДЕМА
Таблица 16.8
Команды модема (продолжение)
Команда Операция Ожидаемый ответ
L# Управление громкостью встроенного динамика (0 - тихо, 9 -громко) ОК
M# Сигналы управления громкоговорителем: й = 0, отключает громкоговоритель; # = 1, включает в процессе вызова или ответа (по умолчанию); й = 2, громкоговоритель включен постоянно; й = 3, громкоговоритель включен постоянно, кроме момента набора номера ок
N# Задание параметров соединения: # = 0, использует S37 для выбора скорости. Если S37 = 0, то соединение производится с максимальной доступной скоростью; й = 1, соединение производится со скоростью, установленной S37 ок
0# Возврат к состоянию on-line: # = 0, после использования командной последовательности + + + возврат к состоянию on-line; й = 1, после повторной настройки канала связи возврат к состоянию on-line ок
Р Разрешение импульсного набора ок
Ой Управление выдачей сообщений модемом: # = 0, разрешает выдачу ответных кодов (по умолчанию); й = 1, запрещает выдачу сообщений; # = 2, отправляет ответные коды при выдаче сигнала вызова ок
8й? Возврат содержимого регистра й Содержимое регистра
S# = Constant Загрузка константы в регистр # ОК
Т Разрешение тонального набора ОК
V# Выбор кодов для сообщений модема: # = 0, используются цифры; й = 1, используются слова (по умолчанию) ОК
W# Обработка кодов: # = 0, не отображает информацию (по умолчанию); й = 1, отображает информацию ОК
X# Управление ответными кодами: # = 0, возвращает только ответы «ошибка» и «связь установлена»; й = 1, возвращает только ответы «ошибка» и «связь установлена»; ОК
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.8
Команды модема (окончание)
Команда Операция Ожидаемый ответ
X# Управление ответными кодами. # = 2, возвращает только ответы «ошибка» и «связь установлена»; # = 3, возвращает все ответы «ошибка» и «связь установлена»; # = 4, возвращает все ответы (по умолчанию) ОК
Y# Дистанционное отключение сеанса связи (прерывания): й = 0, прерывания игнорируются (по умолчанию); й = 1, при получении прерывания происходит разъединение (кладет трубку); # = 2, возврат к командному состоянию, но разъединения не происходит ок
Z# Возврат модема в исходное состояние: # = п, загружает набор параметров п ок
&F Вызов набора параметров, задаваемых по умолчанию ок
&G# Задание режима передачи сигнала защитного тона* # = 0, отсутствие защитного тона (по умолчанию); й = 1, защитный тон частотой 1,8 кГц ок
&L# Выбор типа линии: # = 0, коммутируемая линия (по умолчанию); # = 1, выделенная линия ок
&Q# Выбор режима соединения: # = 0, асинхронный, контроль ошибок отсутствует; # = 5, соединение производится с максимальной доступной скоростью, при возникновении проблем неисправность нейтрализуется ок
&V Отображение текущей и сохраненной конфигурации Активный набор параметров Сохраненный набор параметров 0 Сохраненный набор параметров 1 Сохраненный телефонный номер
&W# Сохранение текущей конфигурации: # = 0, сохраняет текущую конфигурацию в наборе 0, й = 1, сохраняет текущую конфигурацию в наборе 1 ОК
&Y# Задание изначальной конфигурации # ОК
&Z# = ### Сохранение специфицированного телефонного номера. Параметры цифровой последовательности могут быть перечислены в DP и DT ОК
АТ-КОМАНДЫ МОДЕМА
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.9
Регистры модема
Регистр Описание Значение по умолчанию
SO Число гудков до автоответа 0
S1 Счетчик приходящих гудков Не применяется
S2 ASCII-код escape-символа (+) 0x02В
S3 Символ конца строки OxOOD (CR)
S4 Символ перехода на новую строку OxOOA(LF)
S5 Символ возврата 0x008(В5)
S6 Время ожидания первого гудка (в секундах) 2
S7 Время одной попытки (в секундах) 50
S8 Пауза (в секундах) 2
S9 Время определения несущей (1/10 секунды) 6
S10 Время ожидания потерянной несущей (1/10 секунды) 14
S11 Интервалы между сигналами набора номера (мс) 95
S12 Пауза для передачи esc-последовательности (1/50 с) 50
S18 Продолжительность автотестирования (в секундах) 0
S36 Ответ о неудачном соединении (параметры) # = 0, попытка V 42, # = 3, попытка \/.42/попытка MNP; # = 4, попытка \/.42/попытка MNP, # = 5, попытка \/.42/попытка MNP/попытка асинхронного соединения; 5
S37 Желаемая скорость соединения. # = 0, соединение с максимально доступной скоростью (по умолчанию); # = 3, 300 бит/с; # = 5,1200 бит/с, # = 6, 2400 бит/с, # = 7, 4800 бит/с, # = 8,7200 бит/с; # = 9, 9600 бит/с; # = 10,12000 бит/с, # = 11,14400 бит/с 0
S38 Время до разъединения (в секундах) 0
S46 V 42 bis параметры сжатия данных. # = 136, только V.42; # = 138, V.42 с V.42 bis сжатием данных (по умолчанию) 138
S48 Согласование параметров' # = 0, согласование запрещено; # = 3, согласование без определения фазы # = 7, согласование с определением фазы (по умолчанию) 7
S95 Сообщения о согласовании контроля над ошибками: # = 1, не используется; # = 4, разрешает сообщения только о канале передачи; # = 8, разрешает сообщения только о канале передачи и протоколе; # = 32, разрешает сообщения о канале передачи, протоколе и сжатии данных (по умолчанию) 32
КОД МОРЗЕ
КОД МОРЗЕ
В табл. 16.10 приведен код Морзе. Символы кодируются сочетанием
точек (.) и тире (-), которым при передаче соответствуют короткие
и длинные звуковые или световые сигналы.
Таблица 16.10
Код Морзе
Знак Код
А -
В - . . .
С - . -
D —
Е
F -
G — .
Н
1
J —
К
L -
М —
N -
0 —
Р .
Q
R -
S
Т -
и . -
V -
W -
X - —
Y
Z —
1 —
2 —
3 —
4 -
5
6 -
7 —
8 —
9 —
0 —
_ _ _
—
- - -
/
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.10
Код Морзе (окончание)
Знак Код
7 —
Ошибка
Конец связи - -
Начало связи - . -
ФОНЕТИЧЕСКИЙ АЛФАВИТ
В табл. 16.11 приведена информация о том, какие условные слова
соответствуют тем или иным звукам при передаче сообщений в ма-
шиностроении и авиации.
TEN-РАДИОКОД
Тепфадиокод (табл. 16.12) применяется для передачи наиболее часто
употребляемых слов и выражений. Это позволяет существенно уско-
рить передачу сообщения, что особенно важно в экстремальных
ситуациях.
Таблица 16.11
Фонетический алфавит
Буква Машиностроение Авиация
А Able Alpha
В Baker Bravo
С Charlie Charlie
D Dog Delta
Е Easy Echo
F Fox Foxtrot
G George Gulf
Н Harry Hotel
1 Izzy India
J Joe Juliet
К Kitten Kilo
L Larry Lima
М Mike Mike
N Nancy November
0 Oscar Oscar
Р Peter Papa
Q Quincy Quebec
R Robert Romeo
S Sam Sierra
Т Tom Tango
и Under Uniform
V Vic Victor
W Walter Whiskey
X X-Ray X-Ray
Y Young Yankee
Z Zebra Zulu
TEN-РАДИОКОД
Таблица 16.12
Ten-радиокод
Код Сообщение
10-1 Плохой прием, слабый сигнал
10-2 Хороший прием, мощный сигнал
10-3 Остановить передачу
10-4 Сообщение принято
10-5 Ретранслировать сообщение
10-6 Занято, пожалуйста, будьте готовы
10-7 Не работает
10-8 Работает
10-9 Повторить сообщение
10-10 Закончено, ожидаю
10-11 Говорите медленнее
10-12 Присутствуют гости
10-13 Требуются погодные и дорожные условия
10-16 Передать необходимо в...
10-17 Срочное дело
10-18 Есть ли что-нибудь для нас
10-19 Для вас ничего нет, возвращайтесь на базу
10-20 Мое местоположение .
10-21 Пользуйтесь телефоном
10-22 Отчет лично..
10-23 Готовность
10-24 Закончено последнее предписание
10-25 Контакт.
10-26 Игнорировать последнюю информацию
10-27 Я перехожу на канал..
10-28 Идентифицируйте вашу станцию
10-29 Время на контакт истекло
10-30 Не соответствует правилам FCC (Федеральной комиссии связи)
10-32 Я проведу радиотест
10-33 На этой станции нарушение передачи
10-34 На этой станции требуется помощь
10-35 Конфиденциальная информация
10-36 Правильное время .
10-37 Спасатель необходим на..
10-38 Скорая помощь нужна на..
10-39 Ваше сообщение было доставлено
10-41 Пожалуйста, перейдите на канал..
10-42 Происшествие при передаче информации на .
10-43 Перегрузка на..
10-44 У меня есть сообщения для
10-45 Пожалуйста, сообщите обо всех подразделениях в этом радиусе
10-50 Разрыв в канале
10-60 Какой номер у следующего сообщения
10-62 Невозможно скопировать, пожалуйста, позвоните по телефону
10-63 Радиосеть направлена на.
10-64 Радиосеть свободна
10-65 Готов к приему, жду вашего следующего сообщения
10-67 Все разделы исполнены
10-70 Пожар на..
10-71 Продолжить следующую по порядку передачу
10-73 Поглощающий фильтр на
КОНСТАНТЫ И ТАБЛИЦЫ ДАННЫХ
Таблица 16.12
Ten-радиокод(окончание)
Код Сообщение
10-75 Ваша передача вызывает помехи
10-77 Неудачный контакт
10-81 Зарезервировать номер в гостинице для..
10-82 Зарезервировать номер для..
10-84 Мой номер телефона..
10-85 Мой адрес.
10-89 Специалист по ремонту радиотехники требуется на.
10-90 У меня есть TV
10-91 Говорите ближе к микрофону
10-92 Ваш передатчик надо настроить
10-93 Проверьте мою частоту на этом канале
10-94 Пожалуйста, выдайте мне «длинный отсчет»
10-95 В течение 5 с передачи не будет
10-99 Задание выполнено, все подразделения в безопасности
10-200 Вмешательство полиции необходимо на..
АЯ ИНФОРМАЦИЯ
РОНИКЕ
СПРАВОЧНАЯ ИНФОРМАЦИЯ ПО ЭЛЕКТРОНИКЕ
ЦВЕТОВОЕ КОДИРОВАНИЕ РЕЗИСТОРОВ
Первая цифра Точность
Вторая цифра Множитель
Рис. 17.1
Полоски но резисторе
Цветовое кодирование резистора обеспечи-
вается нанесением на его корпус цветных
полосок (рис. 17.1). Соответствие цветов
и цифровых данных приведено в табл. 17.1.
Номинал резистора определяется сле-
дующим образом:
Сопротивление = (первая цифра х 10 +
+ вторая цифра) х множитель.
Таблица 17.1
Цветовое кодирование резисторов
Цифра Цвет Полоса 1 (первая цифра) Полоса 2 (вторая цифра) Полоса 3 (множитель) Полоса 4 (точность)
0 Черный Не применяется 0 10**0 Не применяется
1 Коричневый 1 1 10**1 1% допуск
2 Красный 2 2 10**2 2% допуск
3 Оранжевый 3 3 10**3 Не применяется
4 Желтый 4 4 10**4 Не применяется
5 Зеленый 5 5 10**5 0,5% допуск
6 Синий 6 6 10**6 0,25% допуск
7 Фиолетовый 7 7 10**7 0,1% допуск
8 Серый 8 8 10**8 0,05% допуск
9 Белый 9 9 10**9 Не применяется
Не применяется Золотой Не применяется Не применяется 10**-1 5% допуск
Не применяется Серебряный Не применяется Не применяется 10**-2 10% допуск
ЭЛЕКТРОМАГНИТНЫЙ СПЕКТР
Роль электромагнитных волн в нашей жизни все более возрастает.
В настоящее время трудно представить сферу человеческой деятель-
ности, где бы они не применялись. Использование частот электро-
магнитного спектра радиодиапазона приведено в табл. 17.2, а класси-
фикация квантовых диапазонов - в табл. 17.3.
Диапазоны радара
Обозначение радиолокационных диапазонов приведено в табл. 17.4.
ЭЛЕКТРОМАГНИТНЫЙ СПЕКТР
Таблица 17.2
Электромагнитный спектр
Частота Область применения
0 Гц Постоянный ток
15-20000 Гц Звуковые частоты
30-15000 Гц Слышимые частоты
16-4186,01 Гц Музыкальный диапазон
10-16 кГц Ультразвук
3-30 кГц Очень низкие частоты
3-30 Гц Радиопередача на крайне низких частотах
30-300 Гц Радиопередача на ультранизких частотах
30 кГц-300 МГц Радиочастоты
53,5-170,5 кГц Диапазон частот AM радиовещания
3,5-4 МГц 80-метровый любительский диапазон
7-7,3 МГц 40-метровый любительский диапазон
10,100-10,150 МГц 30-метровый любительский диапазон
14,10-14,35 МГц 20-метровый любительский диапазон
18,068-18,168 МГц 17-метровый любительский диапазон
21,00-21,45 МГц 15-метровый любительский диапазон
24,890-24,990 МГц 12-метровый любительский диапазон
26,965-27,405 МГц Полоса частот для персональной радиосвязи
26,95-27,54 МГц Полоса частот для промышленной, научной и медицинской радиослужб
28,00-29,70 МГц 10-метровый любительский диапазон
30-300 МГц Очень высокие частоты
30-50 МГц Полоса частот для полицейской, пожарной, егерской и железнодорожной радиослужб
50-54 МГц 6-метровый любительский диапазон
54-72 МГц Частоты 2-4 каналов телевизионного вещания
72-76 МГц Частоты для правительственной радиосвязи
76-88 МГц Частоты 5-6 каналов телевизионного вещания
88-108 МГц Диапазон частот ЧМ радиовещания
108-118 МГц Частоты для аэрокосмической навигации
118-136 МГц Диапазон частот для гражданской радиослужбы
148-174 МГц Частоты для правительственной радиосвязи
144-148 МГц 2-метровый любительский диапазон
174-216 МГц Частоты 7-13 каналов телевизионного вещания
216-470 МГц Диапазон многоцелевого назначения
220-225 МГц Метровый любительский диапазон
225-400 МГц Диапазон частот для военных радиослужб
420-450 МГц 0,7-метровый любительский диапазон
462,55-563,20 МГц Диапазон частот для персональной радиосвязи
300-3000 МГц Диапазон ультравысоких частот/радиолокационные диапазоны частот
470-806 МГц Частоты 14-69 каналов телевизионного вещания
806-890 МГц Частоты мобильных телефонов
890-3000 МГц Радиодиапазон многоцелевого назначения
3-30 ГГц Радиодиапазон многоцелевого назначения/радиолокационные диапазоны частот
30-300 ГГц Диапазон сверхвысоких частот/радиолокационные диапазоны частот
СПРАВОЧНАЯ ИНФОРМАЦИЯ ПО ЭЛЕКТРОНИКЕ
Таблица 17.3
Электромагнитное излучение
Длина волны Тип излучения
30-0,76 мкм Инфракрасное излучение
0,76-0,39 мкм Видимый свет
6470-7000 ангстрем Красный свет
5850-6470 ангстрем Оранжевый свет
5750-5850 ангстрем Желтый свет
5560-5750 ангстрем Частоты максимальной чувствительности глаза
4912-5560 ангстрем Зеленый свет
4240-4912 ангстрем Синий свет
4000-4240 ангстрем Фиолетовый свет
320-4000 ангстрем Ультрафиолетовый свет
0,032-0,00001 мкм Рентгеновское излучение
0,00001-0,0000006 мкм Гамма-лучи
< 0,0005 ангстрем Космическое излучение
Таблица 17.4
Радиолокационные диапазоны
Частота, МГц Диапазон
390-1550 L
1550-5200 S
5200-10900 X
10900-36000 К
36000-46000 Q
46000-56000 V
56000-100000 W
ЦИФРОВАЯ ЛОГИКА
Выходные уровни и пороговые напряжения для логических схем раз-
личных технологий приведены в табл. 17.5. Значения указаны для
напряжения питания +5 В.
Вентили
На рис. 17.2 представлены шесть наиболее распространенных ти-
пов логических вентилей.
Триггеры
Графическое обозначение и таблицы истинности для триггеров раз-
личных типов представлены на рис. 17.3.
ЦИФРОВАЯ ЛОГИКА
Таблица 17.5
Выходные уровни и пороговые напряжения логических схем
Технология Входное пороговое напряжение, В Выходной уровень логического нуля, В Выходной уровень логической единицы, В
TTL L4 0,3 3,3
НС 2,4 0,1 4,9
нет 1,4 0,1 4,9
CMOS 2,5 0,1 4,9
Функция Обозначение
Таблицы истинности
NOT
Выход
А Выход
0 1
1 0
А В Выход
0 0 0
AND В' - — Выход 0 1 1 0 0 0
1 1 1
А в Выход
0 0 0
0R в " ВыхоА 0 1 1 0 1 1
1 1 1
X0R п ----Выход
Е> ..
А В Выход
0 0 0
0 1 1
1 0 1
1 1 0
А В
Выход
NAND Выход
О О
О 1
1 О
1 1
1
1
1
О
А В
Выход
О О
N0R — Выход
1
О
О
О
О 1
1 О
1 1
Рис. 17.2
Логические вентили
СПРАВОЧНАЯ ИНФОРМАЦИЯ ПО ЭЛЕКТРОНИКЕ
Рис. 17.3
Триггеры
Таблицы переходов
R S Q _Q
1 0 0 1
0 1 1 0
0 0 Qo _Qo
1 1 Запрещено
J к Q _Q
1 0 1 0
0 1 0 1
0 0 Qo Qo
1 1 _Qo Qo
т Q _Q
0 Qo _Qo
1 _Qo Qo
D Clk Q _Q
0 0 1
1 1 0
X “L Qo _Qo
X 0 Qo _Qo
X 1 Qo _Qo
ФОРМУЛЫ
ФОРМУЛЫ ПОСТОЯННОГО ТОКА
Закон Ома:
V = IR
Мощность:
P = VI
Последовательное включение сопротивлений:
R = R1 + R2...
Параллельное включение сопротивлений:
R= 1 / ((1 / Rl) + (1 / R2)...)
Два параллельных сопротивления:
R=(RlxR2)/(Rl + R2)
Емкость последовательно соединенных конденсаторов:
С = 1 / ((1 / Cl) + (1 / С2)...)
Емкость параллельно соединенных конденсаторов
ОС1 + С2...
Мост Уитстона:
Ru = RlxR3/R2
Когда ток через прибор не течет,
Ru = R1 XR3/R2
Рис. 18.1
Мост Уитстона
ФОРМУЛЫ ПЕРЕМЕННОГО ТОКА
ФОРМУЛЫ ПЕРЕМЕННОГО ТОКА
Резонанс.
Частота =1 / (2л ^LC )
Постоянная времени RC-цепочки:
t = RC
Постоянная времени RL-цепочки:
t = R/L
Процесс заряда RC-цепочки:
V(t)=V0(l-eA(-t/T))
i(t) = i0(l-eA(-t/T))
Процесс разряда RC-цепочки:
V(t)=VoeA(-t/T)
i(t) = i0 eA(~t / т)
Ниже приведены формулы для определения индуктивности ка-
тушки.
Катушка на линейном сердечнике:
Индуктивность = проницаемость сердечника х (число витков л 2) х
х площадь сечения сердечника/длина катушки
Катушка на торроидальном сердечнике с квадратным поперечным
сечением:
Индуктивность = 1п (внешний диаметр/внутренний диаметр) х
х проницаемость сердечника х (число витков л 2) х толщина тор-
роида / 2р
Трансформатор тока/напряжения:
Коэффициент трансформации = число вйтков первичной обмот-
ки/число витков вторичной обмотки
ФОРМУЛЫ
Коэффициент трансформации = Увхода / Увыхода = 1выхода /
1входа
Волновое сопротивление линии передачи:
Z0=">/(L/C)
ФИЗИЧЕСКИЕ ФОРМУЛЫ
Частота = скорость / длина волны
Электромагнитные волны:
Частота = с / длина волны
Закон идеального газа:
PV = nRT
БУЛЕВА АЛГЕБРА
Булева алгебра содержит приведенные ниже законы и функции.
Функции идентификации:.
A AND1=A
A OR 0 = А
Установка/сброс выхода:
A AND 0=0
A OR 1 = 1
Закон идентичности:
А = А
Закон двойного отрицания:.
NOT (NOT (А)) = А
Закон дополнения:
A AND NOT(A) = 0
A OR NOT(A) = 1
СООТВЕТСТВИЯ ЕДИНИЦ ИЗМЕРЕНИЯ
Закон идемпотентности:
A AND А = А
A OR А = А
Закон коммутативности:
A AND В = В AND А
A OR В = В OR А
Закон ассоциативности:
(A AND В) AND OAAND (BAND С) =А AND A AND С
(A OR В) OR С = A OR (В OR С) = A OR A OR С
Закон дистрибутивности:
A AND (В OR С) = (A AND В) OR (A AND С)
A OR (В AND С) = (A OR В) AND (A OR С)
Замечание:
♦ AND (И) часто записывается в виде умножения, когда между
символами ничего не стоит или стоят знаки х или *;
♦ OR (ИЛИ) часто записывается в виде сложения со знаком +
между символами.
Теорема Де Моргана:
NOT (A OR B) = NOT (A) AND NOT (В)
NOT (A AND B) = NOT (A) OR NOT (B)
СООТВЕТСТВИЯ ЕДИНИЦ ИЗМЕРЕНИЯ
Между единицами измерения существуют следующие соответствия:
1 дюйм = 2,54 см
1 миля= 1,609 км
1 унция = 29,57 г
1 галлон = 3,78 л
1 атмосфера = 29,9213 дюймов ртутного столба = 14,6960 фунтов/
дюйм2 = 101325 кПа
ФОРМУЛЫ
10 000 000 000 ангстрем = 1 м
1 000 000 микрон = 1 м
1 час » 3600 с
1 год = 8760 ч
Приставки обозначений физических величин:
Тера - 1000 Гига
Гига= 1000 Мега
Мега88 1000 кило
Кило s 1000 единиц
Единица ==100 санти
Единица = 1000 милли
АФИЯ
БИБЛИОГРАФИЯ
ИНФОРМАЦИЯ О КОМПАНИИ MICROCHIP
Корпоративная штаб-квартира компании Microchip расположена
по адресу:
Microchip Technology, Inc.
2355 W.Chandler Blvd.
Chandler, AZ 85224
Тел.: (480) 786-7200
Факс: (480) 917-4150
Web-сайт http://www.microchip.com содержит полные справоч-
ные данные о компании, представленные в pdf-формате, а также
самые последние версии среды разработки MPLAB. Кроме того, на
этом сайте находится ссылка на Internet-магазин Microchip http: / /
buy.microchip.com. где можно приобрести необходимые компонен-
ты и средства для разработки.
В течение года специалисты Microchip проводят серии семинаров,
которые также освещаются через упомянутый Web-сайт компании.
WEB-САЙТЫ, ПОСВЯЩЕННЫЕ Р1С-МИКРОКОНТРОЛЛЕРАМ
На момент написания этой книги существовало около тысячи Web-
страниц, посвященных PIC-микроконтроллерам. В них рассматрива-
ются разнообразные приложения, фрагменты кодов, средства для
разработки последних, программаторы, а также приводится много
другой полезной информации как по PIC-микроконтроллерам, так
и по другим микроконтроллерам. Знакомство с указанными ниже
сайтами может послужить отличной отправной точкой для самосто-
ятельных исследований.
На Web-странице автора данной книги httр: / /www.myke.com
приведена самая последняя информация по PIC-микроконтролле-
рам, перечислены ошибки, обнаруженные в книге, и даны примеры
разработок с описанными микроконтроллерами.
Из всего множества информации о Р1С-микроконтроллерах,
представленной в Internet, особого внимания заслуживают следую-
щие Web-страницы:
♦ выдающийся список Internet-ресурсов, посвященных PIC-мик-
роконтроллерам, который составил Алексей Владимиров.
К февралю 2000 года в этом списке было 700 адресов: http: //
www.geocites.com/SiliconValley/Way/5807/:
WEB-САЙТЫ ПОСВЯЩЕННЫЕ PIC-МИКРОКОНТРОЛЛЕРАМ
♦ сайт Боба Блика (Bob Blick), где представлены интересные разра-
ботки по PIC-микроконтроллерам: http://www.bobblick.com/:
♦ оптимизированные математические алгоритмы для PIC-микро-
контроллеров Скотта Даталло (Scott Datallo). Если вам необхо-
димо, например, вычислить тригонометрические функции с по-
мощью PIC-микроконтроллеров, то это самый лучший сайт:
http://www.datallo.com/technical/software/software.html:
♦ помимо быстродействующих подпрограмм для PIC-микрокон-
троллеров, Скотт Даталло занимается также созданием средств,
которые предназначены для работы в Linux. Эти инструменты
можно загрузить с сайтов: http://www.datallo.com/gnupic/
gpsim.htmk http://www.datallo.com/gnupic/gpasm.html:
♦ «уголок PIC-микроконтроллеров» Марко ди Лео (Marco Di
Leo). Здесь представлены некоторые интересные приложе-
ния, а также информация по созданию сети PIC-микрокон-
троллеров и использованию их в криптографии: http://
www.members.tripod.com/~mdileo/:
♦ Dotronic Home Page. Дон Маккензи (Don McKenzie) обладает
огромным объемом сведений по PIC-микроконтроллерам и дру-
гим электронным продуктам. Здесь приводится много полез-
ных ссылок на другие сайты; кроме того, по этому адресу мож-
но скачать SimmStick: http://www.dontronics.com/:
♦ Fast Forward Engineering. Страница Эндрю Варрена (Andrew
Warren) содержит очень полезный раздел вопросов и ответов:
http://www.netcom.com/~fastfwd/:
♦ перечень разработок по PIC- и другим микроконтроллерам, со-
ставленный Стивом Лотером (Steve Lawther): http://www.our-
world.compuserve.com/homepages/steve lawther/ucindex.htm:
♦ страница Эрика Смита (Eric Smith). Несколько интересных раз-
работок и примеров кодов: http://www.brouhaha.com/~eric/
pic/:
♦ PIC-Wall Рикарда (Rickard). Интересный и полезный сайт, где
описана разработка генератора видеоигр на базе PIC-микро-
контроллера: http://www.efd.lth.se/~e96rg/pic.html:
♦ Pic Point - масса полезных проектов на выбор, бесплатно 5 Мб
для любого, кто хочет открыть собственную Web-страницу по
Р1С-микроконтроллерам: http:/ /www.picpoint.com/:
♦ Microtronic - обзор программаторов и приложений: http: //
www.eedevl.com/index.html:
БИБЛИОГРАФИЯ
♦ Home Page системы разработки Pic ‘n Poke Тони Никсона (Tony
Nixon). Эта система содержит анимационный симулятор, пред-
ставляющий собой отличный инструмент для изучения пото-
ков данных и исполнения команд в Р1С-микроконтроллерах:
http://www.picnpoke.com/.
♦ ООО «ФИРМА ФИТОН» - Разработка и производство инстру-
ментальных средств для микроконтроллеров - эмуляторы, си-
муляторы, программаторы, компиляторы, контроллеры-конст-
рукторы. Официальный поставщик инструментальных средств
для микроконтроллеров фирмы Microchip (3d Party Vendor):
http://www.phyton.ru/.
ПЕРИОДИЧЕСКИЕ ИЗДАНИЯ
Ниже приведены названия журналов, предоставляющих значитель-
ный объем информации по PIC-микроконтроллерам. Практически
ежемесячно каждый из этих журналов публикует новое приложение
для PIC-микроконтроллера.
♦ Circuit Cellar Ink: http://www.circellar.com/:
♦ Poptronics: http://www.gernsback.com:
♦ Microcontroller Journal: http://www.mcjournal.com/:
♦ Nuts and Volts: http://www.nutsvolts.com:
♦ Everyday Practical Electronics: http://www.epemag.wimbome.co.uk.
ПОЛЕЗНЫЕ WEB-САЙТЫ
Хотя ни один из представленных ниже сайтов не является специаль-
но посвященным PIC-микроконтроллерам, все они предлагают мас-
су идей, информации и продуктов, способных сделать вашу жизнь
более интересной. Может быть, из них вы почерпнете идеи для раз-
работки собственных проектов, связанных с PIC-микроконтролле-
рами.
Seattle Robotics Society
http://www.hhhh.org/srs/
Seattle Robotics Society располагает большим объемом информации
по сопряжению цифровых устройств с такими устройствами реаль-
ного мира, как двигатели, датчики и серводвигатели. Кроме того, эта
компания делает много полезного в области автоматизации. В боль-
шинстве приложений используется микроконтроллер Motorola
68НС11.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
List of Stamp Applications (L.O.S.A.)
http://www.hth.com/losa.htm
Перечень приложений Parallax Basic Stamp дает представление
о том, что может быть сделано на базе Basic Stamp (а также других
устройств, например PIC-микроконтроллеров). В этом списке содер-
жатся проекты, начиная со способа применения Basic Stamp для ле-
чения кошек и заканчивая простой телеметрической системой для
моделей ракет.
Adobe PDF Viewers
http://www.adobe.com
Формат Adobe PDF используется практически во всех техничес-
ких описаниях поставщиков, в том числе для устройств, представ-
ленных в данной книге.
PKZip и PKUnZip
http://www.pkware.com
Формат сжатия ZIP является стандартным для комбинирования
и сжатия файлов при отправке.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ ПО АППАРАТНОМУ
ОБЕСПЕЧЕНИЮ
http://paranoia.com/-filipg/HTML/LINK/LINK IN.html
Здесь расматривается ряд часто задаваемых вопросов по IBM PC
и другим аппаратным платформам. Обратитесь к этому сайту, когда
потребуется обеспечить сопряжение микроконтроллера с хост-
компьютером.
http://www.innovatus.com
Компания Innovatus сделала общедоступным PICBots, интерес-
ный симулятор PIC-микроконтроллера, который позволяет писать
программы для виртуальных роботов, сражающихся друг с другом.
ПОСТАВЩИКИ КОМПЛЕКТУЮЩИХ
Приобрести PIC-микроконтроллеры, средства разработки и про-
грамматоры в России можно у следующих поставщиков электронных
компонентов:
♦ ООО «МИКРО-ЧИП»
E-mail: sales@microchip.ru
БИБЛИОГРАФИЯ
http://www.microchip.ru
http://www.imicro.ru
Тел./факс: (095) 963-96-01
♦ НПО«СИММЕТРОН»
E-mail: npo@symmetron.ru
http://www.symmetron.ru
Москва, ул. 8 марта, 8.
Тел.: (095) 214-25-55; 212-33-08
Санкт-Петербург, ул. Таллинская, 7.
Тел.: (812) 278-84-84; 444-02-68
♦ ЗАО«КОМПЭЛ»
E-mail: compel@compel.ru
http://www.compel.ru
Москва, 109044, а/я 19.
Тел.: (095) 937-41-00; 921-43-77
Факс: (095) 937-41-01; 923-64-42
♦ Консультационно-технический центр по микроконтроллерам
(КТЦ-МК)
http:/ /www.cec-mc.ru - корпоративный сайт
http:/ /www.gaw.ru - сайт технической поддержки
103030. Москва, Щемиловский пер., 19.
Тел.: (095) 973-18-55; 942-34-16
Факс: (095) 973-18-64
♦ ООО «ФИРМАМЭЙ»
E-mail: info@may.ru, may@space.ru
http://www.maynetclub.ru
107497, Москва, Щелковское ш., 75.
Тел.: (095) 913-51-61; 913-51-60
♦ магазин «КВАРЦ» (от «ФИРМЫ МЭЙ»)
105023, Москва, ул. Буженинова, 16.
Тел.: (095) 964-08-38
♦ ЗАО «ПЛАТАН»
E-mail: platan@aha.ru
http://www.platan.ru
Тел.: (095) 284-36-69; 284-56-78; 284-41-08
ПОСТАВЩИКИ КОМПЛЕКТУЮЩИХ
♦ магазин «ЧИП и ДИП»
E-mail: sales@chip-dip.ru
http://www.chip-dip.ru
Москва, ул. Гиляровского, 39.
Тел.: (095) 284-56-78, 284-36-69, 281-99-17, 971-31-45
Факс: (095) 971-31-45
♦ ООО НПФ «CHIP SELECT»
E-mail: nick@chipsel.msk.ru
http://www.chipselect.ru
Тел./факс: (095) 268-73-69
Тел.: (095) 268-88-60
Сведения о других поставщиках можно найти на сайте
http://www. catalog.gaw.ru
предметный указатель
ANSI 465
BIOS 344, 358
USART 116, 347
A
Автоподстройка частоты 154
Адрес
базовый 348
четный 100
Адресация
индексная 83
прямая 97
Адресное пространство 83
Алгоритм кодирования 290
Архитектура
микроконтроллера 80
Б
Байт 100
Банк
доступа 97
регистров 83
Батарея аккумуляторная 213
Бит 69
набор 151
Блок
последовательного
приема 172
последовательной
передачи 172
Булева алгебра 490
Буферизация данных 113
Вектор
прерывания 91
стартовый 81
Ветвление 362
Временная задержка 362
Время доступа 199
Вывод электрический 20
Выравнивание 193
д
Данные
поток 262
сеанс передачи 263
скорость передачи ,182
Двигатель 283
постоянного тока 286
шаговый 286
Диод
полупроводниковый 249
шунтирующий 285
Дисплей ЖК 25
Дребезг контактов клавиши 217
3
Закон
ассоциативности 491
двойного отрицания 490
дистрибутивности 491
дополнения 491
идеального газа 490
идемпотентности 491
коммутативности 491
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
Ома 488 двойного отрицания 490 Знакогенератор 233 таблица 232 Курсор 228 внутренний 230 Л
И Линия ввода/вывода 158
Излучение электромагнитное 285 Индикатор светодиодный 120, 224 Индикация 225 Интерфейс 207 RS-232 262 RS-422 267 RS-485 267 Источник данных 70 низковольтный 290 опорного напряжения 117 питания 212 синхронизирующих импульсов 163 дифференциальная 267 «рукопожатия» 262 Логика цифровая 484 КМОП 265 ТТЛ 264 м Магнит 286 Макрокоманда 69 Матрица коммутации 219 Метки 69 Модем 262 Модули 80 Монтаж поверхностный 20
К МОП транзистор мощный 285
Карта распределения памяти ПК 320 Клавиатура 221 Код ASCII 227, 462, 466 EBCDIC 470 Ten 478 избыточный циклический 293 Морзе 477 скан-код 340 сканирования 222 шаблон 416 Комбинации клавиш 400 Контакт 285 Корпуса 20 Коэффициент деления 164 с N-каналом 151 Мост Уитстона 488 Мощность рассеяния 285 Мультиплексор 169 н Напряжение входное пороговое 216 компаратор 117 опорное 117 управления контрастом 227 о Обмотка двигателя 283 электрическая 286
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
Операция
деление 384
инкрементирование 376
сложение 378
сравнение 380
битовые 379
умножение 80, 382
Операционная таблица
НЗ-генераторы 392
LP-генераторы 391
ХТ-генераторы 391
токовые характеристики 388
Ошибка
затирания данных 174
кадрирования 174
Параллельный порт 354
базовые регистры 356
блок-схема 354
разъем 354
регистры 356
Параметр команды 38
Передача
зубчатая 286
последовательная
синхронная 116
последовательная
асинхронная 115
ПЗУ
программируемое
стираемое 204
программируемое
электрически 109
Площадка контактная 20
Погрешность 190
измерения 276
Подсемейство
младшее 20
среднее 22
старшее 25
Поле
магнитное 290
электромагнитное 284
Полубайт 92
Порт
ввода/вывода
данных 90, 158
последовательный 346
управляемый
параллельный 197
Постскалер 110
Потенциометр 227
Преобразователь
аналого-цифровой 118
уровня 263
-цифро-аналоговый 196
Прескалер 110, 164
Прерывание
обработка 87,431
приоритет 96
управление 108
запрос 88
программа обработки 88
система 80
компонент 90
Приемник
инфракрасного излучения 291
телевизионный 290
Программа
загрузчик 313
компилятор 97
фрагменты 360-373
Программирование 297, 300
Р1С12С50х 304
Р1С16С50х 304
PIC16F8x 305
PIC18Cxx 314
последовательное 300
Протокол однопроводный 276
Пульт дистанционного
управления 291
Р
Радиолокационные
диапазоны 484
Радиопомеха 285
Регистр
аккумулятор 91
индексный 83, 87
калибровки генератора 81
контекста 100
конфигурации 87
передачи сдвиговый 173
состояния 84
общего назначения 92
первичного набора 46
спецфункций 92
Режим
ввода данных 159
вывода данных 159
захвата 168
ожидания 155
отладки 150
полудуплексный 266
сравнения 170
ШИМ 170
Резистор
программируемый 151
токоограничивающий 269
Резонанс 488
Резонатор 151
предметный указатель
gglgllg
с
Сброс при понижении
напряжения питания 212
Серводвигатель 287
Сеть электрическая 290
Сигнал
аналоговый 191
вызова 263
звуковой 288
мощности 284
несущей 263
тревоги 194
Система команд 38
Ситуация конфликтная 188
Слово командное 93
Соответствия единиц
измерений 491
Сопротивление
последовательное
эквивалентное 212
характеристическое 268
Стабилизатор напряжения 213
Стабилитрон 213
Стек 80
быстродействующий 100
команд 86
программного счетчика 99
указатель 98
Сток открытый 160
Схема
демпфирующая 285
мостовая 283
трехпроводная 250
Счетчик
двоичный 164
команд 81
программный 300
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
Т
Таблица неисправностей 394
Таймер 80,110
Теорема Де Моргана 491
Термометр цифровой 276
Триак 289
Триггер 484
D-триггер 249
Шмитта 151
У
Уровень приоритета 102
Условие
стартовое 185
стоповое 185
Устройство
арифметико-логическое 80
запоминающее внешнее 90
запоминающее
программное 207
оконечное 262
передачи данных 263
робототехническое 284
шины параллельной 216
запоминающее EEPROM 199
ф
Файл
включаемый 406
исходный 160
объектный 414
Флэш-память 205
Функция
захвата сигнала 110
идентификации 490
логические 87
ш
Шина
адреса/данных 207
однопроводная 277
ISA 334
э
Электромагнитные
излучение 484
спектр 483
Эффект
звуковой 284
мерцания 226
отражения сигнала 268
Холла 290
Языки
Basic 416
С 449-457
PBASIC
PicBasic 418
Visual Basic
ассемблер 72, 151,406
программирования 72