Text
                    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