Text
                    
РАДИОКОМПОНЕНТЫ
МИКРОКОНТРОЛЛЕРЫ
Р1Й16Ш
СПРАВОЧНИК ПО КМОП-МИКРОСХЕМАМ с АЦП
Общий обзор микроконтроллеров фирмы MICROCHIP
Структура, система команд, практическое применение
Назначение выходных контактов, их совместимость

Microchip В. А. Ульрих Микроконтроллеры PIC16C7X Семейство восьмиразрядных КМОП микроконтроллеров с аналого-цифровым преобразователем НАУКА И ТЕХНИКА 2000 г.
Издательство «НАУКА И ТЕХНИКА» Ульрих Виктор Александрович Микроконтроллеры PIC16C7X Семейство восьмиразрядных КМОП микроконтроллеров с аналого-цифровым преобразователем Под редакцией С.Л. Корякина-Черняка, члена Международной академии информационных процессов и технологий Серия «Радиокомпоненты» Книга представляет собой техническое руководство, которое будет полезно как на книжной полке, так и на лабораторном столе. Книга написана на основе технической документации PIC16C7X и PIC16C71X фирмы MICROCHIP и опыта реализации устройств на базе микроконтроллеров рассмотренного семейства. В книге рассмотрена структура микроконтроллеров семейства PIC16C7X, подробно описаны все функциональные узлы и система команд, описано назначе- ние выходных контактов для различных типов корпусов микросхем, приведен об- щий обзор микроконтроллеров фирмы MICROCHIP и описана их совместимость по контактам. Особое внимание обращено на практическое применение микро- контроллеров. Эта книга является первой попыткой поделиться многолетним опы- том разработки электронных устройств, в том числе на базе микроконтроллеров рассмотренного семейства. Справочник предназначен для инженерно-технических работников, занима- ющимся разработкой электронной аппаратуры, а также студентов вузов. (812) 567-70-25, (044) 559-27-40 Обложка: Болдырев К.В © Ульрих В.А. © Наука и техника, 2000 ----1 Лицензия № 065007 от 18 февраля 1997 г. ООО «КОРОНА ПРИНТ», 198005, Санкт-Петербург, Измайловский пр., 29. Подписано в печать 29.09.2000. Формат 70 х 100 1/16. Бумага газетная. Печать офсетная. Объем 16 печ. л. Тираж 5 000 экз. Заказ № 1092. Отпечатано с готовых диапозитивов в ордена Трудового Красного Знамени ГП «Техническая книга» Министерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций. 198005, Санкт-Петербург, Измайловский пр., 29.
PIC16C7X ОГЛАВЛЕНИЕ ОГЛАВЛЕНИЕ 1. Общий обзор...................................................................5 1.1. Совместимость семейства...................................................7 1.2. Поддержка при разработке..................................................7 2. Варианты устройств Р1С16С7Х..................................................10 2.1. Устройства с ультрафиолетовым стиранием..................................10 2.2. Однократно программируемые устройства....................................10 2.3. Устройства с масочным ПЗУ................................................11 3. Структура микроконтроллеров..................................................12 3.1. Синхронизация командных циклов...........................................13 3.2. Конвейерная обработка команд.............................................13 4. Организация памяти...........................................................23 4.1. Память программ..........................................................23 4.2. Память данных........................................................... 23 4.3. Регистры PCL и PCLATH....................................................44 4.4. Страничная организация памяти программ...................................45 5. Порты ввода/вывода (I/O).................................................. 48 5.1. Регистры PORTA и TRISA.................................................. 48 5.2. Регистры PORTB и TR1SB...................................................49 5.3. Регистры PORTC и TR1SC...................................................51 5.4. Регистры PORTD и TR1SD...................................................52 5.5. Регистры PORTE и TRISE...................................................53 5.6. Программирование портов I/O..............................................54 5.7. Параллельный ведомый порт................................................56 6. Модули таймера...............................................................59 6.1. Таймер 0.................................................................59 6.2. Таймер 1.................................................................59 6.3. Таймер 2.................................................................60 6.4. Модуль накопителя / компаратора / ШИМ (ССР)..............................60 7. Модуль таймера 0.............................................................61 7.1. Прерывание от таймера 0..................................................62 7.2. Внешняя синхронизация таймера 0..........................................62 7.3. П ред дел i гтел ь.......................................................64 8. Модуль таймера 1.............................................................66 8.1. Таймер! в режиме таймера.................................................66 8.2. Таймер 1 в режиме синхронного счетчика...................................67 8.3. Таймер 1 в режиме асинхронного счетчика................................. 69 8.4. Генегатор таймера 1......................................................70 8.5. Сброс таймера 1 с использованием выхода ССР..............................70 8.6. Сброс регистров таймера 1 (TMRIН : TMR1L)................................71 8.7. Предделнтель таймера 1....................................................71 9. Модуль таймера 2..............................................................72 9.1. Предделнтель и постделитель таймера 2.................................. 72 9.2. Выход таймера 2..........................................................72 10. Модули ССР..................................................................74 10.1. Режим накопления........................................................75 10.2. Режим сравнения.........................................................77 10.3. Режим ШИМ...............................................................78 11. Модуль синхронного последовательного порта..................................82 11.1. Режим SP1...............................................................82 11.2. Описание интерфейса 12С.................................................90 11.3. SSP в режиме 12С........................................................95 3
ОГЛАВЛЕНИЕ PIC16C7X 12. Универсальный синхронно-асинхронный приемопередатчик (USART)..............102 12.1. Генератор скорости передачи USART (BRG)...............................104 12.2. Асинхронный режим USART...............................................109 12.3. Синхронный режим ведущего USART.......................................114 12.4. Синхронный режим ведомого USART.......................................119 13. Модуль аналого-цифрового преобразователя..................................121 13.1. Устройство выборки и хранения.........................................125 13.2. Синхронизация А/D преобразования......................................127 13.3. Программирование аналоговых входов....................................128 13.4. А/D преобразование....................................................129 13.5. А/D преобразование во время останова..................................131 13.6. Ошибка н точность А/D преобразования..................................131 13.7. Воздействие сброса....................................................132 13.8. Запуск специальным событием ССР.......................................132 13.9. Рекомендации при подключении......................................... 132 14. Дополнительные возможности микроконтроллера...............................134 14.1. Слово конфигурации....................................................135 14.2. Конфигурации генератора...............................................137 14.3. Сброс................................................................ 141 14.4. Прерывания............................................................149 14.5. Сохранение регистров при прерывании...................................152 14.6. Сторожевой таймер (WDT)...............................................153 14.7. Режим низкого потребления (останов)...................................155 14.8. Зашита программы......................................................157 14.9. Запись идентификатора.................................................157 14.10. Внутрисхемное программирование.......................................158 15. Система команд............................................................159 15.1. Описаний команды......................................................162 16. Электрические характеристики..............................................181 16.1. Предельные эксплуатационные характеристики............................181 17. Применение микроконтроллеров..............................................182 17.1. Портативный стереофонический усилитель с кнопочным регулятором уровня громкости н тембра...................................................182 17.2. Часы реального времени с малым потреблением...........................197 17.3. Импульсный преобразователь напряжения на базе P1CI6C72A...............210 17.4. ЦАП для генерации синусоидального сигнала н DTMF с использованием ШИМ и матрицы R-2R.........................................227 ПРИЛОЖЕНИЯ.....................................................................240 Обзор микроконтроллеров PIC12/17............................................240 Совместимость контактов.....................................................253 4
PIC16C7X Глава 1 I. ОБЩИЙ ОБЗОР PIC16C7X - семейство дешевых, высокоэффективных, 8-разрядных КМОП микроконтроллеров со встроенным аналого-цифровым (analog-to- digital (А/D)) преобразователем. Среди микроконтроллеров; PIC16CXX дан- ное семейство занимает среднее положение. Все микроконтроллеры PIC16/17 используют RISC структуру процес- сорного ядра. Семейство микроконтроллеров PIC16CXX имеет расширенные возможности ядра, стек глубиной восемь уровней и множество внутренних и внешних прерываний. Гарвардская архитектура с отдельными шинами ко- манд и данных позволяет одновременно передавать 14 разрядные команды и 8 разрядные данные. Двух командный конвейер позволяет выполнять все ко- манды за один машинный цикл, кроме команд ветвления программы, которые выполняются за два цикла. Уменьшенная система команд (всего 35 команд). Высокая эффективность достигается использованием новшеств архитектуры и большого набора дополнительных регистров. Микроконтроллеры семейства PIC16CXX по сравнению с другими 8 разрядными микроконтроллерами такого же класса позволяют уменьшить программу 2:1 и увеличить быстродействие 4:1. Устройства PIC16C710/71 имеют 36 байт памяти данных (RAM), PIC16C711 - 68 байта и PIC16C715 - 128 байта. У каждого из этих устройств по 13 контактов ввода - вывода (I/O). Кроме того, 8 разрядный счетчик / тай- мер, а также быстродействующий 8 разрядный А/D преобразователь с 4 мультиплексированными входными каналами. 8 разрядное разрешение A/D преобразователя идеально подходит для дешевых приложений, требующих аналоговый интерфейс. PIC16C72 имеет 128 байт памяти данных и 22 контакта I/O. Кроме того, периферийные устройства включают: три таймера / счетчика, один модуль сравнения накопления и широтно-импульсной модуляции (ШИМ) (Capture / Compare / PWM) и последовательный порт. Синхронный последовательный порт может функционировать как 3 проводной последовательный перифе- рийный интерфейс (SP1) или двухпроводная шина (12С), а также быстродейст- вующий 8 разрядный А/D преобразователь с 5 мультиплексированными входными каналами. 8 разрядное разрешение А/D преобразователя идеально подходит для дешевых приложений, требующих аналоговый интерфейс. ’ Устройства Р1С16С73/73А имеют 192 байта памяти данных, a PIC16C76 - 368 байт. У каждого из этих устройств по 22 контакта I/O. Кроме того, пе- риферийные устройства включают: три таймера / счетчика, два модуля срав- нения накопления и ШИМ (ССР) и два последовательных порта. Синхронный последовательный порт может функционировать как 3 проводной последова- тельный периферийный интерфейс (SPI) или двухпроводная шина (12С). Уни- версальный синхронно-асинхронный приемопередатчик (USART) также из- 5
Глава 1 PIC16C7X вестный как последовательный интерфейс связи (SCI), а также быстродейст- вующий 8 разрядный А/D преобразователь с 5 мультиплексированными входными каналами. 8 разрядное разрешение А/D преобразователя идеально подходит для дешевых приложений, требующих аналоговый интерфейс. Устройства PICI6C74/74A имеют 192 байта памяти данных, a PIC16C77 - 368 байт. У каждого из этих устройств по 33 контакта I/O. Кроме того пери- ферийные устройства включают: три таймера / счетчика, два модуля сравне- ния накопления и ШИМ (ССР), два последовательных порта и 8-разрядный параллельный ведомый порт. Синхронный последовательный порт может функционировать как 3 проводной последовательный периферийный интер- фейс (SPI) или двухпроводная шина (12С). Универсальный синхронно асин- хронный приемопередатчик (USART) также известный как последовательный интерфейс связи (SCI), а также быстродействующий 8 разрядный А/D преоб- разователь с 8 мультиплексированными входными каналами. 8 разрядное разрешение А/D преобразователя идеально подходит для дешевых приложе- ний, требующих аналоговый интерфейс. Для того чтобы уменьшить количество внешних компонентов и таким образом уменьшить стоимость, повысить надежность системы и снизить по- требление, семейство микроконтроллеров PIC16C7X имеет дополнительные возможности. Имеются четыре режима генератора: RC генератор на одном контакте обеспечивает дешевое решение, LP генератор обеспечивает мини- мальное потребление, XT генератор - стандартное решение и HS генератор - для высокочастотных приложений. Режим останова позволяет резко умень- шить потребление. Пробуждение из режима останова может осуществляться при помощи внешних и внутренних прерываний и сбросов. Высоко надежный сторожевой таймер со своим RC генератором обес- печивает защиту от зацикливания программы. Вариант микросхем CERDIP с ультрафиолетовым стиранием идеально подходит для разработки и отладки программы, в то время как однократно программируемые варианты рентабельны для выпуска продукции в любом объеме. Семейство микроконтроллеров PIC16C7X приспособлено для примене- ния в удаленных устройствах защиты и датчиках, для приборов управления и автомобилей. Технология программируемого ПЗУ делает настройку приклад- ных программ быстрой и чрезвычайно удобной. Малогабаритные корпуса микросхем делают это семейство микроконтроллеров совершенными для всех приложениях без ограничений. Низкая цена, малая потребляемая мощ- ность, высокая эффективность, удобство при использовании и гибкость I/O делает PIC16C7X универсальным даже в областях, где использование микро- контроллеров прежде не рассматривалось (например функции таймера, по- следовательная связь, сбор и сравнение данных, функции ШИМ и приложе- ния с сопроцессором). 6
PIC16C7X Глава 1 1.1 СОВМЕСТИМОСТЬ СЕМЕЙСТВА Пользователи, знакомые с семейством микроконтроллеров PIC16C5X, поймут, что PIC16C7X - версия расширенной архитектуры PIC16C5X. Со- вместимость микроконтроллеров всего семейства PIC16CXX приведена в приложении. Программа для PIC16C5X может быть легко перенесена в устройства семейства PIC16C7X. Чтобы преобразовать программу, написанную для PIC16C5X, в программу для PIC16C7X, необходимо выполнить следующие шаги: 1. Удалить все операции выбора страниц памяти программы (операции над битами РА2, РА1, РАО) для команд CALL и GOTO. 2. Повторно просмотреть все вычисленные операции для переходов (запись в PC, сложение с PC и т.д.), чтобы убедится, что биты страни- цы установлены верно согласно новой структуре. 3. Исключить все переключения страниц памяти данных. Переопреде- лить переменные данных, чтобы перераспределить их. 4. Проверить все записи в регистры STATUS, OPTION и FSR, так как они изменились. 5. Заменить вектор сброса, так как он стал OOOOh. 1.2 ПОДДЕРЖКА ПРИ РАЗРАБОТКЕ Устройства PIC16C7X обеспечиваются полным набором инструмен- тальных средств для разработки программного обеспечения. • PICMASTER - высокоэффективный универсальный внутрисхемный эмулятор в реальном масштабе времени. • ICEPIC - дешевый внутрисхемный эмулятор PIC16C5X и PIC16CXXX. • PRO MATE ® II - универсальный программатор. • P1CSTART ® Plus - набор разработчика. • PICDEM-1 - дешевая демонстрационная плата PIC16/17. • PICDEM-2 - дешевая демонстрационная плата PIC16CXX. • PICDEM-3 - дешевая демонстрационная плата PIC16CXXX. • MPASM - ассемблер. • MPLAB-SIM - программный имитатор. • MPLAB-C - компилятор языка "С". • Fuzzy ТЕСН-МР - средства разработки не четкой логики. 7
Таблица 1.1. Микроконтроллеры семейства PIC 16С7Х Микросхема PIC16C710 PIC16C71 Р1С16С711 Р1С16С715 PIC16C72 Частота Тактовая частота (МГц) 20 20 20 20 20 Память Программируемое ПЗУ памяти программ 512x14 1Кх14 1Кх14 2Кх14 2Кх14 ПЗУ памяти программ - - - - - Память данных (байт) 36 36 68 128 128 Периферия Модули таймера TMRO TMRO TMRO TMRO TMRO.TMR1,' TMR2 Модули компаратора / накопителя / ШИМ - - - - 1 Последовательные порты • - - - SP1/I2C Параллельный порт - - - - - А/D преобразователь (8 разрядов) каналов 4 4 4 4 5 Особенности Источники прерываний 4 4 4 4 8 Контакты I/O 13 13 13 13 22 Напряжение питания (В) 3.0-6.0 3.0-6.0 3.0-6.0 3.0-5.5 2.5-6.0 Внутрисхемное программирование Да Да Да Да Да Сброс при снижении питания Да - Да Да Да Типы корпусов 18 кон. DIP, SOIC. 20 кон. SSOP 18 кон. DIP, SOIC 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC. 20 кон. SSOP 28 кон. SDIP, SOIC, SSOP Глава 3__________________________________PIC16C7X
Продолжение таблицы 1.1 Микросхема PIC16CR72 PIC16C73A PIC16C74A PIC16C76 PIC16C77 Частота Тактовая частота (МГц) 20 20 20 20 20 Память Программируемое ПЗУ памяти программ - 4Кх 14 4Кх 14 8Кх 14 8Кх14 ПЗУ памяти программ 2Кх14 - - - - Память данных (байт) 128 192 192 368 368 Периферия Модули таймера TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1.TMR2 TMRO, TMR1.TMR2 Модули компаратора / накопителя / ШИМ 1 2 2 2 2 Последовательные порты SPI/I2C SPI/PC, USART SPI/PC, USART SPI/PC, USART SPI/PC, USART Параллельный порт - - Да - Да ' А/D преобразователь (8 разрядов) каналов 5 5 8 5 8 Особенности Источники прерываний 8 И 12 ll 12 Контакты I/O 22 22 33 22 33 ! Напряжение питания (В) 3.0-5.5 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 Внутрисхемное программирование Да Да Да Да Да Сброс при снижении питания Да Да Да Да Да Типы корпусов 28 кон. SDIP, SOIC, SSOP 28 кон. SDIP, SOIC 40 кон. DIP, 44 кон PLCC, MOFP.TQFP 28 кон. SDIP, SOIC 40 кон DIP, 44 кон. PLCC, MQFP.TQFP чо Все Р1С16С7Х имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. PIC16C7X __________________________________Глава 3
Глава 2 PIC16C7X 2. ВАРИАНТЫ УСТРОЙСТВ PIC16C7X Микроконтроллеры семейства PIC16C7X выпускаются для различных частотных диапазонов и в различных вариантах корпусов. В зависимости от приложения и промышленных требований может быть выбран соответст- вующий вариант устройства. Для семейства PIC16C7X существует несколько типов обозначения уст- ройств в номере: 1 . С - как, например, PIC16C74. Эти устройства имеют программируе- мое ПЗУ памяти программ и функционируют в стандартном диапазо- не напряжений питания. 2 . LC - как, например, PIC16LC74. Эти устройства имеют программи- руемое ПЗУ памяти программ и функционируют в расширенном диа- пазоне напряжений питания. 3 . CR - как, например, PIC16CR72. Эти устройства имеют масочное ПЗУ памяти программ и функционируют в стандартном диапазоне напря- жений питания. 2 .1 УСТРОЙСТВА С УЛЬТРАФИОЛЕТОВЫМ СТИРАНИЕМ Вариант устройства с ультрафиолетовым стиранием, выпускаемый в корпусах CERDIP, оптимален для разработки макета и отладки программного обеспечения. Записанный в ПЗУ вариант программы может быть уничтожен и устройство перепрограммировано для любого из режимов генератора. Программаторы PICSTART ® Plus и PRO MATE ® II осуществляют про- граммирование всех микрокристаллов Р1С16С7Х. 2 .2 ОДНОКРАТНО ПРОГРАММИРУЕМЫЕ УСТРОЙСТВА Доступность однократно программируемых устройств особенно полез- на, когда необходима гибкость при частых модификациях программы и ма- лых объемах изделий. Однократно программируемые устройства выпускаются в пластмассо- вых корпусах и позволяют пользователю программировать их один раз. В дополнение к памяти программы необходимо также программировать слово конфигурации. 10
PIC16C7X Глава 2 2 .3 УСТРОЙСТВА С МАСОЧНЫМ ПЗУ Микрокристаллы с масочным ПЗУ программируются заводом - изгото- вителем в процессе производства. Устройства с масочным ПЗУ изготавлива- ются для пользователей, которые выпускают большое количество продукции без дополнительных операций программирования, так как программа отрабо- тана и не требует изменений. Эти устройства идентичны однократно про- граммируемым, но вся память программ и слово конфигурации уже запро- граммированы изготовителем. За более подробной информацией и для заказа устройств с масочным ПЗУ необходимо обращаться к местному дистрибьютору фирмы.
Глава 3 PIC16C7X 3. СТРУКТУРА МИКРОКОНТРОЛЛЕРОВ Высокая эффективность семейства PIC16CXX может быть отнесена за счет использования в микропроцессорах RISC структуры. Микропроцессор- ное ядро PIC16CXX использует Гарвардскую структуру, в которой память программ и данных расположены в отдельных блоках и для обращения к ним используются отдельные шины. Это позволяет увеличить скорость выполне- ния программы по сравнению с традиционной структурой, в которой про- грамма и данные выбираются из одной и той же памяти с использованием одной шины. Отдельные шины программ и данных позволяют передавать команды и данные разных размеров. По шине данных передаются 8 разряд- ные слова, а по шине команд - 14 разрядные коды операций. 14 разрядная организация памяти программ и шины команд позволяет размещать каждую команду в одной ячейке памяти и передавать ее за один цикл. Двухступенча- тый конвейер совмещает выборку очередной команды и выполнение текущей (Пример 3-1). Следовательно, все 35 операций системы команд выполняются за один цикл (200 нс при частоте генератора 20 МГц), кроме операций ветв- ления программы. Устройства Память программ Память данных PIC16C710 512х 14 36x8 PICI6C71 1Кх 14 36 х 8 PIC16C711 1Кх 14 68 х 8 PIC16C715 2Кх 14 128x8 PIC16C72 2Кх 14 128x8 PIC16C72A 2Кх 14 128x8 PIC16C73 4Кх 14 192x8 PIC16C73A 4Кх 14 192x8 PIC16C74 4Кх 14 192x8 Р1С16С74А 4Кх 14 192x8 . PIC16C76 8Кх 14 368 x8 PIC16C77 8Кх14 386 х 8 Ниже в таблице показан объем памяти программ (EPROM) и памяти данных (RAM) для каждого устройства PIC16C7X. Р1С16СХХ может осуществлять пересылку данных непосредственно или косвенно. Все функцио- нальные регистры, включая счетчик программ, отобра- жены в памяти данных. Р1С16СХХ имеет симмет- ричную систему команд, которая делает возможным выполнение любой опера- ции в любом регистре, ис- пользуя любой способ адре- сации. Симметричная сис- тема команд без специаль- ной оптимизации местопо- ложения делает программирование PIC16CXX простым и эффективным. Все устройства PIC16CXX содержат 8 разрядное арифметико- логическое устройство (ALU) и аккумулятор (рабочий регистр W). ALU вы- полняет арифметические операции и булевы функции над данными в аккуму- ляторе и в любой ячейке памяти данных. 12
PIC16C7X Глава 3 8 разрядное ALU выполняет действия сложения, вычитания, сдвига и логические операции. Арифметические операции с отрицательными числами выполняются в дополнительном коде. В командах с двумя операндами один операнд - аккумулятор-регистр W, а другой операнд - ячейка памяти данных или непосредственная константа. В командах с одним операндом им является регистр W или ячейка памяти данных. Аккумулятор 8 разрядный рабочий регистр W, используется для опера- ций ALU. Регистр W - не адресуемый регистр. В зависимости от результатов выполнения команды ALU может воздей- ствовать на флажки регистра состояния (STATUS), переноса (С), дополни- тельный перенос (DC) и признак нуля (Z). При сложении флажки С и DC яв- ляются переносом, а при вычитании - заемом. 3.1 СИНХРОНИЗАЦИЯ КОМАНДНЫХ ЦИКЛОВ Тактовая частота со входа OSC1 делится на четыре для формирования четырех непересекающихся фаз синхронизации: такты QI, Q2, Q3 и Q4. Про- граммный счетчик (PC) увеличивается на каждом такте Q1. Выборка коман- ды из памяти программ и запись в регистр выполняются на такте Q4. Коман- да декодируется и выполняется в течении следующих четырех тактов QI - Q4. На рис. 3-1 показана синхронизация и порядок выполнения команд. 02 03 04 PC 0SC2/CLK0UT (в режиме RC) I Q1 | Q2 | 03 | 04 । Q1 | Q2 | Q3 | 04 I Q1 | Q2 | Q3 | 04 । 0SC1 —< /—\_J—\ I——\__r~v_/—v_/—\l Выборга команды frt) Выполнение команды (РС-1) ~ Выборка команды (РС*2) ~ Выполнение команды Фазы . внутренних тактов Выборка команды {Рс»1) Выполнение команды (PC) Рис. 3-1 Синхронизация командных циклов 3.2 КОНВЕЙЕРНАЯ ОБРАБОТКА КОМАНД Командный цикл состоит из четырех тактов (Q1, Q2, Q3 и Q4). Выборка и выполнение команд выполняется конвейерным способом, то есть в одном командном цикле декодируется и выполняется одна команда и выбирается следующая. Конвейерная обработка позволяет выполнять каждую команду за один цикл. Если команда изменяет программный счетчик (например. GOTO), то для завершения команды требуется второй цикл (Пример 3-1). 13
Глава 3 Р1С16С7Х Цикл выборки начинается с инкрементирования программного счетчика (PC) в течение такта Q1. В цикле выполнения в течение такта Q1 выбранная и записанная коман- да находится в регистре команд (IR). Эта команда затем декодируется и вы- полняется в течение тактов Q2, Q3 и Q4. Данные из памяти считываются в течение такта Q2 (чтение операнда), а запись выполняется во время такта Q4 (запись результата). Память программ Шина данных EPROM Стек 8x13 RAM Память данных Шина программ V | Регистр команд | || Непосредственный адрес PORTA Адрес1 9 / Мультиплексору / адгёа -—* Л /уСосвенный / .2 Г 8If адрес PORTB RA0/AN0 RAI/AN1 RA2/AN2 RA3/AN3/VREF RA4/T0CK1 RA5/SS/AN4 RB! RB7 7 _____V, Декодер команд и управление Таймер включения питания (OST) Таймер запуска генератора (PWRT) Сторожевой TafiMep(WDT) \ Мультиплексор J [ Регистр W | Таймер О Сброс при включении питания (POR) Сброси> при снижении питания (BOR) OSC1/CLK1N OSC2/CLKOUT Устройства Память программ Память данных P1CI6C710 512x14 36x8 PICI6C7I 1Кх 14 36x8 PICI6C7I1 1К.х 14 68x8 PICI6C715 2Кх 14 128x8 Рис. 3-2 Структурная схема PIC 16С710/71/711/715 1. Старшие разряды адреса из регистра STATUS. 2. Сброс при снижении питания отсутствует на PIC16C71. 14
PIC16C7X Глава 3 Пример 3-1 Конвейерная обработка команд ТсуО Tcyl Тсу2 ТсуЗ , Тсу4 Тсу5 1. MOVLW 55h | Выборка Выполнение 2. MOVWF PORTB Выборка Выполнение 3. CALL SUB_1 Выборка Выполнение 4. BSP PORTA, BIT3 ;(Вынуждено NOP) Выборка Скрыта й 5. Команда по адресу SUB_ Выборка Выполнение) Все команды выполняются за один цикл, кроме команд ветвления про- граммы, которые выполняются за два цикла, так как выбранная команда вы- гружается из конвейера, а новая команда выбирается и затем выполняется. Таблица 3-1. Описание выводов PIC16C710/71/711/715 Наименование № DIP контакта Тип SSOP SOIC Типа буфера Описание OSCI/CLK1N 16 18 16 I ТШ/ КМОП*’ Кварцевый резонатор - вход/ вход внешнего генератор. OSC2/CLKOUT 15 17 15 О - Кварцевый резонатор - выход/ выход CLKOUT в режиме RC, 1/4 частоты OSC1. MCLR/VPP 4 4 4 1/Р ТШ Вход внешнего сброса (активный низкий)/ вход напряжения программирования. RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF RA4/T0CK1 17 18 1 2 3 19 17 I/O 20 18 I/O I 1 I/O 2 2 I/O 3 3 I/O ТТЛ ТТЛ ТТЛ ТТЛ ТШ Двунаправленный порт PORTA: вывод RA0 / аналоговый вход 0; вывод RA1 / аналоговый вход 1; вывод RA2 / аналоговый вход 2; вывод RA3 / аналоговый вход 3 / аналоговое опорное напряжение; вывод RA4 /вход синхронизации модуля таймера 0, выход с открытый стоком; RB0/1NT RB1 RB2 RB3 RB4 RB5 RB6 RB7 6 7 8 9 10 11 12 13 7 6 I/O 8 7 I/O 9 8 I/O 10 9 I/O 11 10 I/O 12 11 I/O 13 12 I/O 14 13 I/O ТТЛ/ тш(|) ТТЛ ТТЛ ТТЛ ТТЛ ТТЛ ТТЛ/ тшс> ТТЛ/ тш(2) Двунаправленный порт PORTB с внутренним подключением входов к высокому уровню: вывод RB0 / вход внешнего прерывания; вывод RB1; вывод RB2; вывод RB3; вывод РВ4/прерывание от изменения на контак- те; вывод RB5/npepbieaHHe от изменения на контак- те; вывод РВ6/прерывание от изменения на контак- те, синхронизация программирования; вывод РВ7/прерыванне от изменения на контак- те, последовательные данные программирования. VSS 5 4,5 5 Р Напряжение питания (общий минус). VDD 14 15,16 14 Р - Напряжение питания (плюс). Обозначения: I = вход О = выход I/O = вход-выход Р = питание ТТЛ = вход ТТЛ КМОП = вход КМОП ТШ = вход с триггером Шмитта Примечания: 1. Буфер с триггером Шмитта работает только по входу прерывания. 2. Буфер с триггером Шмитта попользуется в режиме программирования. 3. Буфер с триггером Шмитга работает только в режиме RC генератора. 15
Глава 3 PIC16C7X RCO/TIOSO/TICKI RCI/TIOSI RC2/CCPI RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6 RC7 Синхронный последовательный порт ССР 1 Рис. 3-3 Структурная схема PIC16C72/72A 1. Старшие разряды адреса из регистра STATUS. 16
PIC16C7X Глава 3 Таблица 3-2, Описание выводов PIC16C72/72A Нанменование № контакта Тип Типа буфера Описание DIP SSOP SOIC OSC1/CLK1N 9 9 9 I ТШ/ Кварцевый резонатор - вход / КМОП1’ вход внешнего генератора. OSC2/CLKOUT 10 10 10 О - Кварцевый резонатор - выход/ выход CLKOUT в режиме RC, 1/4 частоты OSC1. MCLR/VPP 1 1 1 1/Р ТШ Вход внешнего сброса (активный низкий)/ вход напряжения программирования. • Двунаправленный порт PORTA: RA0/AN0 2 2 2 I/O ТТЛ вывод RA0 / аналоговый вход 0; RA1/AN1 3 3 3 I/O ТТЛ вывод RA1 / аналоговый вход 1; RA2/AN2 4 4 4 I/O ТТЛ вывод RA2 / аналоговый вход 2; RA3/AN3/VREF 5 5 5 I/O ТТЛ ТШ вывод RA3 / аналоговый вход 3 / аналоговое опорное напряжение; RA4/T0CK1 6 6 6 I/O вывод RA4 /вход синхронизации модуля таймера 0, выход с открытый стоком; RA5/AN4/SS 7 7 7 I/O ТТЛ вывод RA5 / аналоговый вход 4 / управление выходом синхроиного последовательного порта. Двунаправленный порт POR.TB с внутренним подключением входов к высокому уровню: RB0/INT 21 21 21 I/O ТТЛ/ тш(|> вывод RB0 / вход внешнего прерывания; RB1 22 22 22 I/O ТТЛ вывод RB1; RB2 23 23 23 I/O ТТЛ вывод RB2; RB3 24 24 24 I/O ТТЛ вывод RB3; RB4 25 25 25 I/O ТТЛ вывод ИВ4/прерывание от изменения на контак- те; RB5 26 26 26 I/O ТТЛ вывод RB5/npepbiBaHue от изменения на контак- те; RB6 27 27 27 I/O ТТЛ/ вывод RB6/npept>iBaHHe от изменения на контак- ТШ(2) те, синхронизация программирования; RB7 28 28 28 I/O ТТЛ/ вывод RB7/npepbieaHHe от изменения на контак- тш,2) те, последовательные даиные программирования. Двунаправленный порт PORTC: RCQ/T1OSO/ 11 11 11 I/O ТШ вывод RC0 / выход кварцевого резонатора или Т1СК1 вход внешнего генератор таймера 1; RC1/T1OS1 12 12 12 I/O ТШ вывод RCl/вход кварцевого резонатора таймера!; RC2/CCP1 13 13 13 I/O ТШ вывод RC2 / вход ССР1 в режиме накопления / выход ССР1 в режиме сравнения и ШИМ; RC3/SCK/SCL 14 14 14 I/O ТШ вывод RC3 / вход / выход синхронизации SSP; RC4/SD1/SDA 15 15 15 I/O ТШ вывод RC4 / вход (режим SPI) или вход / выход (режим 12С) данных модуля SSP; RC5/SDO 16 16 16 I/O ТШ вывод RC5 / выход (режим SPI) данных SSP; RC6 17 17 17 I/O ТШ вывод RC6; RC7 18 18 I/O ТШ вывод RC7. VSS 8. 8. 19 8, 19 р - Напряжение питания (общий минус). 19 VDD 20 20 20 р Напряжение питания (плюс). Обозначения: 1 = вход О = выход I/O = вход-выход Р = питание ТТЛ = вход ТТЛ КМОП = вход КМОП ТШ = вход с триггером Шмитта 17
Глава 3 PIC16C7X Примечания: 1. Буфер с триггером Шмитта работает только по входу прерывания. 2. Буфер с триггером Шмитта используется в режиме программирования. 3. Буфер с триггером Шмитта работает только в режиме RC генератора. RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF RA4/T0CKI RA5/SS/AN4 PORTC RCO/TIOSO/TICKI RCI/TIOSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT Устройства Память программ Память данных Р1С16С73 4Кх 14 192x8 Р1С16С73А 4Кх 14 192x8 PIC16C76 8Кх 14 368 x8 Рис. 3-4 Структурная схема PIC16C73/73A/76 Примечания 1. Старшие разряды адреса из регистра STATUS. 2. Сброс при снижении питания отсутствует на Р1С16С73. 18
PIC16C7X Глава 3 Таблица 3-3. Описание выводов PIC16C73/73A/76 Наименование № контакта Тип Типа буфера Описание DIP SOIC OSC1/CLK1N 9 9 I ТШ/ Кварцевый резонатор - вход/ кмоп(” вход внешнего генератора. OSC2/CLKOUT 10 10 О - Кварцевый резонатор - выход / выход CLKOUT в режиме RC, 1/4 частоты OSC1. MCLR/VPP 1 1 I/P ТШ Вход внешнего сброса (активный низкий) / вход напряжения программирования. Двунаправленный порт PORTA: RA0/AN0 ' 2 2 I/O ТТЛ вывод RA0 / аналоговый вход 0; RAI/AN1 3 3 I/O ТТЛ вывод RA1 / аналоговый вход 1; RA2/AN2 4 4 I/O ТТЛ вывод RA2 / аналоговый вход 2: RA3/AN3/VREF 5 5 I/O ТТЛ вывод RA3 / аналоговый вход 3 / аналоговое опорное напряжение; RA4/T0CK.1 6 6 I/O ТШ вывод RA4 /вход синхронизации модуля таймера 0, выход с открытый стоком; RA5/AN4/SS 7 7 I/O ТТЛ вывод RA5 / аналоговый вход 4 / управление выходом синхронного последовательного порта. Двунаправленный порт PORTB с внутренним подключением входов к высокому уровню: RB0/1NT 21 21 I/O ТТЛ/ ТШ(” вывод RB0 / вход внешнего прерывания; RB1 22 22 I/O ТТЛ вывод RB1; RB2 23 23 I/O ТТЛ вывод RB2; RB3 24 24 I/O ТТЛ вывод RB3; RB4 25 25 I/O ТТЛ вывод RB4/npepbiBaHHe от изменения на контакте; RB5 26 26 I/O ТТЛ вывод RBS/прерывание от изменения на контакте; RB6 27 27 I/O ТТЛ/ вывод RB6/npepbieaHHe от изменения на контакте, тш|2) синхронизация программирования; RB7 28 28 I/O ТТЛ/ вывод RB7/npepbieaHne от изменения на контакте, ТШ|2) последовательные данные программирования. Двунаправленный порт PORTC: RC0/T1OSO/ 11 11 I/O ТШ вывод RC0 / выход кварцевого резонатора или T1CKI вход внешнего генератор таймера 1; RC1/T1OSI/ 12 12 I/O ТШ вывод RCl/вход кварцевого резонатора таймера!/ ССР2 вход ССР2 в режиме накопления и сравнения / выход ССР2 в режиме ШИМ; RC2/CCP1 13 13 I/O ТШ вывод RC2 / вход ССР1 в режиме накопления / вы- ход ССР 1 в режиме сравнения и ШИМ; RC3/SCK/SCL 14 14 I/O ТШ вывод RC3 / вход / выход синхронизации SSP; RC4/SDI/SDA 15 15 I/O ТШ вывод RC4 / вход (режим SP1) или вход / выход (режим 12С) данных модуля SSP; RC5/SDO 16 16 I/O ТШ вывод RC5 / выход (режим SPI) данных SSP; RC6/TX/CK. 17 17 I/O ТШ вывод RC6/ выход передатчика (асинхронный ре- жим) или синхронизация (синхронный режим) USART; RC7/RX/DT 18 I/O ТШ вывод RC7 / вход приемника (асинхронный режим) или данные (синхронный режим) USART. VSS 8, 19 8, 19 р - Напряжение питания (общий минус). VDD 20 20 р - Напряжение питания (плюс). Примечания: 1. Буфер с триггером Шмитта работает только по входу прерывания. 2. Буфер с триггером Шмитта используется в режиме программирования. 19
Глава 3 PIC16C7X 3. Буфер с триггером Шмитта работает только в режиме RC PORTA RAO/ANO RAI/ANI RA2/AN2 RA3/AN3/VREF RA4/T0CKI RA5/SS/AN4 PORTC PORTD PORTE Таймер 1 Таймер 0 A/D Таймер 2 ССР 2 ССР I Синхронный последовательный порт RD0/PSP0 RD7/PSP7 RCO/TIOSO/TICKI RCI/TIOSI/CCP2 RC2/CCPI RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RE0/RD/AN5 REI/WR/AN6 RE2/CS/AN7 USART Устройства Память программ Память данных PIC16C74 4Кх 14 192x8 PICI6C74A 4Кх14 192x3 PICI6C77 8Кх 14 368x8 Рис. 3-5 Структурная схема PIC16C74/74A/77 Примечания 1. Старшие разряды адреса из регистра STATUS. 2. Сброс при снижении питания отсутствует на PIC16C74. 20
PIC16C7X Глава 3 Таблица 3-4. Описание выводов PIC16C74/74A/77 Наименование № контакта Тип Типа буфера Описание DIP PLCC QFP OSC1/CLK1N 13 14 30 1 тш/ Кварцевый резонатор - вход / кмоп(4) вход внешнего генератора. OSC2/CLKOUT 14 15 31 О - Кварцевый резонатор - выход / выход CLKOUT в режиме RC, 1/4 частоты OSC1. MCLR/VPP 1 2 18 I/P тш Вход внешнего сброса (активный низкий)/ вход напряжения программирования. Двунаправленный порт PORTA: RA0/AN0 2 3 19 I/O ТТЛ вывод RA0 / аналоговый вход 0; RAI/AN1 3 4 20 I/O ТТЛ вывод RA1 / аналоговый вход 1; RA2/AN2 4 5 21 I/O ТТЛ вывод RA2 / аналоговый вход 2; RA3/AN3/VREF 5 6 22 I/O ТТЛ вывод RA3 / аналоговый вход 3 / аналоговое опорное напряжение; RA4/T0CK1 6 7 23 I/O тш вывод ЛА47вход синхронизации модуля таймера 0, выход с открытый стоком; RA5/AN4/SS 7 8 24 I/O ТТЛ вывод RA5 / аналоговый вход 4 / управление выходом синхрОннбго последовательного порта. Двунаправленный порт PORTB с внутренним подключением входов к высокому уровню: RB0/INT 33 36 8 I/O ТТЛ/ тш(|) вывод RB0 / вход внешнего прерывания; RBI 34 37 9 I/O ТТЛ вывод RBI; RB2 35 38 10 I/O ТТЛ вывод RB2; RB3 36 39 И I/O ТТЛ вывод RB3; RB4 37 41 14 I/O ТТЛ вывод RB4/npepbiBanne от изменения на контак- те; RB5 38 42 15 I/O ТТЛ вывод RBS/прерывание от изменения на контак- те; RB6 39 43 16 I/O ТТЛ/ вывод RB6/npepwBaHiie от изменения на контак- тш(2) те. синхронизация программирования; RB7 40 44 17 I/O ТТЛ/ вывод РВ7/прерываиие от изменения на контак- тш(2) те, последовательные данные программнрова- ння. Двунаправленный порт PORTC: RCO/TIOSO/ 15 16 32 I/O тш вывод RC0 / выход кварцевого резонатора или Т1СК1 вход внешнего генератор таймера 1; RC1/TIOSI/ 16 18 35 I/O тш вывод RCl/вход кварцевого резонатора ССР2 таймера!; RC2/CCPI 17 19 36 I/O тш вывод RC2 / вход ССР1 в режиме накопления / выход ССР1 в режиме сравнения и ШИМ; RC3/SCK/SCL 18 20 37 I/O тш вывод RC3 / вход / выход синхронизации SSP; RC4/SDI/SDA 23 25 42 I/O тш вывод RC4 / вход (режим SP1) пли вход / выход (режим 12С) данных модуля SSP; RC5/SDO 24 26 43 I/O тш вывод RC5 / выход (режим SP1) данных SSP; RC6/TX/CK 25 27 44 I/O тш вывод RC6/ выход передатчика (асинхронный режим) нлн синхронизация (синхронный режим) USART; RC7/RX/DT 26 29 1 I/O тш вывод RC7 / вход приемника (асинхронный режим) или данные (синхронный режим) USART. 21
Глава 3 PIC16C7X Продолжение таблицы 3-4. Наименование № контакта Тип Типа буфера Описание DIP PLCC QFP ТШ/ Двунаправленный порт PORTD илн шина ттл'3’ данных параллельного ведомого порта. RD0/PSP0 19 21 38 I/O вывод RD0 RDI/PSPI 20 22 39 I/O вывод RDI RD2/PSP2 21 23 40 I/O вывод RD2 RD3/PSP3 22 24 41 I/O вывод RD3 RD4/PSP4 27 30 2 I/O вывод RD4 RD5/PSP5 28 31 3 I/O вывод RD5 RD6/PSP6 29 32 4 I/O вывод RD6 RD7/PSP7 30 33 5 I/O вывод RD7 Двунаправленный порт PORTE: RE0/RD/AN5 8 9 25 I/O ТШ/ вывод RE0 / чтение параллельного ведомого ТТЛ'3’ порта / аналоговый вход 5; RE1/WR/AN6 9 10 26 I/O ТШ/ вывод RE1 / запись параллельного ведомого ттл'3) порта / аналоговый вход 6: RE2/CS/AN7 10 'J-rlO 27 I/O ТШ/ вывод RE2 / выбор параллельного ведомого ТТЛ'3’ порта / аналоговый вход 7; VSS 12,31 13,34 6,29 р - Напряжение питания (общий минус). VDD Н,!32 12,35 7,28 р - Напряжение питания (плюс). NC 1.17, 12,13 Не используемые контакты. 28,40 Эти контакты должны оставаться свободными. 33,34 Обозначения: I = вход О = выход I/O = вход-выход Р = питание ТТЛ = вход КМОП = вход КМОП ТШ = вход с триггером Шмитта ТТЛ Примечания: 1. Буфер с триггером Шмитта работает только по входу прерывания. 2. Буфер с триггером Шмитта используется в режиме программирования. 3. Буфер с триггером Шмитта используется когда контакты универсальные I/O, в режиме параллельного ведомого порта вход ТТЛ. 4. Буфер с триггером Шмитта работает только в режиме RC генератора 22
PIC16C7X Глава 4 4. ОРГАНИЗАЦИЯ ПАМЯТИ 4.1 ПАМЯТЬ ПРОГРАММ Семейство PIC16C7X имеет 13-разрядный счетчик программ, способ- ный адресовать пространство 8К х 14 памяти программ. Ниже приведено ко- личество памяти программ для каждого устройства: Устройства Объем памяти программ Адресный интервал PIC16C710 512х 14 OOOOh-OlFFh PIC16C71 1Кх 14 0000h-03FFh PIC16C711 1Кх 14 0000h-03FFh PIC1-6C715 2Кх 14 0000h-07FFh PIC16C72 2Кх 14 OOOOh-07FFh PIC16C72A 2Кх 14 0000h-07EFh PIC16C73 4Кх 14 OOOOh-OFFFh PIC16C73A 4Кх 14 OOOOh-OFFFh PIC16C74 4Кх 14 OOOOh-OFFFh PIC16C74A 4Кх 14 OOOOh-OFFFh PIC16C76 8Кх 14 OOOOh-IFFFh PIC16C77 8Кх 14 OOOOh-IFFFh В устройствах, у которых память программ меньше 8К слов, обращение по адресу, превышающему физически имеющуюся память, вызывает цикли- ческий сдвиг адреса. После начальной установки программный счетчик устанавливается на OOOOh, а любое прерывание вызывает переход на адрес 0004h. 4.2 ПАМЯТЬ ДАННЫХ Память данных разбита на так называемые банки, которые содержат ре- гистры специальных функций и универсальные регистры. Выбор банка осу- ществляется переключением битов RP1 и RP0. RP1 :RP0 (STATUS <6:5>) - 00 -> банк 0; = 01 -> банк 1; = 10 -> банк 2; = 11 -> банк 3. 23
Глава 4 PIC16C7X Каждый банк имеет объем 128 байт (7Fh). Младшие ячейки каждого банка зарезервированы для регистров специальных функций. Выше регист- ров специальных функций располо- жены универсальные регистры, вы- полненные как статическая память (RAM). Все имеющиеся банки со- держат регистры специальных функ- ций. Для уменьшения программы и более быстрого доступа некоторые часто используемые регистры специ- альных функций, расположенные в одном банке, могут быть отражены в другом банке. Адрес Адрес ООН OBh Регистры специальных функций Регистры специальных функций 80h 8Bh ОСЬ 2Fh Универ- сальные регистры Универ- сальные регистры. Отобра- жается Банк 0"’ 8Ch AFh ЗОН 7Fh Ой BOh FFh Банк 0 Банк 1 Рис. 4-2 Карта памяти данных PIC16C710/71 1. Регистры отсутствуют в банке 1. Любое обращение к этим регистрам вызывает об- ращение к соответствующим регистрам банка 0. Адрес Адрес OOh Регистры Регистры 80h специальных специальных OBh функций функций 8Bh OCh Универ- 8Ch Универ- сальные сальные регистры. регистры Отобра- жастся Банк 0(|) 4Fh CFh 50h 7Fh ’У. л DOh FFh Банк 0 Банк 1 Рис. 4-3 Карта памяти данных PIC16C711 1. Регистры отсутствуют в банке 1. Любое обращение к этим регистрам вызывает об- ращение к соответствующим регистрам бан- ка 0. 24
PIC16C7X Глава 4 4.2.1 ФАЙЛ УНИВЕРСАЛЬНЫХ РЕГИСТРОВ К регистрам файла можно обращаться непосредственно или косвенно через регистр выбора файла (FSR). Адрес Адрес 00h Регистры Регистры 80h специальных специальных функций функций 1 Fh 9Fh 20h AOh Универ- сальные У нивср- регистры. сальные BFh COh 7Fh FFh Банк 0 Банк 1 Рис. 4-4 Карта памяти данных PIC16C715/72/72А Адрес Адрес 00h Регистры Регистры 80h специальных специальных функций функций 1 Fh 9Fh 20h AOh У нивср- У нивср- сальные сальные регистры регистры. 7Fh FFh Банк 0 Байк I Рис. 4-5 Карта памяти данных PIC16C73/73A/74/74A Адрес Адрес Адрес Адрес 00h 80h 100h Регистры I 80h Регистры Регистры Регистры специальных специальных специальных специальных lOFh функций 1 8Fh функций функций функций 1 lOh У и и вср- сальны с 1 90h Универ- сальные 1 Fh 9Fh 1 iFh регистры 16 бант 19Fh регистры I 6 байт 20h AOh У ннвер- 120h У нивср- lAOh У нивср- сальные сальные сальные Универ- регистры регистры регистры сальные регистры 80 байт 80 байт 80 байт 96 байт EFh 16Fh lEFh 7Fh FOh FFh Обращение к 70h-7Fh 170h 1 7Fh Обращение к 70h-7Fh IFOh IFFh Обращение к 70h-7Fh Банк 0 Банк 1 Банк 2 Банк 3 Рис. 4-6 Карта памяти данных PIC16C76/77 Старшие 16 байт памяти данных в банках 1, 2 и 3 отображены в банке 0. 25
PIC16C7X Глава 4 4.2.2 РЕГИСТРЫ СПЕЦИАЛЬНЫХ ФУНКЦИЙ Регистры специальных функций используются центральным процессо- ром и периферийными устройствами для управления выполняемой операци- ей. Эти регистры выполнены как статическая память (RAM). Таблица 4-1. Регистры специальных функций Р1С16С710/71/711 Агфе с Имя Разряды Значение после сбросов: POR.BCR Значение после других сбросов0* 7 6 5 4 3 2 1 0 БанкО ООП'1' 1NDF .. .. 00000000 00000000 для записи данных при косвенной адресации (нс матсриальньм регистр; Olh TWO Регистр модуля таймер 0 хххххххх UUUU UUUU 02h'” PCL Младший байт программного счетчика (PC) 00000000 0000 0000 озН” STATUS IRp” RPlran RPO TO PD z DC с 0001 1ххх OOOqquuu Mi® FSR Указатель для косвенной ац зссащм памяти данных хххххххх uuuu UUUU 0511 PORTA - - записи - регистр, при чтении -контакты PORTA --хОООО --и 0000 0611 PORTB При записи - регистр PORTB, при чтении - контакты PORTB хххххххх UUUU UUUU 0711 - Зарезервирован - - 08h ADCONO ADCS1 ADCS0 (6) CHS1 CHS0 GODONE АНЕ ADON ООО 0000 ООО 0000 0911'” ADRES Регистр результата АО преобразователя хххххххх uuuu uuuu OAh1-” PCLATH - - - Буфер записи 5 сгарпмх раз рядов PC — 0 0000 — 00000 0H11” 1NFOON GIE ADIE TOIE 1NTE RHE T0IF INIF RB1F 0000 ОООх 0000 OOOu Банк I 80h(” INDF Для записи данных при косвенной ац: юсации (нс материальный регистр) 00000000 0000 0000 8111” OPTION RBPU INTEDG TOCS T0SE PSA PS2 PS1 PSO 1111 1111 nil 1111 8211” PCL Мпаднмй байт программного счетчика (PC) 0000 0000 00000000 831/” STATUS IRp” | RP1‘” | RPO | TO | PD Z DC С 0001 1ххх OOOqquuu 84hm FSR Указатель для косвенной ац хсанци памяти данных хххххххх uuuu uuuu 85h TRISA - - - Регилр управления направлением данных PORTA --11111 --1 1111 86h TRISB Регистр управления направлением данных PORTB 11111111 1111 1111 87h(4> POON - - - - - - POR BOR од uu 88h ADCON1 - - - - - - реки РСКЮ 00 00 89h‘” ADRES Регистр результата АО преобразователя хххххххх uuuu uuuu Обозначения: х = не определено, и = не изменяется, q = зависит от условия, - = зарезервированы, читаются как 'О'. Затененные разряды зарезервированы, читаются как ‘О’. Примечания: 1. Другие сбросы: внешний сброс по входу MCLR и сброс от сторожевого таймера. 2. Старший байт PC непосредственно не доступен. Регистр PCLATH содержит раз- ряды < 12:8> PC, которые пересылаются в старший байт счетчика программ. 3. Регистры, адресуемые из любого банка. 4. Регистр PCON отсутствует в PICI6C7I, читается как ’0‘. 5. Биты 1R.P и R.P 1 зарезервированы, всегда должны быть обнулены. 6. Разряд 5 ADCONO в PICI6C7I0/711 может быть использован как универсальный бит для R/W. В PICI6C7I этот разряд отсутствует, читается как 'О'. 26
PIC16C7X Глава 4 Таблица 4-2. Регистры специальных функций PIC16C715 Аире с Имя Разряды Значение после сбросов: POR,BOR Значение после других сбросов’1’ 7 6 5 4 3 2 1 0 Банк 0 ООН1’1 INDF Для записи данных при косвенной адресации (ие материальный регистр) 0000 0000 0000 0000 ож TMRO Регистр модуля таймер 0 xxxx xxxx uuuu uuuu 02h"' PCL Младший байт программного счетчика (PC) 0000 0000 0000 0000 03h<” STATUS IRf'" RPl"1 RPO TO PD z DC C 0001 I xxx OOOq quuu 04h"f FSR Указатель для косвенной адресации памяти данных xxxx xxxx uuuu uuuu 05h PORTA - При записи - регистр, при *пении - контакты PORTA --xOOOO - -uOOOO 06h PORTB При записи - регистр PORTB, при чтении - контакты PORTB xxxx xxxx uuuu uuuu OTh Зарезервирован - 08h - Зарезервирован - - 09h - Зарезервирован - OAh'“” PCLATH - - Буфер записи 5 старших раз рядов PC — 0 0000 — 00000 OBh01 INTCON GIE AD1E TOIE INTE RBJE T0IF IMTF RBIF 0000 OOOx 0000 OOOu (KTh PIR1 - ADIF - - - /: . 'И- - .0 -0 ODh Зарезервирован i • • • I - IDh Зарезервирован - I Eh ADCONO ADCSI ADCS0 CHS2 CHSI CHS0 GO/DONE ADON 0000 (XM) 0000 00-0 iFh ADRES Регистр результата AD преобразователя xxxx xxxx uuuu uuuu Банк I 80h131 INDF Для записи данных при косвенной адресации (не материальный регистр) 0000 0000 0000 0000 8lhm OPTION RBPU INTEDG TOCS T0SE PSA PS2 PSI PSO 111111II IIII IIII 82h'" PCL Младший 6airr программного счетчика (PC) 0000 0000 00000000 83h"' STATUS IRP'” RPlm RPO ТО PD z DC c 0001 Ixxx OOOq quuu 84hl3> FSR Указатель для косвенной ащ юсации памяти данных xxxx xxxx uuuu uuuu 85h TRISA - - |Реп«лр управления направлением данных PORTA ---I nil --1 IIII X6h TRI SB Регистр управления направлением данных PORTB IIII nil IIII ПП 87h Зарезервирован - 88h Зарезервирован - 89h Зарезервирован - XAli'1" PCLATH - Буфер записи 5 старших раз рядов PC — 0 0000 — 0 0000 SBh1” JNTCON GIE ADIE TOIE INTE RBIE TOIF INTF RBIF 0000 OOOx 0000 OOOu 8Ch PIE1 ADIE - - - - - -0 -0 8Dh - Зарезервирован - 8 Eh PCON MPEEN - - - • PER POR BOR U- —-Iqq u- - -luu 8Fh - Зарезервирован Обозначения: х = не определено, и = не изменяется, q = зависит от условия, - = зарезервированы, читаются как 'О'. Затененные разряды зарезервированы, читаются как ‘О’. Примечания: I. Другие сбросы: внешний сброс по входу MCLR и сброс от сторожевого таймера. 2. Старший байт PC непосредственно недоступен. Регистр PCLATH содержит раз- ряды <12:8> PC, которые пересылаются в старший байт счетчика программ. 3. Регистры, адресуемые из любого банка. 4. Биты IRP и RPI зарезервированы и всегда должны быть обнулены. 27
Глава 4 PIC16C7X Регистры специальных функций можно разделить на два набора: реги- стры процессорного ядра и периферийных устройств. Регистры ядра, связан- ные с "основными" функциями, описаны в данном разделе. Регистры перифе- рийных устройств описаны в разделах, рассматривающих возможности пери- ферийных устройств. Таблица 4-3. Регистры специальных функций PIC16C72/72A Ааре с Имя Разряда Значение после сбросов: POR,BOR Значение после других сбросов'31 7 6 5 4 3 2 1 0 БанкО ООН'1’ INDF Для записи данных при косвенной адресации (нс материальный регистр) 0000 0000 0000 0000 Olh mo Регистр модуля таймер 0 XXXXXXXX UUUU uuuu 02h(h PCL Мпадштй байт программного счетчика (PC) 0000 0000 0000 0000 03h(" STATUS IRP'4' rpi<4\: RPO TO PD Z DC C ООО I Ixxx OOOqquuu о#/" ESR Указатель для ^соамяиюи адресации памяти данных xxxxxxxx UUUUULUl 05h PORTA - При-записи - регистр PORTA, при чтении - контакты PORTA -0x0000 -0u 0000 06b PORTB Пэ записи регистр РЖГВ, по чтению контакты PCRTB xxxxxxxx uuuu uuuu 07h PORTC Пэ записи регистр PORTC, по чтению контакты PORTC xxxxxxxx uuuu uuuu 08h - Зарезервировав - - 09h - Зарезервирован - - OAh"’1 PQATH - - - Буфер записи 5 стариих раз радов PC — 00000. — 00000 OBh"* 1NTCON GIE PEIE TOIE 1NTE RBIE TOIF INTF RBIF 0000 OOOx 0000 OOOu OCh PIR1 - ADiF - - SSPIF OCP1IF 1NR2IF TNKllF -0 - 0000 -0 - 0000 ODh . - Зарезервирован - - OBi TMR1L Младший байт регистра TMR1 модуля таймер 1 xxxxxxxx шшиши OFh TMR1H Стариий байт регистра TMR1 мотеля таймер 1 xxxxxxxx иииииши lOh T1CON - TICKPS1 T1CKPS0 TICSCEN T1SYNC TMRICS TURION -00 0000 -uuuuuu llh T1VR2 Регистр модуля таймер 2 0000 0000 0000 0000 12h T2C0N - TOUIPS3 TOUIPS2 TOLTIPSI TOUIPSO TKR2ON T2CKPSI T2CKPSO -0000000 -0000000 13h SSPBUF Буфер синхронного последовательного порта xxxxxxxx uuuu uuuu 14h SSPCON WOOL SSPOV SSPEN СКР SSPM3 SSPM2 SSPM1 SSPM3 0000 0000 00000000 15h CCPR1L Младший байт регистра CCPRJ модуля ССР xxxxxxxx UUUU 1Ш1 16h OCPRIH Стариий байт регистра CCPR1 модуля ССР xxxxxxxx UUUU UUUU 17h CCP1CON - ОСР1Х OCP1Y ОСР1МЗ CCPIM2 OCP1M1 ССР1МЭ -00 0000 -000000 1811 - Зарезервирован - - 1911 - Зарезервирован - - 1A11 - Зарезервирован - - 11311 - Зарезервирован - - IO1 - Зарезервирован - - 28
PIC16C7X Глава 4 Продолжение таблицы 4-3 Ааре С Имя Разряды Значение после сбросов: POCBOR Значение после других сбросов^ 7 6 5 4 3 2 1 0 Банк 1 8О(" INDF Для записи данных при косвенной ад тесании (не материальньй регистр) 00000000 00000000 8lh OPTION RBPU INTEDG TOCS TOSE PSA PS2 PSI PSO 1111 1111 nil 1111 821Р PCL Цюграммньй счетчика (PC) младций байт 00000000 00000000 83tf" STATUS IRp4’ RP1'4' RPO то PD z DC C 0001 Ixxx OOOqquuu 84h'" FSR Указатель для косвенной адресации памяти данных хххххххх UUUU 1Ш1 85h TRISA - Регистр управления направлением д анных PORTA -11 1111 - 11 nil 86h TRISB Регистр управления направлением данных PORTB 11111111 1111 1111 87h TRISC Регистр управткния направлением д анных PORTC 1111 1111 till 1П1 88h - Зарезервирован - - 89h - Зарезервирован - - 8Arf'a PCLATH - - - Б^фзр записи 5 сгариих раз. рядзвРС -00000 -00000 8BFl” INFOON СНЕ РЕЗЕ ТМЕ INTE RBIE TOIF w" RBIF OOOOOOOx 0000 OOOu 801 PIE1 - ADIE - - SSPIE 0CP1IE TNR2IE TNR1IE -0-0000 -0-0000 8Ch - Зарезервирован —i. - 8Eh POON - - - - POR BOR qq uu 8Hi - Зарезервирован - - 90h - Зарезервирован - - 9111 - Зарезервирован - - 92h PR2 Регистра периода модуля таймер 2 ini ini 1111 nil 93h SSPADD Регистра адреса синхронного последовательного порта (в режиме ft} 00000000 00000000 94h SSPSTAT - DA S UA BF -000000 -000000 95h - Зарезервирован - - • • • • • • • - - Обозначения: х = не определено, и = не изменяется, q = зависит от условия, - = зарезервированы, читаются как 'О'. Затененные разряды зарезервированы, читаются как ‘О'. Примечания: 1. Регистры, адресуемые из любого банка. 2. Старший байт счетчика программ непосредственно недоступен. Регистр PCLATH содержит разряды < 12:8> PC, которые пересылаются в старший байт счетчика программ. 3. Другие сбросы: внешний сброс по входу MCLR и сброс от сторожевого таймера. 4. Биты IR.P и RPI в PICI6C72 зарезервированы, всегда должны быть обнулены. 29
Глава 4 PIC16C7X Таблица 4-4. Регистры специальных функций PIC16C73/73A/74/74A Ааре С Имя Разряда Значение после сбросов: POR.BOR Значение после других сбросов'21 7 6 5 4 3 2 i 0 БанкО OCfcf4' IMF Для записи данных при Кожиной адресац ии (нс материальный регистр) 00000000 00000000 Olh Wj Регистр модуля таймер 0 xxxx xxxx Ш1Ш1Ш1 02hMI PCL Программны! счетчика (PC) мпадцмй байт 00000000 0000 0000 03hw STATUS 1RT*71 RP1'71 RPO ТО PD z DC C 0001 Ixxx OOOq quuu и/4’ FSR Указатель для косвенной адресации памяти данных xxxx xxxx uuuu uuuu 05h PORTA | По записи рсгйсгр РЖГД по чтению контакты PORTA -0x 0000 -0u 0000 06h PORTB По записи регистр PORTB, по чтению контакты PORTB xxxx xxxx uuuu uuuu 07h PORTC По записи регистр PORTC, по чтению контакты PORTC xxxx xxxx IXBJUUUUU 08h‘5’ PORTO По записи регистр РЖГО, по чтению контакты PORTD xxxx xxxx UULU/mill OSM/51 PORTE - - - - RE2 RET RED ---xxx UUU OAh"41 POATH - — - Буфер записи 5 старимх раз радов PC — 0 0000 — 0 0000 OBh141 INTCON GIE РНЕ ТОТЕ 1NIE RBIE TOIF INTF RBIF 0000 OOOx 0000 000u OCh PIR1 PSpif<a AOF -RCIF TXIF SSPIF CCP11F TNR2IF TMR1IF 00000000 00000000 ODh P1R2 - — - - - - - - 0CP2IF -o 0 OEh TMR1L Младший байт регистра TMR1 модуля таймер I xxxx xxxx UULU uuuu OFh TMRIH Сгарпмй байт регистра TMR1 модуля таймер I xxxx xxxx UULU uuuu lOh T1C0N - - T1CKPS1 T1OTS0 T10SCEN T1SYNC TMRICS TMR1CN -00 0000 -uuuuuu Uh TMU Регистр модуля таймер 2 00000000 00000000 12h T2C0N TOUTPS3 TWTPS2 T0UIPS1 TOUIPSO TNR20N T2CXPS1 T2CKPS0 -000 0000 -000 0000 13h SSPBUF Буфер синхронного последовательного порта xxxx xxxx uuuu uuuu 14h SSPCON W0L SSPOV SSPEN СКР SSPM3 SSPM2 SSPXll SSPMO 0000 0000 0000 0000 15h CCPR1L Младший байт регистра CCPR1 модуля ССР xxxx xxxx uuuu uuuu 16li CCPR1H Сгаримй байт регистра 0CPR1 модуля ССР xxxx xxxx uuuu uuuu 17h OT1C0N - - отх CCP1Y 0CPIM3 0CP1M2 CCPIMI ССР1МЭ -00 0000 -00 0000 ISi RCSTA SPEN RX9 SREN CREN - FERR OERR RX9D 0000-OOx 0000-OOx 19h TXREG Буфер передатчика модуля USART 00000000 00000000 lAh RCREG Буфер приемника модуля USART 0000 0000 00000000 IBh CCPR2L Младший байт регистра CCPR2 модуля ССР xxxx xxxx UUUU UULU 101 0CPR2H Сгаримй байт регистра CCPR2 модуля ССР xxxx xxxx uuuu uuuu IDh OCP2CON ССР2Х 0CP2Y ССР2МЗ стао 0CP2M1 CCP2M) -000000 -000000 30
PIC16C7X Глава 4 Продолжение таблицы 4-4 Адрс с Имя Разряды Значение после сбросов: PCR.BOR Значение после других сбросов'2’ 7 6 5 4 3 2 1 0 Банк 1 80h'41 INDF Для записи данных при косвенной адресац ии (не материальный регистр) 00000000 00000000 81b OPTION RBPU INTEDG TOCS TOSE PSA PS2 PSI PSO 1111 1111 nil nil 82h141 PCL Программный счетчика (PC i млад ший байт 00000000 00000000 8311'“' STATUS 1RP171 RPI1” RPO TO PD Z DC J 0001 Ixxx OOOqquuu 84b'4' FSR Указатель для косвенной адресации памяти д анных xxxxxxxx UUUU UUUU 85h TRISA - (Регистр управления направлением данных PORTA -11 1111 -11 1111 801 TRISB Регистр управления направлением данных PORTB 1111 1111 1111 1111 87h TRISC Регистр управления направлением данных PORTC 1111 1111 1111 1111 88tf” TRISD Регистр управления направлением данных PORTD nil 1111 1111 1111 89hB TRISE IBF OBF IBOV PSPMODE - Управления (вправлением PORTD oooo-m 0000-111 8Ah(‘-41 PCLATH - - Буфер записи 5 старших раз рядов PC — 00000 —00000 8Bh'41 1NIWN GE PEIE TOIE • INTE RBIE TtXF (NIT,, - RHF 0000 (Wx OOOOOOOu 8Ch P1E1 PSPIE'" ADIE RCIE TXIE SSP1E 0CP1IE TM*2IE TWIIE 00000000 00000000 8Dh PIE2 - - - - - - - . - CCP2IE о о 8Bi POON - - • - - PGR BOR qq UU 8Fh - Зарезервирован - 9Ch - Зарезервирован - - 9lh - Зарезервирован - - 92h PR2 Регистра периода модуля таймер 2 1111 1111 1111 1111 93h SSPADD Регистра адреса синхронного последовательного порта (в режиме I2Q 00000000 00000000 94h SSPSTAT - - 1УА S R/W UA BF -000000 -000000 95h - Зарезервирован - - 90i - Зарезервирован - - 97h - Зарезервирован - 9811 TXSTA CSRC то TXEN SYNC - BRGH TRMT TOD 0000-010 0000-010 99h SPBRG Регистр генератора скорости передачи в бод ах 00000000 00000000 9 All - Зарезервирован • - 9Bh - Зарезервирован - - 901 - Зарезервирован - - 901 - Зарезервирован - - Обозначения: х = не определено, и = не изменяется, q = зависит от условия, - = зарезервированы, читаются как 'О'. Затененные разряды зарезервированы, читаются как ‘О’. Примечания: 1. Старший байт PC непосредственно недоступен. Регистр PCLATH содержит разряды < 12:8> PC, которые пересылаются в старший байт счетчика программ. 2. Другие сбросы: внешний сброс по входу MCLR и сброс от сторожевого таймера 3. Биты PSPIE и PSP1F в PIC16C73/73A отсутствуют и всегда должны быть обнуле- ны. 4. Регистры, адресуемые из любого банка. 5. PORTD и PORTE отсутствуют в PICI6C73/73A, читаются как 'О'. 6. Сброс при снижении питания отсутствует в PIC 16С73/74 и читается как 'О'. 7. Биты IRP и RP1 в Р1С16С72 зарезервированы и всегда должны быть обнулены. 31
Глава 4 PIC16C7X Таблица 4-5. Регистры специальных функций PIC16C76/77 Ач® С Иия Разряды Значение после сбросов: POR,BOR Значение после других сбросов*21 7 6 5 4 3 2 I 0 БанкО 00h14’ INDF Дня записи данных при косвенной адресации (не магергальный регистр) 0000 0000 00000000 Olh IWfl Регистр модуля таймер 0 хххххххх uuuu шип 02h14' PCL Программный счетчика (PC) младимй байт 00000000 00000000 03h14’ STATUS 1RP RP1 RPO TO PD z DC C 0001 Ixxx OOOqquuu 04hr41 FSR Указатель для косвенной адресации памяти данных хххххххх uuuu uuuu 05h PORTA | Пэ записи регистр PORTA, по чтению контакты PORTA -0x 0000 -0и 0000 0611 PORTB Пэ записи регистр PORTB, по чтению контакты PORTB хххххххх uuuu uuuu 07h PORK? Пэ записи регистр PORTC, по чгавгю контакты PORTC хххххххх uuuu uuuu 08h15’ PORTO По записи регистр PORTD, по чтению контакты PORTD хххххххх uuuu uuuu 09h‘51 PORTE - - - - RE2 REl RED XXX uuu OAh"4’ PCLATH - - - Буфер записи 5 старших раз ряд ов PC — 00000 — 00000 OBh'4’ 1NTOON GE РНЕ TDIE INTE RBIE TOIF INTF RBIF 0000 ОООх 0000 OOOu OCh PIR1 PSP1F” ADfF ROF TXIF SSP1F OCT1IF TNR21F TMR11F 0000 0000 00000000 ODh P1R2 - - - - - - - CCP21F 4) о OHi TMR1L Младший байт регистра 7MR1 модуля таймер хххххххх uuuu uuuu OFli TNR1H Старший байт регистра TMR1 модуля таймер 1 хххххххх uuuu uuuu 10h T1CON - T1CKPSI T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON -00 0000 -uuuuuu Uh TNR2 Регистр модуля таймер 2 0000 0000 0000 0000 12h T2CON TOUTPS3 TOUTPS2 TOUTPS1 TOUTPSO TMT2ON T2CKPS1 T2CKPS0 -000 0000 -0000000 13h SSPBUF Буфер синхронного послед овательного порта хххххххх uuuu uuuu 14h SSPCON WOOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPMl SSPM) 00000000 00000000 1511 CCPR1L Младдий байт регистра CCPR1 модуля ССР хххххххх uuuu uuuu I6h CCPR1H Сгароий байт регистра CCPR1 модуля ССР ХХХХХХХХ uuuu uuuu 17h OCP1CON - OCT IX CCT1Y OCPINB OCP1M2 CLP 1 Ml OCP1M) -000000 -000000 I8h RCSTA SPEN RX9 SREN CREN - FERR OERR RX9D 0000-000 0000-OOx 19h TXREG Буфер передатчика модуля USART 0000 0000 0000 0000 lAh RCREG Буфер приемника модуля USART 0000 0000 00000000 iBh (XPR2L Младший байт регистра CCPR2 модуля ССР хххххххх uuuu uuuu lOi OCPR2H Сгарцмй байт регистра CCPR2 модуля ССР хххххххх uuuu uuuu IDh OCP2OON - - CCT2X OCT2Y CCT2M3 OCT2M2 OCP2M1 OCP2M3 -000000 -000000 32
PIC16C7X Глава 4 Продолжение таблицы 4-5 Ааре с Имя Разряды Значение после сбросов: POR.BOR Значение после других сбросов® 7 6 5 4 3 2 1 0 Банк I 80h14’ INDF Для записи данных при косвенной адресации (не материальный регистр) 00000000 00000000 81h OPTION RBPU INTEDG TOCS TOSE | PSA PS2 PS' PSO 11111111 nil nn 82h<41 PCL Программный счетчика (PC) младший байт 00000000 00000000 Mh'1' STATUS IRP’1 RP1171 RPO | ТО PD . Z DC c 0001 Ixxx OOOqquuu Ml"1 FSR Указатель для косвенной адресации памяти данных xxxxxxxx U1UUUUUU 85h TRISA | Регистр управления направлением данных PORTA -11 1111 -11 1111 86h TRISB Регистр управления направлением данных PORTB 1111 1111 1111 1111 8711 TRI SC Регистр управления направлением данных POR.TC 1111 1111 1111 1111 88h‘5> TRISD Регистру /правления направлением данных PORTD 1111 nil nn nn 89h'51 TRISE IBF ОВЕ 100V PSPMODE - |Улршлення иапраалсплем PORTD 0000-111 0000-111 «АЬ"Л PCLATH - - - Буфер записи 5 старших раз] рядов PC — 00000 — 00000 INTOON GIE . PEIE ИЛЕ INTE RHE TMF INTE RHF 0000 OOOx OOOOOOOu 8Ch PIE1 PSPIE’3’ АЛЕ RCTE TXIE SSPIE CCP11E TAF2IE ТМП1Е 00000000 00000000 801 P1E2 - - - - - - - CCP2IE о 0 80i POON - - - - - POR BOR qq UU 8Fh - Зарезервирован • 90h - Зарезервирован - - 9111 - Зарезервирован - 92h PR2 Регистра периода модуля таймер 2 1111 nil 1111 nn 93h SSPADD Регистра адреса синхронного последовательного порта (в режиме 12С) 00000000 00000000 94h SSPSTAT - DA p s RW UA BF -000000 -000000 95h - Зарезервирован - 96h - Зарезервирован - 97h - Зарезервирован - - 9811 TXSTA CSRC ТХ9 TXEN SYNC BRGH ' ™ 1 ТХЮ 0000-010 0000-010 99h SPBRG Регистр генератора скорости передачи в бодах 00000000 00000000 9AI1 - Зарезервирован - 9Bh - Зарезервирован - 901 - Зарезервирован - 9Di • Зарезервирован - - 2 Зак 1092 33
Глава 4 PIC16C7X Продолжение таблицы 4-5 Аире с Имя Разряды Значение после сбросов: POR.BOR Значение после ДРУП4Х сбросов*2’ 7 6 5 4 3 2 1 0 Банк 2 1«Я1М) INDF Для записи данных при косвенной адресации (не материальный регистр) 00000000 0000 0000 101h TMRO Регистр модуля таймер 0 xxxx xxxx uuuu uuuu lOZrf" PCL Программный счетчика (PC) младший байт 00000000 00000000 103hMI STATUS 1RP RP1 RPO TO PD Z DC C 0001 I xxx OOOq quuu 104hH) FSR Указатель для косвенной адресации памяти данных xxxx xxxx uuuu uuuu 10511 - Зарезервирован - 106h PORTB По записи регистр PORTB, по чтению контакты PORTB xxxx xxxx uuuu uuuu 107h - Зарезервирован - IO8h - Зарезервирован - - • 109h Зарезервирован - IDA*1,4' PCLATH - - Буфер записи 5 ста рших раз рядов PC — 0 0000 — 00000 KIBh'4' 1NTCON G1E ADIE TOIE INTE RBIE TOIF INTF RBIF 0000 OOOx 0000 OOOu lOCh - Зарезервирован - - • « • • • • - - lOFh - Зарезервирован - БанкЗ l80h141 INDF Для записи данных при косвенной адресации (не материальный регистр) 00000000 0000 0000 181h OPTION RBPU 1NTEDG TOCS TOSE PSA PS2 PSI PSO 1111 1111 11111111 82hM> PCL Программный счетчика (PC) младший байт 00000000 00000000 IS3hMI STATUS IRP’1 I RPI'” RPO TO i PD z DC C 0001 Ixxx OOOq quuu lS4h141 FSJ? Указатель для косвенной адресации памяти данных xxxx xxxx uuuu uuuu 18511 - Зарезервирован - - 186h TRISB Регистр управления направлением данных PORTB 1111 111) 1111 1111 I87h Зарезервирован 188h Зарезервирован lX9h - Зарезервирован ISA"'" PCLATH - Буфер записи 5 ста ришх раз ЭЯДОВ PC — 00000 — 0 0000 I8BI1'4' 1NTCON GIE ADIE TOIE INTE | RBIE TOIF INTF | RBIF 0000 OOOx 0000 OOOu IKCh - Зарезервирован - - Обозначения: х = не определено, и = не изменяется, q = зависит от условия, - = зарезервированы, читаются как 'О'. Затененные разряды зарезервированы, читаются как ’О’. Примечания: I. Старший байт PC непосредственно не доступен. Регистр PCLATH содержит разряды <12:8> PC, которые пересылаются в старший байт счетчика программ. 2. Другие сбросы: внешний сброс по входу MCLR и сброс от сторожевого таймера 3. Биты PSPIE и PSP1F отсутствуют в PIC16C76, всегда должны быть обнулены. 4. Регистры адресуемые из любого банка. 5. PORTD и PORTE отсутствуют в Р1С16С76, читаются как 'О'. 34
PIC16C7X Глава 4 4.2.2.1 РЕГИСТР СОСТОЯНИЯ ("STATUS") Регистр "STATUS", показанный на рис. 4-7, содержит флажки арифме- тического состояния ALU, состояния сторожевого таймера и биты выбора банка памяти данных. Регистр "STATUS" может быть адресован любой командой как любой другой регистр. Если регистр "STATUS" - адресат для команды, которая мо- дифицирует флажки Z, DC и С, то запись в эти биты не производится. Эти биты устанавливаются в соответствии с результатом операции. Кроме того, биты ТО и PD не изменяются. Следовательно, результат операции с регист- ром "STATUS" может быть отличным от исходного операнда. Например, CIPF STATUS очищает три старшие разряда и устанавливает бит Z. В результате этой операции регистр "STATUS" будет иметь значение OOOu uluu (где и - неизменное значение). В связи с этим рекомендуется ис- пользовать команды BCF, ESF, SWAPF и MOVWF, так как они не воздейст- вуют на биты Z, С или DC регистра "STATUS". Существуют и другие коман- ды, не воздействующие на биты состояния (см. раздел "Система команд"). Примечания: 1. Биты IRP и RP1 (STATUS < 7:6 >) в PIC16C7X зарезервиро- ваны и всегда должны содержать "О" кроме PIC16C76 и PIC16C77. Использование этих битов как универсальных (R/W) не рекомендуется, так как это может воздействовать на совместимость программ сверху вниз с будущими изде- лиями. 2. Биты С и DC при операциях вычитания функционирует как заем (для примеров см. команды SUBLW и SUBWF). 2* 35
Глава 4 PIC16C7X RAV-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x 1 IRP RP1 1 RP0 ТО | PD 1 Z DC с I 7 О Рис. 4-7 Регистр состояния (адрес, 031т, 83h) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: IRP: Выбор банка (используется для косвенной адресации) 1 = Банк 2, 3 (100-ый IFFh) О = Банк 0, 1 (00-ый - FFH) Разряды 6-5: RPlzRPO: Выбор банка (используется для прямой адресации) 11 = Банк 3 (180h - IFFh) 10 = Банк 2 (100h - 17Fh) 01 = Банк 1 ( 80h- FFh) 00 = Банк 0 ( 00h - 7Fh) Каждый банк занимает - 128 байт. ' Разряд 4: ТО: Выход сторожевого таймера (WDT) 1 = После включение питания или команда CLPWDT, SLEEP 0 = После срабатывания WDT Разряд 3: PD: Понижение мощности 1 = После включения питания или команды CLPWDT 0 = После выполнения команды SLEEP Разряд 2: Z: Признак нуля 1 = Если результат арифметической или логической операции = "0" 0 ~ Если результат арифметической или логической операции не "0" Разряд 1: DC: Дополнительный перенос/заем (после команд ADDWF ADDLW, SUBLW, SUBWF) 1 = Если перенос из 4-ого младшего разряда результата 0 = Если нет переноса из 4-ого младшего разряда результата Разряд 0: С: Перенос/заем (после команд ADDWF ADDLW, SUBLW, SUBWF) 1 = Если перенос из старшего разряда результата 0 = Если нет переноса из старшего порядка результата Примечание: Заем имеет обратное значение. Вычитание выполняется сложе- нием, при этом вычитаемое представляется в дополнительном коде. Команды сдвигов (RRF RLF) выполняются через перенос. 36
PIC16C7X Глава 4 4.2.2.2 РЕГИСТР OPTION Регистр "OPTION" доступен по чтению и записи. Он содержит различ- ные служебные биты: конфигурацию предделителя (PSC) для TMR0/WDT, внешнего прерывания INT и состояние выходов порта В. Примечание: Установка предделителя PSC 1:1 для таймера TMRO соот- ветствует переключению его на сторожевой таймер WDT битом PSA (OPTION < 3 >). R/W-l R/W-l R/W-l R/W-l R/W-l R/W-l R/W-l R/W-l | RBPU | INTEDG i TOCS TOSE PSA PS2: PSI PSO I 7 О Рис. 4-8 Регистр "OPTION" (адрес 8 lh) Обозначения: R = читаемый разряд, W - записываемый разряд, U - зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: RBPU: Подключение выводов PORTB к высокому уровню 1 = выводы PORTB отключены О = выводы PORTB подтянуты к высокому уровню Разряд 6: INTEDG: Выбор фронта прерывания 1 = прерывание по переднему фронту вывода PB0/INT О = прерывание по заднему фронту вывода PB0/INT Разряд 5: TOCS: Выбор источника синхронизации таймера TMRO 1 = внешняя синхронизация по выводу PA4/T0CKI О = синхронизация от внутреннего генератора (CLKOUT) Разряд 4: T0SE: Выбор фронта внешней синхронизации таймера ТМРО 1 = счет по переднему фронту вывода PB0/INT О = счет по заднему фронту вывода PB0/INT Разряд 3: PSA: Назначение предварительного счетчика 1 - предделнтель подключен к WDT О = предделнтель подключен к TMRO Разряд 2-0: PS2:PS0: Коэффициент деления предварительного счетчика Значение TMR0___________WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 37
Глава 4 PIC16C7X 4.2.2.3 РЕГИСТРINTCON Регистр "INTCON" доступен по чтению и записи. Он содержит биты ма- сок прерывания и флажки прерываний. R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x | G1E I ADIE I TOIE | INTE | RBIE | TOIF | INTF | RBIF | 7 О Рис. 4-9 Регистр "INTCON" для PIC 16С710/71/711 (адрес OBh, 8Bh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: GIE: Управление общим прерыванием01 1 = все немаскированные прерывания разрешены 0 = все прерывания запрещены Разряд 6: ADIE: Маска прерывания по концу А/D преобразования 1 = прерывание А/D разрешено 0 = прерывание А/D запрещено Разряд 5: TOIE: Маска прерывания окончанию счета TMR0 1 = прерывание TMR0 разрешено 0 = прерывание TMR0 запрещено Разряд 4: INTE: Маска внешнего прерывания по входу RB0/INT 1 = прерывание по входу RB0/INT разрешено 0 = прерывание по входу RB0/INT запрещено Разряд 3: RBIE: Маска прерывания изменения состояния на входах порта RB 1 = прерывание от порта RB разрешено 0 = прерывание от порта RB запрещено Разряд 2: T0IF: Флажок прерывания окончанию счета TMR0 1 = устанавливается если TMR0 окончил счет<2> 0 = если TMR0 не окончил счет Разряд 1: INTF: Флажок внешнего прерывания по входу RB0/INT 1 = устанавливается если прерывание по входу RB0/INT(2) 0 = если прерывание по входу RB0/INT не произошло Разряд 0: RBIF: Флажок прерывания изменения состояния порта RB 1 = устанавливается если изменилось состояние на входах RB7:RB4<2' 0 = если состояние на входах RB7:RB4 не изменилось Примечания: 1- Если в PIC16C71 происходит прерывание, то бит GIE сбрасывается. Этот бит можно заново установить при выходе из программы обра- ботки прерывания командой RETFIE. 2 - Флажки должны сбрасываться программой 38
PIC16C7X________________________________________________________Глава 4 Примечание: Флажки прерываний устанавливаются, когда происходит^ соот- ветствующее событие, независимое от состояния соответствую- щих масок прерывания или общего разрешения прерывания би- том GIE (INTCOH < 7 >) RW-o Rtw-o R/w~° RM-o ^~° R/w'° R/w~0 R/w-x | GIE | PEIE | TOIE | INTE | RBIE | TOIF | INTF | RBIF | 7 0 Рис. 4-10 Регистр INTCON для PIC16C715/72/73/73A/74/74A/76/77 (адрес OBh, 8Bh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, • п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: GIE: Управление общим прерыванием*') 1 = все немаскированные прерывания разрешены 0 = все прерывания запрещены Разряд 6: PEIE: Общая маска прерывания периферийных устройств 1 = прерывания периферийных устройств разрешены 0 = прерывания периферийных устройств запрещены Разряд 5: T0IE: Маска прерывания окончанию счета TMR0 1 = прерывание TMR0 разрешено 0 = прерывание TMR0 запрещено Разряд 4: INTE: Маска внешнего прерывания по входу RB0/INT 1 = прерывание по входу RB0/INT разрешено 0 = прерывание по входу RB0/INT запрещено Разряд 3: RBIE: Маска прерывания изменения состояния на входах порта RB 1 = прерывание от порта RB разрешено 0 = прерывание от порта RB запрещено > Разряд 2: T0IF: Флажок прерывания окончанию счета TMR0 1 = устанавливается если TMR0 окончил счет(2) 0 = если TMR0 не окончил счет Разряд 1: INTF: Флажок внешнего прерывания по входу RB0/INT 1 = устанавливается если прерывание по входу RB0/INT(2) 0 = если прерывание по входу RB0/INT не произошло Разряд 0: RBIF: Флажок прерывания изменения состояния на входах порта RB 1 = устанавливается если изменилось состояние на входах RB7:RB4(2) 0 = если состояние на входах RB7:RB4 не изменилось Примечания: 1. Если в PICI6C73 и PIC16C74 происходит прерывание, то бит GIE сбра- сывается. Этот бит можно заново установить при выходе из программы обработки прерывания командой. 2. Флажки должны сбрасываться программой 39
Глава 4 PIC16C7X 4.2.2.4 РЕГИСТР PIE1 Регистр PIE1 доступен по чтению и записи. Он содержит маски преры- ваний периферийных устройств. Примечание: Для того чтобы разрешить любое прерывание от периферийных устройств, необходимо установить бит PEIE (INTCON <6>). R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 | PSPIE(1) | ADIE | RCIE(2) I TXIE(2) | SSPIE(3i|CCP1IE<3)|TMR2IE(3)|TMR1IE(3)| 7 0 Рис. 4-11 Регистр PIE1 (адрес 8Ch) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: PSPIE(I): Маска прерывания параллельного ведомого порта 1 = прерывание при чтении/записи порта разрешено О = прерывание при чтении/записи порта запрещено Разряд 6: ADIE: Маска прерывания по концу преобразования A/D 1 = прерывание А/D разрешено О = прерывание А/D запрещено Разряд 5: RCIE(2): Маска прерывания приемника USART 1 = прерывание от приемника USART разрешено О = прерывание от приемника USART запрещено Разряд 5: ТХ1Е<2): Маска прерывания передатчика USART 1 = прерывание от передатчика USART разрешено О = прерывание от передатчика USART запрещено Разряд 3: SSPIE|3): Маска прерывания синхронного последовательного порта 1 = прерывание SSP разрешено О = прерывание SSP запрещено Разряд 2: ССРПЕ(3): Маска прерывания ССР1 1 = прерывание ССР1 разрешено О = прерывание ССР1 запрещено Разряд 1: TMR2IE<3): Маска прерывания равенства TMR2 и регистра PR2 1 = прерывание TMR2 разрешено О = прерывание TMR2 запрещено Разряд 0: TMR1IE(3): Маска прерывания окончанию счета TMR1 1 = прерывание TMR1 разрешено 0 = прерывание TMR1 запрещено Примечания: 1. В устройствах PIC16C715/72/72A/73/73A/76 параллельный ведомый порт отсутст- вует и этот разряд зарезервирован. 2. В устройствах PICI6C715/72/72 А модуль USART отсутствует и эти разряды заре- зервированы. 3. В устройстве Р1С16С715 модули ССР 1, таймер 1 и таймер 2 отсутствуют и эти раз- ряды зарезервированы. 40
PIC16C7X Глава 4 4.2.2.5 РЕГИСТР PIR1 Регистр PIR1 доступен по чтению и записи. Он содержит флажки пре- рывания периферийных устройств. R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 | PSPIF*1’ | ADIF | RCIF*2' TXIF*2' I SSPIF*3’ |ССР 1IF(3’| TMR2IF’3’ |TMR1 IF’3' [ 7 О Рис. 4-12 Регистр PIR1 (адрес ОСЬ) Обозначения: R - читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = нс определено, и ~ нс изменяется, q - зависит от условия. Разряд 7: PSPIF(I): Флажок прерывания параллельного ведомого порта 1 = если выполнена операция чтения/записи параллельного порта О = если нет операции чтения/записи параллельного порта Разряд 6: ADIF: Флажок прерывания по концу преобразования A/D 1 = если преобразование завершено A/D'4) О = если преобразование не завершено A/D Разряд 5: RCIF2': Флажок прерывания от приемника USART 1 = информация принята (сбрасывается при чтении RCREG) О = буферный регистр приемника USART пуст Разряд 4: TXIF<2>: Флажок прерывания от передатчика USART 1 = информация передана (сбрасывается при записи в TXREG) О = буферный регистр передатчика USART занят Разряд 3:88Р1Г(3):Флажок прерывания синхронного последовательного порта 1 = если в SSP приняты/переданы данные(4> О = если в SSP прием/передача не завершены . Разряд 2: CCP1IF’”: Флажок прерывания ССР1 Режим Фиксации 1 = если значение TMR1 зафиксировано’4' О = если фиксация не произошла Режим компаратора 1 = устанавливается если значение TMR1 равно заданному*4' О = если нет равенства Режим PWM - в данном режиме не используется Разряд 1: TMR2IF”’: Флажок прерывания равенства TMR2 и регистра PR2 1 = устанавливается, если значение TMR2 равно PR2*4' О = если нет равенства Разряд 0: TMR1IF*3': Флажок прерывания окончания счета TMR1 1 - устанавливается, если TMR1 окончил счет*4' 0 = если TMR1 не окончил счет Примечания: I. В устройствах PICI6C7I5/72/72A/73/73A/76 параллельный ведомый порт отсутст- вует и этот разряд зарезервирован. 2. В устройствах PICI6C715/72/72 А модуль USART отсутствует и эти разряды заре- зервированы. 3. В устройстве PICI6C715 модули CCPI, таймер I и таймер 2 отсутствуют и эти разряды зарезервированы. 4. Флажки должны сбрасывается программой. 41
Глава 4 PIC16C7X Примечание: Флажки прерываний устанавливаются, если происходит соот- ветствующее событие, независимое от состояния соответствую- щих масок прерывания или общего разрешения прерывания би- том GIE (IHTCOH < 7 >) Программа должна обеспечивать сброс соответствующих флажков до предоставления прерывания. 4 2.2.6 РЕГИСТР PIE2 Регистр PIE2 доступен по чтению и записи. Он содержит маску преры- вания модуля ССР2. U-0 U-0 и-0 и-0 и-0. и-0 и-0 R/W-0 1 1 - - | CCP2IE 1 7 О Рис. 4-13 Регистр PIE2 (адрес 8Dh) Обозначения: R = читаемый разряд, W -записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-1: Зарезервированы: читаются как 'О' Разряд 2: CCP2IE: Маска прерывания ССР2 1 = прерывание ССР2 разрешено О = прерывание ССР2 запрещено 4.2.2.7 PIR2 РЕГИСТР Регистр PIR2 доступен по чтению и записи. Он содержит флажок пре- рывания модуля ССР2. и-0 U-0 U-0 U-0 U-0 и-0 и-о R/W-0 1 1 1 1 “ 1 - ] CCP2IF | 7 Рис. 4-14 Регистр PIR2 (адрес ODh) 0 Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = ие определено, и = не изменяется, q = зависит от условия. Разряды 7-1: Зарезервированы и читаются как 'О' Разряд 2: CCP2IF*”: Флажок прерывания ССР2 Режим Фиксации 1 = если значение TMR1 зафиксировано*1’ О = если фиксация не произошла Режим компаратора 1 = устанавливается, если значение TMR1 равно заданному*1’ О = если нет равенства Режим PWM - в данном режиме не используется Примечание: 1. Флажки должны сбрасывается программой. 42
PIC16C7X Глава 4 4.2.2.8 РЕГИСТР PCON Регистр PCON доступен по чтению и записи. Он содержит флажок "Сброса" (POR), позволяющий определять произошел ли "Сброс" при вклю- чении питания или это внешний "Сброс” по выводу MCLR или "Сброс" WDT. Он также содержит флажок, показывающий "Сброс" при снижении питания (BOR). Регистр PCON PIC16C715 также содержит бит управления контролем четности памяти программ MPEEN, отражающий значение бита MPEEN сло- ва конфигурации, и флажок результата контроля четности памяти программ PER. Примечание: 1. Регистр PCON отсутствует в PIC 16С71 и читается как’0‘. 2. Бит BOR - не определён после "Сброса" при включении пи- тания, поэтому он должен устанавливаться программно и проверяться при последующих сбросах, чтобы определить, сброшен ли бит BOR, показывающий, что произошел "Сброс" при снижении питания. Если сброс при снижении питания отключен (не установлен бит BODEN в слове Кон- фигурации), то о состоянии бита BOR можно не заботится, так как в этом случае он не определен. U-0 и-0______и-0______U-0______и-0 . и-0 R/W-0 R/W-q I - I - I - I - I - I - I PQR I BOR(1) I 7 0 Рис. 4-15 Регистр "PCON" (адрес 8Eh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х ~ не определено, и - не изменяется, q = зависит ас условия. Разряды 7-2: Зарезервированы: читаются как 'О' Разряд 1: POR : Флажок "Сброс" при включении питания 1 = "Сброс" при включении питания не происходил О = "Сброс" при включении питания (должен быть установлен программой после "Сброса" при включений питания) Разряд 0: BOR(I): Флажок "Сброс" при снижении питания 1 = "Сброс" при снижении питания не происходил 0 = "Сброс" при снижении питания (должен быть установлен программой после "Сброса" при снижении питания) Примечание 1: Сброс при снижении питания в PIC16C73/74 отсутствует. 43
Глава 4 PIC16C7X R-U и-о и-0 и-0 и-0 R/W-1 R/W-0 R/W-q | MPEEN | - - | PER POR BOR | 7 О Рис. 4-16 Регистр PCON PIC16C715 (адрес 8 Eh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: MPEEN: Состояние схемы контроля четности памяти программ. Отражает значение бита MPEEN слова конфигурации. Разряды 6-3: Зарезервированы: читаются как 'О' Разряд 2: PER: Флажок ошибки контроля четности памяти программ 1 = ошибок контроля четности не обнаружено О = обнаружена ошибка контроля четности Разряд 1: POR : "Сброс" при включении питания 1 = "Сброс" при включении питания не происходил О = "Сброс" при включении питания (должен быть установлен программой после "Сброса" при включении питания) Разряд 0: BOR: Флажок "Сброс" при снижении питания 1 = "Сброс" при снижении питания не происходил О = "Сброс" при снижении питания (должен быть установлен программой после "Сброса" при снижении питания) 4.3 РЕГИСТРЫ PCL И PCLATH Программный счетчик (PC) - 13-разрядный. Младший байт отображает- ся в регистре PCL, который доступен по чтению и записи. Старший байт (PC < 12:8 >) читается и запи- сывается косвенно через регистр PCLATH. При лю- бом сбросе в PC записыва- ется "О". Рис. 4-17 показы- вает два варианты загрузки PC. Первый пример на ри- сунке показывает, как PC загружается при записи в PCL (PCLATH < 4:0 > - РСН). Второй пример на рисунке показывает, как PC загружается во время команд CALL или GOTO (PCLTH < 4:3 > РСН). 44
PIC16C7X Глава 4 4.3.1 ВЫЧИСЛЯЕМЫЕ ПЕРЕХОДЫ Вычисляемые переходы выполняется прибавлением смещения к счетчи- ку программ (ADDWF PCL). При работе с таблицами метод вычисляемых переходов должен использоваться осторожно, так как могут возникать ошиб- ки, если таблица расположена на границе блоков памяти (блок - 256 байт), то есть когда происходит переполнение PCL 4.3.2 СТЕК Семейство PIC16CXX имеет аппаратный стек глубиной 8 уровней и ши- риной 13-разрядов. Стек не является частью памяти программ или данных, Указатель вершины стека не доступен для чтения или записи. PC запоминает- ся в стеке, когда выполняется команда CALL или происходит прерывание. Извлечение из стека осуществляется командами RETURN, RETLW или RETFIE. Операции записи и извлечения из стека не воздействует на PCLATH. Стек работает как циклический буфер. Это означает, что после того как в стек было записано восемь значений, девятое значение будет записано на место первого, а десятое - на место второго. Примечания: 1. Нет никаких разрядов состояния, которые указывали бы на условия заполнения или переполнение стека. 2. Нет никаких команд записи и извлечения из стека - они яв- ляются действиями, которые происходят при выполнении команд CALL, RETURN, RETLW, RETFIE или при прерыва- нии программы. 4.4 СТРАНИЧНАЯ ОРГАНИЗАЦИЯ ПАМЯТИ ПРОГРАММ Устройства PIC16C7X имеют объем памяти программ до 8 Кбайт, а ко- манды CALL и GOTO - только 11-разрядный адресный интервал. Этот интер- вал разрешает переход внутри страницы памяти программ размером 2 К. Для того чтобы адресовать всё адресное пространство памяти, программа должна позволять манипулировать разрядами переключения страниц, которые нахо- дятся в регистре PCLATH <4:3> (Рис. 4-17). При выполнении команд CALL или GOTO пользователь должен гарантировать установку этих разрядов (PCLATH < 4:3 >) таким образом, чтобы была адресована желаемая страница памяти программ. Если выполняется возврат из подпрограммы или прерыва- ния, то из стека выталкивается всё 13-разряднное значение PC. Следователь- но, команды возврата не требуют манипулирования PCLATH <4:3>. 45
Глава 4 PIC16C7X Примечания: 1. В PIC16C710/71/711/7115/72 оба разряда переключения стра- ниц PCLATH <4:3> зарезервированы, так как их память про- грамм не превышает одной страницы (2 Кбайта). Использо- вание PCLATH <4:3> в качестве универсальных битов (R/W) не рекомендуется, так как это может воздействовать на со- вместимость программ сверху вниз с будущими изделиями. 2. В PIC16C73/73A/74/74A зарезервирован один разряд пере- ключения страниц PCLATH <4>, так как их память программ занимает две страницы (4 Кбайта). На примере 4-1 показан вызов подпрограммы в странице 1 памяти про- граммы. Этот пример подразумевает, что PCLATH сохранен и восстановлен программой обработки прерывания (если прерывания используются). Пример 4-1: Обращение к подпрограмме в странице 1 из страницы 0 ORG BSF CALL 0x500 PCLATH, 3 SUB_P1 /установка 1 (800h-FFFh) /переход к подпрограмме ORG subi_p: 0x900 L: /вызываемая подпрограмма /на странице 1 (800h-FFFh) RETURN /возврат в основную программу /на страницу 0 (000h-7FFh) 4.5 КОСВЕННАЯ АДРЕСАЦИЯ. РЕГИСТРЫ INDF И FSR Регистр INDF физически не существует. Обращение по адресу регистра INDF (00h) вызывает косвенную адресацию. Косвенная адресация возможна при использовании регистра INDF. Лю- бая команда, использующая регистр INDF, фактически обращается к регист- ру, указанному в регистре выбора файла (FSR). Чтение непосредственно ре- гистра INDF может выполняться косвенно, если читать по 00-му адресу (FSR = '0')- Запись в регистр INDF косвенно приводит к пустой операции (хотя би- ты состояния при этом могут изменятся). Эффективный 9-разрядный адрес получается объединением 8-разрядного регистра FSR и бита IRP (STATUS <7>), как показано на рис. 4-18. Бит IRP в устройствах PIC16C7X, кроме PIC 16С76/77, не используется. Простая программа очистки памяти данных (RAM 20h-2Fh) с использо- ванием косвенной адресации показана на примере 4-2. 46
PIC16C7X Глава 4 Непосредственная адресация Косвенная адресация Рис. 4-18 Непосредственная и косвенная адресация Карты памяти данных PIC16C7X приведены на рис. 4-2 ... 4-6. Пример 4-2: Косвенная адресация MOVLW MOVWF 0x20 FSR /инициализация указателя ;памяти NEXT: CLRF INDF /очистка регистра INDF INCF FSR, F ;инкремент указателя BTFSS FSR, 4 ; выход из цикла? GOTO NEXT /нет, очистить следующий CONTINUE: ;да, продолжить программу 47
Глава 5 PIC16C7X 5. ПОРТЫ ВВОДА/ВЫВОДА (I/O) Некоторые контакты портов I/O мультиплексированы с функциями пе- риферийных устройств. Если периферийное устройство включается, то соот- ветствующий контакт не может использоваться как универсальный контакт I/O. 5.1 РЕГИСТРЫ PORTA И TRISA Шина Рис. 5-1 Структурная схема контактов RA0:RA3 и RA5 1. Контакты защищены диодами к VDD и Vss PORTA - для PICI6C710/71/711/715 5-разрядный регистр. PORTA - для PIC 16С72/73/73А/74/74А/76/76/77 6-разрядный регистр. Контакт RA4/T0CKI - на входе имеет триггер Шмитта, а на выходе от- крытый сток выходного транзистора. Все остальные контакты порта RA имеют входные буферы TTL и полные выходные драйверы КМОП. Все контакты можно кон- фигурировать как выходы или входы программированием реги- стра TRISA. Запись "1" в соот- ветствующие разряды регистр TRISA переводит выход в режим высокого импеданса. Запись "0" в регистр TRISA открывает вы- ходные драйверы на выбранных контактах. После записи данных в ре- гистр PORTA они автоматически появляются на контактах I/O от- куда и считывается их состояние.. Все операции записи представ- ляют собой операции "чтение - модификация - запись". Следова- тельно, запись в порт подразуме- вает, что данные считываются с контактов порта, это значение изменяется и затем записывается в регистр данных порта. Контакт RA4 мультиплексирован с входом синхронизации модуля тай- мера 0 и называется RA4/T0CKI. Остальные контакты PORTA мультиплексированы с аналоговыми вхо- дами и входом опорного напряжения (VREF). Функция каждого контакта вы- 48
PIC16C7X Глава 5 бирается программированием соответствующих битов в регистре ADCON1 (регистр управления 1 А/D преобразователя). Шина RD TRIS kTMRO Рис. 5-2 Структурная схема контактов RA4 1. Контакты защищены диодами к VDD и VSs Примечание: После "Сброса" при включении питания все контакты конфи- гурированы как ана- логовые входы и чи- таются как "О". Регистр TRISA управляет направлением контактов RA даже когда они используются как ана- логовые входы. При использова- нии контактов как аналоговых входов, пользователь должен сле- дить за тем, что бы в регистре TRISA соответствующие разряды были запрограммированы как входы. Пример 5-1: Инициализация PORTA CLRF PORTA BSF STATUS,RPO MOVLW OxCF MOVWF TRISA /инициализация выходных данных PORTA /установить обращение к банку 1 /Значение для инициализации порта: /установить RA<3:0> входы, /RA<5:4> выходы, /TRISA <7,6> всегда читается как 'О'. 5.2 РЕГИСТРЫ PORTB И TRISB PORTB - это 8-разрядный двунаправленный порт. Любой разряд порта можно конфигурировать как выход или вход программированием соответст- вующего разряда регистра TRISB. Запись "1" в соответствующие разряды регистра TRISB переводит выходы в режим высокого импеданса; запись "О" открывает выходные драйверы на выбранных контактах. Все контакты PORTB могут быть подтянуты к высокому уровню внут- ренними ключами. Включение ключей выполняется записью "О" в разряд 7 регистра OPTION (бит RBPU). Ключи автоматически выключаются, когда контакт порта конфигурируется как выход. После "Сброса" при включении питания ключи закрываются. 49
Глава 5 PIC16C7X V00 Рис. 5-3 Структурная схема контактов RB3:RB0 1. Контакты защищены диодами к VDD и Vss 2. Если TRISB = 'Г и RBPU = 'О (OPTION <7>), то контакты подтянуты к высокому уровню. Четыре контакта PORTB (RB7:RB4) формируют прерывание при изме- нении состояния. Контакты, сконфигурированные только как входы, могут вызывать это прерывание (то есть любой контакт RB7:RB4, сконфигури- рованный как выход, исключа- ется из формирования этого прерывания). Состояние сигна- лов на контактах (RB7:RB4) сравнивается со старым значе- нием, записанным при послед- нем чтении PORTB. Сигналы "несоответствия" состояния на контактах RB7:RB4 объединя- ются по "ИЛИ" и общий сигнал генерирует прерывание измене- ния состояния порта RB флаж- ком RBIF (INTCON < 0>). Это прерывание может пробуждать устройство из ос- танова. Пользователь в про- грамме обработки прерывания может сбросить флажок преры- вания, выполнив следующие операции: А) Считать PORTB, что закончит условие несоответствия. В) Сбросить флажок RBIF. Пример 5-2: Инициализация порта В CLRF PORTB BSF STATUS, RPO MOVLW OxCF MOVWF TRISB /инициализация PORTB, /обнуление регистра выходных данных /установка обращения к банку 1 /значение для инициализации порта: /установка RB <3:0> как входов, ;RB <5:4> как выходы' /RB <7:б> как входы В противном случае условие несоответствия будет удерживать флажок RBIF, и только чтение PORTB закончит условие несоответствия и позволит сбросить флажок RBIF. Прерывание при изменении состояния вместе с программируемой 50
PIC16C7X Глава 5 конфигурацией подключения к высокому уровню этих четырех контак- тов позволяет создать простой интерфейс клавиатуры, дополненный возмож- ностью пробуждения устройства при нажатии клавиши. м»о Рис. 5-4 Структурная схема контактов RB7 : RB4 (Р1С16С71/73/74) 1. Контакты защищены диодами, подключён- ными к Vdd и Vss 2. Если TR1SB = 'Г и RBPU = '0 (OPTION <7>), то контакты подтянуты к высокому уровню. V0D Рис. 5-5 Структурная схема контактов RB7:RB4 (Р1С16С710/711/715/72/ 73А/74А/76/77) 1. Контакты защищены диодами, подключен- ными к Vdd и VSs 2. Если TR1SB = 'Г и RBPU = '0 (OPTION <7>), то контакты подтянуты к высокому уровню. Прерывание при изменении состояния рекомендуется для пробуждения при нажатии клавиши, когда PORTB используется только для прерывания при изменении состояния. Опрос PORTB не рекомендуется при использова- 'нии прерывания при изменении состояния. Примечание: Только для Р1С16С71/73/74. Если изменение на контакте I/O произошло во время выполнения операции чтения (начало цикла Q2), то прерывание по флажку RBIF не произойдет. 5.3 РЕГИСТРЫ PORTC И TRISC PORTC - это 8 разрядный двунаправленный порт. Любой разряд можно конфигурировать как выход или вход программированием регистра TRISC. Контакты PORTC мультиплексированы с функциями периферийных уст- ройств. На входах PORTC установлены буферы с триггерами Шмитта. 51
Глава 5 PIC16C7X Управление PORT/Периферия& устройств Рис. 5-6 Структурная схема PORTC 1. Контакты защищены диодами к Vqd и Vss 2: Управление порт / периферия осуществляет под- ключение выхода к порту или к периферийному устройству. 3: Включение периферии активно только, если пери- ферийное устройство включено. При предоставлении вы- водов периферийным устрой- ствам необходимо проявлять осторожность при программи- ровании разрядов регистра TRISC, поскольку некоторые периферийные устройства отключают разряд TRISC и определяют контакт как вы- ход, в то время как другие определяют контакт как вход. Отключение разряда TRISC действительно только в то время, когда периферийное устройство включено. Пользо- ватель должен обратиться к соответствующему разделу периферийных устройств для правильной установки разря- дов регистра TRISC. Пример 5-3: Инициализация PORTC CLRF PORTC /Инициализация данных PORTC /обнуление регистра выходных данных BSF STATUS, RPO /Установить обращение к банку 1 MOVLW OxCF /Значение для инициализации порта, MOVWF TRISC /установить RC <3:0> как входы, /RC <5:4> как выходы, /RC <7:6> как входы 5.4 РЕГИСТРЫ PORTD И TRISD PORTD - это 8 разрядный двунаправленный порт. Любой разряд порта можно конфигурировать как выход или вход программированием регистра TR1SD. На входах PORTD установлены буферы с триггерами Шмитта. PORTD может быть конфигурирован, как 8 разрядный параллельный ведомый порт микропроцессора, установкой бита PSPMODE (TRISE <4>). В режиме параллельного ведомого порта работают входные буферы TTL. 52
PIC16C7X Глава 5 5.5 РЕГИСТРЫ PORTE И TRISE Регистр данных Рис. 5-7 Структурная схема PORTD в режиме порта ввода / вывода 1. Контакты защищены диодами к VDD и Vss Регистр данных Рис. 5-8 Структурная схема PORTE в режиме порта ввода / вывода 1. Контакты защищены диодами к VDD и Vss PORTE - это 3 разрядный двунаправленный порт. Контак- ты RE0/RD/AN5, RE1/WR/AN6 и RE2/CS/AN7 порта можно кон- фигурировать как выходы или входы программированием реги- стра TRISE. На входах PORTE установлены буферы с триггера- ми Шмитта. Контакты PORTE становят- ся входами управления для па- раллельного ведомого порта микропроцессора, если установ- лен бит PSPMODE (TRISE <4>). В этом режиме пользователь должен следить, чтобы были установлены биты TRISE <2:0> (контакты конфигурированы как входы), а в регистре ADCON1 эти контакты должны быть кон- фигурированы как цифровые входы / выходы. В режиме па- раллельного ведомого порта работают входные буферы TTL. Контакты PORTE мультип- лексированы с аналоговыми входами. Функция контактов выбирается программированием соответствующих битов в реги- стре ADCON1. Если контакты конфигурированы как аналого- вые входы, то эти контакты чи- таются как "О". Регистр TR1SE управляет направлением контактов RE да- же когда они используются как аналоговые входы. При исполь- зовании контактов как аналого- вых входов пользователь должен следить за тем, что бы в регист- ре TRISA соответствующие разряды были запрограммированы как входы. 53
Глава 5 PIC16C7X 5.6 ПРОГРАММИРОВАНИЕ ПОРТОВ I/O 5.6.1 ДВУНАПРАВЛЕННЫЕ ПОРТЫ I/O Любая команда записи выполняется как "чтение - модификация - за- пись". Команды BCF и BSF, например, читают* регистр в арифметико- логическое устройство (АЛУ), выполняют разрядную операцию и записыва- ют результат обратно в регистр. При использовании этих команд необходимо соблюдать осторожность, особенно если они применяются к портам ввода / вывода. Например, операция BSF над разрядом 5 PORTB считывает всё восьми разрядное слово из PORTB в АЛУ, затем операция BSF установит "1" в раз- ряд 5 и запишет все слово в выходной регистр PORTB. Если какой либо раз- ряд PORTB используется как двунаправленный контакт I/O (например, разряд 0) и он определен в это время как вход, то входной сигнал, представленный непосредственно на контакте, будет считан в АЛУ и затем записан в регистр данных этого контакта поверх предыдущего состояния. Пока данный контакт работает в режиме входа никаких проблем не возникает. Однако, если он (разряд 0) будет включен как выход, то состояние регистра данных может теперь быть неизвестно. Пример 5-4 показывает эффект двух последовательных команд "чтение - модификация - запись" на порте I/O. Пример 5-4: Команды " чтение - модификация - запись " на порте I/O ; Исходное состояние порта: PORTB < 7:4 > входы, ; PORTB < 3:0 > выходы ; PORTB < 7: 6 > подтянуты к высокому уровню и не соединены с другими схемами регистр порта контакты порта BCF PORTB, 7 ; 01рр РРР 11рр ррр BCF PORTB, 6 ; Юрр РРР 11рр ррр BSF STATUS , RPO BCF TRISB, 7 ; Юрр РРР 11рр ррр BCF TRISB, 6 ; Юрр РРР Юрр ррр Примечание: пользователь возможно ожидал, что значения ;на контактах .будут ООрр ррр. Вторая операция BCF считывает ;с контакта RB7 значение закрытого выхода ("1"). Если на выходе активный уровень низкий или высокий, то этот уровень не должен изменятся другим устройством (не допускается объединение вы- ходов по схеме "монтажное или" и " монтажное и"). Возникающие в резуль- 54
PIC16C7X Глава 5 тате этого объединения большие токи на выходе могут повредить микросхе- му. 5.6.2 ПОСЛЕДОВАТЕЛЬНОСТЬ ОПЕРАЦИЙ НА ПОРТАХ I/O Фактическая запись в порт I/O выполняется в конце цикла команды, в то время как чтение данных выполняется в начале цикла команды (Рис. 5-9). Следовательно, должна быть соблюдена осторожность, если запись сопрово- ждается операцией чтения и выполняется на одном и том же контакте порта I/O. Последовательность команд должна быть такой, чтобы напряжение на контакте стабилизировалось прежде, чем будет выполнена следующая коман- да, которая будет считывать его значение. В противном случае с этого кон- такта будет читаться предыдущее состояние, так как новое состояние не ус- певает установится. В случае сомнения лучше отделить эти команды опера- цией NOP или другой командой, не обращающейся к этому порту I/O. ; q-i| Q21 03| см; см। Q2| 03| см; 01; 02| оз; 04; oi| 02| оз| 04; ' гс У рс k .РС+"<---У—!~РС + 2 рс+з"| Выборка . MOVWF PORTB iMOVF PORTB,W • ! команды • запись к ' ' < NOP NOP ; portb ; : ; : ; RB7:RB0 i ' jf~ ' I « * * * ^Считывание' * * 1 J | состояния • • • • , контакта • • • • ______•/ТРО..*___ ’ 1 : : • : • Nop Выполнение; ! MOVWF PORTB ! MOVF PORTB.W I I команды । запись» , • • P0R1B • • • Рис. 5-9 Последовательность операций на портах I/O Этот пример показывает запись в PORTB, сопровождаемую чтением из PORTB. Отметим: время установки данных = (0.25 Тсу - Тро) где: ТСу = цикл команды TpD = задержка распространения Следовательно, при более высоких частотах синхронизации запись, сопровождаемая чтением ,может быть проблематична. 55
Глава 5 PIC16C7X 5.7 ПАРАЛЛЕЛЬНЫЙ ВЕДОМЫЙ ПОРТ При установке бита PSPMODE (TRISE <4>) PORTD функционирует как 8 разрядный параллельный ведомый порт (PSP) или порт микропроцессора. Параллельный порт функционирует только в режиме ведомого, то есть дан- ные могут асинхронно читаться и записываться внешним устройством. Управление чтением осуществляется по контакту RE0/RD/AN5, а записью - по контакту RE1/WR/AN6. Параллельный ведомый порт обеспечивает интерфейс непосредственно с 8 разрядной шиной данных микропроцессора. Внешний микропроцессор может читать или записывать PORTD как 8 разрядный регистр. Установка бита PSPMODE программирует контакты порта: RE0/RD/AN5 как вход чте- ния (RD), RE1/ WR/AN6 как вход записи (WR) и RE2/CS/AN7 как вход выбо- ра устройства (CS). Для выполнения этих функций соответствующие биты управления направлением данных регистра TRISE (TRISE < 2:0 > ) должны быть конфигурированы как входы, а биты PCFG2:PCFG0 (ADCON1 <2:0>) конфигурации А/D преобразователя должны быть установлены таким обра- зом, чтобы контакты RE2:RE0 были конфигурированы как цифровые входы / выходы. R-0 R-0 R/W-0 R/W-0 и-0 R/W-1 R/W-1 R/W-l | IBF OBF IBOV Ipspmodf-1 | TRISE2 TRISE 1 TRISEO | 7 0 Рис. 5-10 Регистр TRISE (адрес 89h) Обозначения: R - читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п - значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: IBF: Флажок входного буфера параллельного ведомого порта 1 = получено слово и ожидается считывание его в ЦПУ 0 = входной буфер пуст Разряд 6: OBF: Флажок выходного буфера параллельного ведомого порта 1 = выходной буфер содержит предварительно записанное слово 0 = записанное слово считано Разряд 5: IBOV: Флажок переполнения входного буфера 1 = получено очередное слово, а предыдущее не считано (сбрасывается программным обеспечением) 0 = нет переполнения Разряд 4: PSPMODE: Управление параллельным ведомый портом 1 = режим параллельного ведомого порта 0 = режим универсальных входов / выходов Разряд 3: Зарезервирован: читается как 'О' Разряды 2-1: TRISE2 : ТК1$Е0:Управление направлением данных PORTE 1 = вход 0 = выход 56
PIC16C7X Глава 5 . Фактически имеются два 8 разрядных регистра: один для выходных данных (из PIC16CXX), а другой для входных данных. Пользователь записы- вает 8 разрядный данные в регистр данных PORTD, а читает данные из реги- стра входных данных порта (обратите внимание, что они имеют один и тот же адрес). В этом режиме значение регистра TRISD игнорируется, так как мик- ропроцессор управляет направлением потока данных. Запись в PSP происходит, когда на линиях CS и WR устанавливается низкий уровень. Флажок состояния входного буфера IBF (TRISE <7>) и фла- жок прерывания PSPIF (PIR1 < 7 >) устанавливаются на такте Q4, если в те- чении такта Q2 на линии CS или WR фиксируется высокий уровень. (Рис. 5- 12). Флажок IBF автоматически сбрасывается после чтения входного регист- ра PORTD. Переполнение входного буфера отражает флажок IBOV (TRISE <5>). Он устанавливается, если в порт записывается следующий байт до чте- ния предыдущего. Чтение из PSP происходит, когда на линиях CS и RD устанавливается низкий уровень. При этом сбрасывается флажок состояния выходного буфера OBF (TRISE <6>), показывая, что регистр PORTD читается внешней шиной (Рис. 5-13). Флажок пре- рывания PSPIF устанавливается на такте Q4, если в течении такта Q2 на линии CS или RD фиксиру- ется высокий уровень. Флажок OBF остается сброшенным до тех пор, пока данные не будут запи- саны в регистр PORTD про- граммным обеспечением. Если режим параллельного ведомого порта отключается, то биты IBF и OBF сбрасываются. Однако, если флажок IBOV был установлен, то он должен быть сброшен программным обеспече- нием. После завершения операции чтения или записи генерируется прерывание и устанавливается флажок PSPIF. Этот флажок дол- жен сбрасываться программным обеспечением. Прерывание может быть за- блокировано очисткой разряда маски прерывания PSPIE (PIE1 < 7 >). 57
Глава 5 PIC16C7X Q1 | Q2 | Q3 | 04 : Q1 | 02 | 03 | 04 01 | 02 | 03 | 04 us 1 : Г w \ LLmiLHILb ! : RD P0RTD<70> — IBF i \ OBF _ PSPIF ! Хч~*~7 — Рис. 5-12 Временная диаграмма записи в параллельиь 1Й ведомый порт 58
PIC16C7X Глава 6 6. МОДУЛИ ТАЙМЕРА У геройства PIC 16С710, PIC 16С71, PIC 16С711 и PIC 16С715 имеют один модуль таймера. Устройства Р1С16С72, PIC16C73/73A, Р1С16С74/74А и PIC16C76/77 имеют три модуля таймера. Каждый модуль может генерировать прерывание по истечению отсчета (то есть при переполнении таймера). Каждый из этих модулей рассматривает- ся подробно в следующих разделах. 6.1 ТАЙМЕР О Модуль таймера 0 - это простой 8 разрядный счетчик с переполнением. Источником синхронизации может быть внутренний генератор системы (FOsc / 4) или внешний. Когда источник синхронизации внешний, модуль таймера О может быть запрограммирован на счет по переднему или заднему фронту входного сигнала. К модулю таймера 0 может быть подключен предварительный счетчик (предделнтель). Предделнтель подключается к таймеру 0 или к сторожевому таймеру WDT. Бит PSA (OPTION <3> ) определяет назначение предваритель- ного счетчика, а биты PS2:PSO (OPTION<2:0>) устанавливают коэффициент деления предварительного счетчика. Для таймера 0 можно установить сле- дующие коэффициенты деления предварительного счетчика: 1:1 (когда пред- варительный счетчик подключен к сторожевому таймеру), 1:2, 1:4, 1:8, 1:16 и 1:32, 1:64, 1:128 и 1:256. Синхронизация внешней тактовой частоты осуществляется после пред- варительного счетчика. При использовании внешней синхронизации тактовая частота предделителя может быть выше частоты устройства. Максимальная частота синхронизации составляет 50 МГц. 6.2 ТАЙМЕР 1 Таймер 1 - это 16-разрядный таймер / счетчик. Источником синхрониза- ции может быть внутренний генератор системы (Fosc / 4), внешний генератор или внешний кварцевый резонатор. Таймер 1 может функционировать как таймер или как счетчик. Если он установлен как счетчик с внешним источни- ком синхронизации, то счетчик может функционировать как синхронный или асинхронный. Асинхронные операции позволяют таймеру 1 функционировать во время останова микроконтроллера по команде SLEEP и обеспечивают ра- боту устройства в реальном масштабе времени в режиме останова. К модулю таймера 1 может быть подключен предделнтель PSC, который позволяет изменить скорость таймера 1 в следующих соотношениях: 1:1, 1:2, 59
Глава 6_______________________________________ PIC16C7X 1:4 и 1:8. Таймер 1 может использоваться в составе модуля ССР. Когда тай- мер 1 используется с модулем ССР, то является основой для накопления 16- разрядных данных или сравнения 16-разрядный данных, а его синхронизация должна быть внутренней. 6.3 ТАЙМЕР 2 Таймер 2 - это 8 разрядный таймер с программируемым предваритель- ным счетчиком и последующим делителем. Таймер 2 может использоваться с модулем ССР 1 в режиме ШИМ как 8 разрядный счетчик периода совместно с регистром PR2, а также как генератор скорости передачи данных синхронно- го последовательного порта (SSP). Предделитель позволяет изменять ско- рость таймера 2 в следующих соотношениях: 1:1, 1:4, 1:16. Последующий делитель позволяет генерировать прерывания после того как регистр TMR2 будет равен регистру периода (PR2) программируемое число раз. Последующий делитель может программироваться в соотношени- ях от 1:1 до 1:16. 6.4 МОДУЛЬ НАКОПИТЕЛЯ / КОМПАРАТОРА / ШИМ (ССР) Модуль ССР может функционировать в одном из этих трех режимов: 16 разрядный накопитель данных, 16 разрядный компаратор или 10-разрядный модулятор ширины импульса (ШИМ). В режиме накопителя данных 16 разрядное значение TMR1 защелкива- ется в регистровой паре CCPRXH:CCPRXL. Фиксация данных может осуще- ствляться по заднему фронту, по переднему фронту, по четвертому переднему фронту или по шестнадцатому переднему фронту сигнала на контакте ССРХ. В режиме компаратора сравнивается пара регистров TMR1H:TMR1L с регистрами CCPRXH:CCPRXL. Когда наступает равенство, то может быть сгенерировано прерывание и на выходном контакте ССРХ может быть сфор- мировано заданное состояние (высокое или низкое), а также, если работает ССР1, то может быть сброшен таймер TMR1, а при работе ССР2 - сбрасыва- ется таймер TMR1 и дается старт А/D преобразованию. Это зависит от слу- жебных битов ССРХМЗ:ССРХМО. В режиме ШИМ регистр TMR2 сравнивается с 10-разрядным регистром ширины импульса (CCPRXH: CCPRXL <5:4> ), а также с 8 разрядным реги- стром периода (РР2). Когда регистр ТМР2 равен регистру ширины импульса, на контакте ССРХ будет установлен низкий уровень. Если же ТМР2 = PR2, а ТМР2 обнуляется (ООН), то может быть сгенерировано прерывание и на кон- такте ССРХ (если он выход) будет установлен высокий уровень. 60
PIC16C7X Глава 7 7. МОДУЛЬ ТАЙМЕРА О Модуль таймера 0 - это таймер/счетчик, который имеет следующие воз- можности: • • 8-разрядный таймер / счетчик • • чтение и запись счетчика 8-разряднй программируемый предварительный счетчик • • выбор внутренней или внешней синхронизации • • прерывание по переполнению, переход от FFh к 00h • выбор фронта при внешней синхронизации На рис. 7-1 представлена упрощенная структурная схема модуля тайме- ра 0. Режим таймера устанавливается при обнулении бита TOCS (OPTION <5>). В режиме таймера модуль таймера 0 увеличивается на каждом цикле команд (без предварительного счетчика). Если в регистр TMR0 записано но- вое значение, то в течении следующих двух циклов команд приращение не выполняется (Рис. 7-2 и Рис. 7-3). Пользователь не может корректировать работу таймера записью нового значения в регистр TMR0. Рис. 7-1 Структурная схема таймера 0 1. TOCS, TOSE, PSA, PS2 : PSO (OPTION<5:0>). 2. Предделитель разделен со сторожевым таймером. Режим счетчика задается установкой бита TOCS (OPTION <5>). В ре- жиме счетчика таймер 0 увеличивается по каждому переднему или заднему фронту сигнала на контакте RA4/T0CKI. Фронт приращения таймера 0 опре- деляется состоянием бита TOSE (OPTION<4>). Если бит T0SE = "0", то выби- рается передний фронт сигнала. Ограничения на внешнюю синхронизацию подробно рассмотрены в разделе 7.2. Предделитель может быть подключен к модулю таймера 0 или к сторо- жевому таймеру. Назначение предделителя управляется программно модифи- кацией бита PSA (ОРТЮН <3>). Обнуление бита PSA подключает преддели- тель к модулю таймера 0. Предделитель не читается и не записывается. Когда 61
Глава 7 PIC16C7X предделнтель подключен к модулю таймера 0, то его коэффициент деления может принимать следующие значения: 1:2, 1:4 1:256. Предделнтель рас- смотрен в разделе 7.3. PC' (Программный счетчик) 01102 |03|<М; 01|02 |0Э 1 СИ 01{02 |оз |си 01(02 |оз|си 01102 |оз|си 01102 |оз|си 01 |02 jQ31 СИ :oi |02 |03| СИ { pc-i i рс PC+i PC+2 РС+Э РС4 t - PC+5 . i ₽C«6_ . ) выборка команды ; MOVAFTMRO MOVFTMRO.W MCbFTMTO.W MOVFTMRO.W MCbFTMTO.W MCVF TMRO.W • ТМЮ ID" "Л ! той л Tfl*2 Л КГТЛ Л НТО Л НТО Y ЫТОИ _X_. выполнение команды t запись» TMRO 1 чтение TMRO считано NTO t чтение TMRO считано NTO t чтение TMRO считано NTO t it чтение TMRO ' чтение TMRO считано NT0*1 считано NTO* 2 Рис. 7-2 Временная диаграмма работы таймера 0 без предделителя (Программный счетчик) 011О2|ОЗ|СИ 011О2|ОЗ| СИ :oi |О2|ОЗ|СИ 01 |02 |031 СИ 01|02 |св| СИ 01|02|оз|си 01102 |03|СИ 01 |02 |03| СИ PC-1 •PC I РЫ PC+2 PC+3 PC4 1 PC<5 PC<C MOVAFTMRO ’MOVFTMRO.W MOvFTNRO.W MOVFTMRO.W M CNF TMRO W MCNF TMRO.W TO"' ид : L WTO L ‘ запись»TMRO чтение TMRO считано NTO чтение TMRO считано NT О I чтение TMRO считано NT0+1 чтение TMRO ' чтение tmro считано NTO считано NTO выборка команды ТМ50 Выполнение команды Рис. 7-3 Временная диаграмма работы таймера 0 с предделителем 1:2 7.1 ПРЕРЫВАНИЕ ОТ ТАЙМЕРА О Прерывание от TMRO генерируется, когда регистр TMRO переполняется и его значение переходит из FFh в OOh. Это переполнение устанавливает бит TOIF (IHTCOH <2>). Прерывание маскируется, если бит TOIE (IHTCOH <5>) = "О". Бит TOIF должен быть обнулен в программе обработки прерывания модуля таймера 0 перед новым разрешением этого прерывания. Прерывание от TMRO не может вызвать процессор из состояния останова, так как таймер во время останова выключен (см. Рис. 7-4 Временная диаграмма прерывания от таймер 0). 7.2 ВНЕШНЯЯ СИНХРОНИЗАЦИЯ ТАЙМЕРА О Когда для таймера 0 используется внешний источник синхронизации, то его сигнал должен быть таким, чтобы могла быть выполнена его синхрониза- ция с фазой внутреннего генератора (Tosc). При синхронизации возникает задержка приращения таймера 0 после синхроимпульса. 62
PIC16C7X Глава 7 CSCl CLK0UT(3) Тайыер О PC BMTTIOF (|NTCON<2>) Бит GIE (INTCON<7>) : OI | 02 | ОЗ | 04 О1 | <32 [ 03 | 04 ; О1 | 02 [ 03 | 04 : ! i : ) ) О1 I 02 ( 03 I 04 ; О1 I 02 I 03 I 04 \ i / FEh X ’ ₽₽h X OOh X □1b х ' 02h X ; ; *Ф ; \ < pc X pc-и X pc-ч X 0004h X 0005h Команда (0004h) Команда (PC) Команда (0005П) Команда (РС+1) Выборка команды Выполнение команды Команда (PC-1) Команда(PC) Холостой цикл Холостой цикл Команда (0004П) Рис. 7-4 Временная диаграмма прерываний таймера О 1. Состояние флажка прерывания T0IF проверяется на каждом такте Q1. 2. Время ожидания прерывания = 4Тсу, где Тсу = такт командного цикла. 3. Выход CLKOUT функционирует только в режиме RC генератора. Рис. 7-5 Временная диаграмма синхронизации внешних тактов таймера О 1. Задержка от изменения на тактовом входе до приращения таймера 0 3- 7Tosc. Максимальная задержка таймера 0 между двумя фронтами равна + 4Tosc. 2. Вход внешней синхронизации, если не подключен предделитель; в противном слу- чае - вывод предделителя. 3. Стрелки указывают моменты времени, когда происходит стробирование. 7.2.1 СИНХРОНИЗАЦИЯ ВНЕШНИХ ТАКТОВ Когда предделитель не используется, внешний тактовый сигнал прохо- дит на вход синхронизатора без изменения. Синхронизация сигнала от кон- такта T0CKI с фазой внутреннего генератора выполняется стробированием входного сигнала на тактах Q2 и Q4 внутреннего генератора (Рис. 7-5). Сле- довательно, необходимо чтобы сигнал на T0CKI был высоким и низким в течение времени не менее 2Tosc (плюс небольшая задержка (20 нс)). 63
Глава 7 PIC16C7X При использовании предделителя внешний тактовый сигнал делится асинхронным счетчиком пульсаций так, что на выводе предделителя присут- ствует симметричный сигнал. Внешний тактовый сигнал должен быть таким, чтобы с учетом счетчика пульсаций выполнялись требования синхронизации. Следовательно, необходимо чтобы сигнал на T0CKI, разделенный преддели- телем, имел период по крайней мере 4Tosc плюс небольшая задержка (40 нс). Основное требование к сигналу на T0CKI: время высокого и низкого уровня не должно быть меньше минимальной ширины импульса 10 нс. 7.2.2 ЗАДЕРЖКА ПРИРАЩЕНИЯ TMR0 . Так как выход предделителя синхронизируется с внутренним генерато- ром, то возникает задержка во времени от фронта внешнего синхроимпульса до фактического увеличения значения таймера 0. На рис. 7-5 показана за- держка от заднего фронта внешнего синхроимпульса до приращения таймера. 7.3 ПРЕДДЕЛИТЕЛЬ Это 8 разрядный счетчик, включаемый как предделитель для модуля таймера 0, или как постделитель для сторожевого таймера (Рис. 7-6). Для простоты этот счетчик будем называть предделителем. Отметим, что имеется только один предделитель, доступ к которому является взаимно исключаю- щим между модулем таймера 0 и сторожевым таймером. Таким образом, если предделитель подключен к модулю таймера 0, то сторожевой таймер не имеет предделителя, и наоборот. Биты PSA и PS2:PS0 (OPTION < 3:0 >) определяют назначение предде- лителя и коэффициент деления. Если предделитель подключен к модулю таймера 0, то все команды за- писи в регистр TMR0 (например. CLRF 1, MOVWF 1 BSF 1, ... и т.д.) обну- ляют предделитель. Если предделитель подключен к WDT, то команда CLRWDT обнуляет предделитель вместе со сторожевым таймером. Предде- литель не читается и не записывается. 7.3.1 ПЕРЕКЛЮЧЕНИЕ НАЗНАЧЕНИЯ ПРЕДДЕЛИТЕЛЯ Назначение предделителя выполняется полностью программно, то есть оно может быть изменено "на лету" в течение выполнения программы. Примечание: Чтобы избежать непреднамеренного "СБРОСА" устройства при переключении назначения предделителя, должна выполнятся последовательность команд, приведенная в примерах: 7-1, 7-2. 64
PIC16C7X Глава 7 Эта последовательность должна выполнятся, даже если WDT отключен. Выход WDT Рис. 7-6 Структурная схема предделителя TOCS, TOSE, PSA, PS2 : PSO биты регистра OPTION<5:0>. Пример 7-1. Изменение назначения предделителя (TIMERO ->WDT) BCF STATUS, RPO ; Банк 0 CLRF TMRO Обнулить TMRO и предделитель BSF STATUS, RPO ; Банк 1 CLRWDT Обнулить WDT MOVLW B'xxxxlxxx' ; Установить новое назначение MOVWF OPTION предделителя для WDT BCF STATUS, RPO ; Банк 0 Пример 7-2. Изменение назначения предделителя (WDT ->TIMER0) CLRWDT ; Обнулить WDT и предделитель BSF TATUS, RP0 ; Банк 1 MQVLW В'ххххОххх' ; Установить новое назначение MQVWF OPTION ; предделителя для TMRO BCF STATUS, RPO ; Банк О 3 Эвх. 1092 65
Глава 8 PIC16C7X 8. МОДУЛЬ ТАЙМЕРА 1 Модуль таймера 1 - это 16 разрядный таймер / счетчик, состоящий из двух 8 разрядных регистров TIMR1H и TMR1L, которые доступны по чтению и по записи. Пара регистров TMR1 (TMR1H + TMR1L) инкрементируются от 0000Н до FFFFH и при переполнении переходят в 0000Н. Прерывание TMR1 (если оно разрешено) генерируется при переполнении, при этом устанавлива- ется флажок TMR1IF (PIRI <0>). Это прерывание можно разрешить или за- маскировать, используя бит маски прерывания TMR1 TMR1IE (PIE1 <0>). Таймер 1 может функционировать в одном из двух режимов: • как таймер • как счетчик Режим определяется выбором источника синхронизаций, бит TMR1CS (T1CON<1)>. В режиме таймера, таймер 1 инкрементируется на каждом командном цикле. В режиме счетчика он инкрементируется по каждому переднему фрон- ту на контакте внешнего входа синхронизации RCO/TIOSO/TICKI. Таймер 1 может быть включен или отключен при помощи служебного бита TMR1ON (T1CON <0>). Таймер 1 имеет также внутренний " вход сброса ". Сброс может быть сгенерирован любым из двух модулей ССР. На Рис. 8-1 показан регистр управления таймера 1. Для PIC16(272/73А/74А, когда таймер 1 запрограммирован на работу от кварцевого резонатора (T1OSCEN = 1), контакты RC1/TIOSI/CCP2 и RCO/TIOSO/ T1CKI становятся входами, то есть значение TRISC <1:0 > иг- норируется. Для Р1С16С73/74, когда таймер 1 запрограммирован на работу от квар- цевого резонатора (T1OSCEN = 1), контакт RC1/T1OSI/CCP2 становится вхо- дом, однако контакт RCO/TIOSO/TICKI должен быть конфигурирован в ре- гистре TRISC <0> как вход. 8.1 ТАЙМЕР1 В РЕЖИМЕ ТАЙМЕРА Режим таймера устанавливается, когда TMR1CS (T1CON < 1 >) = "0". В этом режиме таймер тактируется от внутреннего генератора - FOsc/4- Бит ре- жима синхронизации T1SYNC (T1CON < 2 > ) в этом режиме не имеет значе- ния, так как внутренняя частота всегда синхронна. 66
PIC16C7X Глава 8 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 1 JT1CKPS1 T1CKPSO|T10SCEN| T1SYNC 1 TMR1CS |TMR1ON| Рис. 8-1 Регистр управления таймера 1 "T1C0N " (адрес 10h) Обозначения: R = читаемый разряд, W - записываемый разряд, U - зарезервированный разряд, - п = значение после сброса: х = ие определено, и = не изменяется, q = зависит от условия. Разряды 7-6: Зарезервированы: читаются как 'О' Разряды 5-4: T1,CKPS1:T1CKPSO: Коэффициент деления предделителя для таймера 1 11 = 1:8 значение предделителя 10=1:4 значение предделителя 01 = 1:2 значение предделителя 00 = 1 : 1 значение предделителя Разряд 3: T1OSCEN: Работа таймер 1 от кварцевого резонатора 1 = работа от кварцевого резонатора разрешена 0 = работа от кварцевого резонатора запрещена Разряд 2: T1SYNC: Синхронизация внешней тактовой частоты TMR1CS= 1 1 = асинхронный режим 0 = синхронный режим TMR1CS = O Этот разряд игнорируется. Разряд Г. TMR1CS: Источник синхронизации таймера 1 1 = Внешняя синхронизация (по переднему фронту на контакте RCO/TIOSO/ T1CKI) 0 = Внутренняя синхронизация (Fosc/4) Разряд 0: TMR1ON: Включение таймер 1 1 = таймер 1 включен 0 = таймер 1 отключен 8.2 ТАЙМЕР 1 В РЕЖИМЕ СИНХРОННОГО СЧЕТЧИКА Режим счетчика устанавливается, когда TMR1CS (T1CON < 1 >) = "1". В этом режиме таймер инкрементируется по каждому переднему фронту сиг- нала на контакте RC1/T1OSI/CCP2, когда бит T1OSCEN = "1”, или на контак- те RC0/T1OSO/T1CKI, когда бит T1OSCEN = ’’О”. Если T1SYNC = "0", то внешний тактовый сигнал синхронизируется с фазой внутреннего генератора. Синхронизация выполняется после преддели- теля. Предделитель работает как асинхронный счетчик. В этой конфигурации, во время останова, таймер 1 не будет инкремен- тироваться, даже если присутствует внешний тактовый сигнал, так как внут- ренний генератор отключен. Однако предделитель продолжает работать. 3* 67
Глава 8 PIC16C7X При переполнении устанавливается флажок TMR1IF TMR1 TMR1L TMR1ON вкп/откл Синхронизированная входная частота T10SC -T1OSCEN „ ; включение Внутренняя. q Предделитель 1.2.4.8 Синхронизация генератора*1) частота FOSC/4 и 2 Вход T1CKPS1:T1CKPSO останова TMR1CS Рис. 8-2 Структурная схема таймера 1 1. Когда бит T1OSCEN = "О", инвертор и резистор обратной связи отключены, чтобы устранить утечку тока. 2. Модуль ССР2 отсутствует в PIC16C72. 3. Для РГС16С73 и PIC16C74 в режиме внешней синхронизации триггер Шмитта от- сутствует. 8.2.1 ВРЕМЕННАЯ ДИАГРАММА В РЕЖИМЕ СИНХРОННОГО СЧЕТЧИКА С ВНЕШНЕЙ СИНХРОНИЗАЦИЕЙ Если таймер 1 используется в режиме синхронного счетчика, то внеш- ний тактовый сигнал должен быть таким, чтобы могла быть выполнена его синхронизация с фазой внутреннего генератора (Tosc)- При синхронизации возникает задержка приращения TMR1 после синхроимпульса. Когда предделитель установлен 1:1, внешний тактовый сигнал проходит на вход синхронизатора без изменения. Синхронизация сигнала от контакта T1CKI с фазой внутреннего генератора выполняется стробированием входно- го сигнала на тактах Q2 и Q4 внутреннего генератора. Следовательно, необ- ходимо чтобы сигнал на T1CKI был высоким и низким течение времени не менее 2TOSC (плюс небольшая задержка (20 нс)). Если предделитель установлен более чем 1:1, то внешний тактовый сиг- нал делится асинхронным счетчиком пульсаций так, что на выводе преддели- теля присутствует симметричный сигнал. Внешний тактовый сигнал должен быть таким, чтобы с учетом счетчика пульсаций выполнялись требования выполнения синхронизации. Следовательно, необходимо чтобы сигнал на T1CKI, разделенный предделителем, имел период по крайней мере 4Tosc плюс небольшая задержка (40 нс). Основное требование к сигналу на TICKI: время высокого и низкого уровня не должно быть меньше минимальной ши- рины импульса 10 нс. 68
PIC16C7X Глава 8 8.3 ТАЙМЕР 1 В РЕЖИМЕ АСИНХРОННОГО СЧЕТЧИКА Если бит T1SYNC (T1CON <2>) = "1", то внешний тактовый сигнал не синхронизируется. Таймер работает асинхронно с фазой внутреннего генера- тора. Таймер продолжает инкрементироваться во время останова и может генерировать прерывание при переполнении, которое будет пробуждать про- цессор. Однако необходимо соблюдать осторожность при программировании чтения и записи таймера. В режиме асинхронного счетчика таймер 1 не может использоваться для работы в составе модуля ССР. Если бит T1SYNC установлен, таймер работает полностью асинхронно. Регистры TMR.1H и TMR.1L можно читать во время, когда таймер рабо- тает в асинхронном режиме от внешнего генератора (обеспечивается аппа- ратными средствами). Однако, пользователь должен иметь в виду, что чтение 16 разрядного таймера осуществляется чтением двух самостоятельных 8 раз- рядных регистров. При этом могут возникать некоторые проблемы, так как значение счетчика между чтением может изменится. В примере 8-1 представ- лена подпрограмма чтения 16 разрядного значения таймера, если таймер не может быть остановлен. Для записи рекомендуется просто остановить таймер и записать желае- мое значение. В противном случае при записи значение таймера может' изме- ниться, что приведет к непредсказуемым результатам. Пример 8-Г. Чтение 16-разрядного таймера ; Все прерывания должны быть заблокированы MOVE TMR1H, W ;чтение старшего байта MOVWF TMPH MOVE TMR1L, W ;чтение младшего байта MOVWF TMPL MOVF TMR1H, W ' /чтение старшего байта SUEWF TMPH, W /сравнить 1-ое и 2-ое чтение BTFSC STATUS, Z /Значения старшего байта равны GOTO CONTINUE /достоверное 16 разрядное чтение / TMR1L, возможно изменился между чтением старшего и младшего /байтов. Чтение старшего /достоверным. и младшего байтов теперь будет MOVE TMR1H, W / старший байт чтения MOVWF TMPH MOVF TMR1L, W / младший байт чтения MOVWF TMPL ; если требуется разрешить прерывания CONTINUE: ; Продолжение программы 69
Глава 8 PIC16C7X 8.4 ГЕНЕГАТОР ТАЙМЕРА 1 Генератор таймера 1 позволяет работать непосредственно от кварцевого резонатора, который включают между контактами T1OSI (вход) и T1OSO (выход усилителя). Работа генератора разрешается установкой бита T1OSCEN (T1CON < 3 >). Максимальная частота кварцевого резонатора мо- жет быть 200 кГц. Генератор прежде всего предназначен для кварцевого ре- зонатора 32кГц. Работа таймера 1 в этом режиме продолжается во время ос- танова. В таблице 8-1 показан выбор конденсаторов для генератора таймера 1. Генератор таймера 1 идентичен LP генератору. Пользователь должен обеспечить задержку программы, для того чтобы гарантировать запуск гене- ратора. Таблица 8-1: Выбор конденсаторов для генератора таймера 1 Тип генератора Частота С1 С2 LP 32 кГц(1) 100 кГц 200 кГц 15 пФ 15 пФ 0-15 пФ 15 пФ 15 пФ 0- 15 пФ Большая емкость увеличивает стабильность генератора, но также и увеличивает время запуска. Эти значения только для руководства при разработке. Примечание 1: При VDD> 4.5 В рекомендуется Cl = С2 = 30 пФ. 8.5 СБРОС ТАЙМЕРА 1 С ИСПОЛЬЗОВАНИЕМ ВЫХОДА ССР Модуль ССР2 отсутствует в PIC16C72. Если модуль ССР1 или ССР2 сконфигурирован в режиме компаратора для генерации специального события (ССР1МЗ:ССР1М0 = 1011), то этот сиг- нал сбрасывает таймер 1. Примечание: Сброс специальным событием модулей ССР1 или ССР2 не ус- танавливает флажок прерывания таймера 1 TMR.1IF (PIR.I <0>). Для того чтобы таймер 1 сбрасывался специальным событием модулей ССР1 или ССР2, он должен быть сконфигурирован как таймер или синхрон- ный счетчик, а если таймер 1 работает в режиме асинхронном счетчика, то сброс не воздействует на счетчик. Когда запись в таймер 1 совпадает со специальным событием от ССР1 или ССР2, то запись будет иметь приоритет. Если таймер 1 работает в составе ССР, то пара регистров CCPRXH: CCPRXL является регистром периода для таймера 1. 70
PIC16C7X________________________________________________Глава 8 8.6 СБРОС РЕГИСТРОВ ТАЙМЕРА 1 (TMR1H : TMR1L) Регистры TMR1H и TMR1L не обнуляются при включении питания или при любом другом сбросе за исключением запуска специального события ССР1. Регистр T1CON обнуляется при включении питания или по сбросу при снижении напряжения питания. При любом другом сбросе регистр не изменя- ется. 8.7 ПРЕДДЕЛИТЕЛЬ ТАЙМЕРА 1 Предделитель обнуляется при записи в регистр TMR1L или TMR1H. 71
Глава 9 PIC16C7X 9. МОДУЛЬ ТАЙМЕРА 2 Модуль таймера 2 - это 8 разрядный счетчик с предделителем и постде- лителем. Он может использоваться как основа для отсчета времени в режиме ШИМ модулей ССР. Регистр TMR2 может читаться и записываться. Тактирование таймера 2 осуществляется внутренней частотой (Fosc/4) через предделитель, который может иметь коэффициент деления 1:1,' 1:4 или 1:16 (устанавливается битами T2CKPS1:T2CKPSO (T2CON <1:0>)). Модуль таймера 2 имеет 8 разрядный регистр периода PR2. Таймер 2 инкременти- ' руется от ООН до значения, записанного в регистре PR2, после чего сбрасывается в ООН и цикл приращения по- вторяется. Регистр TMR2 инициализируется при любом сбросе устройства, при этом в регистр PR2 записывается FFH. Вывод TMR2 проходит через 4 разрядный постделитель (который мо- жет иметь коэффициент деления от 1:1 до 1:16). Таймер 2 генерирует преры- вание TMR2 при установке флажка TMR2IF, PIR1 <1>. Управление таймером 2 осуществляется регистром T2CON (Рис. 9-2). Для уменьшения потребляемой мощности таймер 2 может быть отключен битом TMR2ON (T2CON<2>). ^Установка флага TMR2IF Выход TMR2<’> Сброс! ||Предделитель I-----п-----Г" 1:1,1:4,1:16 FOSC/4 ft | PR2 | Рис. 9-1 Структурная схема таймера 2 Вывод регистра TMR2 может быть генератором модуля SSP. 4 9.1 ПРЕДДЕЛИТЕЛЬ И ПОСТДЕЛИТЕЛЬ ТАЙМЕРА 2 Счетчики предделителя и постделителя таймера 2 обнуляются в сле- дующих случаях: • при записи в регистр TMR2. • при записи в регистр T2CON. • при любом сбросе устройства. При записи в регистр T2CON регистр TMR2 не обнуляется. 9.2 ВЫХОД ТАЙМЕРА 2 Выход TMR2 до предделителя подается на модуль синхронного после- довательного порта для тактирования регистра сдвига. 72
PIC16C7X____________________________________ Глава9 и-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 <^TOUTPS3|TOUTPS2|TOUTPS1 iTOUTPSOl TMR2ONIT2CKPS11T2CKPS01 7 О Рис. 9-2 Регистр управления таймера 2 "T2CON" (адрес 12h) Обозначения : R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: Зарезервирован: читается как 'О' Разряды 6-3: TOUTPS3:TOUTPSO: Коэффициент деления постделителя 0000 =1:1 0001 = 1:2 1111 = 1 : 16 Разряд 2: TMR2ON: Управление таймером 2 1 = таймер 2 включен 0 = таймер 2 отключен Разряды 1-0: T2CKPS1:T2CKPSO: Коэффициент деления предделителя 00=1:1 01 = 1 :4 1х= 1 : 16 73
Глава 10 PIC16C7X 10. МОДУЛИ ССР Каждый модуль ССР содержит 16-разрядный регистр, который может функционировать как 16-разрядный регистр накопления данных (Capture), 16- разрядный регистр сравнения (Compare) или 10-разрядный широтно- импульсный модулятор (ШИМ (PWM)). Модули ССР 1 и ССР2 идентичны за исключением запуска специального события. В Таблицах 10-1 и 10-2 показа- ны распределение таймеров и взаимодействие модулей ССР. В последующих разделах описан модуль ССР1. Модуль ССР2 функционирует аналогично ССР1 за исключением отмеченного. Модуль ССР 1: Регистр модуля CCPR1 состоит из двух 8 разрядных регистров: CCPR1L (младший байт) и CCPR1H (старший байт). Оба регистра доступны по чтению и по записи. Модуль ССР2: Регистр модуля CCPR2 состоит из двух 8 разрядных регистров: CCPR2L (младший байт) и CCPR2H (старший байт). Оба регистра доступны по чтению и по записи. Таблица 10-1: ССР распределение таймеров Режим ССР , Распределение таймеров Накопления таймер 1 Сравнения таймер 1 ШИМ таймер 2 Таблица 10-2: Взаимодействие модулей ССР Режим ССРх Режим ССРу Взаимодействие Накопления Накопления Один и тот же TMR1 отсчета времени. Накопления Сравнения Компаратор должен быть конфигурирован для работы с запуском специального события, кото- рый сбрасывает TMR1. Сравнения Сравнения Компаратор должен быть конфигурирован для работы с запуском специального события, кото- рый сбрасывает TMR1. ШИМ ШИМ ШИМ будет иметь один и тот же период и длину импульса по TMR2. ШИМ Накопления Нет ШИМ Сравнения Нет 74
PIC16C7X _______________________________________________ ГлаварЮ U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 | | | CCPxX | CCPxY |cCPxM3|CCPxM2|cCPxMl|cCPxMO| 7 о Рис. 10-1 Регистр "CCP1CON" (адрес 17h). Регистр "CCP2CON" (адрес IDh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-6: Зарезервированы: читается как 'О' Разряды 5-4: ССРхХ:ССРх¥: Младшие разряды в режиме ШИМ В режиме накопления: не используются. ’ ’ В режиме сравнения: не используются. В режиме ШИМ: Два младших разряда 10-разрядного значения шири- ны импульса. Восемь старших разрядов находятся в регистре CCPRxL. Разряды 3-0: ССРхМЗ:ССРхМ0: Выбор режима ССРх 0000 = ССРх отключен (сброс модуля ССРх) 0100 = режим накопления по каждому заднему фронту 0101= режим накопления по каждому переднему фронту 0110 = режим накопления по 4-ому переднему фронту 0111= режим накопления по 16-ому переднему фронту 1000 = режим сравнения, при равенстве на выходе устанавливается высокий уровень (бит CCPxIF устанавливается) 1001 = режим сравнения, при равенстве на выходе устанавливается низкий уровень (бит CCPxIF устанавливается) 1010 = режим сравнения, при равенстве генерируется прерывание программы (устанавливается бит CCPxIF, выход ССРх не изменяется) 1011= режим сравнения, при равенстве формируется запуск специального события: ССР 1 сбрасывает TMR1, ССР2 сбрасывает TMR1 и запускает А/D преобразование (если модуль А/D включен) (бит CCPxIF устанавливается), , 11хх = режим ШИМ 7 . 10.1 РЕЖИМ НАКОПЛЕНИЯ При появлении события на контакте RC2/CCP1 в режиме накопления в регистрах CCPR1H CCPR1L фиксируется 16-разрядное значение регистра TMR1. Событием может быть: • задний фронт входного сигнала, • передний фронт входного сигнала, • 4-ый передний фронт входного сигнала, • 16-ый передний фронт входного сигнала. 75
Глава 10 PIC16C7X Событие определяется битами ССР1МЗ:ССР1М0 (ССРICON <3:0>). Ес- ли значение зафиксировано, то устанавливается флажок ССР 1 IF (PIR1 <2>), который должен быть сброшен программой. Если новое значение фик- сируется раньше, чем считано значение из реги- стра CCPR1, то старое значение будет потеряно. В режиме накопления контакт RC2/CCP1 дол- жен быть сконфигуриро- ван как вход установкой соответствующего разря- да регистра TRISC. ____________Установка флажка Предделитель ICCP1IF (PIR1<2>) *1,4,16 Контакт RC2/CCP1 CCPR1H CCPR1L фронт TMR1H CCP1CCN<3:0> Синхронизация Фиксация значения TMR1L Рис. 10-2 Структурная схема режима накопления Примечание: Если RC2/CCP1 конфигурирован как выход, то запись в порт может вызывать фиксацию данных. При переключении режима накопления может быть сгенерировано лож- ное прерывание, если ССР НЕ (PIE1 <2>) не сброшен (прерывание разреше- но). После любого изменения режима должен быть сброшен флажок ССР 1 IF. 10.1.1 ПРЕДДЕЛИТЕЛЬ В режиме накопления предделитель имеет четыре установки, которые определяются битами ССР1МЗ:ССР1М0. Если модуль ССР выключен или работает в другом режиме (в режиме сравнения или ШИМ), то счетчик пред- делителя обнуляется. Любой сброс обнуляет счетчик предделителя. При переключении режима накопления счетчик предделителя не обну- ляется. В примере 10-1 показан рекомендуемый метод переключения режима накопления. В этом примере обнуляется счетчик предделителя и предупреж- даются "ложные" прерывания. Пример 10-1: Переключение режима накопления. CLRF COP1CON ; отключить модуль ССР MOVLW NEW_CAPT_PS ; Подготовить новый режим накопления MOVWF COPICON ; Загрузить в CCP1CON новый режим 76
PIC16C7X Глава 10 10.1.2 МОДУЛЬ ТАЙМЕРА 1 И РЕЖИМ НАКОПЛЕНИЯ ССР Для режима накопления ССР модуль таймера 1 должен быть установлен в режим таймера или режим синхронного счетчика. В режиме асинхронного счетчика режим накопления не работает. 10.2 РЕЖИМ СРАВНЕНИЯ В режиме сравнения 16 разрядное значение регистра CCPR1 сравнива- ется со значением регистра TMR1. Когда наступает равенство, устанавлива- ется флажок CCP1IF (PIR1 <2>) и на контакте RC2/CCP1 устанавливается: Запуск специального события выходом Выбор реямма Рис. 10-3 Структурная схема режима сравнения • высокий уровень, • низкий уровень, • уровень не изменятся. Уровень на кон- такте зависит от значе- ния битов ССР 1 М3 : ССР 1 МО (ССР ICON <3:0>). Контакт RC2/ ССР1 должен быть за- программирован на вы- ход, бит TRISC <2> должен быть сброшен. Примечание: При обнулении регистра ССР ICON выход компаратора уста- навливает низкий уровень на контакте RC2/CCP1. Этот уровень не является значением регистра данных PORTC. 10.2.1 МОДУЛЬ ТАЙМЕРА 1 И РЕЖИМ СРАВНЕНИЯ ССР Для режима сравнения ССР модуль таймера 1 должен быть установлен в режим таймера или режим синхронного счетчика. В режиме асинхронного счетчика режим накопления не работает. 10.2.2 РЕЖИМ ПРЕРЫВАНИЯ ПРОГРАММЫ Если задан режим прерывания программы, то уровень на выходном кон- такте ССР1 не изменяется. Устанавливается флажок CCP1IF (PIR1 <2>) и генерируется прерывание программы (если разрешено). 10.2.3 ЗАПУСК СПЕЦИАЛЬНОГО СОБЫТИЯ 77
Глава 10____________________________________________________PIC16C7X В этом режиме формируется сигнал, который может использоваться для инициализации внутренних аппаратных средств. Выход запуска специального события ССР1 сбрасывает регистр TMR1. То есть в этом режиме регистр CCPR1 является 16 разрядным программи- руемым регистром периода для таймера 1. Выход специального события ССР2 сбрасывает регистр TMR1 и уста- навливает бит GO/DONE (ADCONO <2>), который запускает А/D преобразо- вание (если модуль А/D включен). Только у PIC16C72 выход специального события ССР1 сбрасывает ре- гистр TMR1 и запускает А/D преобразование (если модуль А/D включен). Примечание: Запуск специального события модулей ССР1 и ССР2 не уста- навливает флажок TMR1IF (PIRI <0>). 10.3 РЕЖИМ ШИМ лителем, что создает 10 разрядное разрешение. В режиме широтно-импульсной модуляции (ШИМ) на контакте ' RC2/CCP1 формируется сигнал ШИМ с разрешением до 10-разрядов. Этот контакт должен быть запрограммирован на выход (бит TRISC <2> должен быть сброшен). На рис. 10-4 представлена упрощенная структурная схема модуля ССР в режиме ШИМ. В этом режиме 8 разрядное значе- ние ширины им- пульса записывает- ся в младший байт регистра CCPR1 (CCPR1L). В нача- ле каждого перио- да это значение переписывается в старший байт CCPR1H, который используется как ведомый буфер. Двойная буфериза- ция необходима для непрерывности сигнала на выходе ШИМ. 78
PIC16C7X Глава 10 Примечание: При обнулении регистра ССР ICON на выходе ШИМ (контакт RC2/CCP1) устанавливается низкий уровень. Этот уровень не является значением регистра данных PORTC. 10.3.1 ПЕРИОД ШИМ Период ШИМ определяется регистром периода PR2 таймера 2. Период ШИМ может быть вычислен при использовании следующей формулы: ШИМ период = [(PR2) + 1] х 4 х T0Sc х (TMR2 значение предделителя) F шим = 1/[ШИМ период]. Когда TMR2 становится равным PR2, выполняются следующем опера- ции: • обнуляется TMR2, • на контакте ССР1 устанавливается высокий уровень (исключение: если ширина импульса = 0%, то уровень на контакте не изменится), • значение ширины импульса ШИМ переписывается из CCPR1L в CCPR1H Примечание: Постделитель таймера 2 (см. Раздел 9) в режиме ШИМ не ис- пользуется. 10.3.2 ШИРИНА ИМПУЛЬСА ШИМ Ширина импульса ШИМ определяется значением регистра CCPR1L и битов CCP1X:CCP1Y реги- стра ССР ICON <5:4>. CCPR1L содержит восемь старших разрядов 10- разрядного слова, ' а ССР ICON <5:4> - два младших разряда. Следую- щее уравнение позволяет вычислить ширину импуль- са ШИМ: Период Ширина импульса TMR2=PR2 TMR2 = Ширине импульса TIVIR2=PR2 Рис. 10-5 Выходной сигнал ШИМщИРИНА ИМПУЛЬСА ~ - (CCPR1L:CCP1CON <5:4>) х Tosc х (TMR23HA4ehhe предделителя) 79
Глава 10 PIC16C7X Значение в CCPR1L и ССР ICON <5:4> может быть записано в любое время, но перезапись данного значения в CCPR1H происходит только когда TMR2 становится равным PR2 (то есть в начале нового периода). В режиме ШИМ регистр CCPR1H доступен только по чтению. Когда TMR2 с учетом предделителя становится равным CCPR1H и 2 разрядам ССР ICON, на выходе ССР1 устанавливается низкий уровень. Примечание: Если значение ширины импульса ШИМ больше чем период ШИМ, то на выходе ССР1 будет низкий уровень. Максимальное разрешение ШИМ (разрядов) для данный частоты: = log (Ешим / Fosc) / log(2) [разрядов] Пример 10-2: Вычисление периода и ширины импульса ШИМ Желаемая частота ШИМ - 78.125 кГц, Fosc = 20 МГц Значение предделителя TMR2 = 1 1/78.125 кГц= [(PR2) + 1] х 4 х 1/20 МГц х 1 12.8 мС = [(PR2) + 1] х 4 х 50 нС х 1 PR2 = 63 Найдем максимальное разрешение ширины импульса, которое может использоваться для частоты 78.125кГц с генератором 20 МГц: 1/78.125 кГц = 2 * 1/20 МГц * 1 12.8 мС = 2 * 50 нС * 1 = 2 РазРеше|,ие log(256) = (разрешение) * log(2) 8 = Разрешение Для частоты 78.125 кГц при частоте генератора 20 МГц можно получить максимальное разрешение 8 разрядов, то есть 0 < CCPR1L:CCP1CON <5:4> < 255. Любое значение, большее 255, приведет к тому, что ширина импульса будет более 100 %. Для получения более высокого разрешения необходимо снизить частоту ШИМ. При увеличении частоты ШИМ разрешение будет уменьшаться. В таблице 10-3 приведены расчеты разрешения для некоторых частот ШИМ при частоте генератора Fosc = 20 МГц, а также значения предделителя TMR2 и PR2. 80
PIC16C7X Глава 10 10.3.3 ПОРЯДОК ПРОГРАММИРОВАНИЯ РЕЖИМА ШИМ Для задания режима ШИМ необходимо выполнить следующие шаги: 1. Установить период ШИМ в регистре PR2. 2. Установить ширину импульса ШИМ в регистре CCPR1L и битах ССР ICON <5:4>. 3. Контакт RC2/CCP1 запрограммировать на выход (TRISC <2> = 0). 4. Установить коэффициент предделителя TMR2 и запустить таймер 2 (в регистре T2CON). 5. Включить модуль ССР1 режиме ШИМ. Таблица 10-3: Расчеты разрешения для частот ШИМ при Fosc = 20 МГц Частота ШИМ (кГц) 1.22 4.88 19.53 78.12 156.3 208.3 Предделитель таймера (16,4,1) 16 4 1 1 , 1 1 Значение PR2 OxFF OxFE OxFE 0x3F OxlF 0x17 Разрешение (разрядов) 10 10 10 8 7 5.5 81
Глава 11 PIC16C7X И. МОДУЛЬ СИНХРОННОГО ПОСЛЕДОВАТЕЛЬНОГО ПОРТА Модуль синхронного последовательного порта (SSP) - это последова- тельный интерфейс, предназначенный для связи с другими внешними устрой- ствами или микроконтроллерами. Внешние устройства могут быть последо- вательными СППЗУ, сдвиговыми регистрами, драйверами дисплея, А/D пре- образователями, и т.д. Модуль SSP может функционировать в одном из двух режимов: • последовательный периферийный интерфейс (SPI) • интерфейс интегральных схем (12С) 11.1 РЕЖИМ SPI В режиме SPI модуль SSP позволяет одновременно передавать и прини- мать 8 разрядные данные. Для обеспечения обмена данными достаточно трех выводов: • выход последовательных данных (SDO) RC5/SDO • вход последовательных данных (SDI) RC4/SDI • синхронизация последовательных данных (SCK) RC3/SCK В режиме ведомого может использоваться четвертый вывод: • управление передатчиком ведомого (SS) RA5/AN4/SS При инициализации SPI должны быть заданы параметры работы SSP в регистре SSPCON (SSPCON <5:0>), а для PIC16C76/77 - и в регистре SSPSTAT <7:6>: режим ведущего (SCK - выход синхронизации) • • режим ведомого (SCK - вход синхронизации) • • фронт синхронизации (прием/передача данных по переднему / задне- му фронту SCK) • неактивное состояние линии синхронизации SCK скорость передачи данных (только в режиме ведущего) • • режим управления передатчиком (только в режиме ведомого) SSP состоит из передающего / принимающего сдвигового регистра (SSPSR) и буферного регистра (SSPBUF). SSPSR сдвигает данные, начиная со старшего разряда из(и) в устройство. SSPBUF хранит очередные, принятые в SSPSR, данные. Когда 8 разрядные данные приняты, информация перемеща- ется в регистр SSPBUF. После чего устанавливается флажок BF (SSPSTAT <0>) и флажок прерывания SSPIF (PIR1 <3>). Двойная буферизация прини- маемых данных позволяет принимать следующий байт, не ожидая чтения по- лученного. 82
PIC16C>X Глава 11 R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 . R-0 Lsmp(I,_.j СКЕ(|) | D/А | Р S | R/W | UA BF | 7 О Рис. 11-1 Регистр состояния синхронного последовательного порта: "SSPSTAT" (адрес 94h) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависти от условия. Разряд 7: SMP(I): Фаза записи входных данных в режиме SPI Режим ведущего 1 = входные данные фиксируются в конце такта вывода данных О = входные данные фиксируются в середине такта вывода данных Режим ведомого - зарезервирован, всегда должен быть равен "О" Разряд 6: СКЕ(|): Выбор фронта синхронизации в'режиме SPI СКР = 0 1 = передача данных по переднему фронту, О = передача данных по заднему фронту, СКР= 1 1 = передача данных по заднему фронту, О = передача данных по переднему фронту, Разряд 5: D/А: флажок данные/адрес (только в режиме - 12С) 1 = последний переданный или принятый байт данные О = последний переданный или принятый байт адрес Разряд 4: Р: флажок конца передачи (только в режиме - I2C. Р = 0, если модуль SSP отключен (SSPEN = 0) или получено условие начала передачи) 1 = получено условие окончания передачи (после сброса Р = 0) 0 = нет условия окончания передачи Разряд 3: S: флажок начала передачи (только в режиме - I2C. S = 0 если модуль SSP отключен SSPEN = 0 или получено условие окончания передачи) I = получено условие начала передачи (после сброса S = 0) 0 = нет условия начала передачи Разряд 2: RAV: флажок чтение/записи (только в режиме - 12С) Этот разряд хранит информацию бита R/W, переданного с последним адресом. 1 = чтение 0 = запись Разряд 1: UA: флажок модификации адреса (только в 10-разрядном режиме - 12С) 1 = необходимо модифицировать адрес в регистре SSPADD 0 = адрес модифицировать не нужно Разряд 0: BF: флажок состояния буфера Прием (режимы SPI и 12С1 1 = информация принята, SSPBUF заполнен 0 = нет информации, SSPBUF пуст Передача (только в режиме 12С) 1 = информация передается, SSPBUF занят 0 = информации передана, SSPBUF свободен Примечание: 1. Только для PIC16C76/77, в остальных устройствах этот разряд зарезервирован. 83
Глава 11_______________’'___________________________PIC16C7X R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 |wcol| SSPOV SSPEN CKP(1) | SSPM3 SSPM2 SSPM1 SSPM0 | Рис. 11-2 Регистр управления синхронным последовательным портом: "SSPCON" (адрес 14h) Разряд 7: WCOL: Флажок конфликта записи (сбрасывается программой) 1 = если выполнена запись в SSPBUF, пока не передано предыдущее слово О = нет конфликта записи Разряд 6: SSPOV: Флажок переполнения (в любом режиме сбрасывается программой) В SP1 режиме 1 = если принят новый байт, а предыдущие данные из SSPBUF не считаны. О = нет переполнения В 12С режиме (в режиме передачи не имеет значения) 1 = если принят новый байт, а предыдущие данные из SSPBUF не считаны. О = нет переполнения Разряд 5: SSPEN: Включение синхронного последовательного порта В SPI режиме 1 = включает порт и конфигурирует контакты SDK, SDO и SDI О = отключает порт и конфигурирует эти контакты как контакты порта I/O В 12С режиме 1 = включает порт и конфигурирует контакты, конфигурирует SDA и SCL О = отключает порт и конфигурирует эти контакты как контакты порта I/O В обоих режимах эти контакты должны быть правильно конфигурированы на вход и выход. Разряд 4: СКР(|): В SPI режиме - выбор фронта синхронизации 1 = передача по заднему фронту, прием по переднему фронту, неактивное состояние линии синхронизации - высокий уровень О = передача по переднему фронту, прием по заднему фронту, неактивное состояние линии синхронизации - низкий уровень В 12С режиме - управление выходом SCK. Используется для задержки передачи 1 = включение синхронизации О = устанавливает на выходе SCK низкий уровень Разряд 3-0: SSPM3:SSPM0: Режим синхронного последовательного порта 0000 = режим ведущего SPI, синхронизация = Fosc/4 0001 = режим ведущего SPI, синхронизация = Fosc/16 0010 = режим ведущего SPI, синхронизация = Fosc/64 0011= режим ведущего SPI, синхронизация = выход TMR2 /2 0100 = режим ведомого SPI, синхронизация = по входу SCK. Управление выходом передатчика по входу SS 0101 = режим ведомого SP1, синхронизация = по входу SCK. Управление выходом передатчика запрещено. Контакт SS может использоваться как I/O. 0110 = режим ведомого 12С, 7-разрядный адрес 0111= режим ведомого 12С, 10-разрядный адрес 1011 = программно управляемый режим ведущего 12С 1110 = режим ведомого ГС, 7-разрядный адрес, разрешение прерывания по условиям начала и окончания 1111= режим ведомого 12С, 10-разрядный адрес, разрешение прерывания по условиям начала и окончания Примечание: 1. В устройствах PIC 16С76/77 управление только неактивным состоянием линии синхронизации. 84
PIC16C7X Глава 11 Любая запись в регистр SSPBUF в течение передачи/приема данных бу- дет игнорироваться, и будет устанавливаться флажок конфликта записи WCOL (SSPCON <7>). В программном обеспечении пользователь перед запи- сью должен сбросить фла- жок WCOL, для того чтобы затем можно было опреде- лить успешное выполнение записи в регистр SSPBUF. Чтение данных из SSPBUF должно осуществляться до того как принят следующий байт данных; в противном случае возникает перепол- нение и данные, принятые в SSPSR, теряются. Пере- полнение может происхо- дить только в режиме ве- домого. Во избежание ус- тановки флажка перепол- нения пользователь должен читать SSPBUF, даже если выполняется только пере- дача данных. В режиме ведущего разряд перепол- нения не устанавливается, так как каждый новый при- ем или передача инициали- зируют запись в регистр SSPBUF. Флажок BF (SSPSTAT <0>) указывает, что информация принята и загружена SSPBUF. При чтении SSPBUF флажок BF сбрасывается. Если SPI - только передатчик, то приятые данные не определены. Прерывание SSP ис- пользуется для определения конца приема/передачи. После этого может чи- таться SSPBUF и/или могут быть записаны следующие данные. Если метод прерывания не используется, то программно может быть выполнен опрос флажка, который предотвращает конфликт записи. На примере 11-1 показана загрузка SSPBUF (SSPSR) при передаче данных. Если одновременно выпол- няется и прием данных, то требуется затененная команда. Структурная схема модуля SSP в режиме SPI (рис. 11-3) показывает, что SSPSR непосредственно не читается и не записывается, а можно обращаться только к регистру SSPBUF. Регистр состояния SSP (SSPSTAT) содержит раз- личные флажки условий и состояния. 85
Глава 11 PIC16C7X Пример 11-1: Загрузка регистра SSPBUF (SSPSR) BSF STATUS, RPO /Банк 1 LOOP BTFSS GOTO SSPSTAT, LOOP , BF /Контроль флажка информация принята /(конец передачи) /Нет BCF STATUS, RPO /Банк 0 MOVF MOVWF SSPBUF, RXDATA W /Чтение SSPBUF /Сохранить принятые данные MOVF MOVWF TXDATA, SSPBUF W /Подготовить очередные данные /Загрузить передатчик Чтобы включить последовательный порт SSP, необходимо установить бит SSPEN (SSPCON <5>). Для отключения или реконфигурирования режима SPI необходимо сбросить бит SSPEN, заново инициализировать регистр SSPCON, а затем снова установить разряд SSPEN. При этом контакты SDI, SDO, SCK и SS конфигурируются как контакты последовательного порта. В регистре TRISC эти контакты должны быть определены в соответствии с вы- полняемой функцией последовательного порта, а именно: • SDI - вход, • SDO - выход, • SCK (режим ведущего) - выход, • SCK (режим ведомого) - вход, • SS - вход, TRISC <4> = 1 TRISC <5> = О TRISC <3> = О TRISC <3> = 1 TRISA <5> = 1 Любая функция контакта последовательного порта, которая не нужна, может быть отменена программированием противоположного направления в регистре TRIS. Например, в режиме ведомого, когда необходимо только пе- редавать данные, контакты SDI и SS можно использовать как универсальные выходы, сбрасывая соответствующие биты регистра TRIS. На рис. 11-4 показано типовое соединение между двумя микроконтрол- лерами. Ведущий контроллер (процессор 1) инициализирует передачу дан- ных, посылая сигнал SCK. Данные передаются из обоих сдвиговых регистров по заданному фронту синхроимпульса, а записываются по противоположном фронту. Оба процессора должны быть запрограммированы на одинаковый фронт синхронизации (СКР), для того чтобы оба контроллера посылали и принимали данные в одно и то же время. Будут ли данные реальными или фиктивными зависит от программирования фронта синхронизации, при этом возможны три сценария передачи данных: • ведущий посылает данные - ведомый посылает фиктивные данные • ведущий посылает данные - ведомый посылает данные • ведущий посылает фиктивные данные - ведомый посылает данные Ведущий может инициализировать передачу данных в любое время, так как управляет линией SCK. Ведущий определяет когда ведомый (Процессор 86
PIC16C7X___________:_________________________________________Глава 11 2) может передать данные в соответствии с протоколом программного обес- печения. В режиме ведущего данные передаются/принимаются после записи в ре- гистр SSPBUF. Если SPI работает только На прием, то выход SCK может быть заблокирован (запрограммирован как вход). Регистр SSPSR при этом про- должит фиксировать сигнал, представленный на входе SDI, с запрограммиро- ванной скоростью синхронизации. Так как будет получен каждый байт, то он будет переписан в регистр SSPBUF'как нормально полученный. Это может быть полезно в приложениях для "мониторинга активных линий". В режиме ведомого данные передаются/принимаются по внешним так- товым импульсам на входе SCK. После записи последнего разряда устанавли- вается флажок SSPIF (PIR1 <3>). Фронт синхронизации выбирается соответствующим программировани- ем бита СКР (SSPCON <4>). На рис. 11-5 и 11-6 показаны временные диа- граммы, поясняющие обмен данных для режима SPI - первым передается старший разряд. В режиме ведущего скорость синхронизации SPI (скорость передачи информации в битах) может быть задана одной из следующих; • Fosc/4 (или Тсу) • Fosc/16 (или 4 Тсу) • Fosc/64 (или 16 Тсу) • выход таймера 2/2 Рис. 11 -4 Схема соединения SP1 Максимальная частота синхронизации SPI может быть 5 МГц при час- тоте генератора 20 МГц. При этом в режиме ведомого внешние такты могут иметь минимальную длину импульсов. В режиме останова ведомый может передавать и принимать данные, а также пробуждать устройство из режима останова. 87
Глава 11 PIC16C7X В режиме ведомого возможно управление выходом передатчика (SDO) по выводу SS. Для этого SPI должен быть установлен в соответствующий режим ведомого (SSPCON <3:0> = 4), а разряд TRISA <5> должен быть уста- новлен как вход. Если на входе SS низкий уровень, то передача и прием раз- решены, выход SDO открыт. Если на входе SS высокий уровень, то выход SDO закрыт (на выходе третье состояние), даже если отключение происходит в середине передачи. На выходе SDO желательно установить внешний рези- стор, определяющий пассивный уровень. Для обеспечения двухпроводной связи вывод SDO может быть соединен с выводом SDI. Если SPI должен функционировать как приемник, то контакт SDO должен быть конфигурирован как вход, что отключает передатчик. SDI всегда может быть уставлен как вход (функция SDI) поскольку это не создает конфликта шин. Примечание: 1. Только для PIC16C76/77. Если SPI работает в режиме ведо- мого с управлением по линии SS (SSPCON < 3:0 > = 0100), то уровень VDD на линии SS сбрасывает модуль SPI. 2. Только для PIC16C76/77. Если SPI работает режиме ведомого и СКЕ = 'Г, то необходимо управление по линии SS. 88
PIC16C7X Глава 11 89
Глава 11 PIC16C7X 11.2 ОПИСАНИЕ ИНТЕРФЕЙСА 12С Интерфейс 12С - это двухпроводный последовательный канал связи, раз- работанный корпорацией "PHILIPS". Первоначальный вариант интерфейса или стандартный режим обеспечивал передачу данных со скоростью 100 кбит/с. Расширенный вариант интерфейса (скоростной режим) поддерживает передачу данных со скоростью до 400 кбит/с. На одной шине могут работать устройства в обоих режимах (и в стандартном, и скоростном), так как ско- рость передачи данных определяется частотой синхронизации. Чтобы обеспечить надежную передачу и прием данных, интерфейс 12С использует двухсторонний протокол. Одно устройство (ведущее) инициали- зирует пересылку данных по шине и генерирует сигналы синхронизации, а другое устройство - ведомое. Протокол ведомого устройства полностью вы- полняется аппаратными средствами модуля SSP, а часть протокола ведущего в PIC16CXX должна быть реализована программно. В протоколе интерфейса 12С каждое устройство имеет адрес. Для ини- циализации передачи данных ведущий передает адрес устройства, с которым будет обмениваться данными. Все остальные устройства на шине принимают и анализируют этот адрес. Адрес содержит разряд, который определяет на- правление передачи данных. Ведущий и ведомый всегда работают в противо- положных режимах (передатчик / приемник), то есть они могут быть в одном из следующих двух соотношений: • ведущий передатчик - ведомый приемник • ведомый передатчик - ведущий приемник В обоих случаях ведущий генерирует сигнал синхронизации. Выходы синхронизации (SCL) и данных (SDA) должны быть с откры- тым стоком или коллектором и допускать объединение выходов по схеме "монтажное И". Чтобы обеспечить высокий уровень на шине, когда все уст- ройства отключены, используются внешние резисторы. Число устройств, подключенных к шине 12С, ограничивается только максимальной емкостью нагрузки 400 пФ. 11.2.1 НАЧАЛО И КОНЕЦ ПЕРЕДАЧИ ДАННЫХ Если данные не передаются, то выходы синхронизации (SCL) и переда- чи данных (SDA) заблокированы, и высокий уровень в линии определяется внешними резисторами. Начало передачи определяется при условии, если на линии SCL высокий уровень, а на линии SDA - перепад от высокого уровня к низкому. Конец передачи определяется при условии, если на линии SCL вы- сокий уровень, а на линии SDA - перепад от низкого уровня к высокому. На рис. 11-10 показаны условия начала и конца передачи данных. Ведущий фор- 90
PIC16C7X Глава 11 Условие • • Условие начала Передаваемые конца передачи данные передачи Рис. 11-10 Условия начала и конца передачи данных мирует эти условия при передаче данных. Для того чтобы не нарушались условия начала и конца пере- дачи данных, все из- менения на линии SDA должны проис- ходить когда на линии SCL - низкий уровень. 11.2.2 АДРЕСАЦИЯ УСТРОЙСТВ 12С Имеются два формата адреса. Простой - это 7 разрядный формат адреса (рис. 11-11) и более сложный - это 10 разрядный адрес (рис. 11-12). 10 раз- рядный формат адреса состоит из двух байт, причём, первые пять разрядов первого байта указывают что это 10-разрядный адрес. ведомьм S - Условие начала ROT - Признак чтение/запись аСК -Подтверждение Рис. 11-11 7-разрядный формат адреса |S |11 1 1 ОАЭД8№УУ|ДСК|Д7А6Д5Д4ДЗА2А1 АО|ДСК| L* Передается ведомый j ------- = 0 (запись) S - Условие начала WW - Признакчтениейапись АСЕ - Подтверждение Рис. 11-12 10-разрядный формат адреса 11.2.3 ПЕРЕСЫЛКА ПОДТВЕРЖДЕНИЯ Все данные передаются по байтно не зависимо от количества переда- начала подтверждения Рис. 11-13 Подтверждение ведомого устройства ваемых данных. После каж- дого байта ведомое устройст- во передает подтверждающий разряд (АСК) (Рис. 11-13). Если ведомое устройство не подтверждает полученный адрес или данные, то веду- щий должен прервать обмен данными. После передачи ведомый должен освободить линию SDA, для того чтобы ведущий мог генерировать условие окончания передачи (Рис. 11-10). 91
Глава 11 PIC16C7X Рис. 11-14 Состояние ожидания при передаче данных Если ведущий принимает данные, то он также передает подтверждаю- щий сигнал для каждого полученного байта данных, за исключением послед- него. Для того чтобы сообщать о конце передачи данных ведомому передат- чику, ведущий не передает подтверждение. Ведомый освобождает линию SDA, и ведущий может генерировать условие окончания передачи. Для нор- мального окончания передачи данных ведущий может генерировать условие окончания передачи в течение импульса подтверждения. Для 7 разрядного адреса S Адрес ведомого R/W А Данные А -г/— -II— Данные А/А Р '0" (запись) - передаваемые данные . (п байт с подтверждением) Ведущий передает ведомому приемнику 7 разрядный адрес. Направление пересылки не изменяется. Для 10 разрядного адреса Адрес ведомого старшие 7 разрядов R/W А1 Адрес ведомого второй байт А2 Данные А Данные А/А Р (запись) —1 Ведущий передает ведомому приемнику 10 разрядный адрес. 1от RenvHiero К веломомл/ 6 = Подтверждение (SDA низкий) . Jr" ведУщего к до му А = Не подтверждения (SDA высокий) ---1_ S = Условие начала От ведомого к ведущему р = условие окончания Рис. 11-15 Последовательность передачи данных ведущий - передатчик S Если ведомому устройству необходимо задерживать передачу следую- щего байта, то он захватывает линию SCL, устанавливая на ней низкий уро- вень, что переводит ведущий в состояние ожидания. Передача данных про- должается до тех пор, пока ведомый не отпустит линию SCL. Это позволяет ведомому пересылать полученные данные или выбирать очередные переда- ваемые значения. Задержка выполняется на битовом уровне рис. 11-14. Если передатчик ведомый, то в этом случае просто растягивается такт. Если ведо- 92
PIC16C7X Глава 1 ] мый приемник, то для задержки передачи он должен сбросить бит SSPCON <4>. На рис. 11-15 и 11-16 показана последовательность передачи данных, когда ведущий является передатчиком и приемником. Для 7 разрядного адреса S Адрес ведомого R/W А Данные А -и- -Л— Данные А Р " I" (чтение) —1 I— передаваемые данные — (п байт с подтверждением) После записи адреса ведущий читает данные ведомого. Для 10 разрядного адреса Рис. 11-16 Последовательность передачи данных ведущий - приемник Для 7 разрядного адреса (чтение или запись)---------1 — (данные п байт с подтверждением) S Адрес ведомого R/W А Данные А/А Sr Адрес ведомого R/W А Данные А/А Р "1" (чтение)! Sr - повторное | "О" (запись) I 13десь может изменится условие начала направление передачи Направление пересылки данных и подтверждения зависит от битов R/W. Для 10 разрядного адреса Комбинированный формат - ведущий обращается к ведомому 10 разрядным адресом, а затем передает и читает данные. От ведущего к ведомому А = Подтверждение (SDA низкий) --- А = Не подтверждения (SDA высокий) S = Условие начала Р = Условие окончания Рис. 11-17 Комбинированная последовательность От ведомого к ведущему Если ведущий желает продолжать обмен данными, то он может пропус- тить формирование условия окончания и формировать повторенное условие 93
Глава 11 PIC16C7X начала (Sr). Это условие идентично условию начала (высокий уровень на ли- нии SCL, а на линии SDA - перепад от высокого уровня к низкому), но оно формируется после того как заканчивается подтверждение передачи данных. Это позволяет ведущему посылать "команды" ведомому' и затем получать запрошенную информацию или адресовать различные ведомые устройства. Эта комбинированная последовательность показана на рис. 11-17. 11.2.4 РЕЖИМ С МНОГИМИ ВЕДУЩИМИ 12С протокол позволяет иметь в системе больше одного ведущего. Когда два или больше ведущих пробуют пересылать данные в одно и то же время, то осуществляется арбитраж синхронизации. 11.2.4.1 АРБИТРАЖ Передатчик 1 теряет приоритет яладения шиной Рис. 11 -18 Арбитраж ведущих (два ведущих) Арбитраж происходит на линии SDA, в то время когда на линии SCL - высокий уровень. Ведущий, который устанавливает высокий уровень когда другой ведущий устанавливает низ- кий уровень, теряет приоритет владения шиной (Рис. 11-18) и отключает выход данных. Ведущий, который потерял приоритет владения шиной, может фор- мировать тактовые импульсы до конца байта данных, на котором потерян приоритет. Если ведущие устройства адресуют одно и то же устройство, то арбитраж продол- жается на данных. Ведущие, потерявшие приоритет владения шиной и имеющие режим ве- домого, должны немедленно переключиться в режим ведомого приемника, поскольку оставшийся ведущим передатчик может обращаться к нему. Арбитраж не выполняется, когда: • формируются повторенные условия начала, • формируется условие начала и передаются данные, • формируются повторное условия начала и условие окончания. Необходима осторожность для того чтобы эти условия не происходили. 94
PIC16C7X Глава 11 11.2.4.2 СИНХРОНИЗАЦИЯ ТАКТОВ Синхронизация тактов происходит после того как устройства начали ар- битраж. Синхронизация выполняется с использованием объединения выходов на линии SCL по схеме "монтажное И". Изменение уровня от высокого к низ- кому любым устройством установит на линии SCL низкий уровень, и все уст- ройства начинают отсчет длительности периода низкого уровня. Низкий уро- вень будет удерживаться на линии SCL пока все устройства не установят вы- сокий уровень. То есть длительность низкого уровня на линии SCL определя- ется устройством с самым большим периодом. Устройства с коротким перио- дом устанавливают высокий уровень и переходят в состояние ожидания этого уровня на линии SCL. Когда на линии SCL устанавливается высокий уровень, все устройства начинают отсчет длительности периода высокого уровня. Первое уст- ройство, которое завершит период высокого уровня, установит на линии SCL низкий уровень. Длительность высо- кого уровня на линии SCL определяется устройством с самым коротким периодом (см. рис. 11-19). 11.3 SSP В РЕЖИМЕ 12С Модуль SSP в режиме 12С выполняет все функции ведомого полностью аппаратными средствами и обеспечивает прерывания по условиям начала и окончания передачи. Модуль SSP работает в стандартном и скоростном ре- жимах, а также поддерживает 7 и 10 разрядную адресацию. Для передачи данных используются два контакта. Для синхронизации (SCL) используется контакт RC3/SCK/SCL, а для передачи данных (SDA) - контакт RC4/SDI/SDA. Эти контакты должны конфигурироваться как входы или выходы программи- рованием разрядов регистра TRISC <4:3>. Модуль SSP включаются установ- кой бита SSPEN (SSPCON <5>). 95
Глава 11 PIC16C7X Для операции 12С модуль SSP имеет пять регистров: • регистр управления (SSPCON) • регистр состояния (SSPSTAT) • буфер приемника и передатчика (SSPBUF) • сдвиговый регистр (SSPSR) (не доступен для программы) • регистр адреса (SSPADD) Регистр SSPCON позволяет управлять режимами 12С. Четыре разряда выбора режима (SSPCON <3:0>) позволяют установить один из следующих режимов: • режим ведомого 12С, 7-разрядный адрес • режим ведомого 12С. 10-разрядный адрес • программно управляемый режим ведущего 12С (недействующий ведо- мый) • режим ведомого 12С, 7-разрядный адрес с разрешением прерывания по условиям начала и окончания • режим ведомого I2C, 10-разрядный адрес с разрешением прерывания по условиям начала и окончания Выбор любого режима 12С и установка бита SSPEN переводят контакты SCL и SDA в состояние с открытым стоком, если эти контакты программи- руются как входы установкой соответствующих разрядов регистра TRISC. Регистр SSPSTAT содержит флажки состояния передачи данных. Эти флажки отражают следующую информацию: обнаружено условие начала или Рис. 11-20 Структурная схема SSP в режиме 12С конца передачи; получен байт данных или адрес; следующий байт - вторая половина 10-разрядного адреса, передача данных (чтение или запись). Ре- гистр SSPSTAT доступен только для чтения. Регистр SSPBUF предназначен для записи или чтения передаваемых данных. Регистр сдвига SSPSR преобразует дан- ные в последовательный код при передаче или об- ратно в параллельный при приеме. Регистры SSPBUF и SSPSR обеспечивают двойную буферизацию принимаемых данных, что позволяет принимать сле- 96
PIC16C7X Глава 11 дующий байт не дожидаясь чтения полученных данных. Когда байт принят, то он пересылается в регистр SSPBUF и устанавливается флажок SSPIF. Если получен следующий байт прежде чем считаны данные из регистра SSPBUF, то возникает переполнение приемника и устанавливается флажок SSPOV (SSPCON <6>). Регистр SSPADD должен содержать адрес ведомого. В 10-разрядном режиме сначала должен быть записан старший байт адреса (11110 А9 А8 0), а после соответствия старшего байта адреса должен быть загружен младший байт адреса (А7:А0). 11.3.1 РЕЖИМ ВЕДОМОГО В режиме ведомого контакты SCL и SDA должны быть сконфигуриро- ваны как входы (установить TRISC < 4:3 >). Если требуется передача данных (ведомый передатчик), то модуль SSP автоматически изменит состояние вхо- дов на выходы. Если принят свой адрес или очередные данные, то аппаратными средст- вами автоматически формируется импульс подтверждения (АСК), а затем в регистр SSPBUF загружается полученное значение из регистра SSPSR. Модуль SSP не формирует импульс АСК, если возникает одно из сле- дующих условия или оба сразу: а) установлен флажок состояния буфера BF (SSPSTAT <0>), б) установлен флажок переполнения SSPOV (SSPCON <6>). В этом случае значение регистра SSPSR не переписывается в SSPBUF, но флажок SSPIF (PIR1 <'3>) устанавливается. В таблице 11-1 показаны дей- ствия приемника в зависимости от состояния флажков BF и SSPOV. Затем- ненные ячейки показывают условие, когда программное обеспечение не сбра- сывает флажок переполнения. Отметим, что флажок BF сбрасывается при чтении регистра SSPBUF, а флажок SSPOV сбрасывается программно. Таблица 11-1. Действия приемника после получения байта данных Флажки состояния SSPSR -> SSPBUF Да Импульс АСК Устанавливается SSPIF (прерывание SSP, если разрешено) BF SSPOV 0 0 Есть Да 1 0 Нет Нет Да 1 1 Нет Нет Да 0 1 Нет Нет Да 4 Звк. 1092 97
Глава 11 PIC16C7X 11.3.1.1 АДРЕСАЦИЯ Если модуль SSP работает в режиме ведомого, то он ожидает условие начала. После чего регистр SSPSR принимает 8-разрядов. Каждый разряд фиксируется в регистре по переднему фронту тактового импульса на линии SCL. Значение регистра SSPSR <7:1> сравнивается со значением регистра SSPADD. Адреса сравниваются по заднему фронту восьмого импульса син- хронизации (SCL). Если адрес соответствует и флажки BF и SSPOV сброше- ны, то выполняются следующие операции: а) Значение регистра SSPSR загружается в регистр SSPBUF. б) Устанавливается флажок заполнения буфера BF. в) Формируется импульс АСК. г) По заднему фронту девятого импульса SCL устанавливается флажок прерывания SSPIF (PIRI <3>) и генерируется прерывание, если разрешено. В режиме 10-разрядного адреса ведомым должны быть получены два байта адреса (Рис. 11-9). Пять старших разрядов (MSBS) первого байта адре- са являются маркером 10-разрядного адреса. После приема первого байта флажок R/W (SSPSTAT <2>) должен указывать запись, так как ведомое уст- ройство должно получить второй байт адреса. В 10-разрядном адресе первый байт равняется ‘1 1 1 1 О А9 А8 О’, где А9 и А8 - два старших разряда адреса.' Последовательность операций для 10-разрядного адреса (шаги 7-9 вы- полняются только, если передатчик ведомый): 1. Получить старший байт адреса (устанавливаются флажки SSPIF, BF и UA). 2. Модифицировать регистр SSPADD и загрузить второй (младший) байт адреса (сбрасывается флажок UA и отпускается линия SCL). 3. Считать регистр SSPBUF (сбрасывается флажок BF) и сбросить фла- жок SSPIF. 4. Получить второй (младший) байт адреса (устанавливаются флажки SSPIF, BF и UA). 5. Модифицировать SSPADD и загрузить первый (старший) байт адреса (сбрасывается флажок UA и, если адрес соответствует, отпускается линия SCL). 6. Считать регистр SSPBUF (сбросить флажок BF) и сбросить флажок SSPIF. 7. Получить повторное условие начала. 8. Получить старший байт адреса (устанавливаются флажки SSPIF и BF). 9. Считать регистр SSPBUF (сбрасывается флажок BF) и сбросить фла- жок SSPIF. 98
PIC16C7X Глава 11 11.3.1.2 ПРИЕМ Если в байте адреса разряд R/W = 0 и адрес соответствует, то флажок R/W регистра SSPSTAT сбрасывается. Полученный адрес загружается в ре- гистр SSPBUF. Если возникает переполнение, то импульс подтверждения (АСК) не формируется, а устанавливаются флажки BF (SSPSTAT <0>) и SSPOV (SSPCON <6>). Прерывание SSP формируется для каждого принятого байта данных. Флажок SSPIF (PIRI < 3>) должен сбрасываться программно, а регистр SSPSTAT может использоваться для определения состояния приемника. $SPOV(SSPCON<6») Разряд SSPOV установлен, потому что регистр SSPBUF все еш,е не с*иан АСК не передается_______ Рис. 11-21 Временная диаграмма приема 12С (7-разрядный адрес) 11.3.1.3 ПЕРЕДАЧА Если в байте адреса разряд R/W = 1 и адрес соответствует, то флажок R/W регистра SSPSTAT устанавливается. Полученный адрес загружается в регистр SSPBUF. На девятом такте будет передан импульс АСК и на контакте RC3/8CK/SCL установится низкий уровень (состояние останова). Передавае- мые данные должны быть загружены в регистр SSPBUF. Они также загружа- ются и в регистр SSPSR. Затем контакт RC3/SCK/SCL необходимо отпустить установкой бита СКР (SSPCON <4>). Восемь информационных разрядов сдвигаются в линию по заднему фронту тактового сигнала SCL. Это обеспе- чивает достоверность сигнала SDA в течение высокого уровня сигнала SCL (Рис. 11-22). Прерывание SSP генерируется после передачи каждого байта данных. Флажок SSPIF устанавливается по заднему фронту девятого тактового им- пульса, а сброс флажка должен выполнятся программно. Регистр SSPSTAT может использоваться для того чтобы определить состояние передатчика. Импульс АСК от ведущего приемника фиксируется ведомым передат- чиком по переднему фронту девятого импульса на входе SCL. Если импульс АСК не обнаружен, то передача данных заканчивается, и ведомый ожидает 4* 99
Глава 11 PIC16C7X появление нового условия начала передачи. Если импульс АСК зафиксирован (низкий уровень на линии SDA), то в регистр SSPBUF должны быть загруже- ны очередные передаваемые данные, которые одновременно загружаются и в регистр SSPSR. Затем установкой бита СКР контакт RC3/SCK/SCL необхо- димо отпустить. Прием адреса RA77-1 SCL SSPIF (PJR1<3>) . SCL удерхивается —u низким пока обрабатывается SSPIF BF (SSPSTAT«O>) CKP (SSPCON«4»J Рис. 11 -22 Временная диаграмма передачи I2C (7-разрядный адрес) 11.3.2 РЕЖИМ ВЕДУЩЕГО Операции в режиме ведущего обеспечиваются генерацией прерываний при обнаружении условий начала и окончания передачи. Биты окончания (Р) и начала (S) обнуляются при сбросе или когда модуль SSP отключен. Управ- ление шиной 12С можно осуществлять, если установлен бит Р или шина неак- тивна (оба бита Р и S равны нулю). В режиме ведущего линии SCL и SDA управляются сбросом соответст- вующих разрядов регистра TRISC <4:3>. Выходной уровень всегда низкий независимо от значений в регистре PORTB <4:3>. Когда передаваемое значе- ние по линии SDA равно 'Г, устанавливается разряд TRISC <4> (контакт кон- фигурируется как вход), а если передаваемое значение равно 'О', то разряд TRISC <4> сбрасывается (контакт конфигурируется как выход). Таким же образом осуществляется управление линией SCL разрядом TRISC <3>. Флажок прерывания SSP SSPIF устанавливается, если возникают сле- дующие события: • обнаружено условие начала передачи • обнаружено условие окончания передачи • закончена передача или прием байта данных Операции режима ведущего могут быть выполнены в режиме недейст- вующего ведомого (SSPM3:SSPM0 = 1011) или в режиме активного ведомо- го. Если включены режимы ведущего и ведомого, то программное обеспече- ние должно дифференцировать источники прерывания. 100
PIC16C7X Глава 11 11.3.3 РЕЖИМ С МНОГИМИ ВЕДУЩИМИ В режиме с многими ведущими генерация прерываний при обнаружении условий начала и окончания передачи позволяет определить моменты време- ни, когда шина является свободной. Если шина занята, то ожидается преры- вание SSP по условию окончания передачи. В режиме с многими ведущими для осуществления арбитража должен контролироваться выходной уровень на линии SDA. Проверка должна вы- полнятся, когда передается высокий уровень. Если при проверке обнаружен низкий уровень, то устройство должно отпустить линии SDA и SCL (установкой TRISC <4:3>). Возможны две ситуации, когда приоритет владе- ния шиной может быть потерян: • пересылка адреса • передача данных Ведущие, потерявшие приоритет владения шиной и имеющие режим ве- домого, должны немедленно переключиться в режим ведомого приемника, поскольку оставшийся ведущим передатчик может адресоваться к нему. 101
Глава 12 PIC16C7X 12. УНИВЕРСАЛЬНЫЙ СИНХРОННО-АСИНХРОННЫЙ ПРИЕМО- ПЕРЕДАТЧИК (USART) Модуль универсального синхронно-асинхронного приемопередатчика (USART) - это один из двух последовательных модулей ввода/вывода. (USART также называют последовательным интерфейсом связи или SCI). USART может функционировать как дуплексная асинхронная система, кото- рая может осуществлять обмен данными с периферийными устройствами R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-l R/W-0 | CSRC. | ТХ9 | TXEN | SYNC | | BRGH TRMT TX9D | 7 о Рис. 12-1 Регистр состояния и управления передатчиком: "TXSTA" (адрес 98h) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: CSRC: Выбор источника синхронизации Асинхронный режим: Не имеет значения Синхронный режим: 1 = режим ведущего (внутренняя синхронизация от BRG) О = режим ведомого (синхронизация от внешнего источника) Разряд 6: ТХ9: Разрешение 9 разрядной передачи 1 = передача 9 разрядных слов О = передача 8 разрядных слов Разряд 5: TXEN: Включение передатчика 1 = передатчик включен О = передатчик отключен Примечание: SREN/CREN отменяют TXEN в синхронном режиме. Разряд 4: SYNC: Выбор режима USART 1 * синхронный режим О = асинхронный режим Разряд 3: Зарезервирован, читается как 'О' Разряд 2: BRGH: Выбор скорости передачи Асинхронный режим: 1 = высокоскоростной режим О - низкоскоростной режим Синхронный режим: Не имеет значения Разряд 1: TRMT: Состояние передатчика 1 = сдвиговый регистр TSR свободен О = TSR занят Разряд 0: TX9D: 9-ый разряд передаваемых данных. Может использоваться для контроля по четности. 102
PIC16C7X Глава 12 типа экранных терминалов и персональных компьютеров. USART также мо- жет быть конфигурирован как полудуплексная синхронная система, которая может осуществлять обмен данными с периферийными устройствами типа интегральных схем А/D или D/А, последовательных СППЗУ и т.д. R/W-0 R/W-0 R/W-0 R/W-0 U-0 R-0 R-0 R-x | SPEN | RX9 SREN CREN | FERR OERR RX9D | 7 О Рис. 12-2 Регистр состояния и управления приемником: "RCSTA" (адрес 18h) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряд 7: SPEN: Включение последовательного порта 1 = последовательный порт включен (RC7/RX/DT и RC6/TX/CK устанавливаются как контакты последовательного порта) О = последовательный порт отключен Разряд 6: RX9: Разрешение 9 разрядного приема 1 = прием 9 разрядных слов О = прием 8 разрядных слов Разряд 5: SREN: Разрешение однократного приема Асинхронный режим и Синхронный режим ведомого: Не используется Синхронный режим ведущего: 1 = разрешение однократного приема О = запрещение однократного приема Этот разряд сбрасывается после того как принято одно слово данных. Разряд 4: CREN: Разрешение непрерывного приема Асинхронный режим: 1 = разрешение непрерывного приема О = запрещение непрерывного приема Синхронный режим: 1 = разрешение непрерывного приема, пока CREN не будет сброшен (CREN отменяет SREN) О = запрещение непрерывного приема Разряд 3: Зарезервирован, читается как 'О' Разряд 2: FERR: Флажок ошибки кадровой синхронизации 1= ошибка кадровой синхронизации (Сбрасывается при чтении регистра RCREG и затем может быть получен допустимый байт) О = нет ошибок кадровой синхронизации Разряд 1: OERR: Флажок ошибки переполнения 1 = ошибка переполнения (Может быть сброшен очисткой CREN) О = нет ошибок переполнения Разряд 0: TX9D: 9-ый разряд принятых данных. Может использоваться для контроля по четности. 103
Глава 12 PIC16C7X USART может функционировать в следующих режимах: • асинхронный режим (дуплексная система), • ведущий в синхронном режиме (полудуплексная система), • ведомый в синхронном режиме (полудуплексная система). Биты SPEN (RCSTA <7>) и TRISC <7:6> должны быть установлены так, чтобы конфигурировать контакты RC6/TX/CK и RC7/RX/DT для работы син- хронно-асинхронного приемопередатчика. 12.1 ГЕНЕРАТОР СКОРОСТИ ПЕРЕДАЧИ USART (BRG) BRG поддерживает асинхронный и синхронный режимы USART. BRG - это специализированный генератор скорости передачи с 8 разрядным делите- лем частоты. Регистр SPBRG управляет периодом 8 разрядного таймера. В асинхронном режиме бит BRGH (TXSTA <2>) также управляет скоростью передачи, В синхронном режиме бит BRGH игнорируется. В таблице 12-1 представлены формулы для вычисления скорости передачи для различных режимов USART, которые применяются только в режиме ведущего (внутренняя синхронизация). Используя формулу из таблицы 12-1 может быть вычислено самое близ- кое целочисленное значение для регистра SPBRG для желаемой скорости передачи при заданной частоте Fosc, а также может быть определена ошибка скорости передачи. Можно выгодно использовать высокую скорость передачи (BRGH = 1) даже для медленной скорость передачи, поскольку в некоторых случаях в уравнении Fosc / (16 (X + 1)) можно уменьшить ошибку скорости передачи. Таблица 12-1: Формула скорости передачи SYNC BRGH = 0 (высокоскоростной режим) , BRGH = 1 (низкоскоростной режим) 0(Асинхронный режим) Скорость передачи = FOSC/(64(X+1)) Скорость передачи = FOSC/(16(X+1)) 1 (Синхронный режим) Скорость передачи = FOSC/(4(X+1)) NA X = значение в SPBRG (от 0 до 255) Пример 12-1 показывает вычисление скорости передачи и ошибки ско- рости для следующих условий: Fosc =16 МГц, Желаемая скорость передачи = 9600, BRGH = 0, SYNC = 0. 104
PIC16C7X Глава 12 Таблица 12-3: Скорость передачи для синхронного режима Желаемая скорость Fosc ~ 20 МГц Fosc = 16 МГц Fosc — Ю МГц Скорост ь Ошибка, % Значени е SPBRG Скорост ь Ошибка, % Значеии е SPBRG Скорост ь Ошибка, % Значени е SPBRG 0.3' NA - - NA - NA - - 1.2 NA - - NA - - NA - - 2.4 NA - - NA - - NA - - 9.6 NA - - NA - - 9.766 + 1.73 255 19.2 19.53 + 1.73 255 19.23 +0.16 207 19.23 +0.16 129 76.8 76.92 +0.16 64 76.92 +0.16 51 75.76 -1.36 32 96 96.15 +0.16 51 95.24 -0.79 41 96.15 +0.16 25 300 294.1 -1.96 16 307.69 +2.56 12 312.5 +4.17 7 500 500 0 9 500 0 7 500 0 4 Мах 5000 - 0 4000 - 0 2500 - 0 Min 19.53 - 255 15.625 - 255 9.766 - 255 Продолжение таблица 12-3 Желаемая скорость Fosc = 7.15909 МГц Fosc “ 5.0688 МГц Fosc = 4 МГц Скорост ь Ошибка, % Значени е SPBRG Скорост ь Ошибка, % Значени е SPBRG Скорост ь Ошибка, % Значеии е SPBRG 0.3 NA - - NA - - NA - - 1.2 NA - - NA - - NA - - - 2.4 NA - - NA - - NA - - 9.6 9.622 +0.23 185 9.6 0 131 9.615 +0.16 103 19.2 19.24 +0.23 92 19.2 0 65 19.231 +0.16 51 76.8 77.82 + 1.32 22 79.2 +3.13 15 76.923 +0.16 12 96 94.20 -1.88 18 97.48 +1.54 12 100 +4.17 9 300 298.3 -0.57 5 316.8 +5.60 3 NA - - 500 NA - - NA - - NA - - Мах 1789.8 - 0 1267 - 0 1000 - 0 Min 6.991 - 255 4.950 - 255 3.906 - 255 Продолжение таблица 12-3 Желаемая скорость 0.3 FOsc= 3.579545 МГц '' Fqsc~ 1МГц Fosc = 32.768 МГц Скорост ь Ошибка, % Значени е SPBRG Скорост ь Ошибка, % Значени еSPBRG Скорост ь Ошибка, % Значени е SPBRG NA - - NA - - 0.303 +1.14 26 1.2 NA - - 1.202 +0.16 207 1.170 -2.48 6 2.4 NA - - 2.404 +0.16 103 NA - - 9.6 9.622 +0.23 92 9.615 +0.16 25 NA - - 19.2 19.04 -0.83 46 19.24 +0.16 12 NA - - 76.8 74.57 -2.90 11 83.34 +8.51 2 NA - - 96 99.43 +3.57 8 NA - - NA - - 300 298.3 -0.57 2 NA - - NA - • 500 NA - - NA - - NA - - Мах 894.9 - 0 250 - 0 8.192 - 0 Min 3.496 - 255 0.9766 - 255 0.032 - 255 105
Глава 12 PIC16C7X Таблица 12-4: Скорость передачи для асинхронного режима (BRGH = 0) Желаемая скорость Fosc ~ 20 МГц Fosc = 16 МГц Fosc ~ Ю МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Значеии е SPBRG Скорост ь Ошибка, % Знамени е SPBRG 0.3 NA - - NA - - NA - - 1.2 1.221 +1.73 255 1.202 +0.16 207 1.202 +0.16 129 2.4 2.404 +0.16 129 2.404 +0.16 103 2.404 +0.16 64 9.6 9.469 -1.36 32 9.615 +0.16 25 9.766 + 1.73 15 19.2 19.53 + 1.73 15 19.23 +0.16 12 19.53 + 1.73 7 76.8 78.13 +1.73 3 83.33 +8.51 2 78.13 + 1.73 1 96 104.2 +8.51 2 NA - - NA - - 300 312.5 +4.17 0 NA - - NA - - 500 NA - - NA - - NA - - Мах 312.5 - 0 250 - 0 156.3 - 0 Min 1.221 - 255 0.977 - 255 0.6104 - 255 Продолжение таблица 12-4 Желаемая скорость Fosc = 7.15909 МГц Fosc = 5.0688 МГц Fosc'-'4 МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG 0.3 NA - - 0.31 +3.13 255 0.3005 -0.17 207 1.2 1.203 +0.23 92 1.2 0 65 1.202 + 1.67 51 2.4 2.380 -0.83 46 2.4 0 32 2.404 + 1.67 25 9.6 9.322 -2.90 11 9.9 +3.13 7 NA - - 19.2 18.64 -2.90 5 19.8 +3.13 3 NA - - 76.8 NA - - 79.2 +3.13 0 NA - - 96 NA - - NA - - NA - - 300 NA - - NA - - NA - - 500 NA - - NA - - NA - - Мах 111.9 - 0 79.2 - 0 62.500 - 0 Min 0.437 - 255 0.3094 - 255 3.906 - 255 Продолжение таблица 12-4 Желаемая скорость Fosc = 3.579545 МГц Fosc — I МГц Fosc = 32.768 МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь 0.300 Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG 0.3 0.301 +0.23 185 +0.16 51 0.256 -14.67 1 1.2 1.190 -0.83 46 1.202 +0.16 12 NA - - 2.4 2.432 +1.32 22 2.232 -6.99 6 NA - - 9.6 9.322 -2.90 5 NA - - NA - - 19.2 18.64 -2.90 2 NA - - NA - - 76.8 NA - - NA - - NA - - 96 NA - - NA - - NA - - 300 NA - - NA - - NA - - 500 NA - - NA - - NA - - Мах 55.93 - 0 15.63 - 0 0.512 - 0 Min 0.2185 - 255 0.0610 - 255 0.0020 - 255 106
PIC16C7X Глава 12 Таблица 12-5: Скорость передачи для асинхронного режима (BRGH = 1) Желаемая скорость Fosc - 20 МГц Fosc = 16 МГц Fosc ~ Ю МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG 9.6 9.615 +0.16 129 9.615 +0.16 103 9.615 +0.16 64 19.2 19.230 +0.16 64 19.230 +0.16 51 18.939 -1.36 32 38.4 37.878 -1.36 32 38.461 +0.16 25 39.062 +1.7 15 57.6 56.818 -1.36 21 58.823 +2.12 16 56.818 -1.36 10 115.2 113.636 -1.36 10 111.111 -3.55 8 125 +8.51 4 250 250 0 4 250 0 3 NA - - 625 625 0 1 NA - - 625 0 0 1250 1250 0 0 NA - - NA - - Продолжение таблица 12-5 Желаемая скорость Fosc “ 7.16 МГц Fosc " 5.068 МГц Fosc = 4 МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG 9.6 9.520 -0.83 46 9.6 0 32 NA - - 19.2 19.454 + 1.32 22 18.645 -2.94 16 1.202 +0.17 207 38.4 37.286 -2.90 И 39.6 +3.12 7 2.403 +0.13 103 57.6 55.930 -2.90 7 52.8 -8.33 5 9.615 +0.16 25 115.2 111.860 -2.90 3 105.6 -8.33 2 19.231 +0.16 12 250 NA - - NA - - NA - - 625 NA - - NA - - NA - - 1250 NA - - NA - - NA - - Продолжение таблица 12-5 Желаемая скорость Fosc = 3.579 МГц Fosc - 1 МГц Fosc = 32.768 МГц Скорост ь Ошибка, % Знамени е SPBRG Скорост ь Ошибка, % Знамени е SPBRG Скорое! ь Ошибка, % Знамени е SPBRG 9.6 9.727 + 1.32 22 8.928 -6.99 6 NA - - 19.2 18.643 -2.90 11 20.833 +8.51 2 NA - - 38.4 37.286 -2.90 5 31.25 -18.61 1 NA - - 57.6 55.930 -2.90 3 62.5 +8.51 0 NA - - 115.2 111.860 -2.90 1 NA - - NA - - 250 223.721 -10.51 0 NA - - NA - - 625 NA - - NA - - NA - - 1250 NA - - NA - - NA - - Запись нового значения в регистр SPBRG сбрасывает таймер BRG. Это обеспечивает переход таймера BRG на новую скорость передачи без ожида- ния окончания счета. Примечание: Для PIC16C73/73A/74/74A асинхронный высокоскоростной ре- жим (BRGH = 1) на высокой скорости может давать ошибки. Поэтому для них рекомендуется BRGH = 0. Если необходимо, поддерживать более высокую скорость передачи (больше чем обеспечивает BRGH = 0), то рекомендуется использовать Р1С16С76/77. 107
Глава 12 PIC16C7X Пример 12-1: Вычисление скорости передачи и ошибки. Желаемая скорость передачи = Fosc / (64 (X + 1)) 9600 = 16000000 /(64 (X + 1)) X =25.042 = 25 Расчетная скорость передачи = 16000000 / (64 (25 + 1)) = 9615 Ошибка = (Расчетная скорость - Желаемая скорость) Желаемая скорость = (9615-9600)/9600 = 0.16% 12.1.1 ВЫБОРКА ПРИНИМАЕМЫХ ДАННЫХ Для определения присутствует ли на RC7/RX/DT высокий или низкий уровень, выборка данных на контакте выполняется три раза. Если бит BRGH (TXSTA <2>) сброшен (то есть, низкая скорость передачи), то выборка осу- ществляются на седьмом, восьмом и девятом задних фронтах каждых 16 так- тов (Рис. 12-3). Если разряд BRGH установлен (то есть, высокая скорость передачи), выборка осуществляется на 3 фронтах синхроимпульсов, предше- ствующих второму переднему фронту каждых 4 тактов после первого заднего фронта, когда на контакте RX устанавливается низкий уровень (Рис. 12-4 и Рис. 12-4 Выборка данных на контакте RX, BRGH = 1 (PIC16C73/73A/74/74A) 108
PIC16C7X Глава 12 RXконтакт \Старт бит/битО Такты '' Ч......................... БоаСкКлля всех томе стаотбита ।--- передачи \;___________________________________________________ । \ Первый задний фронт после установки низкого уровня на контакте RX \ / ..Второй передний фронт ТЗКГХ4 J _____________I------1____________________|------1______I |_ 12 3 4 ш, о.«.:_лл111и1ллгшлш11тг1Ш1ллшш11шшшшшшшлп. 10 Выборки Рис. 12-5 Выборка данных иа контакте RX, BRGH = 1 (PIC16C73/73A/74/74A) 12.2 АСИНХРОННЫЙ РЕЖИМ USART В асинхронном режиме USART использует стандартный формат (стартовый бит, восемь нли девять информационных разрядов и один столо- вый бит). Старт осуществляется по заднему фронту сигнала на линии данных. Наиболее часто используется 8 разрядный формат данных. На кристалле име- ется 8 разрядный генератор скоростей передачи, который может использо- ваться для получения стандартных частот скорости передачи от кварцевого резонатора. Передача и прием USART осуществляется со старшего разряда. Передатчик и приемник USART функционально независимы, но использует один и тот же формат данных и скорость передачи. Генератор скорости пере- дачи, в зависимости от бита BRGH (TXSTA <2>), формирует такт сдвига раз- ряда на каждых 16 или 64 импульсах синхронизации. Контроль по четности аппаратными средствами не обеспечивается, но может быть выполнен про- граммно и передан как девятый информационный разряд. Асинхронный ре- жим не функционирует в течении останова по команде SLEEP. Асинхронный режим устанавливается при сбросе бита SYNC (TXSTA <4>). 109
Глава 12 PIC16C7X Модуль USART в асинхронном режиме состоит из следующих основ- ных элементов: • генератора скорости передачи; • схемы формирования выборки; • асинхронного передатчика; • асинхронного приемника. 12.2.1 USART В РЕЖИМЕ АСИНХРОННОГО ПЕРЕДАТЧИКА Структурная схема передатчика USART в асинхронном режиме пред- ставлена на рис. 12-7. Основа передатчика - передающий сдвиговый регистр (TSR). Сдвиговый регистр получает данные после записи их в буферный ре- гистр передатчика TXREG. Данные загружаются в регистр TXREG про- граммным обеспечением. Данные в регистр TSR не переписываются, пока не передан столовый бит загруженного слова. Как только столовый бит сформи- рован, из регистра TXREG (если он загружен) в TSR переписывается новое значение. Межрегистровая пересылка данных из регистра TXREG в TSR вы- полняется за один ТСу, после чего регистр TXREG - свободен и устанавлива- ется флажок TXIF (PIR1 <4>). Это прерывание можно разрешить / запретить установкой / сбросом бита маски TXIE (PIE1 <4>). Флажок TXIF устанавли- вается независимо от состояния бита маски TXIE и не может быть сброшен программным обеспечением. Он сбрасывается только тогда, когда в регистр TXREG загружены новые данные. Флажок TXIF указывает состояние регист- ра TXREG, а флажок TRMT (TXSTA <1>) - регистра TSR. Флажок состояния TRMT доступен только для чтения. Он устанавливается когда регистр TSR свободен. С этим флажком нс связана никакая логика прерываний, так что пользователь должен опрашивать этот, флажок, чтобы определить, свободен ли регистр TSR. Передатчик включается при установке бита TXEN (TXSTA <5>). Но пе- редача фактически начнется по следующему переднему фронту такта сдвига генератора скорости передачи (BRG) после записи данных в регистр TXREG (Рис. 12-7). Последовательность начала передач может быть иной: сначала загружается регистр TXREG, а затем устанавливается бит разрешения пере- дачи TXEN. Однако обычно передача начинается когда регистр TSR свобо- ден, поэтому запись данных в регистр TXREG приведет к загрузке их в TSR, и регистр TXREG при этом освобождается. Таким образом, возможна пере- дача слово за словом (Рис. 12-9). Сброс бита TXEN в течении передачи пре- рывает передачу и сбрасывает передатчик. В результате на контакте RC6/TX/CK. устанавливается состояние высокого импеданса. Чтобы задать 9 разрядную передачу, должен быть установлен бит раз- решения 9 разрядной передачи ТХ9 (TXSTA <6>). Девятый разряд записыва- ется в TX9D (TXSTA <0>). Этот разряд должен быть записан перед записью 8 разрядных данных в регистр TXREG. Это необходимо, поскольку запись дан- 110
PIC16C7X Глава 12 ных в регистр TXREG приводит к пересылке данных в регистр TSR (если TSR свободен). В этом случае в регистр TSR может быть загружен непра- вильный девятый информационный разряд. Примечания: 1. Регистр TSR не отображен в памяти данных, поэтому он не доступен пользователю. 2. Флажок TXIF установлен, когда установлен бит разрешения передачи TXEN. Последовательность операций при установке режима асинхронной пе- редачи: 1. Инициализировать регистр SPBRG для соответствующей скорости передачи. Если необходима высокая скорость передачи, установить бит BRGH. (Раздел 12.1). 2. Задать асинхронный режим последовательного порта, сбросить бит SYNC и установить бит SPEN. 3. Если желательны прерывания, то установить бит разрешения преры- вания от передатчика TXIE. 4. Для 9 разрядной передачи устанавливается бит разрешения ТХ9. 5. Включить передатчик установкой бита TXEN, при этом установится бит TXIF. 6. Если выбрана 9 разрядная передача, то в разряд TX9D должен быть загружен девятый разряд. 7. Загрузить данные в регистр TXREG (начало передачи данных). 111
Глава 12 PIC16C7X Запись в TXREG Выход BRG (такты сдвига) К Старт битбитО : ь------------ -------IT------1 t СЛОВО1----- Пересылка в регистр сдвига \ 6и1 У Д' Х"бит7<В ZCimbiT \С гарт биг х битО -----WORD 1 ------------------------!« СЛОВО2------- -------------& СЛОВО 2—* Пересылка в регистр ед вига Рис. 12-9 Передача данных в асинхронном режиме (слово за словом) Эта временная диаграмма показывает последовательность передачи двух слов. 12.2.2 USART В РЕЖИМЕ АСИНХРОННОГО ПРИЕМНИКА Структурная схема приемника представлена на рис. 12-10. Принимае- мые данные с контакта RC7/RX/DT поступают на блок восстановления дан- ных. Блок восстановления данных - фактически высокоскоростное сдвигаю- щее устройство, действующее на частоте в 16 раз большей скорости переда- чи, в. то время как главное сдвигающее устройство функционирует на скоро- сти передачи информации или на Fosc- Если задан асинхронный режим, то прием включается установкой бита CREN (RCSTA <4>). Основа приемника - принимающий регистр сдвига (RSR). После осуще- ствления выборки стопового бита данные, принятые в RSR, перемещаются в регистр RCREG (если он свободен). После пересылки устанавливается фла- жок RCIF (PIR1 <5>). Прерывания от приемника USART можно разрешить / запретить установкой / сбросом разряда маски RCIE (PIE1 <5>). Флажок RCIF доступен только для чтения, а его сброс осуществляется аппаратными средствами при чтении регистра RCREG. Регистр RCREG обеспечивает двойную буферизацию принимаемых данных, то есть представляет собой бу- 112
PIC16C7X______________________________________________________Глава 12 / фер FIFO глубиной в два уровня. Это позволяет пересылать в RCREG два полученных слова данных, которые затем считываются в порядке поступле- ния, а третье слово принимается в регистр сдвига RSR. При обнаружении стопового бита третьего слова и если регистр RCREG все еще занят, то воз- никает ошибка переполнения и устанавливается флажок OERR (RCSTA <1>). При этом слово, принятое в RSR, будет потеряно. Для того чтобы освободить заполненный буфер FIFO, регистр RCREG должен читаться дважды. Флажок переполнения OERR сбрасывается программным обеспечением, а его сброс выполняется переключением логики приема: сбросить CREN (запретить не- прерывный прием), а затем установить (разрешить непрерывный прием). Ес- ли флажок OERR установлен, то пересылка из регистра RSR в RCREG не вы- полняется, поэтому необходимо всегда сбрасывать флажок ошибки OERR, если он установлен. Флажок ошибки кадровой синхронизации FERR (RCSTA <2>) устанавливается, если стоповый бит не обнаружен. Флажок FERR и 9-ый разряд полученных данных буферизированы таким же образом как и полу- ченные данные. При чтении RCREG разряд RX9D и флажок FERR загружа- ются новыми значениями, поэтому чтобы не потерять старый FERR и инфор- мацию в RX9D, необходимо считать регистр RCSTA, а затем читать регистр RCREG. Последовательность операций при установке режима асинхронного приема: , 1. Инициализировать регистр SPBRG для соответствующей скорости передачи. Если необходима высокая скорость передачи, установить бит BRGH. (Раздел 12.1). 113
Глава 12 PIC16C7X 2. Задать асинхронный режим последовательного порта, сбросить бит SYNC и установить бит SPEN. 3/ Если желательны прерывания, то установить бит разрешения преры- вания от приемника RCIE. 4. Для 9 разрядного приема устанавливается бит разрешения RX9. 5. Включить приемник установкой бита CREN. 6. Флажок RCIF будет установлен после приёма слова данных, после чего будет сгенерировано прерывание, если оно разрешено. 7. Считать регистр RCSTA для получения девятого разряда (если раз- решено) и определить, произошла ли в течение приема какая либо ошибка. 8. Из регистра RCREG считать 8 разрядные полученные данные. 9. Если обнаружена какая-либо ошибка, то очистить флажки ошибок сбросом бита CREN. RX (контакт) — Старт——- Хвит/БитруБит1> Ч-) Y 7<e /стопУаУ /бито)! т -ТГ 'C<SP Rev shit Г.' п С ' п - Rev buffer reg Read Rev Л СЛОВО 1 •I RCREG СЛОВО if RCREG I С 1 buffer reg RCREG RCIF • -<'х- х (флаг прерывания) OERR бит CREN г С ~ Рис. 12-11 Асинхронный прием На временной диаграмме показан прием трех слов, буфер приемника RCREG читается после приема третьего слова, вызывая переполнение, устанавливается флажок OERR. 12.3 СИНХРОННЫЙ РЕЖИМ ВЕДУЩЕГО USART В синхронном режиме передача данных осуществляется полудуплекс- ным способом, то есть передача и прием разнесены во времени. Во время передачи данных прием запрещен и наоборот. Синхронный режим задается установкой бита SYNC (TXSTA <4>). Кроме того, должен быть установлен бит SPEN (RCSTA <7>), для того чтобы сконфигурировать I/O контакты RC6/TX/CK и RC7/RX/DT как линии синхронного последовательного порта (СК - синхронизация, DT - данные). Режим ведущего определяется тем, что устройство формирует частоту синхронизации на линии СК, и задается уста- новкой бита CSRC (TXSTA <7>). 114
PIC16C7X Глава 12 12.3.1 ПЕРЕДАЧА В СИНХРОННОМ РЕЖИМЕ ВЕДУЩЕГО Структурная схема передатчика USART представлена на рис. 12-7. Ос- нова передатчика - передающий сдвиговый регистр (TSR). Сдвиговый ре- гистр получает данные после их записи в буферный регистр передатчика TXREG. В регистр TXREG данные загружаются программным обеспечением. Данные в регистр TSR не переписываются, пока не передан последний бит загруженного слова. Как только последний бит передан, из регистра TXREG (если он загружен) в TSR переписывается новое значение. Межрегистровая пересылка данных из регистра TXREG в TSR выполняется за один Тсу, после чего регистр TXREG - свободен и устанавливается флажок TXIF (PIR1 <4>). Это прерывание можно разрешить / запретить установкой / сбросом бита маски TXIE (PIE1 <4>). Флажок TXIF устанавливается независимо от состоя- ния бита маски TXIE и не может быть сброшен программным обеспечением. Он сбрасывается только тогда, когда в регистр TXREG загружены новые данные. Флажок TXIF указывает состояние регистра TXREG, а флажок TRMT (TXSTA <1>) - регистра TSR. Флажок состояния TRMT доступен только для чтения. Он устанавливается когда регистр TSR свободен. С этим флажком не связана никакая логика прерываний, так что пользователь дол- жен опрашивать этот флажок, чтобы определить, свободен ли регистр TSR. Этот регистр не отображен в памяти данных, поэтому он не доступен пользо- вателю. Рис. 12-12 Передача данных в синхронной режиме Синхронизирующий режим ведущего (SPBRG = '0'). Непрерывная передача двух 8 разрядных слов Передатчик включается при установке бита TXEN (TXSTA <5>). Но пе- редача фактически начнется после записи данных в регистр TXREG по сле- дующему переднему фронту такта на линии СК. Данные на выходе определе- ны (устойчивы) в близи заднего фронта синхроимпульса (Рис. 12-12). После- довательность начала передачи может быть иной: сначала загружается ре- гистр TXREG, а затем устанавливается бит разрешения передачи TXEN (Рис. 115
Глава 12 PIC16C7X 12-13). Это удобно при медленной скорости передачи когда BRG отключен, биты TXEN, CREN и SREN сброшены. При установке бита TXEN, BRG не- медленно формирует такт сдвига. Однако обычно передача начинается, когда регистр TSR свободен, так что запись данных в регистр TXREG приведет к загрузке их в TSR, и регистр TXREG при этом освобождается. Таким образом ,возможна передача слово за словом. Сброс бита TXEN в течении передачи прерывает передачу и сбрасывает передатчик. В результате на контактах DT и СК устанавливается состояние высокого импеданса. Если в течение передачи устанавливается бит CREN или бит SREN, то передача прерывается и на контакте DT устанавливается со- стояние высокого импеданса. Если же установлен бит CSRC (внутренняя син- хронизация), то контакт СК останется выходом,. Передатчик при этом не вы- ключается, а только отключается от выхода. Для отключения передатчика необходимо сбросить бйт TXEN. Если бит SREN установлен (чтобы прервать передачу и получать одиночное слово), то после того как слово принято, бит SREN будет сброшен, и последовательный порт возвратится Обратно к пере- даче, так как разряд TXEN все еще установлен. Линия DT при этом из со- стояния высокого импеданса (режим приема) переключится в режим переда- чи. Для избежания этого бит TXEN должен быть сброшен. Чтобы задать 9 разрядную передачу, необходимо установить бит разре- шения 9 разрядной передачи ТХ9 (TXSTA <6>), при этом девятый разряд записывается в TX9D (TXSTA <0>). Этот разряд должен быть записан перед записью 8 разрядных данных в регистр TXREG. Это необходимо, потому что запись данных в регистр TXREG приводит к пересылке данных в регистр TSR (если TSR свободен). В этом случае в регистр TSR может быть загружен неверный девятый информационный разряд. 116
PIC16C7X;Глава 12 Последовательность операций при установке синхронной передачи в режиме ведущего: 1. Инициализировать регистр SPBRG для соответствующей скорости передачи. (Раздел 12.1). 2. Задать для последовательного порта синхронный режим ведущего, установить биты SYNC, SPEN и CSRC. 3. Установить бит разрешения прерывания от передатчика TXIE, если желательны прерывания. 4. Установить бит разрешения ТХ9 для 9 разрядной передачи. 5. Включить передатчик установкой бита TXEN. 6. Загрузить девятый разряд в TX9D, если выбрана 9 разрядная переда- ча. 7. Загрузить данные в регистр TXREG (начало передачи данных). 12.3.2 ПРИЕМ В СИНХРОННОМ РЕЖИМЕ ВЕДУЩЕГО Если задан синхронный режим, то прием включается установкой бита SREN (RCSTA <5>) или CREN (RCSTA <4>). Принимаемые данные с кон- такта RC7/RX/DT фиксируются по заднему фронту такта синхронизации. Ес- ли установлен бит SREN, то разрешается прием только одиночного слова. Если установлен бит CREN, то разрешен непрерывный прием, пока бит CREN не будет сброшен. Если установлены оба бита, то бит CREN имеет приоритет, то есть разрешен непрерывный прием. После записи последнего разряда принимаемых данных в принимающий сдвиговый регистр (RSR), все слово пересылается в регистр RCREG (если он свободен). Когда пересылка выполнена, устанавливается флажок прерывания RCIF (PIR1 <5>). Прерыва- ние от приемника USART можно разрешить / запретить установкой / сбросом разряда маски RCIE (PIE1 <5>). Флажок RCIF доступен только для чтения; сброс флажка осуществляется аппаратными средствами при чтении регистра RCREG. Регистр RCREG обеспечивает двойную буферизацию принимаемых данных, то есть представляет собой буфер FIFO глубиной в два уровня. Это позволяет переслать в RCREG два полученных слова данных, которые затем считываются в порядке поступления, а третье слово принимается в регистр сдвига RSR. После записи последнего разряда третьего слова, если регистр RCREG все еще занят, возникает ошибка переполнения и устанавливается флажок OERR (RCSTA <1>). При этом слово, принятое в RSR, будет потеря- но. Для того чтобы освободить заполненный буфер FIFO, регистр RCREG должен читаться дважды. Флажок переполнения OERR сбрасывается про- граммным обеспечением, а сброс OERR выполняется при сбросе бита CREN. Если флажок OERR установлен, то пересылка из регистра RSR в RCREG не выполняется, поэтому необходимо всегда сбрасывать флажок ошибки OERR, если он установлен. 9-ый разряд полученных данных буферизируется таким же образом как и полученные данные. При чтении RCREG разряд RX9D за- 117
Глава 12 PIC16C7X гружается новым значением, поэтому чтобы не потерять информацию в RX9D .необходимо считать регистр RCSTA, а затем читать регистр RCREG. Последовательность операций при установке синхронного приема в ре- жиме ведущего: 1. Инициализировать регистр SPBRG для соответствующей скорости передачи. (Раздел 12.1). 2. Задать для последовательного порта синхронный режим ведущего, установить биты SYNC, SPEN и CSRC. 3. Проверить: биты CREN и SREN должны быть сброшены. 4. Установить бит разрешения прерывания от приемника RCIE, если желательны прерывания. 5. Установить бит разрешения RX9 для 9 разрядного приема. 6. Установить бит SREN, если требуется прием одного слова. Для не- прерывного приема установить бит CREN. 7. Ожидать установки флажка RCIF (флажок будет установлен, когда принято слово данных, и будет сгенерировано прерывание, если оно разрешено). 8. Считать регистр RCSTA для получения девятого разряда (если раз- решено) и определить, произошла ли в течение приема какая либо ошибка. 9. Считать 8 разрядные полученные данные из регистра RCREG. 10. Очистить флажки ошибок сбросом бита CREN, если обнаружена ка- кая либо ошибка. Контакт RC7«X£)T Контакт RC6/TXCK Запись в ; Бит о ; бит 1 с>|о^о!|сн|о^о^аз|оф1|аг|о^т Бит2Бит3*^ 'Бит 4 Ьит5^х^~ ’МФ1 гБитб"Х' Бит 7 ’Ж* бит SREN L • • Бит SREN ——Г Бит CREN О' —I О' Флаг RC IF I (прерывание) — Чтение j per RXREG I Рис. 12-14 Прием данных в синхронной режиме Синхронизирующий режим ведущего (SREN = 'Г и BRG = '0'). 118
PIC16C7X Глава 12 12.4 СИНХРОННЫЙ РЕЖИМ ВЕДОМОГО USART Синхронный режим ведомого отличается от режима ведущего тем, что синхронизация приема и передачи данных обеспечивается внешними тактами на контакте RC6/TX/CK (в режиме ведущего - внутренняя синхронизация). Это позволяет устройству пересылать или получать данные во время режима останова по команде SLEEP. Режим ведомого задается сбросом бита CSRC (TXSTA <7>). 12.4.1 ПЕРЕДАЧА В СИНХРОННОМ РЕЖИМЕ ВЕДОМОГО Операции в синхронном режиме ведущего и ведомого идентичны за ис- ключением режима останова устройства. Если в регистр TXkEG записаны два слова, а затем выполнена команда SLEEP, то будут выполнены следующее действия: а) Первое слово немедленно загрузится в регистр TSR и будет переда- ваться. Ь) Второе слово останется в регистре TXREG, а флажок TXIF не будет установлен. с) Когда первое слово будет передано, то из регистра TXREG в TSR пересылается второе слово и устанавливается флажок TXIF. d) Если разряд маски TXIE установлен, то прерывание выведет устрой- ство из режима останова, и если общие прерывания разрешены, то программа выполнит переход к вектору прерываний (0004Н). Последовательность операций при установке синхронной передачи в режиме ведомого: 1. Задать для последовательного порта синхронный режим ведомого, установить биты SYNC, SPEN и сбросить бит CSRC. 2. Сбросить биты CREN и SREN. 3. Установить бит разрешения прерывания от передатчика TXIE, если желательны прерывания. 4. Установить бит разрешения ТХ9 для 9 разрядной передачи. 5. Включить передатчик установкой бита TXEN. 6. Загрузить девятый разряд в TX9D, если выбрана 9 разрядная переда- ча. 7. Загрузить данные в. регистр TXREG (начало передачи данных). 119
Глава 12__________________________________________________PIC16C7X 12.4.2 ПРИЕМ В СИНХРОННОМ РЕЖИМЕ ВЕДОМОГО Операции в синхронном режиме ведущего и ведомого идентичны за ис- ключением режима останова устройства. Если до команды SLEEP прием разрешен (установлен бит CREN), то слово может быть получено в течение режима останова. Когда слово будет принято полностью, то оно пересылается из регистра RSR в регистр RCREG. Если разряд маски RCIE установлен, то прерывание выведет устройство из режима останова, и если общие прерывания разрешены, то программа вы- полнит переход к вектору прерываний (0004Н). Последовательность операций при установке синхронного приема в ре- жиме ведомого: 1. Задать для последовательного порта синхронный режим ведомого, установить биты SYNC, SPEN и сбросить бит CSRC. 2. Установить бит разрешения прерывания от преемника RCIE, если желательны прерывания. 3. Установить бит разрешения RX9 для 9 разрядного приема. 4. Разрешить прием установкой бита CREN. 5. Ожидать установки флажка RCIF (флажок будет установлен, когда принято слово данных, и будет сгенерировано прерывание, если оно разрешено). 6. Считать регистр RCSTA для получения девятого разряда (если раз- решено) и определить произошла ли в течение приема какая либо ошибка. 7. Считать 8 разрядные полученные данные из регистра RCREG. 8. Очистить флажки ошибок сбросом бита CREN, если обнаружена ка- кая либо ошибка. 120
PIC16C7X Глава 13 13. МОДУЛЬ АНАЛОГО-ЦИФРОВОГО ПРЕОБРАЗОВАТЕЛЯ Модуль аналого-цифрового преобразователя (А/D) имеет четыре анало- говых ввода у PIC16C710/71/711/715, пять вводов у PIC16C72/73/73A/76 и восемь у PIC16C74/74A/77. А/D обеспечивает преобразование аналогового входного сигнала в соот- ветствующий 8 разрядный цифровой код. А/D преобразование осуществляет- ся методом последовательного приближения, на время преобразования уро- вень входного сигнала удерживается устройством выборки и хранения. Ис- R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 | ADCS1 | ADCS0 | -(1) I CHS1 | CHSO |GO/DONE| ADIF | ADON | 7 О Рис. 13-1 Регистр "ADCONO" PlС16С710/71/711 (адрес 08h) Обозначения: R = читаемый разряд, W - записываемый разряд, I) = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-6: ADCS1 - ADCS0: Выбор частоты преобразования 00 — Fosc/2 01= Fosc/8 10 = Fosc/32 11 = Frc (синхронизация от внутреннего RC генератора) Разряд 5: Зарезервирован: читается как '0|(|) Разряды 4-3: CHSl:CHS0: Выбор аналогового канала 00 = канал 0, (RA0/AN0) 01 = канал 1, (RA1/AN1) 10 = канал 2, (RA2/AN2) 11 = канал 3, (RA3/AN3) Разряд 2: GO/DONE: Состояние А/D преобразования Если ADON = 1 1 = А/D преобразование выполняется (установка бита запускает А/D преобразование) 0 = А/D преобразование окончено (автоматически сбрасывается аппаратными средствами при окончании А/D преобразования) Разряд 1: ADIF: А/D Флажок прерывания по концу преобразования 1 = конец преобразования (сбрасывается программно) 0 = преобразование не окончено Разряд 0: ADON: Включение модуля A/D 1 = А/D модуль включен 0 = А/D модуль отключен и входы преобразователя закрыты для снижения потребления Примечание: 1. Универсальный разряд для R/W - только у PICI6C710/711. У PIC16C/71 зарезервирован, читается как 'О1. 121
Глава 13 PIC16C7X точник опорного напряжение задается программно. Внутренним источником является положительное напряжение питания устройства (VDD), внешний ис- точник подключается к контакту RA3/AN3/VREF. А/D преобразователь мо- жет функционировать, в то время как устройство находится в режиме остано- ва, при этом синхронизация должна осуществляться от внутреннего RC гене- ратора модуля A/D. Модуль А/D состоит из трех программно доступных: • регистра результата (ADRES) • регистра управления О (ADCONO) • регистра управления 1 (ADCONI) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 | ADCS1 I ADCS0 | CHS2 | CHS1 | CHSO |GO/DONE| - | ADON | 7 О Рис. 13-2 Регистр "ADCONO" Pl С16С715/72/73/73А/74/74А/76/77 (адрес IFh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-6: ADCS1 - ADCS0: Выбор частоты преобразования 00 = Fosc/2 01 = Fosc’/S 10 = Fosc/32 11 = Frc (синхронизация от внутреннего RC генератора) Разряды 5-3: CHS2:CHS0: Выбор аналогового канала * 000,= канал 0, (RA0/AN0) 001 = канал 1, (RA1/AN1) 010 = канал 2, (RA2/AN2) 011 = канал 3, (RA3/AN3) 100 = канал 4, (RA5/AN4), (для PIC 16С715 канал-0, (RA0/AN0)) 101 = канал 5, (RE0/AN5)(l), (для PIC16C715 канал 1, (RA1/AN1)) 110 = канал 8, (RE1/AN6)(I), (для PIC16C715 канал 2, (RA2/AN2)) 111= канал 7, (RE2/AN7)(I), (для PIC16C715 канал 3, (RA3/AN3)) Разряд 2: GO/DONE: Состояние А/D преобразования Если ADON = 1 1 = А/D преобразование выполняется (установка бита запускает А/D преобразование) 0 = А/D преобразование окончено (автоматически сбрасывается аппаратными средствами при окончании А/D преобразования) Разряд 1: Зарезервирован: читается как 'О' Разряд 0: ADON: Включение модуля A/D 1 = А/D модуль включен 0 = А/D модуль отключен и входы преобразователя закрыты для снижения потребления Примечание: 1. Каналы 5, 6 и 7 имеются только у PIC16C74/74A/77 122
PIC16C7X__________________________________________________Глава 13 Регистр ADCONO, показанный на рис. 13-1 и 13-2, управляет режимами работы модуля A/D. Регистр ADCON1, показанный на рис. 13-3 и 13-5, управляет конфигу- рацией контактов порта. Контакты порта могут быть конфигурированы как аналоговые входы (RA3 вход опорного напряжения) или как цифровые I/O. и-0 и-0 и-0 и-0 и-0 и-0 R/W-0 R/W-0 1 - - - I - | PCFG1 | PCFG0 | 7 О Рис. 13-3 Регистр "ADCON1" Р1С16С710/71/711/715 (адрес, 88Н) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-2: Зарезервированы: читаются как 'О' Разряды 1-0: PCFG1:PCFGO: Управление конфигурацией входов A/D PCFGkPCFGO 00 RAOhRAI А RA2 RA3 vRef А А Vdd 01 А А Vref RA3 10 А D D Vdd 11 D D D Vdd А = Аналоговый D = Цифровой вход / выход A/D преобразователь Рнс. 13-4 VlN 1 CHS1.CHS0 ....и \ 11 к—о 43—- ’ ю > о\з 01 > qXq 00 Р1С16С710/ 71/' >—RA3/AN3/Vref —RA2/AN2 -^-{Xl rai/'*ni —ЯА0/ЛМ0 711/715 (входное Vref (опорное напряжение) PC Структурная напряже ’IT -G1:PCF схема ние) Vbo ОО или ' 10 или 11 □1 GO модуля А /D Регистр ADRES содержит результат А/D преобразования. Когда A/D преобразование завершено, результат загружается в регистр ADRES, сбрасы- 123
Глава 13 PIC16C7X вается бит GO/DONE (ADCONO <2>) и устанавливается флажок прерывания A/D ADIF. Структурные схемы модуля А/D показана рис. 13-3 и 13-6. После того как модуль А/D запрограммирован, перед началом преобра- зования должен быть выбран канал. Аналоговые входные каналы должны быть установлены как входы соответствующими разрядами регистра TRIS. Для определения типового времени срабатывания устройства выборки и хра- нения см. раздел 13.1. После истечения этого времени может быть начато A/D преобразование. U-0 U-0 U-0 U-0 ‘ U-0 R/W-0 R/W-0 R/W-0 1 - 1 - 1 - | - | PCFG2 | PCFG1 | PCFG0 1 7 Рис. 13-5 Регистр ADCON1 Р1С16С72/73/73А/74/74А/76/77 (адрес, 9Fh) Обозначения: R = читаемый разряд, W - записываемый разряд, U = зарезервированный разряд, - п = значение после сброса: х = не определено, и = не изменяется, q = зависит от условия. Разряды 7-3: Зарезервированы: читаются как 'О' Разряды 2-0: PCFG2:PCFG0: Управление конфигурацией входов A/D 0 PCFG2:PCFG 0 RA0 RA1 А RA2 RA5 RA3 RE0(l) А RE1(1) RE2(,) Vref ООО А А А А А А Vdd 001 А А А А Vref А А А RA3 010 А А А А А D D D Vdd ОН А А А А Vref D D D RA3 100 А А D . D А D D D Vdd 101 А А D D Vref D D D RA3 Их D D D D D D D D - А = Аналоговый D = Цифровой вход / выход Примечание 1: Входы REO, RE1 и RE2 имеются только у PIC 16С74/74А/77 Порядок программирования А/D преобразователя: 1. Установить конфигурацию модуля A/D: • • установить аналоговые входы и источник опорного напряжения (ADCON1) • • выбрать канал A/D (ADCONO) • • выбрать источник синхронизации А/D преобразования (ADCONO) включить модуль A/D (ADCONO) 2. Если необходимо разрешить прерывание A/D: • • сбросить бит ADIF • установить бит ADIE • установить бит GIE 3. Выдержать время требуемое для устройства выборки и хранения. 124
PIC16C7X Глава 13 4. Начать преобразование: •• установить бит GO/DONE (ADCONO) 5. Ожидать конца А/D преобразования: опрашивать бит GO/DONE, пока он не станет равным "О" •• ожидать прерывание A/D • 6. Считать регистр результата A/D (ADRES) и очистить бит ADIF, если необходимо. 7. Для следующего преобразования перейти на шаг 1 или шаг 2. Время А/D преобразование одного разряда - TAD. Минимальное время тре- буемое для устройства выборки и хранения - 2TAd- 13.1 УСТРОЙСТВО ВЫБОРКИ И ХРАНЕНИЯ Для того чтобы обеспечить точность А/D преобразователя, необходимо полностью зарядить конденсатор хранения (CHOld) напряжением входного сигнала. Аналоговая модель устройства выборки и хранения представлена на рис. 13-7. Внутреннее сопротивление источника сигнала (Rs) и сопротивление ключа .осуществляющего выборку (Rss)> определяют время зарядки конден- сатора CHold- Сопротивление ключа Rss изменяется в зависимости от напря- жения питания устройства (Vdd). см. рис. 13-7. Рекомендуется использовать источники сигнала с внутренним сопротивлением не более 10 кОм. После 125
Глава 13 PIC16C7X того, как аналоговый входной канал выбран (изменился), необходима вы- держка времени перед началом преобразования. Минимальное время выборки вычисляется по уравнению 13-1. В этом уравнении принято, что максимальная ошибка преобразования составляет 1/2 младшего разряда (LSB) (весь диапазон составляет 512 уровней). VDD VT - 0.6V КЛЮЧ выборки RlCSIk iSS RSS ’ С HOLD = S1.2 pF Обозначения: Cpin • емкость входа VT пороговое напряжение I leakage s утечка тока на контакте из-за различных переходов RIС = проходное сопротивление SS “ ключ выборки С hold “ емкость выборки I хранения 6V- 5V-- VDD 4V- - 3V-- 2V-- VSS —b 14 14-1 4- 5 6 7 8 9 10 11 Сопротивление ключа (кО) Рис. 13-7 Аналоговая модель устройства выборки и хранения Уравнение 13-1. Минимальное время выборки Vhold = (VREF- (VreF/512)) х (1 - e<-™OTOLD<R* + lto+R’») или для точности 1/2 LSB Тс = - Chold (Кс + Rss + Rs) ln( 1/511) На примере 13-1 показано вычисление минимального времени выборки Tacq- Это вычисление основано на следующих предположениях: Rs = 10 кОм ошибка 1/2 LSB Vdd= 5V —> Rss — 7 кОм максимальная температура = 50°С Vhold = 0 когда t = 0 Пример 13-1. Вычисление минимального времени Tacq = время задержки усилителя + время зарядки конденсатора + температурный коэффициент 126
PIC16C7X Глава 13 TAcq = 5 мкС + Тс + [(Температура - 25°С) (0.05 мкС/°С)] Тс = - CHold (ric + Rss+ Rs) ln( 1/511) = - 51.2 пФ (1 кОм + 7 кОм + 10 кОм) In (0.0020) - - 51.2 пФ (18 кОм)) In (0.0020) = - 0.921 мкС (-6.2146) = 5.724 мкС TACq = 5 мкС + 5.724 мкС + [(50 °C - 25 °C) (0.05 мкС/С0)] = 10.724 мкС + 1.25 мкС = 11.974 мкС Примечания 1. Опорное напряжение (VREF) не влияет на уравнение, посколь- ку оно сокращается. 2. Заряд, содержащийся на конденсаторе (С hold), не разряжает- ся после каждого преобразования. 3. Рекомендуется использовать источники сигнала с внутренним сопротивлением не более 10 кОм. 4. После того как одно преобразование закончено, перед нача- лом следующего преобразования необходима задержка 2 Tad, так как во время преобразования конденсатор хранения не со- единен с выбранным входом A/D. 13.2 СИНХРОНИЗАЦИЯ А/D ПРЕОБРАЗОВАНИЯ Время А/D преобразования одного разряда - Tad- Полное 8 разрядное А/D преобразование выполняется за 9.5 Tad- Источник синхронизации A/D преобразования выбирается программно. Возможны четыре варианта син- хронизации: • 2Tosc • 8Tosc • 32Tosc • внутренний RC генератор Для точного А/D преобразования синхронизация преобразования (TAd) должна быть выбрана не менее допустимой: 2.0 мкС для PICI6C71 1.6 мкС для всех остальных PICI6C7X контроллеров В таблицах 13-1 и 13-2 представлена зависимость времени ТАо от часто- ты генератора устройства и выбранного источника синхронизации. Затенен- ные ячейки вне рекомендуемого диапазона. 127
Глава 13 PIC16C7X Таблица 13-1 Зависимость ТАРот частоты устройства, PIC16C71 Источник синхронизации Частота устройства ADCS1: ADCSO 20МГц 16 МГц 4 МГц 1 МГц ЗЗЗ.ЗЗкГц 2Tosc 00 100 нС(2) 125 нС*2’ 500нС(2) 2.0 мкС 6 мкС 4Tosc 01 400 иС(2> 500 нС(2) 2.0 мкС 8 мкС 24 мкС<3) 8Tosc 10 1.6мкС<2’ 2.0 мкС 8 мкС 32 мкС(3) 96 мкС(3) RC 11 4-6 мкС<14) 4-6 мкС(14) 4-6 мкС"'4) 4-6 мкС(,) 4-6 мкС(1> Таблица 13-2 Зависимость ТЛрот частоты устройства Источник синхронизации Частота устройства ADCS1: ADCSO 20МГц 5 МГц 1.25 МГц ЗЗЗ.ЗЗкГц 2Tosc 00 100 иС!2! 400 нС'2) 1.6 мкС 6 мкС 4Tosc 01 400 hCw 1.6 мкС 6.4 мкС 24 мкС(Ъ 96 мкС(3> 8Tosc 10 1.6 мкС 6.4 мкС 26.6 мкСи) RC 11 4-6мкС(|-4) 4-6 мкС"'4) 4-6 мкС<|'4) 4-6 мкСП) Примечания: 1. RC источник имеет типовое время ТАР = 4 мкС. 2. Значения ТАР менее допустимого. 3. Для более быстрого преобразования рекомендуются выбор ‘ другого источника синхронизации. 4. Когда частота устройства больше 1 МГц, RC генератор реко- мендуется только в режиме останова. > 13.3 ПРОГРАММИРОВАНИЕ АНАЛОГОВЫХ ВХОДОВ Регистры ADCON1, TRISA и TRISE управляют состоянием соответст- вующих аналоговых контактов порта. Контакты порта, которые используются как аналоговые входы, должны быть запрограммированы на вход установкой соответствующих разрядов регистров TRIS. Если соответствующий разряд регистров TRIS сброшен (вывод), то цифровой выходной уровень, V0H или Vol, будет преобразован как аналоговый сигнал. А/D преобразование не завит от состояния битов CHS2:CHS0 и разрядов регистров TRIS Примечание: При чтении регистра порта I/O все контакты, конфигурирован- ные как аналоговые входы, будут читаться как низкий уровень ("О"). Контакты, конфигурированные как цифровые входы, функционируют как аналоговые входы. Аналоговые уровни на контактах, конфигурированных как цифровые входы, не воз- действуют на точность преобразования. 128
PIC16C7X Глава 13 13.4 А/D ПРЕОБРАЗОВАНИЕ На примерах 13-2 и 13-3 показано как выполнить А/D преобразование. Контакты RA программируются как аналоговые входы. Опорное напряжение (Vref) - напряжение питания устройства VDD. Прерывание А/D разрешены. Синхронизация А/D преобразования от внутреннего RC генератора. Преобра- зование выполняется по входу RA0. Примечание: Бит GO/DONE не должен устанавливаться в команде, которая включает модуль A/D. Сброс бита GO/DONE в течение преобразования приведёт к остановке преобразования. Результат не завершенного А/D преобразования не записы- вается в регистр ADRES. То есть регистр ADRES будет содержать значение последнего завершенного преобразования (или последнее значение, записан- ное в регистр ADRES). После того как А/D преобразование прервано, необ- ходима задержка 2 ТАц перед началом следующего преобразования. Пример 13-2. Выполнение А/D преобразования (PIC 16С70/71/71 А) BSF STATUS, RPO ; Обращение к банку 1 CLRF ADCON1 ; Все входы аналоговые BCF STATUS, RPO ; Обращение к банку О MOVLW 0хС1 ; синхронизация от RC, канад О, А/D включен MOVWF ADOONO BSF INTCON, ADIF ; Сбросить, флажок прерывания A/D BSF INTCON, ADIE ; Разрешить прерывания A/D BSF INTCON, GIE ; Разрешить общее прерывание ; Если необходимое для выборки время истекло, ; то может быть начато А/D преобразование. BSF ADCONO, GO ; пуск А/D преобразования ; После завершения А/D преобразования будет установлен флажок ; ADIF, a GO/DNE сброшен. Пример 13-2. Выполнение А/D преобразования (PIC 16С72/73/73А/74/74А/76/77) BSF STATUS, RPO ; Обращение к банку 1 BCF STATUS, RP1 ; только для PIC16C76/77 CLRF ADCON1 ; Все входы аналоговые BSF PIE1, ADIE ; Разрешить прерывания A/D BCF STATUS, RPO ; Обращение к банку О MOVLW 0хС1 ; синхронизация от RC, канал О, А/D включен MOVWF ADCONO BCF PIR1, ADIF ; Сбросить флажок прерывания A/D BSF INTCON, PEIE ; Разрешить прерывания от устройств ; ввода-вывода BSF INTCON, GIE ; Разрешить общее прерывание 5 3ml 1092 129
Глава 13 PIC16C7X ; Если необходимое для выборки время истекло, ; то может быть начато А/D преобразование. BSF ADCONO, GO ; пуск А/D преобразования ; После завершения А/D преобразования будет установлен ; флажок ADIF, a GO/DNE сброшен. 13.4.1 ВРЕМЯ ПРЕОБРАЗОВАНИЯ И ТОЧНОСТЬ РЕЗУЛЬТАТА Модуль А/D позволяет сократить время преобразования за счет сниже- ния точности результата. Для этого при преобразовании не значащих разря- дов источник синхронизации может быть включен так, чтобы нарушилось требование к минимальному времени ТАц. Когда нарушается требование к минимальному времени TAd, то полученные в это время разряды результата А/D не определены. Независимо от требуемой точности время, необходимое для зарядки устройства выборки и хранения, остается неизменным. Источни- ком синхронизации в этом случае не может быть RC генератор, так как он не нарушает требования к минимальному времени Tad. Для вычисления времени преобразования в зависимости от заданной точности результата можно вос- пользоваться следующим уравнением: Время преобразования = 2 TAD + N х TAD + (8 - N) (2T0Sc) Где: N = число разрядов точного преобразования. Пример 13-4. Время преобразования с 4-х и 8-ми разрядной точностью . Частота генератора (МГц)"' Точность 4 разряда 8 разрядов TAD 20 1.6 мкС 1.6 мкС 16 2.0 мкС 2.0 мкС Tosc 20 50 нС 50 нС 16 62.5 нС 62.5 нС 2 TAD + N X TAD +(8 -N) (2T0SC) 20 10 мкС 16 мкС 16 12.5 мкС 20 мкС Примечание: 1. Минимальное время TAD для PICI6C71 - 2.0 мкС, для всех остальных PICI6C7X - 1.6 мкС Так как ТАо исходят от генератора устройства, то для определения мо- мента переключения синхронизации можно использовать таймер, циклы про- граммы и т.д. На примере 13-4 сравнивается время преобразования с 4-х и 8- ми разрядной точностью. В примере рассматриваются устройства, функцио- нирующие от генератора 20 МГц и 16 МГц (синхронизация А/D осуществля- ется при Tad = 32TOsc); после 6TAD синхронизация А/D переключается на 2Tosc. 2Tosc нарушает требование к минимальному времени TAD, и последние 4- разряда результата не будут определены. 130
PIC16C7X Глава 13 13.5 А/D ПРЕОБРАЗОВАНИЕ ВО ВРЕМЯ ОСТАНОВА Модуль А/D может функционировать во время режима останова. Для это источником синхронизации А/D преобразователя должен быть задан RC генератор (ADCS1 : ADCSO =11). Если источник синхронизации RC генера- тор, то модуль А/D начинает преобразование с задержкой на один командный цикл. Это позволяет выполнить команду останова (SLEEP) и начать А/D пре- образование при отсутствии цифрового шума. Когда преобразование будет завершено, бит GO/DNE сбрасывается и результат загружается в регистр ADRES. Если прерывание А/D разрешено, то устройство будет вызвано из останова. Если прерывание А/D не разрешено, то модуль А/D будет выклю- чен, хотя бит ADON остается установленным. Если задан другой источник синхронизации модуля А/D (не RC генера- тор), то по команде останова А/D преобразование будет прервано и модуль А/D выключен, хотя бит ADON остается установленным. Отключение модуля А/D снижает ток потребления устройства. 13.6 ОШИБКА И ТОЧНОСТЬ А/D ПРЕОБРАЗОВАНИЯ Входное аналоговое напряжение Рис. 13-8 Функция А/D преобразования Ошибка А/D преобразования обычно меньше чем ± 1 младший разряд при VDD = 5V ± 10 % и VREf = VDD. Точность А/D преобразова- теля монотонна во всем диапазоне рабочего напряжения (рис. 13-8). Разрешение и точность повышает- ся при снижении напряжения пи- тания (Vdd < 5 В) или когда опор- ное напряжение меньше питания (Vref < Vdd )• Максимальный ток утечки по входу - 5мкА. В системах, где частота уст- ройства низкая, для синхронизации модуля А/D предпочтительно ис- пользовать RC генератор. В высо- ко частотных системах TAd желательно получать от генератора устройства, но при этом не должно нарушаться минимальное значение TAD < 8 мкС. Это ре- комендуется, поскольку TAD формируется далеко от фазы синхронизации Tosc, что уменьшает влияние шума цифрового переключения. RC генератор работает не синхронно с TOsc. поэтому снижение влияния цифрового шума не 5» 131
Глава 13 PIC16C7X возможно. При наличии многих активных контактов I/O точность преобразо- вания может снижаться из-за цифрового шума переключения на выводах. В системах, где А/D преобразование выполняется в режиме останова, источником синхронизации должен быть RC генератор. В этом режиме циф- ровой шум отсутствует и А/D преобразование выполняется с высокую точ- ность. 13.7 ВОЗДЕЙСТВИЕ СБРОСА Сброс устройства устанавливает все регистры в исходное состояние. При этом модуль А/D отключается и любое преобразование прекращается. Значение, которое находится в регистре ADRES, не изменяется. После вклю- чения питания регистр ADRES содержит неопределенное значение. 13.8 ЗАПУСК СПЕЦИАЛЬНЫМ СОБЫТИЕМ ССР А/D преобразование может быть запущено специальным событием мо- дуля ССР2 (в PIC16C72 ССР1). Для этого биты ССР2МЗ:ССР2М0 (CCP2CON < 3:0 >) программируются 1011 и модуль А/D должен быть включен (ADON = "1"). При возникновении события устанавливается бит GO/DNE, запуская А/D преобразование, и сбрасывается счетчик таймера 1 для автоматического повторения А/D преобразования с минимальными непроизводительными за- тратами. Переключение соответствующих аналоговый входов должно осуще- ствляться так, чтобы оставалось время (2 TAd) на срабатывание устройства выборки и хранения перед запуском очередного преобразования специаль- ным событием. Если А/D модуль отключен (ADON = 0), то специальное событие будет игнорироваться модулем А/D, но счетчик таймера 1 будет сбрасываться. Примечание: В PIC16C72 запуск специального события выполняет модуль ССР1. 13.9 РЕКОМЕНДАЦИИ ПРИ ПОДКЛЮЧЕНИИ Если входное напряжение превышает значение напряжения питания (Vss или VDD) больше чем на 0.2 В, то результат преобразования находится за пре- делами выходных значений. При использовании на входе внешнего антиалайзингого RC фильтра, компонент R должен быть выбран так, чтобы общее сопротивление внешней цепи не превышало рекомендованное значение 10 кОм. Любые внешние ком- поненты (конденсатор, диод, и т.д.), подключенные к аналоговому входному контакту, должны иметь очень небольшую утечку тока. 132
PIC16C7X Глава 13 ADON = О Рис. 13-9 Блок-схема операции А/D преобразователя 133
Глава 14 PIC16C7X 14. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ МИКРОКОНТРОЛЛЕРА Для работы с приложениями в реальном масштабе времени микрокон- троллер должен иметь дополнительные возможности. Семейство PIC16CXX имеет возможности, позволяющие максимизировать надежность системы, минимизировать стоимость (поскольку они не нуждаются во внешних компо- нентах), снизить потребление с сохранением операционных режимов и обес- печить защиту программы от копирования. Эти возможности предполагают: • выбор режима генератора, • сброс: - сброс при включении питания (POR), - ' таймер включения питания (PWRT), - таймер запуска генератора (OST), - сброс при снижении питания (BOR), - сброс при ошибках контроля по четности памяти программ (только PIC16C715), • прерывания, • сторожевой таймер (WDT), • режим останова (SLEEP), • защита программы от копирования, • запись идентификатора • внутрисхемное последовательное программирование, Все микроконтроллеры семейства PIC16CXX имеют сторожевой таймер (Watch - Dog Timer (WDT)), который может быть включен или отключен ус- тановкой соответствующих разрядов в слове конфигурации. Сторожевой таймер работает от собственного RC генератора и сбрасывает микроконтрол- лер при зацикливании. Имеются два таймера, которые обеспечивают необходимые задержки при включении питания. Таймер запуска генератора (Oscillator Start-up Timer (OST)) обеспечивает задержку времени стабилизации колебаний кварцевого резонатора. Таймер включения питания (Power-up Timer (PWRT)) обеспечи- вает фиксированную задержку 72 мС состояния внутреннего сброса после включения питания. Эти два таймера позволяют в большинстве приложений обходится без внешних схем сброса. Режим останова (SLEEP) предназначен для снижения потребления пи- тания и режима отключения (останова). Пользователь может вызывать мик- роконтроллер из останова без внешнего сброса. Вызов может осуществляться сторожевым таймером или прерыванием. Режимы генератора доступны для обеспечения требований приложения. Использование RC генератора снижает стоимость системы, а использование 134
PIC16C7X Глава 14 режима LP с кварцевым резонатором обеспечивает снижение потребляемой мощности. 14.1 СЛОВО КОНФИГУРАЦИИ Разряды слова конфигурации могут программироваться (записью ’О') или оставаться не программированными (записью 'Г) для задания различной конфигурации устройства. Это слово отображено по адресу 2007 памяти про- граммы. Обратите внимание, что адрес 2007 - вне пространства памяти програм- мы пользователя. Фактически он принадлежит дополнительному пространст- ву памяти теста / конфигурации (адреса 2000h - 3FFFh), к которому можно обращаться только во время программирования. | сро | сро сро сро сро | сро | сро | Boden | сро сро |pwrt^wdte|fosci|fosco| о 13 Рис. 14-1 Слово конфигурации PIC16C710/711 (Адрес 2007h) Разряды 13-7 и 5-4: СРО: Защита программ® 1 = нет защиты 0 = вся память защищена, но 00h - 3Fh перезаписываема Разряд 6: BODEN: Сброс при снижении питания® 1 = BOR включен 0 = BOR отключен Разряд 3: PWRTE: Таймер включения питания® 1 = задержка внутреннего сброса после включения питания 0 = таймер включения питания отключен Разряд 2: WDTE: Сторожевой таймер 1 = WDT включен 0 = WDT отключен Разряды 1-0. FOSC1:FOSCO: Выбор режима генератора 11 = RC генератор 10 = HS генератор 01 = XT генератор 00 = LP генератор Примечания: 1. Сброс при снижении питания (BOR) автоматически запускает таймер включения питания (PWRT) независимо от значения бита PWRTE. Рекомендуется чтобы таймер включения питания был включен, если разрешен сброс при снижении питания. 2. Для того чтобы обеспечить защиту программы все биты СРО должны содержать одно и то же значение. 135
Глава 14 PIC16C7X [ - | . [ - [ - | | | | | - | CPO [PWRTI^\VDTE|FOSCl|FOSCo] 13 О Рис. 14-2 Слово конфигурации PIC16C71 (Адрес 2007h) Разряды 13-5: Зарезервированы, читаются как 'Г Разряд 4: СРО: Защита программ 1 = нет защиты О = вся память защищена, но 00h - 3Fh перезаписываема Разряд 3: PWRTE: Таймер включения питания 1 = задержка внутреннего сброса после включения питания О = таймер включения питания отключен Разряд 2: WDTE: Сторожевой таймер 1 = WDT включен О = WDT отключен Разряды 1-0. FOSC1:FOSCO: Выбор режима генератора 11 = RC генератор 10 = HS генератор 01 = XT генератор 00 = LP генератор | | | | | | | | | СР1 | сро |pwrt^wdte|fosci|fosco| 13 о Рис. 14-3 Слово конфигурации PIC16C73/74 (Адрес 2007h) Разряды 13-6: Зарезервированы, читаются как 'Г Разряды 5-4: СР1 : СРО: Защита программ 11 = нет защиты 10 = защита старшей половины памяти программ 01 - защита 3/4 частей старшей памяти программ 00 = вся память защищена Разряд 3: PWRTE: Таймер включения питания 1 = задержка внутреннего сброса после включения питания 0 = таймер включения питания отключен Разряд 2: WDTE: Сторожевой таймер 1 = WDT включен 0 = WDT отключен Разряды 1-0. FOSClzFOSCO: Выбор режима генератора 11 = RC генератор 10 = HS генератор 01 = XT генератор 00 = LP генератор 136
PIC16C7X Глава 14 | cpi | его | cpi | cpo | epi | cpo |mpeen(I|boden| cpi | cpo |pwrte|wdte|fosci|fosco| 13 0 Рис. 14-4 Слово конфигурации PIC 16C715/72/73A/74A/76/77 (Адрес 2007h) Разряды 13-8 и 5-4: CPI : CPO: Защита программ (2) 11 = нет защиты 10 = защита старшей половины памяти программ 01 = защита 3/4 частей старшей памяти программ 00 = вся память защищена Разряд 7: MPEEN: Контроль по четности ошибок в памяти*1’ 1 = контроля по четности разрешен 0 = контроля по четности запрещен Разряд 6: BODEN: Сброс при снижении питания*3' 1 = BOR включен 0 = BOR отключен Разряд 3: PWRTE: Таймер включения питания*31 1 = задержка внутреннего сброса после включения питания 0 = таймер включения питания отключен Разряд 2: WDTE: Сторожевой таймер 1 = WDT включен 0 = WDT отключен Разряды 1-0. FOSC1:FOSCO: Выбор режима генератора 11 = RC генератор 10 = HS генератор 01 = XT генератор 00 = LP генератор Примечания: 1. Только для PIC16C715, в остальных устройствах зарезервирован, читается как'Г 2. Для того чтобы обеспечить защиту программы все CPI : СРО долж- ны содержать одно и то же значение, 3. Сброс при снижении питания (BOR) автоматически запускает таймер включения питания (PWRT) независимо от значения бита PWRTE. Рекомендуется чтобы таймер включения питания был включен, если разрешен сброс при снижении питания. 14.2 КОНФИГУРАЦИИ ГЕНЕРАТОРА 14.2.1 РЕЖИМ ГЕНЕРАТОРА Микроконтроллеры семейства PIC16CXX имеют четыре различных ре- жима генератора. Для того чтобы выбрать один из этих четырех режимов,1 необходимо соответственно запрограммировать два бита конфигурации (F0SC1 : FOSCO): • LP низкочастотный кварцевый генератор 137
Глава 14 PIC16C7X • XT среднечастотный кварцевый генератор • HS высокочастотный кварцевый генератор • RC резистивно-емкостный генератор 14.2.2 ГЕНЕРАТОРЫ НА КВАРЦЕВЫХ РЕЗОНАТОРАХ В режимах XT, LP или HS для формирования колебаний используется кварцевый резонатор, который подключается к контактам OSC1/CLKIN и OSC2/CLKOUT (рис. 14-5). В генераторах PIC16CXX необходимо использо- Рис. 14-5 Генератор на кварцевом резонаторе 1. Добавочный резистор может требоваться для резонаторов с АТ срезом. 2. В PIC16C710/71/711 буфер находится на контакте OSC2, все другие устройства имеют буфер на контакте OSC1. вать кварцевые резонаторы с па- раллельным резо- нансом. В режи- мах . XT, LP или HS устройство может иметь внешний источник синхронизации, который подклю- чается к контакту OSC1/ CLKIN (Рис. 14-6). Примечания: 1. Значения конденсаторов С1 и С2 в таблицах 14-1 : 14-4 толь- ко для руководства при выборе; выбранные из диапазона должны быть идентичны. 2: Более высокая емкость увеличивает стабильность генератора, но также и увеличивает время запуска. 3: Так как каждый резонатор имеет собственные характеристи- ки, пользователь должен консультироваться с изготовителем резонатора при выборе соответствующих значений внешних компонентов. 4: Rs может требоваться в режимах HS и XT для того чтобы из- бежать возбуждения на гармониках. Таблица 14-1, Конденсаторы С1 и С2 для керамических резонаторов Режим Частота OSC1 OSC2 XT 455 кГц 68- 100 пФ 68- 100 пФ 2. 0 МГц 15 - 68 пФ 15 - 68 пФ 4.0 МГц 15-68 пФ 15-68 пФ HS 8.0 МГц 10 - 68 пФ 10 - 68 пФ 16.0 МГц 10 - 22 пФ 10-22 пФ 138
PIC16C7X Глава 14 Таблица 14-2, Конденсаторы С1 и С2 для кварцевых резонаторов Режим Частота OSC1 OSC2 LP 32 кГц 33 пФ 33 пФ 200 кГц 15 пФ 15 пФ XT 200 кГц 47 - 68 пФ 47 - 68 пФ 1 МГц 15 пФ 15 пФ 4 МГц 15 пФ 15 пФ HS 4 МГц 15 пФ 15 пФ 8 МГц 15-33 пФ 15-33 пФ 20 МГц ' 15-33 пФ 15-33 пФ Таблица 14-3. Конденсаторы С1 и С2 для керамических резонаторов (для PIC16C71)_________________________ Режим Частота OSC1 OSC2 XT 455 кГц 47 - 100 пФ 47 - 100 пФ 2. 0 МГц 15-68 пФ 15-68 пФ 4.0 МГц 15 - 68 пФ 15 - 68 пФ HS 8.0 МГц 15-68 пФ 15 - 68 пФ 16.0 МГц 10-47 пФ 10-47 пФ Таблица 14-4. Конденсаторы С1 и С2 для кварцевых резонаторов (для PIC16C71) ________________________________________ Режим Частота OSC1 OSC2 LP 32 кГц 33 - 68 пФ 33- 68 пФ 200 кГц 15-47 пФ 15-47 пФ XT 100 кГц 47 - 100 пФ 47- 100 пФ 500 кГц 20 - 68 пФ 20 - 68 пФ 1 МГц 15-68 пФ 15-68 пФ 2 МГц 15-47 пФ 15-47 пФ 4 МГц 15 - 33 пФ 15-33 пФ HS 8 МГц 15-47 пФ 15-47 пФ 20 МГц 15-47 пФ 15-47 пФ 139
Глава 14 PIC16C7X 14.2.3 ВНЕШНИЕ ГЕНЕРАТОРЫ НА КВАРЦЕВОМ РЕЗОНАТОРЕ От внешнего генератора Рис. 14-6 Подключение внешнего генератора В качестве внешнего генера- тора может быть использована простая схема генератора с квар- цевым резонатором на ТТЛ - ло- гике. Внешние генераторы обес- печивают широкий рабочий диа- пазон и лучшую стабильность. Могут использоваться два типа генераторов с кварцевыми резонаторами: с последовательным или с парал- Рис. 14-7 Схема внешнего генератора на резонаторе с параллельным резонансом лельным резонансом. На рис. 14-7 представлена схема генератора на резонаторе с параллель- ным резонансом. Схема разработана для работы на основной частоте кри- сталла. Инвертор 74AS04 выполняет сдвиг фазы на 180°, которого требует кварцевый резонатор с параллельным резонан- сом. Резистор 4.7 кОм обеспечивает отрица- тельную обратную связь для стабильности. По- тенциометр 10 кОм сме- щает 74AS04 в линейную область. На рис. 14-8 пред- К другим Рис. 14-8 Схема внешнего генератора на резонаторе с последовательным резонансом ставлена схема генерато- ра на резонаторе с после- довательным резонансом. Эта схема также работает на основной частоте кри- сталла. Инверторы вы- полняют сдвиг фазы на 180°. Резисторы 330 кОм обеспечивают отрица- тельную обратную связь и смещают инверторы в линейную область. 140
PIC16C7X Глава 14 14.2.4 RC ГЕНЕРАТОР В приложениях, не требующих временной стабильности, предлагается RC генератор, который позволяет снизить стоимость устройства. Частота RC генератора определяется значением резистора (Rext) и конденсатора (Cext), а также напряжением питания и температурой. Частота генератора будет изме- нится от модуля к модулю из-за разброса параметров компонентов. На рис. 14-9 представлена схема RC генератора. При значениях Rext ниже 2.2 кОм генератор может стать неустойчивым или останавливаться полностью. При очень высоких значениях Rext (например 1 МОм) генератор становится чув- ствительным к шуму, влажности и утечкам. Таким образом рекомендуется выбирать значения Rext в диапазоне 3-100 кОм. Хотя генератор может функционировать без внешнего конденсатора (Cext = 0 пФ), для улучше- ния стабильности и сниже- ния шума рекомендуется использовать емкость более 20 пФ. При использовании малой внешней емкости или без нее частота колебания может сильно изменятся за счет емкости монтажа или емкости выводов. В режиме RC генера- тора на контакте OSC2ICLKOUT формируется частота генератора, разделенная на 4, которая может использоваться для синхронизации других устройств. 0SC1 Внутрення частота PIC16CXX OSC2/CLKOUT Vdd Rext^ Cext Vss Fosc/4 Рис. 14-9 Схема RC генератора 14.3 СБРОС Микроконтроллеры PIC16CXX имеют различные виды сброса: • сброс при включения питании (POR), • внешний сброс (MCLR) в нормальном режиме, • внешний сброс (MCLR) в режиме останова, • сброс от сторожевого таймера (WDT) в нормальном режиме, • сброс при снижении питания (BOR) (только PIC 16С710/711 /715/72/73А/74А/76/77). • сброс при ошибках контроля по четности памяти программ (только PIC16C715) 141
Глава 14:PIC16C7X На некоторые регистры не воздействуют любые виды сброса, их состоя- ние неопределенно после POR и не изменяется при любых других сбросах. Но большинство регистров сбрасывается к "исходному состоянию" при включении питания (POR), по внешнему сбросу (MCLR) и по сбросу от WDT в нормальном режиме, по внешнему сбросу (MCLR) в режиме останова и сбросу при снижении питания (BOR). Сброс от WDT в режиме останова не воздействует на регистры, так как выход из режима останова рассматривается как возобновление нормальных операции. Биты ТО и PD устанавливаются или сбрасываются при воздействии различных видов сброса как показано в таблицах 14-7 : 14-9. Эти биты могут используются программным обеспече- нием, для того чтобы определить характер сброса. Упрощенная структурная схема цепей сброса представлена на рис. 14-10. На контакте MCLR в PIC16C710/711/715/72/73А/74А/76/77 установлен фильтр, который сглаживает малые пульсации. Необходимо отметить, что сброс WDT игнорируется когда на контакте MCLR низкий уровень. Рис. 14-10 Упрощенная структурная схема цепей сброса 1. RC генератор не связан контактом CLKIN. 2. Сброс при снижении питания только у PIC16C710/711/71572/73А/ 14ЬЛЫТ1. 3. Сброс при ошибках контроля по четности памяти программ только у PIC16C715. 4. См. таблицы 14-5 и 14-6 для определения времени задержки. 142
PIC16C7X______________________________________________ Глава 14 14.3.1 СБРОС ПРИ ВКЛЮЧЕНИИ ПИТАНИЯ (POR) Импульс сброса при включении питания (POR) генерируется внутри кристалла, когда напряжение питания VDD повышается до уровня 1,5 В - 2,1 В. Преимущество по отношению к POR имеет только внешний сброс по кон- такту MCLR при помощи внешних компонентов, подключенных к VDD. Ис- пользование сброса при включении питания позволяет обойтись без внешних RC компонентов. Когда устройство начинает нормальную работу (выходит из условия сброса), эксплуатационные параметры устройства (напряжение, частота, тем- пература, ...) должны быть в норме. Если эти условия не выполнены, устрой- ство должно быть задержано в сбросе, пока эксплуатационные режимы не установятся. Сброс при снижении питания может использоваться для контро- ля условия запуска. 14.3.2 ТАЙМЕР ВКЛЮЧЕНИЯ ПИТАНИЯ (PWRT) Таймер включения питания (PWRT) обеспечивает фиксированную за- держку импульса сброса на 72 мС при включении питания. Таймер включе- ния питания функционирует от своего внутреннего RC генератора. Устройст- во остается в состоянии сброса пока PWRT активен. Задержка PWRT позво- ляет напряжению питания Vdd подняться до допустимого уровня. Таймер включения питания может быть включен или отключен битом конфигурации PWRTE. Задержка включения питания изменяется от микросхемы к микросхеме, а также зависит от напряжения питания VDd, температуры и модификации. 14.3.3 ТАЙМЕР ЗАПУСКА ГЕНЕРАТОРА (OST) Таймер запуска генератора (OST) обеспечивает задержку сигнала сброса на 1024 такта генератора (с входа OSC1) после окончания задержки PWRT. Таймер запуска генератора позволяет начать и стабилизировать работу гене- ратора. Задержка сигнала OST функционирует только для режимов XT, LP и HS и только при включении питания или при выходе из режима останова. 14.3.4 СБРОС ПРИ СНИЖЕНИИ ПИТАНИЯ (BOR) Сброс при снижении питания (BOR) может быть включен или отключен битом конфигурации BODEN, Если напряжение питания VDd падает ниже BVDd = 4,0 В (в пределах 3,8 В - 4,2В), то формируется сброс при снижении питания. Сброс не может завершиться, если VDd падает ниже 4,0 В. 143
Глава 14 PIC16C7X Устройство останется в состоянии сброса при снижении питания пока Vdd не станет выше BVDD. После чего запускается таймер включения питания и состояние сброса будет задержано еще на 72 мС. Если Vdd понижается ни- же BVdd во время работы таймера включения питания, то устройство возвра- тится в состояние сброса при снижении питания и таймер включения питания будет инициализирован. Когда Vdd превысит BVdd, таймер включения пита- ния выполнит задержку 72 мС и устройство вернется к нормальному режиму работы. Таймер включения питания всегда должен быть включен, если разрешен сброс при снижении питания. На рис. 14-11 представлены типовые времен- ные диаграммы сброса при снижении питания. 14.3.5 ВРЕМЕННАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СБРОСА При включении питания временная последовательность сброса следую- щая: после того как заканчивается импульс POR, формируется задержка PWRT, а затем активизируется OST. Общее время сброса изменяется в зави- симости от конфигурации генератора и состояния PWRT. Например, в режи- ме RC генератора с заблокированным PWRT не будет никакой задержки вре- мени вообще. На рис. 14-12, 14-13 и 14-14 представлены последовательности формирования импульса сброс при включении питания. Так как последовательности формирования сброса происходят от им- пульса POR и, если на входе MCLR низкий уровень остается достаточно дол- го, то время внутреннего сброса истечет. После установки высокого уровня на входе MCLR устройство начнет выполнение программы немедленно (Рис. 14-13). Это полезно при тестировании Целей или синхронизации более чем одного устройства PIC16CXX, работающих параллельно. В таблице 14-10 показаны состояния после сброса для некоторых функ- циональных регистров. 144
PIC16C7X Глава 14 Таблица 14-5.Задержка времени в различных ситуациях, PIC 16С71/73/74 Режим генератора Таймер включения питания Выход из останова PWRTE = 1 PWRTE = 0 XT, HS, LP 72 мс +1024 TOsc Ю24 Tosc Ю24 Tosc RC 72 мс - - Таблица 14-6.3адержка времени в различных ситуациях, PIC 16С710/711/715/72/73А/74А/76/7 7 Режим генератора Таймер включения питания Сброс при снижении питания Выход из останова PWRTE = 0 PWRTE = 1 XT, HS, LP 72mc+1024TOSc Ю24 Tosc 72мс+1024TOsc 1024 Tosc RC 72 мс - 72 мс - Внутренний сброс Рис. 14-12 Временная последовательность формирования сброса (на MCLR коротки импульс) Рис. 14-13 Временная последовательность формирования сброса (на MCLR длинный импульс) 145
Глава 14 PIC16C7X Рис. 14-14 Временная последовательность формирования сброса (MCLR подключен к VDD) Таблица 14-7. Биты состояния и их значение, PIC16C71/73/74 POR ТО PD 0 1 1 Сброс при включении питания 1 0 1 Сброс WDT 1 0 0 Вызов из останова WDT 1 U U Внешний сброс (MCLR) во время нормальной работы 1 1 0 Внешний сброс (MCLR) во время останова или прерывание для вызова из останова Обозначения: и = не изменяется, х = не определено Таблица 14-8. Биты состояния и их значение, PIC16C710/71 \тПЗКПА\1К>П1 POR BOR то PD 0 X 1 1 Сброс при включении питания 1 0 X X Сброс при снижении питания 1 1 0 1 Сброс WDT 1 1 0 0 Вызов из останова WDT 1 1 и U Внешний сброс (MCLR) во время нормальной работы 1 1 1 0 Внешний сброс (MCLR) bo время останова или прерывание для вызова из останова Таблица 14-9 Биты состояния и их значение, PIC16C715 PER POR BOR то PD 1 0 X 1 1 Сброс при включении питания 1 1 0 X X Сброс при снижении питания 1 1 1 0 1 Сброс WDT 1 1 1 0 0 Вызов из останова WDT 1 1 I u u Внешний сброс во время нормальной работы 1 1 1 1 0 Внешний сброс во время останова или прерывание для вызова из останова 0 1 1 1 1 Сброс при ошибке четности 146
PIC16C7X Глава 14 14.3.6 РЕГИСТР СОСТОЯНИЯ СБРОСА (PCON) Регистр состояния сброса PCON обычно содержит 2 бита; в зависимости от устройства число бит может изменятся. Разряд 0 отсутствует в PIC16C73 и PIC16C74. PIC16C715 имеет дополнительно разряды 2 и 7. PIC16C71 вообще не имеет регистра PCON. Разряд 0 - бит состояния BOR, сброс при снижении питания. Бит BOR - не определен после сброса при включении питания, поэтому он должен уста- навливаться программно и проверяться при последующих сбросах, чтобы определить, сброшен ли бит BOR, показывающий, что произошел сброс при снижении питания. Если сброс при снижении питания отключен (не установ- лен бит BODEN в слове конфигурации), то о состоянии бита BOR можно не заботится, так как в этом случае он не определен. Разряд 1 - бит состояния POR, сброс при включении питания. Бит POR сбрасывается только при включении питания и не изменяется при других сбросах. Пользователь должен установить этот бит после сброса при включе- нии питания. Для PIC16C715, разряд 2 - бит PER, сброс при ошибках контроля по четности памяти программ. Бит PER сбрасывается если обнаружены ошибки контроля по четности, он должен устанавливаться программным обеспечени- ем. Бит PER устанавливаться по сбросу при включении питания. Для PIC16C715 разряд 7 - бит MPEEN, управление контролем по четно- сти памяти программ. Бит MPEEN отражает состояние бита MPEEN в слове конфигурации. Бит MPEEN не изменяется при любых сбросах и прерываниях. Таблица 14-10. Состояние специальных регистров после сброса Условие Счетчик программ STATUS PCON (P1C16C73/74) PCON (P1C16C715) PCON (Р1С16С710/ 711/72/73А/ ИЬЛЫТГ) Сброс при включении питания 000h 0001 Ixxx 0- u— -lOx Ox MCLR во время нормальной работы 000h OOOu uuuu u. u— -uuu —- - uu MCLR во время останова 000h 0001 Ouuu u- u— -uuu - uu Сброс WDT 000h 0000 luuu u- u-—uuu uu Вызов из останова WDT PC+ 1 uuuO Ouuu u- u— -uuu uu Сброс при снижении питания OOOh 0001 luuu N/A u— -uuO uO Сброс при ошибке четности 000 h uuul Ouuu N/A u—- -Ouu N/A Прерывание для вызова из останова PC+1(I) uuul Ouuu u- u— -uuu - uu Обозначения: и = не изменяется, х = не определено, - = зарезервированный разряд, читается как 'О' Примечание: 1. Если при вызове из останова прерыванием бит GIE установлен, то в PC загружается адрес вектора прерывания (0004 h). 147
Глава 14 PIC16C7X 14.3.7 СБРОС ПРИ ОШИБКАХ КОНТРОЛЯ ПО ЧЕТНОСТИ (PER) PIC16C715 имеет биты контроля по четности, которые позволяют про- верить содержание памяти программы. Биты контроля по четности могут быть полезны для увеличения надежности системы. Имеются два разряда контроля по четности для каждого слова памяти программ. Разряды контроля по четности вычисляются операцией исклю- чающее ИЛИ разрядов слова памяти программ. Один разряд вычисляется, используя проверку на четность, а другой - проверку на нечетность. Если программа выполняется, то контроль по четности выполнен. Если ошибка обнаружена, то генерируется сброс и сбрасывается разряд 2 (флажок PER) в регистре PCON (логика ‘0’). Флажок PER может использоваться программ- ным обеспечением и формировать отказ. Однако нет никакой индикации от- носительно положения ошибки в памяти программ. Флажок PER может быть установлен программным обеспечением (логика ‘1’)- Контроль по четности задается пользователем во время программирования. Разряд 7 слова конфи- гурации, размещенного по адресу 2007h, может программироваться для от- ключения контроля по четности (запись ‘0’). Если бит оставлен не програм- мированным (равен ‘ 1 ’)> контроль по четности разрешен. Vdd __________ R R1 ________ ------MCLR с PIC16CXX I ---------------------- Рис. 14-15 Внешний сброс при включении питания (при медленном нарастании VDD) 1. Внешний сброс при включении питания требуется только при медленном нарас- тании напряжения питания Vdd. Диод D разряжает конденсатор С после отклю- чения напряжения питания VDd- 2. R < 40 кОм, падение напряжения на R не должно нарушать VIH. 3. R1 = ЮООм : 1кОм, ограничит текущий по входу MCLR от конденсатора С. Vdd MCLR Р1С16СХХ Рис. 14-16 Внешний сброс при снижении питания (вариант 1) 1. Эта схема активизирует сброс, когда Vqd ниже (Vz + 0,7V) где Vz = напряжение на стабилитроне. 2. При использовании данной схемы внутренний сброс при снижении пита- ния должен быть отключен. 3. Номиналы резисторов должны кор- ректироваться под характеристику транзистора. 148
PIC16C7X Глава 14 Рис. 14-17 Внешний сброс при снижении питания (вариант 2) Данная схема менее дорогая, но и менее точная. Транзистор Q1 открывается, когда VDD - ниже некото- рого уровня, который равен: V0Dx R1/(R1 + R2) = 0.7В 14.4 ПРЕРЫВАНИЯ Семейство PIC16C7X имеет 12 источников прерывания. Регистр управления прерываниями (INTCON) содержит флажки инди- видуальных запросов прерывания, маски индивидуальных прерываний и бит общего разрешения прерываний Примечание: Индивидуальные флажки прерываний устанавливаются неза- висимо от состояния соответствующих разрядов маски или бита GIE. Общее разрешение прерываний осуществляется установкой бита GIE (INTCON <7>), при этом разрешаются все немаскированные прерывания или отключаются все прерывания, если бит сброшен. Если общие прерывания разрешены и разряд маски установ- лен, то после установки флажка выдается вектор прерывания. Ин- дивидуальные прерывания могут быть заблокированы соответст- вующими битами маски в различ- ных регистрах. Индивидуальные биты маски прерывания устанавли- ваются независимо от состояния бита GIE. После сброса бит GIE также сбрасывается. Возврат из прерывания осуществляется командой RETFIE, которая за- вершает подпрограмму обработки прерывания и устанавливает бит GIE, раз- решая прерывания. 149
Глава 14 PIC16C7X Флажки прерываний: от контакта RB0/INT, по изменению состояния порта RB и переполнения TMR0 и их маски находятся в регистре INTCON. Флажки прерываний устройств ввода / вывода находятся в специальных реги- страх PIR1 и PIR2, а соответствующее маски прерываний - в регистрах PIE1 и PIE2. Общее разрешение прерываний и разрешение прерываний от устройств ввода / вывода находится в регистре INTCON. Когда возникает прерывание, бит GIE сбрасывается, чтобы запретить вложенные прерывания; адрес возврата помещается в стек и в PC загружается адрес вектора 0004h. В программе обработки прерывания должен опреде- ляться источник(и) прерывания с помощью опроса флажков прерываний. Об- работанные флажки. прерываний должны быть сброшены программой перед новым предоставлением прерываний, для того чтобы избежать рекурсивных прерываний. Индивидуальные флажки прерываний устанавливаются незави- симо от состояния соответствующих разрядов маски или бита GIE. Пробуяедение из "^режима останова Рис. 14-19 Логика прерываний Устройство TO1F 1NTF RB1F PSP1F AD1F RC1F TX1F SSP1F CCPI1F ГМР2П FMR1U CCP2IF Р1С16С715 есть есть есть - есть - - - - - - Р1С16С72 есть есть есть - есть - - есть есть есть есть есть Р1С16С73 есть есть есть - есть есть есть есть есть есть есть есть Р1С16С73А есть есть есть - есть есть есть есть есть есть есть есть PIC16C74 есть есть есть есть есть есть есть есть есть есть есть есть Р1С16С74А есть есть есть есть есть есть есть есть есть есть есть есть PIC16C76 есть есть есть есть есть есть есть есть есть есть есть есть Р1С16С77 есть есть есть есть есть есть есть есть есть есть есть есть Для внешних событий, вызывающих прерывание (типа прерывания от контакта INT или прерывания по изменению состояния PORTB), время за- держки прерывания составляет три или четыре цикла команды. Точное время задержки зависит от того, когда происходит событие, вызывающее прерыва- 150
PIC16C7X Глава 14 ние (Рис. 14-20). Время задержки одинаково для одно- и двух цикловых ко- манд. Примечание: Только для PIC16C71/73/74. Если прерывание происходит од- новременно с командой запрещения общего прерывания (сброс бита GIE), то бит GIE снова может быть установлен программой обработки прерывания (командой RETFIE). События при кото- рых это может произойти: 1. Команда сбрасывает бит GIE, в то время когда прерывание подтверждено. 2. Программа переходит к вектору прерывания и выполняет подпрограмму обработки прерывания. 3. Программа обработки прерывания завершается с выполнени- ем команды RETFIE. При этом бит GIE устанавливается (прерывания разрешаются), и программа возвращается к ко- манде, при которой, как предполагалось, прерывания должны быть запрещены. Выполнение следующей последовательности гарантирует, что общие прерывания запрещены: LOOP BCF INTCON, GIE BTFSC INTCON, GIE GOTO LOOP ; Запрещение прерываний ; Прерывания запрещены? ; Если нет, то повторить снова ; Да, продолжить программу ; Q1 | О2| 03 | Q4 ; Q1 | Q2J 03 | Q4 I Q1 | 021 03 t 04 01 | 021 03 | 04 01 | 021 03 | 04 0SC1 CLKOUT (3) ( Контакт INT i- Флаг INTF 1 (INTC0N<1>) ; Бит GIE г (INTC0N<7>) . поток команд' PC < Выбираемая ( ; команда ) : Выполняемая ( ! команда т j___! i________г~ ig) ; ______Задержкагрерывания (?) PC ~Х PV+1 'У Команда (PC) ; Команда (PC+1) ; Команда (РС-1) ; Команда(РС) ; РС+1 у ~0UU4h-------------X— ииож — ; Команда (0004 h) ; Команда (0005h) Холостой цикл ; Холостой цикл : Команда (0004 h) Рис. 14-20 Временная диаграмма прерывания от контакта INT 1. Контроль состояния флажка INTF осуществляется на каждом такте Q1. 2. Время задержки прерывания = 3-4 TCY, где Тсу = командный цикл. Время задержки одинаково для одно и двух цикловых команд. 3. CLKOUT является выходом только в RC режиме генератора. 4. INTF может быть установлен в любое время в течение циклов Q4-Q1. 151
Глава 14 PIC16C7X 14.4.1 ВНЕШНЕЕ ПРЕРЫВАНИЕ INT Внешнее прерывание по контакту RB0/INT вызывается передним фрон- том сигнала, если установлен бит INTEDG (OPTION <6>), или задним фрон- том, если бит INTEDG сброшен. Когда соответствующий фронт появляется на контакте RB0/INT, то устанавливается флажок INTF (INTCON <1>). Пре- рывание может быть заблокировано сбросом разряда маски INTE (INTCON <4>). Флажок INTF должен быть сброшен программой обработки прерывания перед новым предоставлением этого прерывания. Прерывание INT может вызывать процессор из режима останова, если бит INTE был установлен до начала режима останова. Состояние бита общего разрешения прерывания (GIE) определяет: выполнит или нет процессор переход к вектору прерывания после пробуждения. 14.4.2 ПРЕРЫВАНИЕ TMRO Переполнение регистра TMRO (переход от FFh к 00h) устанавливает флажок TOIF (INTCON <2>). Прерывание можно разрешить / запретить уста- новкой / сбросом разряда маски TOIE (INTCON <5>). 14.4.3 ПРЕРЫВАНИЕ ПО ИЗМЕНЕНИЮ СОСТОЯНИЯ PORTB Изменение состояния сигналов на контактах PORTB <7:4> устанавлива- ет флажок RBIF (INTCON <0>). Прерывание можно разрешить / запретить установкой / сбросом разряда маски RBIE (INTCON <4>). Примечание: Только для PIC16C71/73/74. Если изменение состояния на кон- такте I/O происходит одновременно с операцией чтения, которая выполняется в начале такта Q2 командного цикла, то флажок прерывания RBIF не будет установлен. 14.5 СОХРАНЕНИЕ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ При возникновении прерывания в стеке сохраняется только значение PC для возврата. Пользователь должен предусмотреть в программном обеспече- нии сохранение при входе и восстановление при выходе программы обработ- ки прерывания важных для продолжения программы регистров: обычно ак- кумулятора (регистр W) и регистра состояния (STATUS). На примере 14-1 показано как выполнить сохранение в памяти и восста- новление регистров W и STATUS для PIC16C710/71/711/715. На примере 14- 2 показано как выполнить сохранение в памяти и восстановление регистров W, STATUS и PCLATH для PIC16C72/73/73A/74/74A/76/77. Регистр пользо- 152
PIC16C7X Глава 14 вателя WTEMP должен быть определен в обоих банках, причем смещение от базового адреса банка должно быть одинаковыми (то есть, если W_TEMP в банке 0 определен в 0x20, то в банке 1 должен быть определен в ОхАО); ре- гистр пользователя STATUS TEMP должен быть определен в банке 0. Пример 14-1. Сохранение регистров W и STATUS (PIC 16С710/71/711/715) MOVWF W_TEMP ; Сохранить регистр W SWAPF STATUS, W ; Переслать STATUS в W MOVWF STATUS_TEMP; Сохранить регистр STATUS ; Программа обработки прерывания SWAPF STATUS_TEMP,W ; Переслать STATUS в W MOVWF STATUS ; Восстановить STATUS SWAPF W_TEMP, F ; Перестановка W_TEMP SWAPF W_TEMP, N ; Восстановить W Пример 14-1. Сохранение регистров W, STATUS и PCLATH (PIC 1 MOVWF W_TEMP ; Сохранить регистр W SWAPF STATUS,W ; Переслать STATUS в W CLRF STATUS ; Установит обращение к банку 0 MOVWF STATUS_TEMP ; Сохранить регистр STATUS MOVF PCLATH, W ; Только при использовании страниц 1, 2 й 3 MOVWF PCLATH_TEMP ; Сохранить регистр PCLATH CLRF PCLATH ; Установит обращение к странице 0 MOVF FSR, W ; Переслать FSR в W MOVWF FSR_TEMP ; Сохранить регистр FSR ; Программа обработки прерывания MOVFPCLATH_TEMP, W ; Переслать PCLATH в W MOVWF PCLATH ; Восстановить PCLATH SWAPF STATUS_TEMP,W ; Переслать STATUS в W MOVWF STATUS ; Восстановить STATUS (установит ; обращение к исходному банку) SWAPF W_TEMP,F ; Перестановка W_TEMP SWAPF W_TEMP,W ; Восстановить W 14.6 СТОРОЖЕВОЙ ТАЙМЕР (WDT) Сторожевой таймер функционирует от своего RC генератора, который не требует никаких внешних компонентов. Этот RC генератор функционирует не зависимо от основного генератора на контактах OSC1/CLKIN и OSCI/CLFCN. Это означает, что WDT функционирует в режиме останова по- сле команды SLEEP. Окончание счета WDT в процессе выполнения про- 153
Глава 14 PIC16C7X Частота синхронизации таймера О WDT Рис. 14-21 Структурная схема сторожевого таймера граммы, генериру- ет сброс устройства (сброс от стороже- вого таймера). Ес- ли устройство на- ходится в режиме останова, то окон- чание счета WDT пробуждает уст- ройство для про- должения про- граммы. Если бит WDTE в слове конфигурации сброшен, то WDT отключен. Команды CLRWDT и SLEEP сбрасывают WDT и предделитель, если он назначен к WDT, предотвращают окончание счета и условие формирования сброса устройства. Бит ТО в регистре STATUS будет сброшен после окончания счета сто- рожевого таймера. 14.6.1 ПЕРИОД WDT WDT имеет номинальный период счета 18 мС (без предделителя). Пе- риод счета зависит от температуры, напряжения питания VDD и может изме- нятся в зависимости от модификации и партии устройств. Если требуется бо- лее длительный период счета, то, установкой соответствующих разрядов ре- гистра OPTION в программном обеспечении, к WDT может быть подключен предделитель с коэффициентом деления до 1:128. Таким образом, период счета может быть увеличен до 2,3 с. 14.6.2 РЕКОМЕНДАЦИИ ДЛЯ ПРОГРАММИРОВАНИЯ WDT Необходимо принимать во внимание что даже при самых плохих усло- виях (Vdd = min, температура = max, максимальный коэффициент деления предделителя WDT) длительность периода счета WDT будет несколько се- кунд. Примечание: При выполнении команды CLRWDT, WDT и предделитель, подключенный к нему, сбрасываются, но если предделитель не подключен к WDT, то его значение не изменится. 154
PIC16C7X Глава 14 14.7 РЕЖИМ НИЗКОГО ПОТРЕБЛЕНИЯ (ОСТАНОВ) Режим низкого потребления или останов устанавливаются после выпол- няя команды SLEEP. При этом сторожевой таймер (если он включен) будет сброшен, но про- должит функционировать; бит PD (STATUS <3>) сбрасывается; бит ТО (STATUS <4>) устанавливается, а драйвер генератора отключается. Порты I/O сохраняют состояние, которое они имели до выполнения команды SLEEP. Для снижения потребляемого тока в режиме останова необходимо, что- бы на всех контактах I/O были установлены уровни, при которых внешние схемы не потребляют ток из контакта I/O. Для этого необходимо выключить А/D, отключить внешнюю синхронизацию. Все контакты I/O, которые явля- ются свободными входами (находятся в третьем состоянии), должны быть подключены внешним резистором к высокому или низкому уровню для из- бежания токов переключения плавающих входов. Вывод T0CKI для снижения потребления также должен быть определен. Контакты PORTB могут быть подтянуты к высокому уровню внутренними ключами. Контакт MCLR должен быть подтянут к высокому логическому уровню (Vjhmc)- 14.7.1 ВЫХОД ИЗ РЕЖИМА ОСТАНОВА Устройство может выходить из режима останова одним из следующих событий: 1. Внешний ввод сброса на контакт MCLR. 2. Сброс от сторожевого таймера (если WDT включен). 3. Прерывания от контакта INT при изменении состояния порта В и пре- рывания от некоторых периферийных устройств. Внешний сброс MCLR вызовет сброс устройства. Все другие события рассматриваются как вызов для продолжения выполнения программы. Биты PD и ТО в регистре STATUS могут использоваться для определения причины сброса устройства. Бит PD устанавливается при включении питания и сбра- сывается по команде SLEEP. Бит ТО сбрасывается, если окончание счета WDT вызывает пробуждение. Следующие прерывания от периферийных устройств могут пробуждать устройство из режима останова: 1. TMR1 - таймер 1 должен работать в асинхронном режиме. 2. SSP - при обнаружении условий начала и окончания. 3. SSP - от приемника и передатчика в режиме ведомого (SPI/I2C). 4. ССР - в режиме накопления. 5. Чтение или запись ведомого параллельного порта. 155
Глава 14 PIC16C7X 6. По концу преобразования А/D (если источник синхронизации RC ге- нератор). 7. Вызов специального события (таймер 1 в асинхронном режиме, ис- пользуется внешняя синхронизация). 8. USART от ТХ или RX (в синхронном режиме ведомого). Остальные периферийные устройства не могут генерировать прерыва- ния, так как в режима останова отсутствует синхронизация. После выполнения команды SLEEP выбирается следующая команда (PC + 1). Для пробуждения устройства прерыванием соответствующее прерыва- ние должно быть разрешено. Пробуждение не зависит от состояния бита GIE. Если бит GIE сброшен (прерывания запрещены), то после пробуждения уст- ройство продолжает выполнение программы с команды, следующей за ко- мандой SLEEP. Если бит GIE установлен (прерывания разрешены), то уст- ройство выполняет команду, следующую за командой SLEEP, а затем выпол- няет переход к адресу вектора прерывания (0004h). В. случаях, когда выпол- нение следующей после SLEEP команды не желательно, после команды SLEEP пользователь должен поставить команду NOP. 14.7.2 ВЫЗОВ ИЗ РЕЖИМА ОСТАНОВА ПРЕРЫВАНИЕМ , Когда прерывания запрещены (GIE сброшен), любой разрешенный ис- точник прерывания после установки флажка вызовет одно из следующих дей- ствий: • если прерывание происходит перед выполнением команды SLEEP, то команда SLEEP завершится как NOP, то есть WDT и предделитель WDT не будут сброшены, бит ТО не будет установлен, а бит PD не сброшен; • если прерывание происходит во время или после выполнения команды SLEEP, то команда SLEEP будет выполнена полностью, но устройство выйдет из режима останова, то есть WDT и предделитель WDT будут сброшены, бит ТО будет установлен, а бит PD сброшен. Даже если флажки были проверены перед выполнением команды SLEEP, может возникнуть ситуация, когда флажок устанавливается прежде чем команда SLEEP завершается. Чтобы определить выполнена ли команда SLEEP, необходимо проверить бит PD. Если бит PD установлен, то команда SLEEP была выполнена как NOP. Чтобы быть уверенным, что WDT сброшен, перед командой SLEEP должна быть выполнена команда CLRWDT. WDT сбрасывается, когда уст- ройство выходит из режима останова независимо от источника пробуждения. 156
PIC16C7X Глава 14 : Q1| Q21 оз| CM' Q11 021 Q3 104 ; QI I Q2t Q3 I 04 : Q11 Q21 СЗI Q4; CLKDUT(4)^ Контаст INT > Т0Щ2) Флаг INTF • (INTC0N<1>) - Бит ,— (INTC0N<7>), ПОТОК КОМАНД Залерия ,,, прерыкэмя '' ------ Процессор t рехмме останом гс it pc ~j pc-h if Выбираема* (' „ _ ’ ' иланда b Kl>MiHW ! Команда (PC +1); ВиполнаемааГ' ~ rr. 1 команда Команда (PC-1). SLEEP i PC+2 PC+2 Команда (PC+2)|l PC + 2 Команда(РС +1) । Холостой цикл 0004 it 0005h j Команда (OOOTh)1 Команда (OOOSb)^ ' Холостой цикл > Команда (C004h)‘ Рис. 14-22 Выход из режима останова прерыванием 1. Принятые режимы генератора XT, HS нли LP. 2- Tost = 1024TOsc (задержка таймер запуска генератора). Для режима генератора RC этой задержки нет. 3. Бит GIE = 'Г, после пробуждения процессор переходит к подпрограмме прерыва- ния. Если GIE = 'О', продолжается выполнение программы. 4. CLKOUT в этих режимах генератора не является выходом, но здесь показан для наглядности временной диаграммы. 14.8 ЗАЩИТА ПРОГРАММЫ Если разряды защиты программы не запрограммированы, то память программ может быть считана для целей проверки. Примечание: На отладочных микрокристаллах (вариант JW) не рекомендует- ся защищать память программ. 14.9 ЗАПИСЬ ИДЕНТИФИКАТОРА Четыре ячейки памяти (адрес: 2000h - 2003h) предназначены для записи идентификатора. В данные ячейки памяти пользователь может записать кон- трольную сумму или другие числа кода идентификации. Эти ячейки не дос- тупны во время нормального выполнения программы, но читаемы и переза- писываемы во время программирования и контроля. Для записи идентифика- тора рекомендуется использовать только 4 младших разряда ячейки. 157
Глава 14 PIC16C7X 14.10 ВНУТРИСХЕМНОЕ ПРОГРАММИРОВАНИЕ Рис. 14-23 Типовое соединение для внутрисхемного программирования Микроконтроллеры семейства PIC16CXX могут программироваться по- сле установки на законченной плате приложения. Программирование выпол- няется по двумя линиям: синхронизация и данные, и трем линиям для пита- ния, земли и напряжения программирования. Это позволяет производить пла- ты с не программированными устройствами, а затем программировать мик- роконтроллер перед отправкой изделия и записывать самое современное или заказное программируемое обеспечение. Устройство переводится в режим программирования / контроля при ус- тановке низкого уровня на контактах RB6, RB7 и подъеме уровня на контак- те MCLR (VpP) от VIL до Уши- RB6 используется для синхро- низации программирования, а RB7 - для передачи данных программирования. Оба кон- такта RB6 и RB7 в этом режи- ме имеют на входе триггеры Шмитта. После сброса (для пере- вода устройства в режим про- граммирования / контроля), счетчик программ (PC) указы- вает на 00 ячейку памяти про- грамм. Затем в устройство за- писывается 6-разрядная коман- да. В зависимости от команды 14-ти разрядные данные про- граммы должны быть записаны или считаны из устройства. 158
PIC16C7X Глава 15 15. СИСТЕМА КОМАНД Каждая команда PIC16CXX представляет собой 14-разрядно‘е слово, разделенное на код операции, который определяет тип команды, и один или большее количество операндов, над которыми выполняются операции. В таб- лице 15-2 представлена система команд PICI6CXX. В таблице 15-1 показаны описания полей кода операции. Система команд высоко ортогональная и сгруппирована в три базовых категории: • байтовые операции, • операции над разрядами, • операции с константами (литералами) и операции управления В байтовых операциях "Г - указатель регистра файла, a "d" - указатель результата. Указатель регистра файла определяет, какой регистр файла дол- жен участвовать в операции. Указатель результата адресата определяет, куда должен быть помещен результат операции. Если "d" = 0, результат помещает- ся в регистр W. Если "d" - 1, результат помещается в регистр файла, опреде- ленный в команде. Байтовые операции 13 876 О КОД ОПЕРАЦИИ d f (регистр) d = О результат в W d = 1 результат в f f= 7-разрядный адрес регистра Операции над разрядами 13 10 9 7 6 0 | КОД ОПЕРАЦИИ Ь (разряд) f(регистр) b = 3-разрядный адрес разряда f = 7-разрядный адрес регистра Операции с константами и управления Общий формат 13 8 7 0 КОД ОПЕРАЦИИ к (константа) к 8-разрядное непосредственное значение Операции CALL и GOTO 13 1110 0 код ОПЕРАЦИИ к (константа) к = 11-разрядное непосредственное значение Рис. 15-1 Форматы команд В операциях над раз- рядами "Ь" - указатель раз- ряда, над которым выпол- няется операция, "Г указатель регистра файла, в котором находится опе- ранд и куда помещается результат. В операциях с кон- стантами и командах управления "к" представ- ляет собой восьми или одиннадцати разрядное постоянное число или зна- чение литерала (метка). Все команды выпол- няются за один командный цикл. Но если результат проверки условия истинен или счетчик программ из- менен в результате выпол- нения команды, то в этом случае команды выполня- ются за два цикла, второй цикл выполняется как опе- 159
Глава 15 PIO6C7X рация NOP. Один цикл команды состоит из четырех периодов генератора. Таким образом, для частоты генератора 4 МГц время выполнения команды 1 мкс. Если результат проверки условия истинен или счетчик программ изме- няется в результате выполнения команды, то время выполнения команды равно 2 мкс. Во всех примерах используется шестнадцатеричный формат данных: Oxhh Где: h - шестнадцатеричная цифра. Примечание: Для того чтобы поддерживать совместимость сверху вниз с бу- дущими изделиями PICI6CXX, использование команд TRIS и OPTION не рекомендуется. Таблица 15-1. Описание полей кода операции Поле Описание f адрес регистра (0x00 - 0x7F) W рабочий регистр (аккумулятор) b адрес разряда внутри 8 разрядного регистра к постоянное число или значение литерала (метка) X неопределенное значение (= 0 или 1) ассемблер генерирует код х — 0, рекомендуется для совместимости со всеми инст- рументальными средствами программного обеспечения d указатель результата; d = 0: результат сохраняется в W, d = 1: результат сохраняется в регистре f. по умолчанию значение d = 1 label имя метки TOS верхняя ячейка стека PC программный счетчик PCLATH регистр старших разрядов программного счетчика GIE бит общего разрешения прерываний WDT сторожевой таймер TO бит окончания счета сторожевого таймера PD бит сброса при включении питания dest результат регистр W или регистр файл [] опции 0 содержимое —> назначение < > указатель разряда G принадлежит множеству Курсив термин, определяемый пользователем (шрифт - Курсив) 160
PIC16C7X Глава 15 Таблица 15-2: Система команд PICI6CXX Мнемоника команды Операция Цик- лы Код операции MSb LSb Флаж- ки Приме- чание БАЙТОВЫЕ ОПЕРАЦИИ С РЕГИСТРОВЫМ ФАЙЛОМ ADDWF t,d Сложение (W + f-> d) 1 00 0111 dfff ffff C,DC,Z 1,2 ANDWF t, d Логическое "И" (W and f-> d) 1 00 0101 dfff ffff Z 1,2 CLRF f Обнулить f 1 00 0001 Ifff ffff Z 2 CLRW - Обнулить W 1 00 0001 Oxxx xxxx z COMF t,d Дополнение f (Логическое "HE") 1 00 1001 dffT ffff z 1,2 DECF t, d Декремент f 1 00 ООП dfff ffff z 1,2 DECFSZ t,d Декремент f, пропуск если "О" 1(2) 00 1011 dfff ffff 1,2,3 1NCF t, d Инкремент f | 1 00 1010 dfff ffff z 1,2 1NCFSZ t,d Инкремент f, пропуск если "0" 1(2) 00 1111 dfff ffff 1,2,3 1ORWF t, d Логическое "ИЛИ" (W or f-> d) 1 00 0100 dfff ffff z 1,2 MOVF t,d Пересылка ( f -> W ) 1 00 1000 dfff ffff z 1,2 MOVWF f Пересылка ( W ->f) 1 00 0000 Ifff ffff NOP - Пустая операция 1 00 0000 OxxO 0000 RLF t. d Сдвиг влево через перенос 1 00 1101 dfff ffff c 1,2 RRF t, d Сдвиг вправо через перенос 1 00 1100 dfff ffff c 1,2 SUBWF t, d Вычитание ( f - W -> d) 1 00 0010 dfff ffff C,DC,Z 1,2 SWAPF t, d Обменять полубайты f 1 00 1110 dfff ffff 1,2 XOFWF t,d Исключающее "ИЛИ" (W or f-> d) 1 00 оно dfff ffff z 1,2 БИТОВЫЕ ОПЕРАЦИИ С РЕГИСТРОВЫМ ФАЙЛОМ BCF t,b Обнулить бит b в f 1 01 ооьь bfff ffff 1,2 BSF t,b Установить бит b в f 1 01 Olbb bfff ffff 1,2 BTFSC t, b Тест бита b в f, пропуск если "0" 1(2) 01 10bb bfff ffff 3 BTFSS t, b Тест бита b в f пропуск если " 1" 1(2) 01 llbb bfff ffff 3 [ОПЕРАЦИИ С КОНСТАНТАМИ И КОМАНДЫ УПРАВЛЕНИЯ ADDLW k Сложение (k + W -> W) 1 11 111х кккк кккк C,DC,Z ANDLW k Логическое "И” (k and W -> W) 1 11 1001 кккк кккк Z CALL k Вызов подпрограммы k 2 10 Оккк кккк кккк CLRWDT - Обнулить WDT 1 00 0000 ОНО 0100 GOTO k Переход к адресу k 2 10 1ккк кккк кккк 1ORLW k Логическое "ИЛИ''(к or W - » W) 1 И 1000 кккк кккк Z MOVLW k Пересылка (k -> W) 1 11 ООхх кккк кккк RETFIE - Возврат из прерывания 2 00 0000 0000 1001 RETLW k Возврат с коистаитой 2 11 01хх кккк кккк RETURN - Возврат нз подпрограммы 2 00 0000 0000 1000 SLEEP Останов 1 00 0000 ОНО ООП TO,PD SUBLW k Вычитание (к - W -> W) 1 11 ИОх кккк кккк C,DCY XORLW k Исключающее "ИЛИ"(к хог 1 и 1010 кккк кккк Z W->W) Примечание 1: Если регистр I/O изменяется ( например, операцией: MOVF PORTB, 1), исход- ным значением будет величина, считанная непосредственно с контактов. На- пример, если в регистре данных - 'Г, а контакты конфигурированы как входы и внешнее устройство установит низкий уровень, то в регистр данных будут запи- саны 'О' 2: Если команда выполнена над регистром TMR0 (когда d - 1, результат записыва- ется в регистр таймера 0), то предделитель будет обнулен,. 3: Если счетчик программ (PC) изменяется или результат проверки условия исти- нен, то'Команда выполняется за два цикла. Второй цикл выполняется как коман- да NOP. б Звк. 1092 161
Глава 15 PIC16C7X 15.1 ОПИСАНИЕ КОМАНДЫ ADDLW Сложить аккумулятор с константой Синтаксис: Операнды: Операция: [label] ADDLW к 0<к<255 (W) + k-»(W) Воздействует на флажки: С, DC, Z Код операции: | 1 1 J 1 1 1 х | кккк | кккк | Описание: содержимое регистра W складывается с 8 разрядной константой 'к', результат помещается в регистр W Число слов: 1 Число циклов: 1 Пример: ADDLW 0x15 Перед операцией: W = 0x10 После операции: W = 0x25 ADDWF Сложить аккумулятор с регистром Синтаксис: [label] ADDWF f,d Операнды: 0<f< 127 ’ . ... d 6 [0, 1] ... Операция:........... . .. (W) + (f) -> (dest) Воздействует на флажки: С, DC, Z ‘ Код операции: 1 00 | 0 Г1 1 Г dfff | ffff 1 Описание: содержимое регистра W складывается с содержимым регистра , если’d' = 0, результат помещается в регистр W, если'd' = 1, результат помещается в регистр 'Г Число слов: 1 Число циклов: 1 Пример: ADDWF FSR, 0 ; Перед операцией: W =0x17 FSR = 0хС2 После операции: W = 0xD9 FSR = 0xC2 162
PIC16C7X Глава 15 ANDLW Логическое "И" аккумулятора и константы Синтаксис: Операнды: Операция: [label] ANDLW k 0<k<255 (W)andk->(W) Воздействует на флажки: Z Код операции: | 11 | 1001 | kkkk | kkkk | Описание: содержимое регистра W поразрядно объединяется по "И" . с 8 разрядной константой 'к', результат помещается в регистр W Число слов: 1 ' Число циклов: 1 Пример: ANDLW 0x5F Перед операцией: W = ОхАЗ После операции: W = 0x03 ANDWF Логическое "И" аккумулятора и регистра Синтаксис: [label] ANDWF f, d Операнды: 0<f<; 127 d e [0, 1] Операция: (W) and (f) -> (dest) Воздействует на флажки: Z Код операции: 1 00 1 0101 1 dfff ffff 1 Описание: содержимое регистра W поразрядно объединяется по "И" с содержимым регистра'f, если'd' '= 0 результат помещается в регистр W, Число слов: если'd' = 1 результат помещается в регистр Т 1 Число циклов: 1 Пример: ANDWF FSR, 1 Перед операцией: W =0x17 FSR = 0xC2 После операции: W =0x17 FSR = 0x02 6* 163
Глава 15____________________________________________PIC16C7X BCF Обнулить разряд в регистре Синтаксис: Операнды: [label] BCF f, b 0<f< 127 0<b<7 Операция: 0 —> (f <b>) Воздействует на флажки: не воздействует Код операции: 1 0 1 Г ООЬЬ | bfff | ffff J Описание: обнуляется разряд 'b' 9 регистре 'f Число слов: 1 Число циклов: 1 Пример: BCF FLAG_REG, 7 Перед операцией: FLAG REG = 0xC7 После операции: FLAG REG = 0x47 BSF Установить разряд в регистре Синтаксис: [label] BSF f, b Операнды: 0<f< 127 0<b<7 Операция: 1 ->(f<b>) Воздействует на флажки: не воздействует Код операции: 1 01 | Olbb | bfff | ffff Описание: устанавливается разряд *b' в регистре 'f Число слов: 1 Число циклов: 1 ' Пример: BCF FLAG_REG, 7 ; Перед операцией: FLAG REG = ОхОА После операции: FLAG_REG = 0x8А 164
PIC16C7X_______________________________________________Глава 15 BTFSC Проверить разряд в регистре, если = 0 - пропустить операцию Синтаксис: [label] BTFSC f, b Операнды: 0<!f< 127 0<b<7 Операция: пропуск, если (f <b>) = О Воздействует на флажки: не воздействует_________ Код операции: | 01 | ЮЬЬ | bfff | ffff | Описание: Если разряд 'b' в регистре Т = 'Г, то следующая команда выполняется. Если разряд 'Ь' в регистре Т, = 'О', то вместо следующей команды выполняется операция NOP Число слов: 1 Число циклов: 1(2) Пример: HERE BTFSC FLAG,1 FALSE GOTO PROCESS_CODE TRUE Перед операцией: PC = адрес HERE После операции: если FLAG <1> = 0 PC = адрес TRUE если FLAG <1> = 1 PC = адрес FALSE BTFSS Проверить разряд в регистре, если = 1 - пропустить операцию Синтаксис: [label] BTFSS f,b Операнды: 0<f<127 0<b<7 Операция: пропуск, если (f <b>) = 1 Воздействует на флажки: не воздействует_________ Код операции: 1 0 1 1 1 1 bb | bfff | ffff 1 Описание: Если разряд 'Ь' в регистре Т = 'О', то следующая команда выполняется. Если разряд 'Ь', в регистре 'f, = 'Г, то вместо следующей команды выполняется операция NOP Число слов: 1 Число циклов: Пример: 1(2) HERE BTFSS FLAG,1 FALSE GOTO PROCESS_CODE TRUE Перед операцией: PC = адрес HERE После операции: если FLAG <1> = 0 PC = адрес FALSE если FLAG <1> = 1 PC = адрес TRUE 165
Глава. 15 .__________________________________________PIC16C7X CALL Вызов подпрограммы Синтаксис: Операнды: Операция: [label] CALL k 0<k<2047 (PC) + 1 -> TOS, k-*PC<10:0> (PCLATH <4:3>) -> PC <12:11> Воздействует на флажки: не воздействует____________ Код операции: Описание: 1 10 1 Okkk kkkk | kkkk Переход к подпрограмме "к". Адрес возврата (PC + 1) помещается в стек. 11 разрядный непосредственный адрес загружается в младшие разряды PC <10:0>. Старшие разряды PC загружаются из PCLATH. Число слов: 1 Число циклов: 2 Пример: HERE CALL TRUE. Перед операцией: PC = адрес HERE После операции: PC = адрес TRUE TOS = адрес HERE + 1 CLRF Обнулить регистр Синтаксис: [label] CLRF. f Операнды: 0<f< 127 Операция: 00h-»(f) 1 ->Z Воздействует на флажки: Z Код операции: Описание: | 00 POOL | 1 fff | ffff | содержание регистра 'f обнуляется и устанавливается флажок Z Число слов: 1 Число циклов: 1 Пример: CLRF FLAG_REG Перед операцией: FLAG REG =» 0х5А После операции: FLAG REG = 0x00 Z= 1 166
PIC16C7X_______________________________________________Глава 15 CLRW Обнулить аккумулятор Синтаксис: [label] CLRW Операнды: нет Операция: 00h->( W) 1 ->Z Воздействует на флажки: Z Код операции: | 0 0 | 0 0 0 1 0 х х х | х х х X: | Описание: содержание аккумулятора обнуляется и устанавливается флажок Z Число слов: 1 Число циклов: 1 Пример: CLRW Перед операцией: W = 0х5А После операции: W = 0x00 Z= 1 CLRWDT Сброс сторожевого таймера Синтаксис: [label] CLRWDT Операнды: нет Операция: 00h -> WDT 0 -> предделитель WDT 1 ->ТО 1 ->PD Воздействует на флажки: ТО, PD Код операции: | 00 | 0000 | 0 110 | 0 100 | Описание: Сброс сторожевого таймера и предделителя, если он под- ключен к сторожевому таймеру Число слов: 1 Число циклов: 1 Пример: CLRWDT Перед операцией: счетчик WDT = ? После операции: счетчик WDT = 0x00 предделитель WDT = 0 ТО= 1 PD= 1 167
Глава 15_____________________________________________PIC16C7X COMF Дополнение регистра (логическое "НЕ") Синтаксис: [label] COMF f, d Операнды: 0<f< 127 d e [0, 1] Операция: (f) -> (dest) Воздействует на флажки: Z Код операции: | 00 | 1 00 1 1 dfff | ffff | Описание: содержимое регистра 'f инвертируется, если'd' = 0 - результат помещается в регистр W, если'd' = 1 - результат помещается в регистр 'f Число слов: 1 Число циклов: 1 Пример: COMF REG1,0 Перед операцией: REG1 =0x13 После операции: REG 1=0x13 W = ОхЕС DECF Декремент регистра Синтаксис: [label] DECF f, d Операнды: 0<f< 127 d e [0, 1] Операция: (f) - 1 —> (dest) Воздействует на флажки: Z Код операции: 1 0 0 | 00 11 | dfff | ffff | Описание: содержимое регистра Т уменьшается на 1, если'd* = 0 - результат помещается в регистр W, если'd' = 1 - результат помещается в регистр 'f Число слов: 1 Число циклов: 1 Пример: DECF CNT, 1 Перед операцией: CNT = 0x01 Z = 0 После операции: CNT = 0x00 Z= 1 168
PIC16C7X______________________________________________Глава 15 DECFSZ Декремент регистра, если результат = 0 - пропуск операции Синтаксис: [label] DECFSZ f, d Операнды: 0<f< 127 d e [0, 1] Операция: (f) - 1 -> (dest) если результат = 0 - пропуск операции на флажки: не воздействует Код операции: Описание: | 00 | 1011 1 dfff 1 ffff | содержимое регистра 'f уменьшается на 1, если'd' = 0 - результат помещается в регистр W, если 'd* = 1 - результат помещается в регистр Т, если результат * 'О', то следующая команда выполняется, если результат = 'О', то вместо следующей команды выполня- ется операция NOP Число слов: 1 Число циклов: 1(2) Пример: HERE DECFSZ CNT, 1 GOTO LOOP CONTINUE Перед операцией: PC = адрес HERE После операции: CNT = CNT - 1 если CNT = 0, PC = адрес CONTINUE если CNT * 0, PC = адрес HERE + 1 GOTO Безусловный переход Синтаксис: [label] GOTO k . Операнды: 0 < k < 2047 Операция: k—>PC<10:0> (PCLATH <4:3>) -> PC <12:11> Воздействует на флажки: не воздействует____________ Код операции: | 10 | Ikkk | kkkk | kkkk | Описание: Безусловный переход на "к". 11 разрядный непосредствен- ный адрес загружается в младшие разряды PC <10:0>. Старшие разряды PC загружаются из PCLATH. Число слов: 1 Число циклов: 2 Пример: HERE GOTO TRUE Перед операцией: PC = адрес HERE После операции: PC = адрес TRUE 169
Глава 15 PIC16C7X INCF Инкремент регистра Синтаксис: Операнды: Операция: Воздействует на флажки: [label] INCF f, d 0<f< 127 d e [0, 1] (f) + 1 -* (dest) Z Код операции: 00 | 1010 I dfff ffff | Описание: Число слов: Число циклов: Пример: содержимое регистра 'f увеличивается на 1, если’d* = 0 - результат помещается в регистр W, если'd' = 1 - результат помещается в регистр Т 1 1 INCF CNT, 1 Перед операцией: CNT = OxFF Z = 0 После операции: CNT = 0x00 Z= 1 INCFSZ Инкремент регистра, если результат = 0 - пропуск операции Синтаксис: [label] INCFSZ f, d Операнды: 0<f< 127 d e [0, Ц Операция: (f) + 1 -> (dest) если результат = 0 - пропуск операции Воздействует на флажки: не воздействует Код операций: | 00 | 1111’1 dfff | ffff | Описание: содержимое регистра 'f увеличивается на 1, если *d' = 0 - результат помещается в регистр W, если'd' = 1 - результат помещается в регистр 'f, если результат * 'О', то следующая команда выполняется, если результат = 'О', то вместо следующей команды выполня- ется операция NOP Число слов: 1 Число циклов: Пример: 1(2) HERE INCFSZ CNT, 1 GOTO LOOP CONTINUE Перед операцией: После операции: PC = адрес HERE CNT = CNT - 1 если CNT = 0, PC = адрес CONTINUE если CNT # 0, PC = адрес HERE + 1 170
Р1С16С7Х Глава 15 IORLW Логическое "ИЛИ" аккумулятора и константы Синтаксис: [label] IORLW k Операнды: 0 < k < 255 Операция: (W)ork->(W) Воздействует на флажки: Z i;. , Код операции: | 1 1 1 0 00 | kkkk • I kkkk Описание: содержимое регистра W поразрядно объединяется по "ИДИ" с 8 разрядной константой 'к1, < результат помещается в регистр W Число слов: 1. Число циклов: 1 Пример: IORLW 0x35 Перед операцией: W = 0x9А После операции: W = OxBF IORWF Логическое "ИЛИ" аккумулятора и регистра Синтаксис: [label] IORWF f, d Операнды: 0<f< 127 d ё [0, 1] Операция: (W) or (f) -> (dest) Воздействует на флажки: Z Код операции: | 00 | 0 1 00 | dfff | ffff | Описание: содержимое регистра W поразрядно объединяется по "ИЛИ" с содержимым регистраТ, если'd' - 0 результат помещается в регистр W, если'd' = 1 результат помещается в регистр Т Число слов: 1. Число циклов: 1 Пример: IORWF RESULT, 0 Перед операцией: RESULT = 0x13 W =0x91 После операции: RESULT = 0x13 W = 0x93 171
Глава 15 PIC16C7X MOVF Переслать регистр Синтаксис: [label] MOVF f, d Операнды: 0<f< 127 d e [0, 1] Операция: (f)-> (dest) Воздействует на флажки: Z Код операции: | 00 | 1 000 | dfff | ffff | Описание: если'd' = 0 - содержимое регистра 'f пересылается в регистр W, если'd' = 1 - значение остается в том же самом регистре и операция воздействует только на флажок Z Число слов: 1 Число циклов: 1 Пример: MOVF FSR, 0 Перед операцией: FSR = 0x91 W = 0x00 После операции: FSR = 0x91 W =0x91 MOVLW Загрузить константу в аккумулятор Синтаксис: [label] MOVLW k Операнды: 0 < k < 255 Операция: k—>(W) Воздействует на флажки: не воздействует Код операции: | 11 | 00xx | kkkk | kkkk Описание: в регистр W загружается 8 разрядная константа 'k'. -- • - не определенное значение транслируется как "0" Число слов: 1 Число циклов: 1 Пример: MOVLW 0х5А Перед операцией: W = 0х9А После операции: W = 0x5А 172
PICI6C7X______________________________________________Глава 15 MOVWF Пересылка аккумулятора в регистр Синтаксис: Операнды: Операция: [label] MOVWF f 0<f<127 (W) -> (f) Воздействует на флажки: не воздействует Код операции: | 00 | 0000 | Ifff 1 ffff 1 Описание: содержимое регистра W пересылается в регистр 'f Число слов: 1 Число циклов: 1 Пример: MOVWF OPTION_REG Перед операцией: OPTION REG = OxFF W = 0x4F После операции: OPTION REG = 0x4F W = 0x4F NOP Пустая операция Синтаксис: [label] NOP Операнды: нет Операция: нет операции Воздействует на флажки: не воздействует Код операции: Описание: Число слов: Число циклов: Пример: 1 00 | 0000 1 ОххО 1 0000 1 нет операции 1 , 1 NOP OPTION Загрузить регистр OPTION Синтаксис: Операнды: Операция: [label] OPTION нет (W) -> OPTION Воздействует на флажки: не воздействует Код операции: | 00 | 0000 | 0110 | 0010 Описание: Содержание регистра W загружается в регистр OPTION. Эта команда предназначена для совместимости программ с изделиями PIC16C5X . Число слов: 1 Число циклов: 1 Пример: Для поддержания совместимости сверху вниз в изделиях PICI6CXX, использование данной команд не рекомендуется 173
PIC16C7X RETFIE Возврат из прерывания Синтаксис: Операнды: Операция: Воздействует на флажки: [label] RETFIE нет TOS -> (PC), 1 -> GIE не воздействует Код операции: 00 | 0000 | 0000 100 1 Описание: Число слов: Число циклов: Пример: Возврат из прерывания. Верхняя ячейка стека выталкивается в PC. Общие прерывания разрешаются, устанавливается бит GIE (INTCON <7>). 1 2 RETFIE После операции: PC = TOS GIE = 1 RETLW Возврат из подпрограммы с константой Синтаксис: Операнды: Операция: . Воздействует иа флажки: [label] RETLW k 0 < k < 255 k->(W) TOS -> (PC) не воздействует КоД операции: 11 | 01xx | kkkk kkkk | Описание: Число слов: Число циклов: в регистр W загружается 8 разрядная константа 'к', верхняя ячейка стека выталкивается в PC. I 2 Пример: CALL- TABLE ; W содержит адрес элемента в таблице TABLE ADDWF PC RETLW kl RETLW k2 ;W = смещение ; Начало таблицы RETLW kn ; Конец таблицы Перед операцией: W = 0x07 После операции: W = содержимое к8 174
PIC16C7X -DjaBaJJ) RETURN Возврат из подпрограммы Синтаксис: [label] RETURN Операнды: нет Операция: TOS -> (PC), Воздействует на флажки: не воздействует Код операции: 1 00 1 0000 | 0000 | 1000 | Описание: Возврат из подпрограммы. Верхняя ячейка стека выталкивается в PC. Число слов: Число циклов: 1 ' • i! 2 Пример: RETURN После операции: PC = TOS RLF Синтаксис: Операнды: Операция: Циклический сдвиг регистра влево через перенос [label] RLF f, d 0<f< 127 d e [0, 1] r*—[ck Регистр "f" Воздействует на флажки: С_________' ___________ , Код операции: | 0 0 | 110 1 | dfff | ffff | Описание: содержимое регистра Т сдвигается на одинразряд влево через перенос, если *d* = О - результат помещается д регистр W, если'd'= 1 - результат помещается в регистр'f. Число слов: 1 Число циклов: 1 Пример: RLE REG1, 0 Перед операцией: REG 1 = 1110 0110 С =0 После операции: REG 1 = 1110 0110 W =1100 1100 С =0 175
Глава 15 PIC16C7X RRF Синтаксис: Операнды: Циклический сдвиг регистра вправо через перенос [label] RRF f, d 0<f< 127 Операция: Воздействует на флажки: С____________________________________________ Код операции: | 00 | 1100 | dfff | ffff | Описание: содержимое регистра 'f сдвигается на один разряд вправо через перенос, если'd' = 0 - результат помещается в регистр W, если *d' = 1 - результат помещается в регистр 'f Число слов: 1 Число циклов: 1 Пример: RRF REG1, 0 Перед операцией: REG1 = 1110 0110 С =0 После операции: REG 1 = 1110 0110 W =01110011 С =0 SLEEP Останов Синтаксис: [label] SLEEP Операнды: нет Операция: 00h -> WDT 0 —> предделитель WDT 1 ->ТО 0 —> PD Воздействует на флажки: ТО, PD Код операции: 1 0 0 1 0000 1 0 1 1 0 | 00 11 1 Описание: Процессор переходит в режим останова, генератор отклю- чается. Сторожевой таймер и предделитель, если он под- ключен к сторожевому таймеру, сбрасываются Число слов: 1 Число циклов: 1 Пример: SLEEP 176
PICI6C7X Глава 15 SUBLW Вычитание аккумулятора из константы Синтаксис: [label] SUBLW k Операнды: 0<k<255 Операция: k - (W) -> (W) Воздействует на флажки: C, DC, Z Код операции: I 11 | lllx | kkkk | kkkk | Описание: от 8 разрядной константы 'k' вычитается содержимое регистра W, результат помещается в регистр W Число слов: 1 Число циклов: 1 Пример 1: SUBLW 0x02 Перед операцией: W = 1 С=? z=? После операции: W = 1 ; результат - положительный С = 1 Z =0 Пример 2: Перед операцией: W = 2 После операции: W = 0 результат - нулевой С = 1 Z = 1 Пример 3: Перед операцией: W = 3 После операции: W = OxFF результат - отрицательный С =0 Z =0 177
Глава 15 _______________________________________________PIC16C7X SUBWF__________Вычитание аккумулятора из регистра____________________ Синтаксис: [label] SUBWF f, d Операнды: 0 < f < 127 d e [0, 1] Операция: (f) - (W) -> (dest) Воздействует на флажки: C, DC, Z ____________________________________ Код операции: | 00 | 0010 | dfff | ffff | Описание: от содержимого регистра 'f вычитается содержимое регистра W, если'd' = 0 - результат помещается в регистр W, если'd' = 1 - результат помещается в регистр 'f Число слов: 1 Число циклов: 1 Пример: SUBWF REG1, 1 Перед операцией: REG 1 = 3 W =2 С =? Z =? После операции: REG1 = 1; результат - положительный W =2 С = 1 Z =0 Пример 2: Перед операцией: REG1=2 W =2 После операции: REG1 = 0 результат - нулевой W =2 С = 1 Z = 1 Пример 3: Перед операцией: REG 1 = OxFF W =2 После операции: REG1 = ОхЕР;результат-отрицательный W =2 С =0 Z =0 178
PIC16C7X Глава 15 SWAPF Обменять полубайты регистра Синтаксис: [label] SWAPF f, d Операнды: 0<f<127 d e [0, 1] Операция: (f <3:0>) -> (dest <7:4>) (f <7:4>) —> (dest <3:0>) Воздействует на флажки: не воздействует Код операции: | 00 1 1110 | dfff 1 ffff 1 Описание: Меняются полубайты содержимого регистра 'f, если *d* = 0 - результат помещается в регистр W, если *d' = 1 - результат помещается в регистр 'f Число слов: 1 Число циклов: 1 Пример: SWAPF REG1, 0 Перед операцией: REG 1 = 0хА5 После операции: REGl=0xA5 W = 0х5А TRIS Загрузить регистр TRIS Синтаксис: [label] TRIS f Операнды: 0<f<7 Операция: (W) -> TRIS регистр f Воздействует на флажки: не воздействует Код операции: | 00 | 0000 | 0110 | Offf Описание: Содержание регистра W загружается в регистр TRIS. Эта команда предназначена для совместимости программ с изделиями PIC16C5X . Число слов: 1 Число циклов: Пример: 1 Для поддержания совместимости сверху вниз в изделиях PICI6CXX, использование данной команд не рекомендуется 179
15 PICI6C7X XORLW Исключающее "ИЛИ" аккумулятора и константы Синтаксис: [label] XORLW k Операнды: 0<k<255 Операция: (W) xor k —> (W) Воздействует на флажки: Z Код операции: | 11 | 1010 | kkkk | kkkk | Описание: содержимое регистра W поразрядно объединяется по функ- ции исключающее "ИЛИ" с 8 разрядной константой 'к', результат помещается в регистр W Число слов: 1 Число циклов: 1 Пример: XORLW OxAF Перед операцией: W = 0хВ5 После операции: W = Ох 1А XORWF Исключающее "ИЛИ" аккумулятора и регистра Синтаксис: [label] XORWF f, d Операнды: 0<f< 127 d e [0, 1] Операция: (W) xor (f) -> (dest) Воздействует на флажки: Z Код операции: | 00 | 0110 | dfff | ffff | Описание: содержимое регистра W поразрядно объединяется по функ- ции исключающее "ИДИ" с содержимым регистра 'f, если'd' = 0 - результат помещается в регистр W, если 'd' = 1 - результат помещается в регистр Т Число слов: 1 Число циклов: 1 Пример: XORWF REG, 1 Перед операцией: W = 0хВ5 REG = OxAF После операции: W = 0хВ5 REG = 0xlA 180
PIC16C7X Глава 16 16. ЭЛЕКТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ 16.1 ПРЕДЕЛЬНЫЕ ЭКСПЛУАТАЦИОННЫЕ ХАРАКТЕРИСТИКИ Диапазон рабочих температур Диапазон температур хранения (транспортирования) Напряжение на контакте VDD относительно VSs Напряжение на контакте MCLR относительно Vss (2) Напряжение на контакте RA4 относительно Vss Напряжение на любом контакте относительно Vss -( (за исключением VDD, MCLR, и RA4) Общая рассеиваемая мощность(|) Максимальный ток через контакт VSs Максимальный ток через контакт VDD Ограничение входного тока I[K (Vr < 0 или V (> VDD) Ограничение выходного тока 10к (Уо < 0 или Vo > VDD) Макс, выходной вытекающий ток по любому контакту I/O Макс, выходной втекающий ток по любому контакту I/O Макс, выходной вытекающий суммарный ток портов А, В и Е Макс, выходной втекающий суммарный ток портов А, В и Е Макс, выходной вытекающий суммарный ток портов С и D Макс, выходной втекающий суммарный ток портов С и D -55 4-+ 125°С -65 + + 150°С -0.3++7.5 В 0 + + 14В 0 + + 14В 1.0 Вт 300 мА 250 мА + 20 мА ± 20 мА 25 мА 25 мА 200 мА 200 мА 200 мА 200 мА -0.3 + (VDD + 0.3)В Выход параметров за указанные пределы может привести к повреждению устройства. Работа устройства в течение длительного срока на границах до- пустимых значений снижает его надежность. Примечания: 1. Общая рассеиваемая мощность вычисляется следующим об- разом: Pdis - VDd х {Ido - 2Лон} + X{(Vdd - VOh) x IOh} + S(Vol x Iol) 2. Снижение напряжения на контакте MCLR ниже уровня Vss может вызывать входной ток более 80 мА,. Поэтому для ограничения вытекающего тока низкого уровня на контакте MCLR должен быть установлен добавочный резистор 50- 100 Ом. 181
Глава 17 PIC16C7X 17. ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ 17.1 ПОРТАТИВНЫЙ СТЕРЕОФОНИЧЕСКИЙ УСИЛИТЕЛЬ С КНОПОЧНЫМ РЕГУЛЯТОРОМ УРОВНЯ ГРОМКОСТИ И ТЕМБРА Представленный портативный стереофонический усилитель низкой частоты имеет небольшие габариты, низкое потребление тока и может быть использован в качестве телефонного усилителя для плеера или в другой пере- носной аппаратуре, где обычные переменные резисторы неудобны или необ- ходимо обеспечить герметичность конструкции. Основой усилителя является микроконтроллер PIC16C72. Для сни- жения потребления микроконтроллер находится в режиме останова. При на- жатии любой кнопки он пробуждается, выполняет программу обработки на- жатой кнопки и возвращается в режим останова. В качестве регуляторов применены управляемые по последовательному каналу переменные резисто- ры AD8402AR50. Для управления регуляторами используется модуль SPI микроконтроллера. Встроенное АЦП микроконтроллера осуществляет кон- троль напряжения батареи питания. Результат контроля напряжения питания отображается двухцветным светодиодным индикатором. Основные технические возможности и характеристики: • усиление стереофонического сигнала, максимальный коэффициент усиле- ния по каждому каналу не менее 40 дБ; • в режиме "МОНО" на оба выхода может быть подключен любой из вход- ных каналов; • раздельная регулировка уровня сигнала в диапазоне не менее 30 дБ (с ша- гом 1 дБ); • рабочая полоса частот 20 ч- 20000 Гц; • регулировка тембра осуществляется фильтром нижних частот (ФНЧ), диа- пазон регулировки 7000 ч-18000 Гц (с шагом 650 Гц); • динамический диапазон не менее 60 дБ; • коэффициент нелинейных искажений не более 0,5%; • максимальный выходной ток не более 250 мА; • контроль расхода энергии и индикация состояния элемента питания (если напряжение питания более 7,7 В, то светодиод светится зеленым цветом, а если менее - красным); • отключение индикации при напряжении питания менее 9,8 В (индикация включается при нажатии любой кнопки на время ее удержания); • питание от источника постоянного тока напряжением 8 - 15 В; • потребление тока не более 25 мА (при отключенной индикации не более 10 мА). 182
PIC16C7X___________________________________________________Глава 17 17.1.1 АППАРАТНАЯ РЕАЛИЗАЦИЯ Электрическая принципиальная схема усилителя представлена на рис 17-2. Усилитель имеет два идентичных канала. Один канал обеспечивает уси- ление и фильтрацию сигнала левого канала, а другой правого. Низкочастот- ные входные сигналы подаются через разъем XI на входные усилители (выполненные на операционных усилителях D1.1 и D2.1), входные усилители предназначены для согласования с выходом источника сигнала и предвари- тельного усиления входного сигнала. С входных усилителей сигналы поступают на регулируемые усилите- ли, выполненные на операционных усилителях D1.2 и D2.2 и управляемых по последовательному каналу переменных резисторов D3.1 и D4.1. Регулировка коэффициента усиления регулируемых усилителей осуществляется в диапа- зоне 30 дБ (шаг регулировки составляет 1 дБ). Регулировка тембра сигналов осуществляется фильтрами нижних частот с регулируемой частотой среза, выполненными на операционных уси- лителях D5 и D6 и управляемых по последовательному каналу переменных резисторов D3.2 и D4.2. Диапазон регулировки фильтров нижних частот со- ставляет 7 -е- 18 кГц при крутизне спада к верхним частотам не менее 12 дБ/окт. Далее сигналы поступают на коммутатор каналов D9, который в ре- жиме "СТЕРЕО" транслирует на выход оба входных канала, а в режиме "МОНО" обеспечивает подключение любого из двух входных каналов на два выходных. С коммутатора каналов сигналы поступают на усилители мощности D8. Усилители мощности предназначены для согласования с внешними уст- ройствами и позволяют подключать стереотелефоны с активным сопротивле- нием не менее 30 Ом для прослушивания входных сигналов. Микроконтроллер D7 обеспечивает управление параметрами кана- лов, контроль напряжения источника питания, сканирование матрицы клавиа- туры 3 х 4 (S1 ч- S10), управление коммутатором каналов сигналами К1 ч- КЗ и формирование индикации. Тактирование микроконтроллера осуществляет- ся от RC генератора частотой 200 кГц. Индикация режима усилителя "СТЕРЕО / МОНО" осуществляется светодиодами HL1 и HL2. В режиме "СТЕРЕО" светятся оба светодиода, а в режиме "МОНО" светится светодиод транслируемого на выход входного ка- нала. Напряжение питания подается на аналоговый вход RA0 микрокон- троллера через делитель R47 - R48. Индикация уровня напряжении источника питания осуществляется двухцветным светодиодом HL3. Управление параметрами каналов, как отмечалось выше, осуществ- ляется управляемыми по последовательному каналу переменными резистора- ми AD8402AR50 ( микросхемы D3 и D4). Микросхема AD8402AR50 состоит из двух переменных резисторов сопротивлением 50 кОм. "Движок" резистора 183
Глава 17 PIC16C7X перемещается по сопротивлению линейно и может занимать одно из 256 по- ложений. Управление положением "движка" осуществляется микроконтрол- лером по последовательному каналу сигналами SD, ST и CSX. По линии SD передаются данные, синхронизация которых осуществляется по линии ST. В состав данных входит двухразрядный адрес и восьмиразрядное значение по- ложения "движка", формат данных представлен на рис. 17-1. Запись данных осуществляется когда на входе CS установлен низкий уровень. По переднему фронту на входе CS положение "движка" изменяется. Питание всех элементов схемы осуществляется напряжением 5В че- рез линейный стабилизатор D10. 17.1.2 ОПИСАНИЕ ПРОГРАММЫ Инициализация микроконтроллера при включении питания осущест- вляется внешним сигналом по входу-MCLR. После запуска микроконтроллер выполняет программу начальной установки, при этом осуществляется про- граммирование портов ввода / вывода, инициализация модулей SSP, А/D И TMR0. Контакт RA0 порта А конфигурируется, как аналоговый вход, ддя контроля напряжения питания. Остальные контакты порта А конфигурируют- ся, как выходы, для индикации. Контакты RB1 ч- RB3 порта В конфигурируются как выходы, Для сканирования столбцов клавиатуры. Контакты RB4 ч- RB7 конфигурируются как входы и подключаются внутренними ключами к высокому уровню для опроса строк клавиатуры. Все контакты порта С конфигурируются как выходы. Контакты RC0, RC1 управляют ключами левого аналогового канала, а контакты RC6, RC7 - правого. Контакты RC2, RC4 осуществляют выборку регуляторов. Контакты RC3, RC5 конфигурируются как контакты модуля последовательного интер- фейса для передачи сигналов синхронизации (CLK) и данных (SDI). 184
PIC16C7X Глава 17 Рис. 17-2 Принципиальная схема портативного стереофонического усилите- ля с кнопочным регулятором уровня громкости и тембра 185
Глава 17 PIC16C7X Модуль последовательного интерфейса обеспечивает передачу дан- ных в регуляторы, а для этого программируется в режим ведущего SPI с син- хронизацией от внутреннего генератора Fosc/16. К модулю таймера 0 подключается предделитель с коэффициентом 1 : 256, что позволяет осуществлять отсчет длительных промежутков времени до 1,3 с. Модуль таймера 0 обеспечивает отсчет временных интервалов ска- нирования клавиатуры и автоматического повтора нажатой кнопки. Синхронизация модуля АЦП осуществляется от внутреннего RC гене- ратора, а преобразование осуществляется в режиме останова микроконтролле- ра, что позволяет повысить точность за счет отсутствия цифровых шумов. Входной сигнал (напряжение питания) к АЦП подключается только на время преобразования. После окончания преобразования модуль отключается. Результат преобразования АЦП сравнивается с минимальным и мак- симальным значением напряжения батареи. Если напряжение меньше 7,7 В, то включается красный цвет свечения индикатора уровня напряжения пита- ния (АВАРИЯ), а если больше - зеленый (НОРМА). Если напряжение больше 9,8 В, то предполагается, что питание осуществляется от внешнего источника питания и устанавливается признак постоянной индикации. После инициализации индикаторы включаются на 2,6 с, затем инди- каторы отключаются и микроконтроллер начинает выполнять основной цикл. Большую часть времени микроконтроллер находится в режиме оста- нова, что позволяет снизить потребление и уровень шумов в аналоговых це- пях. Пробуждение микроконтроллера осуществляется прерыванием по изме- нению состояния порта В. Изменение происходит при нажатии или отпуска- нии любой кнопки клавиатуры. После пробуждения контролируется напря- жение питания и включаются индикаторы на время удержания кнопки. Если напряжение питания > 9,8 В (установлен признак постоянной индикации), то при отпускании кнопки индикация не отключается. В исходном состоянии все кнопки активны, так как на всех столбцах клавиатуры установлен уровень логического "О", который проходит на вход через любую нажатую кнопку. После выхода из останова для определения нажатой кнопки и устранения дребезга осуществляется сканирование клавиа- туры поочередной активизацией линий столбцов клавиатуры в течении 20 мс, после чего считывается состояние строк клавиатуры, определяется нажатая кнопка и выполняется подпрограмма обработки нажатой кнопки. Если в ре- зультате сканирования нажатая кнопка не обнаружена, то это воспринимается как отпускание кнопки. Основной цикл, как и обработка любой кнопки, заканчивается подпро- граммой обработки кнопки "КОНТРОЛЬ". При этом активизируется вся кла- виатура, фиксируется текущее состояние порта В, разрешаются прерывания от изменения состояния порта В и микроконтроллер переходит в режим останова. После пробуждения выполняется переход на начало основного цикла. 186
PIC16C7X___________________________________________________Глава .17 При обработке кнопок увеличения и уменьшения коэффициента пере- дачи левого и правого каналов (" + ВХ. 1 "," - ВХ. 1 "," + ВХ. 2 "," - ВХ. 2 ") выполняется контроль активности канала, если выбранный канал не активен (режим "МОНО"), то обработка заканчивается. Далее проверяется значение регистра уровня на крайние положения регулятора и если оно не достигнуто, то значение регистра изменяется. Для обеспечения линейности логарифмической шкалы, по значению регистра уровня, из таблицы выбирается уставка (код по- ложения "движка" регулятора) и пересылается в соответствующий регулятор. После окончания обработки вызывается подпрограмма автоматического повто- ра нажатой кнопки, которая удлиняет первый сканирующий импульс до 500 мс и выполняет переход на сканирование клавиатуры. При обработке кнопок изменения полосы пропускания ФНЧ (" > ФНЧ ", " < ФНЧ") в режиме "МОНО" регулировка осуществляется в ак- тивном канале, в режиме "СТЕРЕО" положение регуляторов выравнивается и регулировка выполняется в обоих каналах одновременно. Далее проверяется значение регистра фильтра на крайние положения регулятора, если оно не достигнуто, то значение регистра изменяется на 6 и пересылается в соответ- ствующий регулятор или в два одновременно. После окончания обработки вызывается подпрограмма автоматического повтора нажатой кнопки. Переключение режима МОНО / СТЕРЕО осуществляется кнопками "ВЫХ.1", "ВЫХ.2" и "СТЕРЕО". В режиме МОНО выбранный канал под- ключается на оба выхода и зажигается соответствующий индикатор. В режи- ме СТЕРЕО сигналы двух каналов транслируются на выход и светятся оба индикатора. 17.1.3 ПРОГРАММА ПОРТАТИВНОГО СТЕРЕОФОНИЧЕСКОГО УСИ- ЛИТЕЛЯ С КНОПОЧНЫМ РЕГУЛЯТОРОМ УРОВНЯ ГРОМКОСТИ И ТЕМБРА (AMPLIFER.ASM) LIST Р“16С72 Программа портативного стереофонического усилителя с кнопочным регулятором уровня громкости и тембра. Используются: модули TMRO, A/Dz SSP. Программа: Дата изменения: AMPLIFER.ASM 7-12-99 finclude <P16C72.INC> finclude < amplifer.H> LIST __config _CP_OFF 6 _PWRTE_OFF 6 _WDT_OFF & _RC_OSC 6 _BODEN_OFF org 0x00 goto Start ; Вектор сброса. org 0x04 goto Service_int ; Вектор прерывания. 187
Глава 17 PIC16C7X org 0x10 level_nfb CLRF PCLATH ADDWF PCL, F ; Таблица уставок уровня dt .255 ; К » 10 (20дБ) dt .212, .176, .147, .123, .103, .86, .72, .60, .50, .41 dt .33, .26, .20, .15, .11, .8, .6, .4, .2, .1 dt 0 ;К = 0,29 (-ЮдБ) . *«*»***«***»************♦*****************************»********<**»**** ; Инициализация системы *»«»**♦***»»** ****************** *************************************** Start bsf STATUS, RPO ; Банк 1. moviw B'00000111’ movwf ADCON1 ; Отключить аналоговые входы. moviw B’00000001' ; Установить порт А: movwf TRISA ; 0 - аналоговый, 1,2,3,4 - выходы. moviw B'11110001' ; Установить порт В: movwf TRISB ; 1...3-выходы, 0,4...7 - входы. moviw B'00000000' ? Установить порт С: movwf TRISC ? 0... 7 - выходы. bcf STATUS, RPO moviw B’llllllll' i г Значение для порта А. movwf PORTA moviw B'lllllllO' ; ; Значение для порта В. movwf PORTB moviw B’lOlllllO’ ; Значение для порта С. movwf PORTC moviw B'11010101’ ; : Установка регистра индикации. movwf ind call InitialSSP ; : Инициализация последовательного порта. call InitialTMRO ; • Инициализация таймера 0. call InitialAD ; ' Инициализация АЦП. clrf ADRES clrf power bsf ADCONO, GO_DONE ; Пуск АЦП. sleep Режим останова. call StopAD ; Отключить аналоговый вход. moviw .8 Среднее положение регулятора уровня movwf gain_l ; К » 1 (ОдБ). movwf gain_2 call level_nfb ; Получить уставку уровня. movwf TEMPO moviw a_vol ; Установить адрес регулятора уровня. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol_l i Обращение к регуляторам двух каналов. bcf PORTC,vol_2 call prog_reg ; Запись в регуляторы уровня. bsf PORTC,vol_l bsf PORTC,vol_2 bcf SSPCON, SSPEN Отключить последовательный порт. moviw .10 Установить Мах полосу ФНЧ movwf band_l movwf band_2 movwf TEMPO moviw aflp ; Установить адрес регулятора ФНЧ. movwf TEMPI bsf SSPCON, SSPEN Включить последовательный порт. bcf PORTC,vol-1 Обращение к регуляторам двух каналов. bcf PORTC,vol_2 call prog_reg ; Запись в регуляторы ФНЧ. bsf PORTC,vol_l bsf PORTC,vol-2 188
PIC16C7X Глава 17 bcf SSPCON, SSPEN ; Отключить последовательный порт. call tst_power ; Контроль уровня напряжения питания. call ind__on ; Включить индикацию на 2,6 с. clrf TMRO ; Установить TMRO Tmax = 1.3 с. bcfINTCON,TOIF ; Включить таймер. Loop2 btfss goto INTCON,TOIF Loop2 ; Ожидание конца счета таймера. clrf TMRO ; Установить TMRO Tmax = 1.3 С bcf INTCON,TOIF ; Включить таймер. Loop3 btfss goto INTCON,TOIF Loop3 ; Ожидание конца счета таймера. *********************************************************************** ; Основной цикл программы. ; Вызывается прерыванием по изменению состояния порта В. ; Выполняется сканирование клавиатуры и обработка нажатой кнопки. . *********************************************************************** talcturn call ind_off ; Отключить индикацию. call InitialAD ; Подключить аналоговый вхоД. bsf sleep ADCONO, GO_DONE ; Пуск АЦП. ; Режим останова. call StopAD ; Отключить аналоговый вход. ; Сканирование клавиатуры movlw mask_stl ; Установить на столбцах клавиатуры iorwf PORTB, F ; не активный уровень (все единицы). bcf PORTB, st!3 ; Активизировать столбец 3. movlw Oxff - n_skan ; Установить TMRO t * 20 mC movwf TMRO ! время сканирования клавиатуры. bcf INTCON,TOIF ; Запустить таймер. call tst_power ; Контроль уровня напряжения питания. call ind on ; Включить индикацию. Loops3 btfss goto INTCON,TOIF Loops3 ; Ожидание конца счета таймера. movf movwf bsf PORTB, W TEMPO PORTB, stl3 ; Считать состояние кнопок столбца 3. bcf PORTB, stl2 ; Активизировать столбец 2. movlw movwf Oxff - n skan TMRO ; Установить TMRO t = 20 mC. bcf INTCON,TOIF ; Запустить таймер. ; Контроль состояния кнопок столбца 3. btfss TEMPO, strl ; Строка 1 активна? goto konrol ; Да, нажата кнопка "КОНТРОЛЬ". btfss TEMPO, str2 ; Строка 2 активна? goto out 1 ; Да, нажата кнопка "ВЫХ.1". Loops2 btfss goto INTCON,TOIF Loops2 ; Ожидание конца счета таймера. movf movwf bsf PORTB, W TEMPO PORTB, stl2 ; Считать состояние кнопок столбца 2. bcf PORTB, Stll ; Активизировать столбец 1. movlw movwf Oxff - n_skan TMRO ; Установить TMRO t = 20 mC. bcf INTCON,TOIF ; Запустить таймер. ; Контроль состояния кнопок столбца 2. btfss TEMPO, strO Строка 0 активна? goto dec_inl ; Да, нажата кнопка " - ВХ.1 ". btfss TEMPO, strl ; Строка 1 активна? 189
Глава 17 PIC16C7X goto btf ss dec_fIp TEMPO, str2 ; Да, нажата кнопка " > ФНЧ ". ; Строка 2 активна? goto out 2 ; Да, нажата кнопка ’’ ВЫХ. 2 ". btf ss TEMPO, str3 ; Строка 3 активна? goto inc inl ; да, нажата кнопка " + ВХ.1 ". Loopsl btf ss INTCON,TOIF ; Ожидание конца счета таймера. goto Loopsl movf PORTB, W ; Считать состояние кнопок столбца 1. movwf TEMPO ; Контроль состояния кнопок столбца 1. btf ss TEMPO, strO ; Строка 0 активна? goto dec in2 ; Да, нажата кнопка " - ВХ.2 ". btfss TEMPO, strl ; Строка 1 активна? goto inc flp ; Да, нажата кнопка ’’ < ФНЧ ". btfss TEMPO, str2 ; Строка 2 активна? goto stereo ; Да, нажата кнопка " СТЕРЕО ". btfss TEMPO, str3 ; Строка 3 активна? goto inc in2 ; Да, нажата кнопка " + ВХ.2 ". ; Ни одна кнопка не нажата, отпускание кнопки btf sc ind, i post ; Если напряжение < 9,8 В call ind_off ; отключить индикацию., konrol ; Обработка кнопки "КОНТРОЛЬ" movlw mask stl ; Активизировать всю клавиатуру. movwf TEMPO ; установить на всех столбцах 0. comf TEMPO, W andwf PORTB, F nop movf PORTB, W ; Зафиксировать текущее состояние порта В movlw B’10001000' ; Разрешить прерывания от изменения movwf INTCON ; состояния порта В. sleep ; Режим останова. goto talcturn ; Пробуждение и переход на начало цикла. inc ini ,‘Увеличить коэффициент передачи левого канала ("+ВХ.1"). btf sc ind, i ol ; Левый канал активен ? goto konrol ; Нет, ошибка оператора, конец обработки. movf gain 1, W sublw .21 ’ btf sc STATUS, Z ; Регулятор уровня в max положении? goto konrol ; Да, конец обработки. incf gain 1, F ; Нет, увеличить уровень. movf gain 1, W call level nfb ; Получить уставку уровня. movwf TEMPO movlw a vol ; Установить адрес регулятора уровня. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 1 ; Обращение к регулятору левого канала. call prog reg ; Запись в регулятор уровня. bsf PORTC,vol 1 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto_poft ; Разрешить автоповтор нажатой кнопки. dec ini ^Уменьшить коэффициент передачи левого канала ("-ВХ.1"). btf sc ind, i ol ; Левый канал активен ? goto konrol ; Нет, ошибка оператора, конец обработки. movlw 0 subwf gain 1, W ; Регулятор уровня в min положении? btf sc STATUS, Z goto konrol ; Да, конец обработки. decf gain_l, F ,• Нет, уменьшить уровень. 190
PIC16C7X Глава .17 movf call movwf movlw movwf gain_l, W level_nfb TEMPO a_vol TEMPI ; Получить уставку уровня. ; Установить адрес регулятора уровня. bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 1 ; Обращение к регулятору левого канала. call prog reg ; Запись в регулятор уровня. bsf PORTC,vol 1 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto^poft ; Разрешить автоповтор нажатой кнопки. inc tip ; Увеличить полосу ФНЧ (” > ФНЧ ”). btf sc ind, i ol ; Левый канал активен ? goto inc k2 ; Нет, регулировка только правого канала. btfss ind, i o2 ; Правый канал активен ? goto inc kl2 ; Да, регулировка в двух каналах. inc kl ; Регулировка только левого канала. movlw . 10 subwf band 1, W ; Мах полоса ФНЧ. btfsc STATUS, Z goto konrol ; Да, конец обработки. movlw .6 ; Нет, увеличить полосу ФНЧ. subwf band 1, W movwf band 1 movwf TEMPO movlw a flp ; Установить адрес регулятора ФНЧ. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 1 ; Обращение к регулятору левого канала. call prog reg ; Запись в регулятор ФНЧ. bsf PORTC,vol 1 bsf SSPCON, SSPEN ; Отключить последовательный порт. goto auto poft ; Разрешить автоповтор нажатой кнопки. inc k2 ; Регулировка только правого канала. movlw . 10 subwf band 2, W ; Мах полоса ФНЧ. btfsc STATUS, Z goto konrol ; Да, конец обработки. movlw .6 ; Нет, увеличить полосу ФНЧ. subwf band_2, W movwf band 2 movwf TEMPO movlw a flp ; установить адрес регулятора -ФНЧ. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 2 ; Обращение к регулятору правого канала. call prog reg ; Запись в регулятор ФНЧ. bsf PORTC,vol 2 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto poft ; Разрешить автоповтор нажатой кнопки. inc kl2 ; Регулировка в двух каналах одновременно movlw .10 subwf band 1, W ; Мах полоса ФНЧ. btfsc STATUS, Z goto konrol ; Да, конец обработки. movlw .6 ; Нет, увеличить полосу ФНЧ. subwf band 1, W movwf band 1 movwf band 2 ; Установить адрес регуляторов ФНЧ. movwf TEMPO movlw a_f Ip 191
Глава 17 PIC16C7X movwf TEMPI ' bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 1 ; Обращение к регуляторам двух каналов bcf PORTC,vol 2 call prog reg ; Запись в регулятор ФНЧ. bsf PORTC,vol 1 bsf PORTC,vol 2 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto_poft ; Разрешить автоповтор нажатой кнопки. dec_f1р btf sc ind, i_ol ; Уменьшить полосу ФНЧ (" < ФНЧ ; Левый канал активен ? goto dec_k2 ; Нет, регулировка только правого канала btf ss ind, i_o2 ; Правый канал активен ? goto dec_kl2 ! Да, регулировка в двух каналах. dec kl ; Регулировка только левого канала. movf band 1, W sublw .117 ; Min полоса ФНЧ btf ss STATUS, C goto konrol ; Да, конец обработки. moviw .6 ; Нет, уменьшить полосу ФНЧ addwf band_l, W movwf band_1 movwf TEMPO moviw a_flp ; Установить адрес регулятора ФНЧ. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol_l ; Обращение к регулятору левого канала. call prog_reg ; Запись в регулятор ФНЧ. bsf PORTC,vol_l bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto_poft ; Разрешить автоповтор нажатой кнопки. dec_k2 ; Регулировка только правого канала. movf band 2, W sublw .117 ; Min полоса ФНЧ. btfss STATUS, C goto konrol ; Да, конец обработки. moviw .6 ; Нет, уменьшить полосу ФНЧ. addwf band—2, W movwf band_2 movwf TEMPO moviw a_ f Ip ; Установить адрес регулятора ФНЧ. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vo1-2 ; Обращение к регулятору правого канала. call prog_reg ; Запись в регулятор ФНЧ. bsf PORTC,vol-2 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto_poft ; Разрешить автоповтор нажатой кнопки. dec_kl2 ; Регулировка двух каналов одновременно. movf band 1, W sublw .117 ; Min полоса ФНЧ. btfss STATUS, C goto konrol ; Да, конец обработки.. moviw .6 ; Нет, уменьшить полосу ФНЧ. addwf band—1, W movwf band—1 movwf band—2 movwf TEMPO moviw a_f Ip ; Установить адрес регулятора ФНЧ. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol_l ; Обращение к регуляторам двух каналов. 192
PIC16C7X Глава 17 bcf PORTC,vol_2 call prog_reg ; Запись в регулятор ФНЧ bsf PORTC,vol_l bsf PORTC,vol_2 bcf SSPCON, SSPEN goto auto_poft ; Разрешить автоповтор нажатой кнопки. inc in2 ;Увеличить коэффициент передачи правого канала ("+ВХ.2") btfsc ind, i о2 ; Правый канал активен ? goto konrol ; Нет, ошибка оператора, конец обработки movf gain 2, W sublw .21 btfsc STATUS, Z ; Регулятор уровня в max положении? goto konrol ; Да, конец обработки. incf gain 2, F ; |Ьет, увеличить уровень. movf gain 2, W call level nfb ; Получить уставку уровня. movwf TEMPO movlw a vol ; Установить адрес регулятора уровня. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol_2 ; Обращение к регулятору правого канала. call prog reg ; Запись в регулятор уровня. bsf PORTC,vol 2 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto auto_poft ; Разрешить автоповтор нажатой кнопки. dec in2 ;Уменьшить коэффициент передачи правого канала C’-BX.Z") btfsc ind, i o2 ,* Правый канал активен ? goto konrol • ; Нет, ошибка оператора, конец обработки. movlw 0 subwf gain 2, W ; Регулятор уровня в min положении? btfsc STATUS, Z goto konrol ; Да, конец обработки. decf gain 2, F ; Нет, уменьшить уровень. movf gain 2, W call level nfb ; Получить уставку уровня. movwf TEMPO movlw a vol ; Установить адрес регулятора уровня. movwf TEMPI bsf SSPCON, SSPEN ; Включить последовательный порт. bcf PORTC,vol 2 ; Обращение к регулятору правого канала. call prog reg ; Запись в регулятор уровня bsf PORTC,vol 2 bcf SSPCON, SSPEN ; Отключить последовательный порт. goto autO—poft ; Разрешить автоповтор нажатой кнопки. out 1 ; Режим "МОНО", на выход левый канал (•’ВЫХ.1" ) bcf PORTC, k2 1 ; Отключить правый канал. bcf PORTC, k2 2 bsf PORTC, kl 1 ; Включить левый канал. bsf PORTC, kl 2 bsf PORTA, i o2 ; Отключить индикатор правого канала. bsf ind, i o2 bcf PORTA, i ol ; Включить индикатор левого канала. bcf ind, i ol goto konrol out 2 ; Режим ’’МОНО”, на выход правый канал ("ВЫХ.2” ) bcf PORTC, kl 1 ; Отключить левый канал. 7 Эк. 1092 193
Глава 17 PIC16C7X bcf PORTC, kl 2 bsf PORTC, k2 1 ; Включить правый канал. bsf PORTC, k2 2 bsf PORTA, i ol ; Отключить индикатор левого канала. bsf ind, i ol bcf PORTA, i o2 ; Включить индикатор правого канала. bcf ind. i o2 goto konrol stereo ; Режим "СТЕРЕО", на выход два канала ("СТЕРЕО”) bcf PORTC, kl 2 ; Включить левый канал. bcf PORTC, k2 1 ; Включить правый канал. bsf PORTC, kl 1 bsf PORTC, k2 2 bcf PORTA, i o2 ; Включить индикатор правого канала. bcf ind, i o2 bcf PORTA, i ol ; Включить индикатор левого канала. bcf ind, i ol goto konrol auto poft ; Разрешить автоповтор нажатой кнопки. movlw Oxff - n_poft ; Установить TMRO t » 500 мС, время movwf TMRO ; автоматического повтора нажатой кнопки bcf INTCON , TOIF ; Запустить таймер. movlw mask stl ; Установить на столбцах клавиатуры iorwf PORTB, F ; не активный уровень (все единицы). bcf PORTB, Stl3 ; Активизировать столбец 3. ; Переход на сканирование клавиатуры, goto Loops3 ; ожидание конца счета таймера. • *********************************************************************** tst power ; Контроль уровня напряжения питания. movf ADRES, 1 № ; Считать результат преобразования АЦП. movwf power movlw min ; Сравнить с min значением напряжения. subwf power. W btfss STATUS , c ; Напряжение > min ? bcf ind, i powA ; Нет, включить индикатор АВАРИЯ питания btfsc STATUS , c ; Напряжение > min ? bsf ind, i _powA ; Да, отключить индикатор АВАРИЯ питания btfss STATUS, , c ; Напряжение > min ? bsf ind, i powN ; Нет, отключить индикатор НОРМА питания. btfsc STATUS , C ; Напряжение > min ? bcf ind, i _powN ; Да, включить индикатор НОРМА питания. movf ADRES, 1 fl sublw max ; Сравнить с max значением напряжения. btfss STATUS, , c ; Напряжение > max? bcf ind, i post ; Нет, отключить постоянную индикацию. btfsc STATUS, , c ; Напряжение > max? bsf ind, i post ; Да, включить постоянную индикацию. return ind off ; Отключить индикацию. movlw mask i movwf PORTA return ind on ; Включить индикацию. movf ind, W movwf PORTA return 194
PIC16C7X Глава 17 progreg movf movwf TEMPI, W SSPBUF ; Запись данных в регуляторы. ;Загрузить в передатчик адрес регулятора. bsf STATUS, RPO ; Банк 1 LOOP si btfss SSPSTAT, BF ; Установлен флажок конец передачи? goto LOOP si ; Нет, ожидание. bcf STATUS, RPO ; Да, банк 0. movf SSPBUF, W ; Чтение SSPBUF, сброс флажков. movf TEMPO, W movwf SSPBUF ; Загрузить в передатчик данные bsf STATUS, RPO ; Банк 1 LOOP s2 btfss SSPSTAT, BF ; Установлен флажок конец передачи? goto LOOP s2 ; Нет, ожидание. bcf STATUS, RPO ; Банк 0. movf SSPBUF, W ; Чтение SSPBUF, сброс флажков. Return InitialAD ; Инициализация АЦП bsf STATUS, RPO ; Банк 1. moviw B'00000100’ ; Установить каналы 0 -3 как movwf ADCON1 ; аналоговые входы. bdf STATUS, RPO ; Банк 0. moviw B' 11000001' ; Синхронизация RC, канал 0, movwf ADCONO ; включить АЦП. bcf PIR1,ADIF ; Сбросить флажок прерывания АЦП. Return StopAD ; Отключить АЦП. moviw B'00000000' ; Отключить АЦП. movwf ADCONO bsf STATUS, RPO ; Банк 1. moviw B'00000111’ ; Отключить аналоговые входы. movwf ADCON1 bcf STATUS, RPO ; Банк 0. Return InitialTMRO ,* Инициализация таймера 0 ; Tclk = 1/4/Fosc/PSA = 1/4/200кГц/256 - 5 мС. clrf TMRO ; Tma х = 1.3 С bsf STATUS, RPO ; Банк 1. moviw B‘01000111' ; Предделитель 1:256. movwf OPTION REG bcf STATUS, RPO ; Банк 0. return InitialSSP ; Инициализация модуля последовательного ин- терфейса. moviw B'00010001' ; Режим ведущего SPI, movwf SSPCON ; синхронизация Fosc/16. return Service int ; Программа обработки прерывания. Return . ******** i ******* ********************************************♦****, END 7* 195
Глава 17 PIC16C7X 17.1.4 ФАЙЛ ДЛЯ ВКЛЮЧЕНИЯ AMPLIFER.H NOLIST .*»********»»«| ********************************************************** ; Включаемый Файл программы портативного стёреофонического усилителя ; с кнопочным регулятором уровня громкости и тембра. ; Файл: AMPLIFER.H ; Дата Изменения:7-12-99 .**#«*****************+*****<**********«***»»*♦**'*****»***************** ; Константы. max equ .120 Мах питания 9.8 В. min equ .95 Min питания - 7.7 В. a_vol equ .0 Адрес регулятора уровень. a_f Ip equ • 1 Адрес регулятора фильтра низких частот. n_skan equ .4 Период опроса клавиатуры Т в 20 мС. n_poft equ .100 Период автоповтора клавиатуры Т = 5-00 МС. ; Адреса памяти данных. power equ 2 Oh Напряжение питания 0 - порт А [2]. gain__,l equ 21h Уровень левого канала. gain_2 equ 22h Уровень правого канала. band_l equ 23h Фильтр низких частот левого канала. band_2 equ 24h Фильтр низких частот правого канала. ind equ 25h ; Регистр индикации. TEMPO equ 27h Промежуточная ячейка.. TEMPI equ 28h ; Промежуточная ячейка. ; Флаги и разряды. i_post equ 7h ;,Признак постоянной, индикации ma ski equ B’OOllllll' ; Маска индикации. mask_stl equ B'OOOOlllO* ; Маска столбцов клавиатуры. , mask_str equ B’11110000’ ; Маска строк клавиатуры. ; Описание выводов. ; PORT_A: pow equ Н’00’ напряжение питания - вход АЦП; i_powN equ H’01* индикатор "Норма” питания; ’ i_powA equ H’02' ; индикатор "Авария” питания; i_o2 equ Н’ОЗ’ индикатор "ВЫХОД 2”; i_ol equ Н’05* индикатор "ВЫХОД Iм. .* PORT^B: .. stl 1 equ Н!,01‘ ; клавиатура - Столбец 1; ' st!2 • equ- Н‘О2’ клавиатура - столбец 2; st!3 equ Н’ОЗ’ клавиатура - столбец 3; strO equ Н*"04* клавиатура - Строка 0; -Strl equ Н'05' клавиатура ртрока 1;, str2 equ Н’06’ клавиатура - строка 2; str3- equ : Н‘07' ; клавиатура '* строка 3. PORT__C: kl_2 equ Н'ОО* выходной ключ, канал 1-2; kl_l equ Н'01‘ выходной ключ» канал 1-1; VQl^l equ Н',02' выбор регуляторов левого канала; sine equ : Н*03* ; синхронизация*для регуляторов; vol_2 equ Н'04' выбор регуляторов правого канала; dat equ Н’05’ ; данные для регуляторов; k2 1 equ Н'06’ выходной ключ, канал 2 - 1; ‘ k2_2 equ Н‘07' выходной ключ, канал 2-2. LIST 196
PIC16C7X Глава.17 17.2 ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ С МАЛЫМ ПОТРЕБЛЕНИЕМ В часах реального времени с малым потреблением используется модуль таймера 1, поэтому они могут быть реализованы на любом микроконтроллере семейства PIC16CXXX, имеющем этот модуль. Таймер 1 выбран потому, что он имеет свой вход для подключения кварцевого резонатора, позволяющий модулю функционировать в течении режима останова микроконтроллера. В этом устройстве из режима останова микроконтроллер вызывают два события - нажатие кнопки и переполнение таймера 1. 17.2.1 ОПИСАНИЕ ПРОГРАММЫ После включения питания, микроконтроллер инициализируется, уста- навливает на индикаторе начальное время 12 : 00 РМ и конфигурирует тай- мер 1 для генерации прерываний на каждой секунде. Переполнение таймера 1 генерирует прерывание, вызывающее микроконтроллер из режима останова. При этом регистры времени (часов - "HRS", минут - "MIN" и секунд - "SECS") модифицируются. Если регистр секунд содержит четное значение (SECS < 0 > = 0), то на индикаторе не отображается двоеточие (":"). Это обеспечивает визуальную индикацию каждой секунды. После чего микроконтроллер воз- вращается в режим останова. Установка времени осуществляется тремя кнопками. Кнопкой S1 ("SELECT UNITS") выбирается устанавливаемые значения (часы, минуты, установка отключена). Выбранное значение начинает мигать - в течении од- ной секунды высвечивается, а в течении другой гасится. Кнопкой S2 ("INC") увеличивается выбранное значение. При приращении отображается устанав- ливаемое значение. После отпускания кнопки таймер заканчивает отсчет се- кунды и начинает высвечивать новое значение. Кнопкой S3 ("CLRMIN") сбрасываются минуты и секунды. Кнопка "CLR MIN" удобна для точной ус- тановки времени. После того как кнопка "INC" или "SELECT UNITS" отпу- щена, пользователь имеет десять секунд для того чтобы нажать следующую кнопку. Если в течении десяти секунд нажатие не обнаружено, то режим ус- тановки отключается. Для того чтобы облегчить разработку и минимизировать стоимость, ис- пользуется стандартный ЖКИ индикатор фирмы HITACHI. Если в устройстве требуется специализированный ЖКИ индикатор, то программное обеспече- ние интерфейса с индикатором должно быть изменено. На рис. 17-2 представлена структурная схема устройства. На контактах RA2 : RA0 микроконтроллера формируются сигналы управления ЖКИ инди- катором, контакты RB3:RB0 функционируют как 4-разрядная шина данных, с контактов RB7:RB5 считывается состояние кнопок. На контактах OSC1, OSC2 установлен кварцевый резонатор, который генерирует тактовую часто- 197
Глава 17 PIC16C7X ту микроконтроллера 4 МГц. Так как таймер 1 функционирует асинхронно, то может быть использован RC режим генератора микроконтроллера. RC гене- ратор менее дорог и имеет самое короткое время запуска. Для работы тайме- ра I требуется точная частота, поэтому на контактах T1OSI и T1OSO уста- новлен кварцевый резонатор с частотой 32.786 кГц (часовой кварц). В табли- це 1 приведен перечень компонентов, их типы и фирмы изготовители. Поскольку устройства ЖКИ в большинстве медленные, то большая часть времени в программе обработки прерывания тратится на управление модулем ЖКИ. Чтобы минимизировать потребляемую мощность, устройство должно быть в режиме останова максимально возможное время. Для определения общего времени выполнения подпрограммы использу- ется контакт PORTD <0> и условная трансляция с флажком (названным Debug), если он соответствует истине. Измерение на осциллографе времени активности микроконтроллера должно быть не более 800 мкс. То есть по ис- течении каждой секунды таймер 1 заканчивает счет и вызывает программу обработки прерывания, которая выполняется 800мкс . Рис. 17-3 Часы реального времени Точность часов реального времени, использующих таймер 1, зависит от точности используемого кварцевого резонатора. Более точные резонаторы стоят дорого. При выборе резонатора необходимо исходить из эффективного соотношения цена / качество. Кварцевый резонатор с номинальной точно- стью 20 * 10’6 % может вызывать ошибку приблизительно 1.7 секунды в день. Для многих устройств этого должно быть достаточно. 198
PIC16C7X Глава 17 Представленная программа показывает один из методов реализации ча- сов реального времени. При разработке необходимо определить соотношение между размером программы, током потребления и выполняемыми операция- ми. Некоторые возможные альтернативные реализации: 1. При отображении времени можно модифицировать только символы, которые изменились. 2. Выключать индикатор в течение режима останова. 3. Использовать для передачи данных в модуль ЖКИ не 4 разрядный, а 8 разрядный интерфейс. Реализация варианта 1 может уменьшить время активного состояния, тат как уменьшается количество записываемых в индикатор данных. Большая часть времени при этом будет приходится на позицию, которая содержит «:». Следующее место будут занимать единицы минут, затем десятки минут и т.д. Полностью индикатор должен будет модифицироваться только 2 раза в сутки. Но уменьшение времени передачи данных в индикатор ЖКИ повлечет за собой некоторое увеличение программы и памяти данных. В зависимости от требований устройства и характеристик индикатора, вариант 2 может включать и отключать питание индикатора с заданной ско- ростью. Такая методика может резко уменьшить ток потребления системы. Но требуется определить цену необходимого индикатора, так как она может быть высока. Вариант 3 позволяет использовать модуль ЖКИ в 8 разрядном режиме, который уменьшит размер подпрограмм передачи данных в индикатор (приблизительно на 20 слов памяти программы) за счет четырех дополни- тельных линий ввода /вывода. В некоторых устройствах это может быть вы- годно для того чтобы получить дополнительный объем памяти программ. При этом сокращение времени выполнения операций небольшое и не дает реальной экономии мощности. Таблица 1. Список компонентов Наименование Тип Изготовитель Количество Модуль ЖКИ (2 х 20 символов) LM032L Hitachi 1 Кнопки EVQPADO4M Panasonic 4 М икроконтроллер PIC16C64/74 Microchip 1 Кварцевый резонатор 32.768 кГц NC26 / NC38 FOX 1 Кварцевый резонатор 4 МГц ECS-40-20-1 ECS 1 199
PIC16C7X Глава 17 17.2.2 ЗАКЛЮЧЕНИЕ Модуль таймера 1 позволяет реализовать часы реального времени для многих устройств с минимальной стоимостью системы. Эта функция может быть использована, как в устройствах для индивидуального потребителя (индикаторы времени), так и в индустриальных устройствах (формирование меток времени). Точность времени строго зависит от точности кварцевого резонатора. В таблице 2 представлены ресурсы требуемые программой. Таблица 2. Ресурсы требуемые программой Ресурсы Слова/байты Циклы Память программы Инициализация 61 61 Операции часов Обработка времени 106 35 + вывод на индикатор Ввод от кнопок 35 + вывод на индикатор Память данных Индикатор (2) 208 526 (|) Переменные 5 N.A. Затраты RAM 4 N.A. 1. Зависит от модуля ЖКИ (подпрограмма BUSY CHECK). 2. Принят случай наихудшего времени ожидания и наилучшего ответа модуля ЖКИ. 17.2.3 ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ (CLOCK.ASM) LIST Р - 16С74, n = 66 ERRORLEVEL -302 . Jr*****************************************************************' ; Программа часов реального времени для семейства микроконтроллеров ; PIC16CXXX, использующая модуль TMR1. Для отображения времени ; используется ЖКИ индикатор. Установка времени осуществляется тремя ; кнопками Программа e CLOCK.ASM Дата изменения: 5-15-94 1-15-97 совместимость с MPASMWIN 1.40 Распределение контактов: Управление ЖКИ RAO = Е (Разрешение) RAI = RW (Чтение / запись) RA2 » RS (Выбор регистра)/ Данные на ЖКИ RB <3:0> Входы кнопок RB7 » Установка часов / минут / отключена RB6 » Приращение часов / минут RB5 » Сброс минут в 00 INCLUDE < р16с74. inc > LIST FALSE TRUE 200 EQU 0 EQU 1
PIC16C7X Глава 17 INCLUDE < CLOCK.Н > LIST LCD DATA EQU PORTB ; Данные ЖКИ, 4 младших разряда LCD DATA TRIS EQU TRISB ; TRIS регистр для данных ЖКИ LCD_CNTL EQU PORTA ; Три линии управления PICMaster EQU FALSE ; флажок отладки Debug EQU FALSE ; Флажок отладки Debug_PU EQU TRUE ; Флажок отладки ; Адрес сброса, определяется типом сброса. org RESET V Адрес вектора сброса. RESET BSF STATUS, RPO Банк 1. BTFSC PCON, NOT POR , ; Сброс при включения питания? GOTO START ' ; ДА. GOTO OTHER RESET НЕТ, WDT или сброс MCLR ; Подпрограмма обработки прерываний периферийных устройств.. ; Определятся источник прерывания. Разрешены следующие прерывания: ; 1. Изменение состояния PORTB (RBIF). ; 2. Прерывание по переполнению TMR1. PER_INT_V org ISR__V if ( Debug ) Адрес вектора прерываний. Используется для измерения времени ; программы обработки при отладке. bsf endif PORTD, 0 BCF STATUS, RPO Банк 0. BTFSC PIR1, TMR1IF Переполнение таймера 1? GOTO Tl-OVRFL ДА, обслуживание прерывания таймер1. BTFSS INTCON, RBIF НЕТ, изменение состояния PORTS? GOTO ERROR1 НЕТ, ошибка - неизвестное прерывание. PORTB_FLAG ; Контроль состояния кнопок. MOVF PORTB, W andlw OxEO Сохранить только значения 3 кнопок. DEBOUNCE MOVWF TEMP MOVLW DB HI BYTE Задержка устранения дребезга. MOVF MSD, F CLRF LSD KB-D.LP! DECFSZ LSD, F GOTO KB D LP1 DECFSZ MSD, F GOTO KB D LP1 END_DELAY MOVF PORTB, W ANDLW OxEO Сохранить только 3 значения кнопок. SUBWF TEMP, F BTFSS STATUS, Z Признак нуля установлен (состояние кнопок не изменилось при 2 чтении)? GOTO DEBOUNCE НЕТ, повторить чтение. KEY_MATCH MOVWF TEMP ДА, определить какая кнопка нажата. MOVLW 0x80 Поскольку кнопка нажата, очистить TMR1 MOVWF TMR1H; для 1 отсчета секунды. CLRF TMR1L; BCF PIR1, TMR1IF Сбросить Флажок прерывания таймера 1. BTFSS TEMP, HR—MIN SW Нажата кнопка ЧАСЫ/МИНУТЫ/ОТКЛ ? GOTO SELECT UNITS ДА, определить выбранное значение. BTFSS TEMP, INC SW Нажата кнопка ПРИРАЩЕНИЕ ? GOTO INC UNIT ДА, приращение выбранного значения. BTFSS TEMP, CLR MIN SW Нажата кнопка СБРОС МИНУТ ? GOTO CLR_MIN ДА, очистить минуты. ; Никакая кнопка не нажата, завершение прерываний от порта В и очистка ; флажка прерывания. CLR_RB ; никакая кнопка на RB <7:5> не нажата. MOVF PORTB, F ; Сбросить условие несоответствия PORTB. BCF INTCON, RBIF ; Сброс Флажка прерывания PORTB. if ( Debug ) bcf PORTD, 0 ; Используется для измерения времени 201
Глава 17 PIC16C7X endif RETFIE ; программы обработки яри отладке. ; Возврат / разрешение прерываний. SELECT UNITS ; Определить выбранное значение. MOVLW OxFF i MOVWF WAIT_CNTR ; LSB WAIT_CNTR загружается после каждого ; нажатия кнопки SELECT UNIT. INCF FLAG REG, F ; Увеличить указатель MIN_UNIT:HR_UNIT BSF FLAG REG, KEY INPUT GOTO DISPLAY ; Мигание выбранного значения. INC UNIT ; Приращение выбранного значения. CLRF WAIT_CNTR ;WAIT CNTR обнуляется после каждого нажатия . BTFSC FLAG REG, HR_UNIT ; Выбрано значение часов? GOTO INC HRS ; ДА, приращение значение часов. BTFSS FLAG REG, MIN UNIT ; Выбрано значение минут? GOTO CLRRB ; НЕТ, недопустимая кнопка ; очистить флажки. INCF MIN, F ; ДА, приращение значения минут. MOVLW 0x3C ; Десятичное 60. SUBWF MIN, W ; MIN - 60 =? BTFSS STATUS, Z ; MIN в 60? GOTO DISPLAY ; НЕТ, время на индикатор. ; ДА, MIN - 0 (используется CLR_MIN). CLR MIN CLRF MIN ; Очистить минуты. , MOVLW 0x04 ; Очистить секунды. MOVWF SECS ; Начальное значение счетчика секунд - 4. MOVLW 0x80 ; Загрузить таймер 1 для отсчета секунды MOVWF TMR1H t CLRF TMR1L : BCF PIR1, TMR1IF ; Сбросить флажок превышения TMR1. CLRF WAIT CNTR WAIT_CNTR обнуляется после каждого нажатия. BTFSC TEMP, CLR MIN SW ; Нажата кнопка сброс минут? GOTO DISPLAY ; НЕТ, одновременно нажата и кнопка INC. BCF FLAG REG, MIN UNIT ; ДА, очистить все BCF FLAG REG, HR UNIT ; соответствующие флажки. BCF FLAG REG, KEY INPUT GOTO DISPLAY i T1 OVRFL BCF PIR1, TMR1IF ; Очистить Флажок прерывании таймера 1. BTFSS FLAG REG, KEY INPUT ; Выполняется ввод от кнопок? GOTO I NC TIME ; НЕТ, увеличить время. INCF WAIT CNTR, F ; ДА. MOVLW OxOA ; 10 отчетов по 1 секунде. SUBWF WAIT CNTR, W ; 10 секунд ожидания нажатия истекло? BTFSS STATUS, Z ; Результат = 0? GOTO DISPLAY ; НЕТ, значение на индикатор. CLRF WAIT CNTR ; ДА, очистить WAIT_CNTR. BCF FLAG REG, KEY INPUT : BCF FLAG REG, HR UNIT : BCF ELAG_REG, MIN_UNIT i INC TIME MOVLW 0x80 MOVWF TMR1H ,* Загрузить таймер 1, для отсчета секунды. INCF SECS, F BTFSS SECS, 6 : GOTO DISPLAY MOVLW 0x04 : MOVWF SECS INCF MIN, F ! MOVLW 0x3C ; W = 60d. SUBWF MIN, W; BTFSS STATUS, Z GOTO DISPLAY CLRF MIN ; INC HRS INCF HRS, F MOVLW OxOC ; 12:00, переключить AM / PM. SUBWF HRS, W : BTFSS STATUS, Z t GOTO CK 13 ; Проверить, если ЧАСЫ = 13. BTFSS FLAG REG, AM ; Установлено AM или PM? GOTO SET AM i BCF FLAG REG, PM ; Если AM, установить PM. GOTO DISPLAY; 202
PIC16C7X Глава 17 SET_AM BSF GOTO FLAG REG, AM DISPLAY ; Установить AM. ск гэ MOVLW SUBWF BTFSS GOTO CLRF INCF GOTO OxOD HRS, W STATUS, Z DISPLAY HRS HRS, F DISPLAY ; Проверить, ЧАСЫ = 13. INIT DISPLAY MOVLW DISP ON CALL SEND_CMD MOVLW CLR DISP CALL SEND CMD MOVLW ENTRY_INC CALL SEND_CMD RETURN ; Включить индикатор и курсор. ; Передача данных в индикатор. ; Очистить индикатор. ; Передача данных в индикатор. ; Установить режим ввода с приращением ; без сдвига. ; Передача данных в индикатор. DISPLAY MOVLW DD_RAM_ADDR; CALL SEND_CMD; BTFSC FLAG REG, KEY INPUT FLASH UNITS LOAD HRS LOAD COLON LOAD MIN LOAD_AM Установка значений ? ДА, мигание выбранного значения. GOTO CALL НЕТ, нор мальная индикация. CALL CALL GOTO FLASH UNITS CLRF PCLATH Очистить PCLATH для работы с таблицей MOVF FLAG REG, W в первых 256 байтах памяти программ. ANDLW 0x03 Маска на разряды HR UNIT и MIN UNIT. UNIT TBL ADDWF PCL, F HR UNIT MIN_UNIT GOTO NO UNITS (ГО- Отображать все. GOTO HR UNITS 01- Мигать значением часов. GOTO UNIT TBL END MIN_UNITS 1 0 - Мигать значением минут. MOVLW OxFC 1 1 - Очистить FLAG REG<HR UNIT:MIN UNIT>. ANDWF FLAG REG, F GOTO NOJJNITS 0 0 - Отобразить все. if ((UNIT_TBL и OxOFF) > UNIT_TBL_END и OxOFF) ) MESSG " Предупреждение: Таблица UNIT_TBL пересекает, границу страницы в вычисленном переходе " endi f HR UNITS BTFSS WAIT_CNTR, 0 ; Если WAIT_CNTR нечетен, ; то цифры часа отображаются как пробел GOTO SKIP BLK HRS MOVLW » » CALL SEND_CHAR MOVLW » • CALL SEND CHAR SKIP BLK_ HRS BTFSS WAIT_CNTR, 0 ; Если WAIT_CNTR четный, ; то отображаются цифры часа. CALL LOAD_HRS MOVLW ; ’’: " светится всегда ; со всеми другими символами. CALL SEND CHAR CALL LOAD MIN GOTO LOAD_AM MIN-UNITS CALL LOAD HRS ; Отобразить цифры часа. MOVLW CALL i . » SEND CHAR ; всегда светится. BTFSS WAITjSNTR, 0 ; Если WAIT_CNTR нечетен, то 203
Глава 17 PIC16C7X GOTO MOVLW ’ CALL MOVLW CALL SKIP—BLK—MIN SEND_CHAR SEND_CHAR цифры минут отображаются как пробел. SKIP BLK MIN BTFSS WAIT—CNTR, 0 Если WAIT_CNTR четный, то отображаются цифры минут. CALL LOAD MIN GOTO LOAD_AM NO_UNITS CALL LOAD_HRS . Отобразить все символы. MOVLW ». • CALL SEND_CHAR CALL LOAD MIN GOTO LOAD-AM LOAD_HRS MOVF HRS, W Загрузить значение в регистр W. CALL BIN 2 BCD преобразовать в ДВОИЧНО-ДЕСЯТИЧНЫЙ КОД MOVF MSD, W Загрузить значение единиц в W. CALL NUM TABLE Получить код ASCII. CALL SEND—CHAR Отправить символ на индикатор. • MOVF LSD, W Загрузите значение десятков в W. CALL NUM_TABLE Получите код ASCII. CALL SEND—CHAR Отправить символ на индикатор. RETURN LOAD_COLON MOVLW • • Значение ASCII для пробела. BTFSC SECS, 0 Проверить четность секунд. ADDLW • • — • ' Если секунды нечетны, то включить ":” добавлением дельты к символу ASCII. uALu SEND—CHAR Отправить символ на индикатор. RETURN LOAD_MIN MOVF - MIN, W Загрузить значение в регистр W. CALL BIN_2 BCD Преобразовать в ДВОИЧНО-ДЕСЯТИЧНЫЙ КОД MOVF MSD, W Загрузить значение единиц в W. CALL NUM TABLE Получить код ASCII. CALL SEND—CHAR Отправить символ на индикатор. • MOVF LSD, W Загрузите значение десятков в W. CALL NUM TABLE Получите код ASCII. CALL SEND—CHAR Отправить символ на индикатор. RETURN LOAD—AM MOVLW । । Значение ASCII для пробела. CALL SEND CHAR Отправить символ на индикатор. MOVLW ’A’ Значение ASCII для символа 'Ат. BTFSS FLAG REG, AM Время AM или РМ ? ADDLW •P’ - 'A' Если РМ, прибавить дельту к символу. CALL SEND CHAR Отправить символ на индикатор. MOVLW 'M* CALL SEND—CHAR Отправить символ на индикатор. • BSF STATUS, RPO Банк 1. BCF OPTION_REG, NOT—RBPU Подключить контакты PORTB к высокому уровню. BCF STATUS, RPO Банк 0. GOTO CLR_RB После вывода времени сбросить RBIF. .о*************************************** ****♦***♦**»***♦*********♦***» ; Подпрограмма BIN_2_BCD преобразует двоичные числа в регистре W ; в двоично-десятичный код. Результат сохраняется в двух байтах MSD:LSD. ; Эта подпрограмма используется подпрограммой DISPLAY для ; преобразования значений времени. BIN 2 BCD CLRF MSD MOVWF LSD TENS—SUB MOVLW .10 204 ‘ ; Значение цифры десятков. ; Значение цифры единиц. ; Десятичное число 10.
PIC16C7X______________________________________________Глава 17 SUBWF BTFSS RETLW MOVWF INCF GOTO LSD, W STATUS, C 0 LSD MSD, F TENS SUB Результат вычитания отрицательный ДА, выход из подпрограммы. Нет, переслать результат в LSD. Увеличьте значение десятков. ; Эта подпрограмма никогда не должна выполнятся. ERROR1 BCF STATUS, RPO Банк 0. i f ( Debug ) BSF PORTD, 1 BCF PORTD, 1 else BSF PORTC, 0 BCF PORTC, 0 endif GOTO ERROR1 *•************•*•*•**•*******************•******»******.******»*** * SendChar - посыпает символ в индикатор * Эта подпрограмма разбивает символ на старший и младший * полубайты и посылает их в индикатор, начиная со старшего. * Передача данных управляется контактами порта А <3:0> SEND CHAR MOVWF CHAR ; Посылаемый символ находится в W. CALL BUSY CHECK ; Ожидание готовности индикатора. SWAPF CHAR, W ANDLW OxOF ; Выделить старший полубайт. MOVWF LCD DATA ; Передать данные в индикатор. BCF LCD CNTL, RW ; Установить индикатор для чтения. BSF LCD CNTL, RS ; Установить индикатору командный режим BSF LCD CNTL, E ; Переключить Е. BCF LCD CNTL, E MOVF CHAR, W ANDLW OxOF ; Выделить младший полубайт. MOVWF LCD DATA ; Передать данные в индикатор. BSF LCD CNTL, E ; Переключите Е. BCF LCD CNTL, E RETURN . ******»,»**»**************,***»**»** *** **************************** ; * Send_Cmd - команда передачи данных в индикатор. ; * Эта подпрограмма разбивает данные на старший и младший полубайты ; * и посылают их В индикатор, начиная со старшего. * ; * Передача данных управляется контактами порта А <3;0> . о********************************** *г ★ * *i*3*i****a*i*ft4**‘*****:*i**‘*Y44A*r*'* SEND CMD MOVWF CHAR ; Посылаемый символ находится в W. CALL BUSY CHECK ; Ожидание готовности индикатора. SWAPF CHAR, W ANDLW OxOF ; Выделить старший полубайт. MOVWF LCD DATA ; Передать данные в индикатор. BCF' LCD CNTL, RW ; Установить индикатор для чтения. BCF LCD CNTL, RS ; Установить индикатору командный режим BSF LCD CNTL, E ; Переключить Е. BCF LCD CNTL, E MOVF CHAR, W ANDLW OxOF ; Выделить младший полубайт. MOVWF LCD DATA ; Передать данные в индикатор. BSF LCD CNTL, E ; Переключите Е. BCF LCD CNTL, E RETURN . ******************************************************************** ; * Подпрограмма проверяет флажок состояния индикатора. ; * Используется: TEMP - Возвращает - признак занят / адрес. . о********************************** *** **************************** BUSY_CHECK i f ( Debug ) BSF PORTD, 3 BCF PORTD, 3 endif CLRF LCD DATA ; Имеем на PORTB <3:0> низкий уровень. BSF STATUS, RPO ; Банк 1. BSF OPTION REG, NOT RBPU ; Отключить контакты PORTB ; от высокого уровня. 205
Глава 17 PIC16C7X MOVLW OxFF Установить PORTB на ввод. MOVWF LCD DATA TRIS BCF STATUS, RPO Банк 0. BCF LCD CNTL, RS Установить индикатору командный режим. BSF LCD CNTL, RW Установить индикатор для чтения флажка BSF LCD_CNTL, E ; Установите на Е высокий уровень. BCF LCD CNTL, E Установите Е низкий уровень. SWAPF LCD_DATA, W Считать старший полубайт флажков состояния, адрес DDR. ANDLW OxFO ; Маска на младший полубайт. MOVWF TEMP BSF LCD CNTL, E Переключить Е, BCF LCD CNTL, E для чтения младшего полубайта. MOVF LCD_DATA, W Считать младший полубайт флажков состояния, адрес DDR. ANDLW OxOF Маска на старший полубайт. IORWF TEMP, F Объединить полубайты. BTFSC TEMP, 7 Проверить флажок, 1 = занят. GOTO BUSY CHECK ; Если занят, проверить снова. BCF LCD CNTL, RW BSF STATUS, RPO Банк 1. MOVLW OxFO; MOVWF LCD DATA TRIS RB7 - 4 « входы, RB3 - 0 = вывода. BCF STATUS, RPO Банк 0. RETURN .*********************************************************** ************ . ***** начало программы, сброс при включении питания. .***********************************************************★*********** Start Сброс при включении питания. BCF STATUS, RPO Банк 0. MOVLW OxOC ; Десятичное число 12. MOVWF HRS ; ЧАСОВ «12. CLRF MIN МИНУТ « 00. MOVLW 0x00 MOVWF FLAG REG Установить РМ. MOVLW 0x04 Значение секунд (64d - 60d), MOVWF SECS это позволяет простым разрядным тестом определить когда секунда = 60. MOVLW 0x80 TIM1H:TMR1L = 0x8000, значение MOVWF TMR1H ; 1 секунда при частоте в 32 КГЦ. CLRF TMR1L; MCLR RESET ; Сброс по входу MCLR. CLRF STATUS Инициализация (Банк 0). CLRF INTCON CLRF PIR1 BSF STATUS, RPO Банк 1. MOVLW , 0x00 ; Модуль ЖКИ не может работать, если W/R низкий. MOVWF OPTION REG CLRF PIE1 Отключить все прерывания ввода-вывода. MOVLW OxFF MOVWF ADCON1 Все входа цифровые (для 16С7х). BCF STATUS, RPO Банк 0. CLRF PORTA; На всех выводах портов установить CLRF PORTB ; низкий уровень. CLRF PORTC CLRF PORTD CLRF PORTE BCF T1CON, TMR1ON ; Отключить таймер 1. BSF STATUS, RPO Банк 1. CLRF TRISA RA5 - 0 выходы. MOVLW OxFO MOVWF TRISB ; RB7 - 4 входа, RB3 - 0 выходы. CLRF TRISC ; Порт С все выходы. BSF TRISC, T1OSO ; RC0 вход для кварцевого резонатора. CLRF TRISD Порт D все выходы. CLRF TRISE Порт Е все выхода. BSF PIE1, TMR1IE ; Разрешить прерывания TMR1. BCF OPTION REG, NOT_RBPU ; Подтянуть PORTB к высокому уровню. BCF STATUS, RPO ; Банк 0. MOVF PORTB, F Прочитать PORTB и сбросить RBIF, BCF INTCON, RBIF если установился. 206
PIC16C7X Глава 17 ; Инициализация модуля ЖКИ. CLRF LCD_CNTL На всех выводах порта установить низкий уровень. display init MOVLW 0x02 Команда для 4 разрядного интерфейса MOVWF LCD DATA BSF LCD CNTL, E BCF LCD CNTL, E ; Подпрограмма расчета времени цикла задержки индикатора, ; на основании LCD INIT DELAY и частоты выполнения операций. / Использует регистры до их инициализации. LCD DELAY MOVLW LCD INIT DELAY MOVWF MSD Регистры MSD и LSD для инициализации CLRF LSD индикатора. LOOP2 DECFSZ LSD, F Время задержки - MSD* ((3*256)+) 3*ТСу. GOTO LOOP2 DECFSZ MSD, F END LCD_DELAY GOTO LOOP2 ; ; Последовательность команд для индикатора 2 строки 5x7 символов. CMDSEQ MOVLW MOVWF BSF BCF MOVLW MOVWF BSF BCF 0X02 LCD DATA LCD CNTL, E LCD CNTL, E 0x0£ / LCD DATA LCD CNTL, E LCD_CNTL, E ; Флажок состояния должен быть допустим после точки. MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL DISP ON ; SEND CMD ; CLR DISP SEND CMD ENTRY INC ; SEND CMD ; DD_RAM ADDR SEND CMD Инициализация специальных функциональных регистров прерывания(SFR) CLRF PIR1 MOVLW ОхОЕ MOVWF T1CON/RC1 установить как ТСКО. BSF INTCON, PEIE /Разрешить прерывания ввода-вывода. BSF INTCON, RBIE /Отключите прерывание по изменению PORTB BSF INTCON, GIE /Разрешить общее прерывание. CALL INIT DISPLAY CALL DISPLAY MOVLW MOVWF BSF OxOE T1CON; Таймер 1 от кварцевого резонатора, / предделитель = 1. T1CON, TMR1ON / Включить таймер 1. Izz goto if (PICMaster) Izz ; Цикл ожидания прерывания ; (при использовании PICMASTER) else SLEEP_LP SLEEP NOP/ GOTO / Ожидание прерывания TMR1 или изменения на PORTB. SLEEP_LP/ endif Определение типа СБРОСА (кроме сброса при включении питания). 207
Глава 17 PIC16C7X OTHER RESET BTFSS STATUS, NOT ТО ; Сброс WDT? WDT TIMEOUT GOTO ERROR1 ; ДА, Это - условие ошибки, if (Debug_PU) goto Start ; Сброс MCLR, переход на начало, else GOTO MCLR_RESET ; Сброс MCLR, переход MCLR_RESET. endif if ( Debug ) END_START NOP ; Метка конца отладки, endif org TABLE_ADDR NUM_TABLE MOVWF TEMP ; Сохранить значение. MOVLW HIGH (TABLE_ADDR) ; Проверьте, что PCLATH имеет MOVWF PCLATH ; Правильное значение. MOVF TEMP, W ; Значение для таблицы. ANDLW OxOF ; Маска на 4 младших разряда (00 - OFh) NUM_TBL ADDWF PCL, F ; Определить смещение в таблице. RETLW '0* ; ASCII значение "0" в регистре W RETLW '1' ; ASCII значение ”1" в регистре W RETLW '2' ; ASCII значение "2м в регистре W RETLW '3' ; ASCII значение ”3” в регистре W RETLW ‘4’ ; ASCII значение '’4” в регистре W RETLW ’5’ ; ASCII значение "5" в регистре W RETLW *6’ ; ASCII значение ’'6” в регистре W RETLW '7' ; ASCII значение ”7” в регистре W RETLW *8' ; ASCII значение ”8" в регистре W RETLW ’9' ; ASCII значение "9” в регистре W ; Любое большее значение, ошибка (отображается как Е). RETLW ’Е* ; ASCII значение "Е" в регистре W RETLW 'Е’ ; ASCII значение "Е” в регистре W RETLW 'Е’ ; ASCII значение ”Е” в регистре W RETLW *Е* ; ASCII значение ”Е” в регистре W RETLW 'Е‘ : ASCII значение ”Е” в регистре W NUM TBL END RETLW 'Е' ; ASCII значение "Е" в регистре W if ( (NUM_TBL b OxFFOO) ! - (NUM_TBL_END t. OxFFOO)) MESSG " Предупреждение: Таблица NUM_TBL пересекает границу страницы в вычисленном переходе " endif org PMEM_END ;Конец памяти программ. GOTO ERROR1 ;Если программа здесь, то она потерялась. END 208
PIC16C7X Глава 17 17.2.4 ФАЙЛ ДЛЯ ВКЛЮЧЕНИЯ CLOCK. Н NOLIST .*»*********»««*******************»***»*****>**♦*****************»****** ; Включаемый Файл программы часов реального времени ; Файл: CLOCK.Н ; Дата изменения:5-10-94 .************** ************«***************t***************************t ; Используется АССЕМБЛЕРОМ для вычисления некоторых частотно зависимых ; переменных. Значение Dev_Freq должно устанавливаться в соответствии ; с частотой, на которой фактически функционирует устройство. Dev Freq EQU DB HI BYTE EQU LCD INIT DELAY EQU INNER CNTR EQU OUTER—CNTR EQU D’4000000’ ; Частота устройства - 4 MHZ (HIGH (((Dev Freq / 4) * 1 / D’1000') /) 3) + 1 (HIGH (((Dev_Freq / 4) * D'467' D’10000') /) 3) 40 ; Адрес в памяти данных. 41 ; Адрес в памяти данных. + 1 T1OSO EQU 0 ; RC0 / T1OSO / T1CKI RESET V EQU ISR V EQU PMEM END EQU TABLE_ADDR EQU 0x0000 ; Адрес вектора СБРОСА. 0x0004 ; Адрес вектора прерываний. 0x07FF ; Последний адрес в памяти программ. 0x0400 ; Адрес начала таблицы. HR MIN SW EQU 0x7 INC SW EQU CLRJ4IN_SW EQU ; Кнопка выбор значения. 0x6 ; Кнопка увеличить выбранное значение 0x5 ; Кнопка сброс минут и секунд. FLAG_REG EQU 0x020 ; Регистр флажков. ; | AM | | | KEY_INPUT I | I MINJJNIT | HR_UNIT | . <. + + + * + + * AM EQU 0x07 ; Флажок времени AM или PM. KEY_INPUT EQU 0x04 ; Флажок ввод от кнопок. MIN UNIT EQU 0x01 ; Флажки установки значений HR_UNIT EQU 0x00 ; (ЧАСЫ, МИНУТЫ, отключена). HRS EQU 0x030 ; Значение счетчика ЧАСОВ. MIN EQU 0x031 ; Значение счетчика МИНУТ. SECS EQU 0x032 ; Значение счетчика СЕКУНД. MSD EQU 0x033 ; Регистр преобразования в двоично- ; десятичный код, старший байт. LSD EQU 0x034 ; Регистр преобразования в двоично- ; десятичный код, младший байт. TEMP EQU 0x035 ; Временный регистр. CHAR EQU 0x036 ; Временный регистр хранения значения. ; посылаемого в индикатор ЖКИ. WAIT—CNTR EQU 0x040 ; Счетчик ожидания нажатия кнопки. ; Команды отображения и имена сигналов управления. Е EQU 0 ; Сигнал управления ЖКИ - разрешение. R W EQU 1 ; Сигнал управления ЖКИ - чтение/запись. RS EQU 2 ; Сигнал управления ЖКИ - выбор регистра ; Команды модуля ЖКИ DISP ON EQU OxOOC ; Включить индикатор. DISP ON C EQU OxOOE ; Включить индикатор и курсор. DISP ON В EQU OxOOF ; Включить индикатор и мигающий курсор. DISP OFF EQU 0x008 ; Отключить индикатор. CLR DISP EQU 0x001 ; Очистить индикатор. ENTRY INC EQU 0x006 ENTRY INC S EQU 0x007 ENTRY_DEC EQU 0x004 ; ENTRY DEC S EQU 0x005 DD-RAM ADDR EQU 0x080 /Наименьшее значение 7 разрядного адреса DD_RAM_UL EQU 0x080 /Верхний левый угол индикатора. LIST 209
Глава 17 PIC16C7X 17.3 ИМПУЛЬСНЫЙ ПРЕОБРАЗОВАТЕЛЬ НАПРЯЖЕНИЯ НА БАЗЕ PIC16C72A PIC16C72A занимает среднее место в семействе 8-разрядных быстро- действующих микроконтроллеров. PIC16C72 имеет следующие возможности: • 5 каналов 8 разрядного аналого-цифрового преобразователя (A/D); • модуль ССР для формирования ШИМ; • модуль последовательного интерфейса SPI /12 С ; • 3 таймера; ' • 8 источников прерывания. На примере данного устройства показано как объединить модули А/D и ССР с соответствующим программным обеспечением для реализации им- пульсного преобразователя напряжения с выходным напряжением 3.0, 4.5, 5.0, 6.0, 7.5 и 9.0 В и током до 1 А при входном напряжении 12.6 -г 30 В пе- ременного (АС) или постоянного (DC) тока. 17.3.1 АППАРАТНАЯ РЕАЛИЗАЦИЯ Для реализации импульсного преобразователя напряжения используют- ся следующие модули микроконтроллера: • А/D преобразователь для контроля входного и выходного напряжения; • компаратор / накопитель / ШИМ (ССР) для управления выходным ключом; • таймер 2 для быстрого программного регулирования. Из внешних компонентов требуется только мощный транзисторный ключ и сглаживающий фильтр. Шесть светодиодов на контактах PORTB по- казывают уровень выходного напряжения, который устанавливается, двумя кнопками на контактах PORTA. Дополнительно могут, быть установлены: последовательное СППЗУ для хранения последней установки напряжения и преобразователь уровня канала RS-232 для связи с PC. Схема также предусматривает внутрисхемное последовательное про- граммирование (ICSP). Контакты порта В RB6 и RB7 используются для под- ключения линий ICSP, а также для индикации ошибок светодиодами D7 и D8. Модуль аналого-цифрового преобразователя (A/D) В данном устройстве используются три входа А/D преобразователя. Входные каналы последовательно подключаются к А/D преобразователю. Для корректной работы входные напряжения должны иметь значения между VDD и землей. Результатом А/D преобразования является 8 разрядный код напряжения, который считывается из регистра ADRES. 210
PIC16C7X Глава 17 Модуль компаратора / накопителя / ШИМ (ССР) Модуль ССР формирует сигнал ШИМ, который управляет транзистор- ным ключом. В зависимости от периода ШИМ и частоты FqSC, ширина им- пульса может устанавливаться с точностью от 2 и 10 разрядов. Для формиро- вания ШИМ с модулем ССР используются таймер 2, предделитель таймера 2 и регистр PR2. Таймер 2 и постделитель Таймер 2 совместно с постделнтелем управляет периодом ШИМ модуля ССР. Постделитель увеличивается при сбросе таймера 2 в конце каждого цикла ШИМ и вызывает прерывание при переполнении. Внешние компоненты Силовая цепь предлагаемого импульсного преобразователя напряжения состоит из трех компонентов: • последовательного проходного ключа (Q1); • дросселя (L1); • коммутационного диода (D10). Схема входного фильтра Схема входного фильтра представляет собой стандартный линейный ис- точник питания с максимальным входным напряжением ЗОВ. Силовая цепь преобразователя функционирует от нестабилизированного напряжения (VUNREG), стабилизатор 78L05 обеспечивает питание и опорное напряжение для микроконтроллера. На рис. 17-4 представлена схема входного фильтра. Диодный мост BR1 выпрямляет входное напряжение, которое может быть АС или DC. Конденсатор С6 обеспечивает фильтрацию для уменьшения пульса- ций входного напряжения. Конденсатор С8 сглаживает короткие импульсы, которые возникают когда транзистор Q1 открыт. Конденсатор С7 обеспечи- вает фильтрацию выходного напряжения стабилизатора U2. 211
Глава 17 PIC16C7X Силовая цепь преобразователя На рис. 17-5 представлена схема силовой цепи преобразователя и цепей синхронизации. Нестабилизированное DC напряжение поступает на эмиттер транзистора Q1. Транзистор Q1, дроссель L1 и диод D10 составляют ядро силовой цепи всех импульсных преобразователей напряжения. Выходное на- пряжение снимается с разъема J4. Когда на контакте RC2 (выход ШИМ) микроконтроллера устанавлива- ется высокий уровень, то транзистор Q2 открывается и пропускает ток базы транзистора Q1, открывая его. Когда Q1 открыт, пропускает ток от конденса- торов С6 и С8 через дроссель L1 на нагрузку и одновременно заряжает кон- денсаторы СЮ и СИ. Резистор R19 ограничивает ток базы транзистора Q1, а резистор R17 обеспечивает его быстрое закрытие. Резистор R18 ограничивает ток базы Q2, а резистор R20 обеспечивает его быстрое закрытие. Когда на контакте RC2 устанавливается низкий уровень, R20 закрывает Q2, a R17 закрывает Q1. После того как Q1 закроется, ток через L1 продол- жает течь по контуру LI, D10 и нагрузку, разряжая L1. Когда ток через L1 становится меньше чем требуется нагрузке, СЮ поддерживает этот ток и уменьшает пульсации напряжения на выходе. Для того чтобы в процессе работы транзистор Q1 не нагревался, в от- крытом состоянии он должен быть насыщенным. В режиме насыщения тран- зисторы имеют небольшой коэффициент усиления по току, примерно 5 + 10, это необходимо учитывать при расчетах цепей. Для снижения потерь и нагре- ва транзистора при открывании и закрытии управляющие сигналы должны иметь короткие фронты, чтобы транзистор быстро проходил через линейную область. Если нерегулируемое входное напряжение сильно уменьшается', то тран- зистор Q1 может перейти в линейный режим. Непрерывная работа транзисто- ра Q1B линейном режиме может вызвать его перегрев и повреждение. Для защиты транзистор обычно шунтируют, но это позволяет входному Напряже- нию проходить на выход преобразователя. Резистор R19 выбран так, чтобы Q1 мог безопасно функционировать, пока Уцмредж более 10В. Программное обеспечение контроллера отключает преобразователь, если VU№Effjl( падает ниже ЮВ. На выходе преобразователя возникает большое количество шума. Для уменьшения этого шума служат конденсаторы СЮ и Cl 1. Fl - РТС резистор, функционирующий как самосбрасывающийся предохранитель 1 А. 212
PIC16C7X Глава 17 Цепи микроконтроллера Схема подключения микроконтроллера к аналоговым и цифровым уст- ройствам показана на рис. 17-6. Светодиоды D1 ч- D6 показывают уровень выходного напряжения, a D7 ч- D8 неисправности преобразователя. Резисторные сборки RN5 и RN6 огра- ничивают ток через светодиоды D1-D8. Цепи светодиодов D7 и D8 также ис- пользуются для передачи данных при внутрисхемном последовательном про- граммировании (1С8Р)ГПереходные контакты JP1 позволяют отключить все светодиоды. При программировании микроконтроллера JP1 должен быть ра- зомкнут. Если ICSP функционирует неправильно, то D7 и D8 или RN6 долж- ны быть установлены после программирования. Кнопки S1 и S2 позволяют пользователю выбрать уровень выходного напряжения. Кнопка S1 служит для уменьшения напряжения, a S2 - для уве- личения. Резисторы R13 и R14 определяют неактивный уровень сигналов кнопок. Резисторы R3, R4 и конденсатор С4 составляют схему обратной связи по напряжению. Резисторы R15, R16 и конденсатор С13 составляют схему датчика входного напряжения. Сигнал ШИМ формируется на контакте RC2. Резонатор Y1 и конденсаторы С2 и СЗ определяют частоту FOsc микро- контроллера. Если Y1 - керамический резонатор с встроенными конденсато- рами, то С2 и СЗ не требуются. Резистор R1 подтягивает вход MCLR к + 5 В. Вход MCLR также используется как сигнал разрешения при программирова- нии микроконтроллера. Кроме того, при соединении контактов 1 и 3 разъема J2 формируется дистанционный сброс микроконтроллера (рис. 17-7). 213
Глава 17 PIC16C7X Рис. 17-6 Цепи микроконтроллера Дополнительные устройства Если доработать программу, то в импульсный преобразователь напря- жения могут быть включены дополнительные устройства, схема которых представлена на рис. 17-7. Интегральная микросхема U4 - последовательное СППЗУ, которая мо- жет хранить последнюю установку напряжения при отключении питания. Обмен данными между микроконтроллером и СППЗУ осуществляется в со- ответствии с протоколом 12С. Интегральная схема U3 через разъем J3 обеспечивает связь микрокон- троллера с персональным компьютером по каналу RS-232. Разъем J2 обеспечивает подключение программатора для внутрисхемно- го последовательного программирования установленного на плату микрокон- троллера и позволяет осуществлять дистанционный сброс микроконтроллера по входу MCLR при замыкании контактов 1 и 3. 214
PIC16C7X Глава 17 Рис. 17-7 Дополнительные устройства 17.3.2 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ Инициализация После сброса при включении питания микроконтроллер инициализиру- ется, при этом конфигурируя периферийные устройства: модули А/D, ССР и таймер 2, очищается память, необходимая для переменных, и инициализиру- ются значения некоторых переменных. А также конфигурируются внешние контакты микроконтроллера в соответствии с выполняемой функцией. Контакты RAO, RA1 и RA3 порта А конфигурируются как аналоговые входы, а контакты RA2 и RA5 используются как цифровые входы. В регистре TRISA контакт RA4 конфигурируется как выход, а все остальные как входы. Источником опорного напряжения (Vref) А/D преобразователя устанав- ливается внутреннее напряжение питания микроконтроллера (Vdd). Синхронизация А/D преобразователя выбрана Tosc / 32, чтобы Tad был больше 1.6мкс, но меньше 6.4 мкс. Так как TOsc = 0-1 мкс (Fosc = ЮМГц), то Тдо = 32TOsc ~ 3.2 мкс. Модуль А/D включается и к его входу подключается контакт RAI (VOut) для последующего преобразования. 215
Глава 17:;PIC16C7X Для модуля ССР устанавливается режим ШИМ. Таймер 2 включается с предделителем с коэффициентом 1:1. В регистр PR2 загружается 63 (0x3F), что обеспечивает выходной сигнал ШИМ с частотой - 39.063 кГц ( TPWm = 25.6 мкс). Для управления шириной импульса в модуль ССР загружаются 8- разрядные данные. Для отключения выхода ШИМ при инициализации шири- на импульса устанавливается равной 0. Все контакты порта С конфигурируются как выводы, включая RC2, ко- торый является выходом ШИМ. Таймер 2 определяет частоту, с которой выполняется основной цикл. Коэффициент постделителя таймера 2 устанавливается 1:1 и разрешается прерывание постделителя таймера 2. Это прерывание формируется на каждом цикле ШИМ. Очищается память необходимая для переменных. Переменная SETPOINT инициализируется для формирования выходного напряжения 3.0 В и включается соответствующий светодиод на контактах порта В. Инициа- лизируется счетчик устранения дребезга кнопок. Основной цикл программы Для того чтобы цифровая система функционировала как аналоговый кон- троллер, цифровой цикл регулирования должен выполняться по крайней мере в 30 раз быстрее чем самые быстрые ожидаемые изменения. Частота пульсации в конденсаторе С7 равняется удвоенной частоте входного переменного напряже- ния (100 ч- 120 Гц). Для того чтобы адекватно отреагировать на пульсации входного напряжения цикл регулирования должен выполняться не менее 3600 раз (120 х 30) в секунду. Переходные процессы на выходе преобразователя должны быть также обработаны, но с менее высокой частотой. Прерывания постделителя таймера 2 считаются в программе обработки прерывания. В основной цикл программы вкладывается 8 прерываний по- стделителя таймера 2. Следовательно, основной цикл выполняется 4883 раза в секунду. А/D выполняет преобразование сигнала на контакте RA1/AN1 (VOut)- Программа ожидает завершения преобразования, циклически опрашивая флажок. 8 разрядный результат пересылается в VOut- После чего ко входу А/D преобразователя подключается контакт RA3 для преобразования входно- го напряжения (VUNREG). ПИД регулятор Алгоритм управления реализуется подпрограммой "пропорционально - интегрально - дифференциального" (ПИД) регулятора. На вход регулятора подается всего одно значение - разность между заданным и фактическим зна- чением напряжения на выходе, называемая сигнал ошибки. Первый модуль вычисляет сигнал ошибки, определяет разность между SETPOINT и VOUT. Результат сохраняется в младшем байте 2 байтной пере- 216
PIC16C7X_________________________________________________Глава 17 менной со знаком БОН : ЕО. Старший байт является расширением знакового разряда. Если SETPOINT больший VOUT, то результат положительный. ЕО = SETPOINT - VOUT Если ЕО <7> = 0, то ЕОН = 0x00, иначе ЕОН = OxFF Пропорциональный элемент обеспечивает усиление сигнала ошибки. Пропорциональный элемент быстро компенсирует ошибку выхода, но полно- стью ее не устраняет. При этом значение ошибки со знаком умножается на некоторый коэффициент КР. Результат сохраняется в 2 байтной переменной со знаком PROH:PRO. PROH:PRO = КР * Е0Н:Е0 КР = пропорциональный коэффициент Дифференциальный элемент вычисляет разность между текущей и пре- дыдущей ошибкой и умножает ее на некоторый коэффициент (KD), получен- ный результат сохраняется в 2 байтной переменной со знаком DIFH:DIF. Дифференциальный элемент имеет тенденцию замедлять реакцию. Преды- дущая ошибка Е 1Н:Е1 получена при выполнении предыдущего цикла. DIFHrDIF = KD * (Е1Н:Е1 - Е0Н:Е0) KD = коэффициент дифференцирования Интегральный элемент суммирует все ошибки, полученные, начиная с по- следнего сброса. Интегральный элемент компенсирует всю ошибку, но мед- ленно. Текущая ошибка умножается на некоторый коэффициент (KI) и добав- ляется к накопленному значению в 2 байтной переменной без знака INTHrINT. INTH.INT = INTHJNT + KI * E0H:E0 KI = коэффициент интегрирования Значения, полученные пропорциональным, дифференциальным и инте- гральным элементами, суммируются вместе, сумма сохраняется в 2 байтной переменной со знаком PWMHrPWM. PWMH:PWM = PROH.PRO + DIFH.DIF + INTH:INT Результат всегда должен быть положительным, отрицательное значение вызывает антипереполнение. Если PWMH:PWM антипереполняется (это воз- можно при отсутствии нагрузки), то выходной сигнал PWM должен быть ну- левым, иначе выход преобразователя может стать непредсказуемым. При этом включается индикатор перегрузки. Если PWMH <7> = 1, то PWMH:PWM = 0x0000 и включается индикатор, иначе индикатор выключен. Генератор ШИМ Модуль генератора ШИМ (программный модуль, а не периферийное устройство) отбрасывает 3 младших и 5 старших разрядов и использует ос- тавшиеся 8 разрядов для формирования времени ШИМ. Из оставшихся 8 раз- рядов, 2 младших загружаются в ССР ICON <5:4>, а остальные 6 разрядов (дополняются 2 нулями в старших разрядах, чтобы сформировать байт) за- 217
Глава 17 PIC16C7X гружаются в CCP1RL. При этом начинается преобразование входного напря- жения. Чтение кнопок Состояние светодиодов на контактах PORTB считывается и сохраняется во временной переменной. Считывается состояние кнопки уменьшения напряжения (DN). Если она нажата, увеличивается счетчик устранения дребезга. Если переполнение счетчика устранения дребезга не происходит, то осуществляется контроль состояния кнопки увеличения напряжения (UP). Если счетчик устранения дребезга переполняется, то данные состояния светодиодов сдвигаются на один разряд вправо, если установлен не только 0 разряд. При удержании кнопки переполнение происходит приблизительно каждые полсекунды. Нажатие кнопки увеличения напряжения считывается и обрабатывается аналогично, но данные состояния светодиодов сдвигаются на один разряд влево, если установлено менее 5 разрядов. Состояния светодиодов пересылаются обратно в PORTB для отображе- ния новой установки, а также используются для вычисления индекса, исполь- зуемого при вызове поисковой таблицы. Выполняется обращение к поисковой таблице значений выходного на- пряжения. Подпрограмма поисковой таблицы добавляет индекс в регистре W к счетчику программ. Следующая выполняемая команда - "retlw" команда, которая помещает новый SETPOINT в регистр W и возвращается к следую- щей команде после вызова поисковой таблицы. Возвращенное значение со- храняется как новое значение выходного напряжения в переменной SETPOINT. Счетчики устранения дребезга обоих кнопок сбрасываются. Выполняется А/D преобразование входного напряжения и его результат сравнивается с 0хС1 (значение напряжения 10В). Если входное напряжение меньше 10В, то для безопасности системы вызывается аварийное отключе- ние. Если входное напряжение больше 10В, то выполнение программы про- должается. Значение текущей ошибки eOh:eO пересылается в переменную еlh:e 1. Программа возвращается к началу основного цикла и ожидает прерыва- ния постделителя таймера 2. Обработка прерываний Программа обработки прерываний сохраняет состояние регистров W и STATUS, увеличивает значение счетчика прерываний и восстанавливает ре- гистры W и STATUS. 218
PIC16C7X____________________________________________________Глава 17 Аварийное отключение Модуль аварийного отключения предназначен для отключения преобра- зователя и включения светодиода аварийной сигнализации. Если вызывается данная подпрограмма, то выйти из нее можно только при сбросе микрокон- троллера. Константы ПИД регулятора: КР, KD, и KI Константы КР, KI, и KD были определены экспериментально. Цель состояла в том, чтобы поддерживать выходное напряжение V0UT = 5В в пределах 4.75 4- 5.25 В. Значение V0UT должно оставаться внутри этого диапазона независимо от тока нагрузки. Испытания проводились ступенча- тым изменением тока нагрузки на 10 % от разомкнутого состояния до пре- дельной нагрузки и обратно. А также исследовались другие ступенчатые из- менения нагрузки. Рассматривалась только активная нагрузка (сопротивление). Возможно некоторое снижение производительности и эф- фективности выхода при индуктивной или емкостной нагрузке. Константы, определенные для выходного напряжения 5В, использова- лись и для других выходных напряжений. 219
Глава 17 PIC16C7X 17.3.3 ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ (APPNOTE.ASM) *************************************************************** * Имя файла: APPNOTE.ASM *************************************************************** * Автор: Бретт Дуан * Компания: Microchip Technology * Изменение: версия 1.0 * Дата: 3-9-99 *************************************************************** * Импульсный преобразователь напряжения на базе PIC16C72A. * * Используемые модули: А/D, ССР(ШИМ) и таймер 2 и * постделитель таймера 2 (1:1) для генерации прерываний. * RA0 от переменного резистора 0 - 5В, не используется. * RA1 контроль VOyT. * RA2 кнопка увеличения выходного напряжения. * RA3 контроль Vun.\eg« * RA5 кнопка уменьшения выходного напряжения. * * RB <5:0> светодиоды индикатора выходного напряжения. * RB <7:б> светодиоды индикатора перегрузки или отключения. * * RC2 - выход ШИМ для ключа преобразователя. * Разряды конфигурации: * сброс при снижении питания * защита программы * таймер включения питания * сторожевой таймер * режиме генератора - отключен; - отключен; - включен; - отключен; - XT (резонатор 10MHz). * Используемая память программ: 230 слов. * Используемая память данных: 24 байт. LIST р = 1бс72а # INCLUDE < р16с72а. inc > LIST config _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC cblock 0x020 UPCL UPCH DNCL DNCH SETPOINT VOUT VUNREG ТЕМРА ТЕМРВ INT INTH PRO PROH DIF DIFH PWM РИМН E0 EOH El E1H T2POST ISRS ; Счетчик устранения дребезга кнопки увеличения напряжения. ; Счетчик устранения дребезга кнопки уменьшение напряжения. ; Установленное напряжение. ; Выходное напряжение - результат A/D RA1. ; Входное напряжение - результат A/D RA3. ; Временная переменная. ; Временная переменная. ; Результат элемента интегрирования. ; Результат пропорционального элемента. ; Результат элемента дифференцирования. ; Результат вычисления ШИМ. ; Ошибка выходного напряжения. ; Прошлая ошибка выходного напряжения. ; Счетчик прерываний постделителя. ; Стек S. 220
PIC16C7X Глава 17 ISRW ; Стек W. endc DELI equ 0xf9 ; значение задержки устранения дребезга кнопок. AVOUT equ 0x89 ; значение адреса канала Vour. AVUNREG equ 0x99 ; значение адреса канала Ууказс* . t************!***************************************»**************** ; * Вектор Сброса org goto 0x00 Main ; Вектор сброса, ; начало программы. . ********************************************************************** ; * Подпрограмма обработки прерываний, ; * счет прерываний постделителя таймера 2 ; * Входные переменные : T2POST. ; * Выходные переменные: T2POST. • ************1 A******************************************************** org 0x04 movwf ISRW ; Сохранить W. swapf STATUS, W ; Получить состояние. movwf ISRS ; Сохранить состояние. bcf PIR1, TMR2IF ; Очистить флажок запроса прерывания. incf T2POST, F ; Увеличить счетчик прерываний. swapf ISRS, W ; Восстановить состояние. movwf STATUS swapf ISRW, F ; Восстановить W. swapf ISRW, W • retfie ! Возврат из прерывания. . ************* *****************< а************************************** ; * Начало, инициализация микроконтроллера . ************* ****************** *************************************** Main bcf STATUS, RP1 ; Установить банк 1. bs f STATUS, RPO ; A/D movlw 0x04 ; RA0,l,3 аналоговые, RA2,5 цифровые. movwf ADCON1 ; VRSF = Vdd. movlw 0x2f ; RAO - 3 входы; RA4 выход. movwf TRISA ; ШИМ movlw OxFF ; Установить PORTC, все входы. movwf TRISC bcf TRISC, 2 ; Установить RC2 выход ШИМ. movlw .63 ; Период ШИМ = 39.063 кГц movwf PR2 ; (8 разрядное разрешение). ; ТАЙМЕР 2 bsf PIE1, TMR2IE ; Включить прерывания таймера 2. ; ИНДИКАЦИЯ clrf TRISB ; Установить PORTB, все выходы. bcf STATUS, RPO ; Банк 0. ; A/D movlw AVOUT ; Установить тактирование A/D (Fosc/32), movwf ADCONO ; выбрать RAI (AN1), включить A/D. ШИМ bcf CCP1CON, 4 ; Очистить регистр ширины импульса bcf CCP1CON, 5 ; (выключить PWM). clrf CCPR1L movlw 0x04 ; Включить таймер 2, установить movwf T2CON ; предделитель = 1:1, постделитель = 1:1 221
Глава 17 PIC16C7X moviw ОхОС movwf CCP1CON ; Установить CCP1 в режим ШИМ. t********************************************************************* * Рестарт. * Очистка памяти, инициализация индикации для исходного напряжения * выхода ЗВ, очистка счетчиков антидребезга, разрешить прерывания. * Выходные переменные: SETPOINT, DNCL, DNCH, UPCL, UPCH. ************************************ *•* ******************************** Restart moviw 0x20 ; Очистка памяти 0x20 - 0x3f movwf FSR ClrMem clrf INDF incf FSR, F btfss FSR, 6 goto ClrMem moviw 0x01 ; Индикация 3.0 В. movwf moviw movwf PORTB 0x4d ; SETPOINT Начальная установка Напряжения выхода ЗВ. clrf clrf moviw movwf movwf DNCL UPCL ; DELI DNCH UPCH Очистка счетчиков, антидребезга. bsf bsf INTCON, PEIE INTCON, GIE ************* * * ******** Разрешить прерывания ввода-вывода. Разрешить общие прерывания. *********************************** * * Начало основного цикла. Ожидание 8 прерываний таймера 2, А/D преобразовывает VOUT. * * Входные переменные : T2POST. Выходные переменные: VOUT. ************************************************************************ Again 3 ; Ожидание 8 прерываний таймера 2. btfss goto T2POST, Again clrf T2POST ; Очистить счетчик прерываний. bsf ADCONO, GO_DONE; Пуск А/D преобразования. nop Wc2 btfsc ADCONO, GO_DONE; Ожидание конца преобразования. goto Wc2 movf ADRES, W ; Получить результат преобразования. movwf VOUT ; Сохранить результат. moviw AVUNREG ; Выбрать канал VyHR£0 • movwf ADCONO . ********************************************************************** ; * Вычисление . * ошибки выходного напряжения: E0H:E0 = SETPOINT - VOUT. ; * Входные переменные : SETPOINT. ; * Выходные переменные: E0H:E0. . ************ ********** ************************************************ FERR clrf EOH ; Очистить старший байт ошибки. movf VOUT, W ; ; Вычислить ошибку выходного напряжения subwf SETPOINT, W ; f-w - d. movwf E0 ; Сохранить новую ошибку. btfss STATUS, C ; Результат отрицательный? comf EOH, F ; Да, распространить знак. 222
PIC16C7X Глава. 17 ********************»******************************»**»**********,**** * Пропорциональный элемент: PROH:PRO » EOH:ЕО * КР (КР « 8). * Входные переменные : ЕОН:ЕО, КР. * Выходные переменные: PROH:PRO. Ppp movf movwf movf movwf EO, W TEMPA EOH, W TEMPB ; Загрузить EO во временный регистр. PppD bcf STATUS, C rlf TEMPA, F rlf TEMPB, F bcf STATUS, C . rlf TEMPA, F rlf TEMPB, F bcf STATUS, C rlf TEMPA, F rlf TEMPB, F movf TEMPA, W ; EO умножить на 2. ; ЕО умножить на 2. ; ЕО умножить на 2. ; Сохранить результат. movwf PRO movf TEMPB, W movwf PROH . ***************************** * Дифференциальный элемент: DIFH:DIF = (Е1Н:Е1 - Е0Н:Е0) * KD (KD = 8). ; * Входные переменные : Е1Н:Е1, ЕОН:ЕО, KD. ; * Выходные переменные: DIFH:DIF. DifCom movf Е1Н, W ; Вычислить приращение выходного subwf ЕОН, W ; напряжения. movwf DIFH ; movf El, W ; subwf EO, W ; Сохраните старший байт. movwf DIF ; Сохраните младший байт. btfss STATUS, C Результат отрицательный? decf H, F ; Да, скорректировать старший байт. bcf STATUS, C rlf DIF, F rlf DIFH, F Умножить на 2. bcf STATUS, C rlf DIF, F rlf DIFH, F Умножить на 2. bcf STATUS, C rlf DIF, F rlf DIFH, F Умножить на 2. ********************************* ************************************* * Интегральный элемент: INTH:INT « INTH:INT + ЕОН:ЕО * KI (KI = 8). * Входные переменные : E0H:E0, INTH:INT, KI. * Выходные переменные: DIFH:DIF. ********************************* IntCom ************************************* movf EOH, W ; movwf TEMPB movf EO, W movwf TEMPA Загрузить ошибку во временный регистр bcf STATUS, C Умножить ошибку rlf TEMPA, F; EO rlf TEMPB, F; EOH bcf STATUS, C rlf TEMPA, F; EO перед добавлением к интегралу. 223
Глава 17 PIC16C7X rlf bcf rlf rlf ТЕМРВ, F; ЕОН STATUS, С ТЕМРА, F; ТЕМРВ, F; EO EOH IntD movf ТЕМРА , W ; Интегрирование ошибки. addwf INT, F btfsc STATUS, С ; Перенос? incf INTH, F ; Да, скорректировать старший байт. movf ТЕМРВ, W addwf INTH, F ♦*********»***«***************1к*************************************** * Суммирование пропорциональной, интегральной и дифференциальной * составляющих ошибки: PWMH:PWM -= INTH: INT + PROH: PRO + DIFH:DIF. Если результат отрицательный, результат очищается. ; * Входные переменные : INTH:INT ; * Выходные переменные: PWMH:PWM PROH.-PRO, DIFH:DIF. ****** ******************* *************************************** Total РСОМ movf PROH, W ; Загрузить пропорциональное значение. movwf PWMH movf PRO, W • movwf PWM ICOM movf INTH, W ; Добавить интегральное значение. addwf PWMH, F movf INT, W addwf PWM, F btfsc STATUS, C incf PWMH, F DCOM movf DIFH, W ; Добавить дифференциальное значение. addwf PWMH, F . movf DIF, W addwf PWM, F btfsc STATUS, C incf PWMH, F Ovrld btfsc PWMH, 7 ; Сумма отрицательная? goto NegPwm ; Да. bcf PORTB, 6 ; Нет, отключить индикатор перегрузки. goto PwmGen NegPwm bsf PORTB, 6 ; Включить индикатор перегрузки. clrf PWMH ; Обнулить сумму. clrf PWM . *******,*»*******,****♦»*»**********»********************************* ; * Выделение значения ширины импульса и загрузка его в ССР1, ; * пуск A/О преобразование входного напряжения V;jKa£G. ; * Входные переменные: PWMH:PWM. . ************ «♦о****************************************************** PwmGen rrf PWMH, F ; Отбросить 3 младших разряда rrf PWM, F ; (PWHM:PWM/8). rrf PWMH, F rrf PWM, F rrf PWMH, F ; PWMH дальше не имеет значения. rrf PWM, F bcf CCP1CON, 4 ; Очистить младшие разряды регистра bcf CCP1CON, 5 ; ширины импульса. rrf PWM, F ; Переслать 2 младших разряда btfsc STATUS, C ; в регистр ширины импульса. bsf CCP1CON, 4 rrf PWM, F 224
PIC16C7X Глава 17 btfsc bsf STATUS, C CCP1CON, 5 movf andlw movwf PWM, W ; Выделить 6 оставшихся разрядов. 0x3f CCPR1L ; Переслать в регистр ширины импульса. bsf ADCONO, 2 ; Пуск А/D преобразования V:IKSIG. **»*«**<rHi****'**iH’»********»****«***'****»****»***t«*»****jr***»»,*** Обработка нажатия кнопок, вывод на индикацию установленного напряжения и загрузка нового значения SETPOINT. * Входные переменные: PORTB, DNCH:DNCL, UPCH:UPCL. * Выходные переменные: PORTB, DNCH:DNCL, UPCH:UPCL, SETPOINT. movf andlw movwf PORTB, 0x3f TEMPA w ; Загрузить текущее состояние ; индикатора выходного напряжения. Dnb btfss PORTA, 5 ; Кнопка уменьшения напряжения нажата? goto Upb ; Нет.. incfsz DNCL, f ; Да, увеличить счетчик антидребезга. goto Wc3 ; Нет переполнения счетчика. incfsz DNCH, f goto Wc3 ; Нет переполнения счетчика. bcf STATUS , c ; Установить значение индикатора rrf TEMPA, F ; уменьшенного на 1 шаг напряжения. btfsc STATUS , c ; Было минимальное напряжение? bsf TEMPA, 0 ; Да, установить его снова. goto Dunb Upb btfss : PORTA, 2 ; Кнопка увеличения напряжения нажата? goto Nob ; Нет. incfsz UPCL, f ; Да, увеличить счетчик антидребезга. goto Wc3 ; Нет переполнения счетчика. incfsz UPCH, F goto Wc3 ; Нет переполнения счетчика. bcf STATUS , c ; Установить значение индикатора rlf TEMPA, F ; увеличенного на 1 шаг напряжения. btfsc TEMPA, 6 ; Было максимальное напряжение? bsf TEMPA, 5 ; Да, установить его снова. bcf TEMPA, 6 Dunb movf TEMPA, W ; Переслать состояние индикатора в PORTB movwf PORTB clrf TEMPB decf TEMPB, F ; Установить в TEMPB -1. NewSet incf TEMPB, F ;Подсчитать число светящихся светодиодов rrf TEMPA, F btfss STATUS , c ; Конец счета? goto NewSet ; Нет. movf TEMPB, W ; Да, загрузить число в w. call' ТЫ ; Получить значение нового напряжения. movwf SETPOINT Nob clrf DNCL ; Очистить счетчики устранения дребезга clrf UPCL movlw DELI movwf DNCH movwf UPCH 8 Зак. 1092 225
Глава 17 PIC16C7X ********************************************************************** * Контроль входного напряжения VUNREG, * отключение системы, если напряжение низкое. * Входные переменные: VUNREG. Wc3 btfsc goto movf movwf ADCONO, GO_DONE; Wc3 ADRES, W VUNREG Преобразование закончено. ; Нет, ожидание конца. ; Да, сохранить результат. movlw AVOUT ; Установить канал для следующего movwf ADCONO ; преобразования. movf VUNREG, W sublw 0x50 ; 10V-VUNREG =? btfsc STATUS, C ; С = 1, если VUNREG < 10V. goto ShutDn ; Отключить регулятор. ************* ****************** ************************************** * Сдвиг ошибки (Е1Н:Е1 « Е0Н:Е0), возврат к началу основного цикла. * * Входные переменные : Е0Н:Е0. * Выходные переменные: Е1Н:Е1. ************************11********************************************* Shift movf ЕО, W movwf El movf EOH, W movwf E1H goto Again * Таблица значений выходного напряжения. Входные переменные : W - Смещение в таблице. Выходные переменные: W - Значение из таблицы. ТЫ ; Вызывается с индексом в W. ; Индекс прибавить к PC. addwf PCL, dt F 0x4d, 0x74, 0x82, 0x9b, 0хс2, Охеа Напряжение вывода: 3.0 4.5 5.0 6.0 7.5 9.0 * Защитное отключение системы, включение индикатора аварии, * останов программы. Единственный выход из подпрограммы - сброс микроконтроллера. ShutDn bcf CCP1CON, 4 ; Отключить выход ШИМ. bcf CCP1CON, 5 clrf CCPR1L bsf PORTB, 7 ; Включить индикатор аварии. Dead goto Dead ; Зацикливание программы. END 226
PIC16C7X Глава 17 17.4 ЦАП ДЛЯ ГЕНЕРАЦИИ СИНУСОИДАЛЬНОГО СИГНАЛА И DTMF С ИСПОЛЬЗОВАНИЕМ ШИМ И МАТРИЦЫ R-2R Многие устройства требуют формирования аналоговых сигналов. Хотя сегодня на рынке существует достаточное количество отдельных ЦАП, но их цена дополнительно увеличивает стоимость устройства, что вызывает труд- ности при его внедрении. В данной главе рассматривается два варианта ЦАП для формирования аналогового звукового сигнала с помощью ШИМ и мат- рицы R-2R. Широтно-импульсные модуляторы (ШИМ) и многозвенные рези- стивные схемы требуют всего несколько внешних компонентов для создания ЦАП на базе микроконтроллеров. Эти методы могут использоваться для формирования двухтоновой мультиплексированной частоты (DTMF) для телефонного набора, управления скоростью вращения электродвигателя, формирования звука и сигналов сложной формы и переменного напряжения питания. 17.4.1 МОДУЛЯЦИЯ ШИРИНЫ ИМПУЛЬСА Модулятор ширины импульса (ШИМ) обеспечивает формирование се- рии импульсов с фиксированной частотой и периодом. Формирование формы сигнала осуществляется изменением ширины каждого импульса. Для форми- рования выходного напряжения, пропорционального среднему времени вы- сокого уровня, достаточно простого фильтра низких частот (когда ширина импульса равна 50 % периода, то при напряжении VDD = 5.0 В на выходе фильтра будет напряжение 2.5 В). Эта методика D/А используется для формирования медленных выход- ных аналоговых сигналов (0 ч- 100 Гц). Программа SINE.ASM, написанная для PIC16C71, формирует синусоидальный сигнал частотой 60 Гц с 5 разряд- ным разрешением (32 уровня). Программа позволяет формировать каждый уровень для фильтра низких частот ~ 10 циклов ШИМ. Число циклов ШИМ S* 227
Глава 17 PIC16C7X для фильтра низких частот может изменяться от одного устройства к друго- му. Разработчик должен экспериментировать с этим значением, чтобы найти наиболее оптимальное число для каждого устройства. Эти два критерия (частота синуса и число уровней) определяют частоту периода ШИМ: PWMFREQ = (частота синуса) х (число уровней) х 10 = 60 х 32 х 10 = 19.2 кГц Единственный необходимый внешний компонент для завершения схемы - это простой низкочастотный RC фильтр. В примере для формирования сиг- нала 60 Гц при длительности уровня (частоте ШИМ) 1920 Гц используется низкочастотный фильтр второго порядка. Следует заметить, что при реализации этого устройства используется программный генератор ШИМ, так как может быть реализован на самом де- шевом микроконтроллере. Если необходимо большее разрешение или часто- та, то должен использоваться микроконтроллер с аппаратными средствами формирования ШИМ. Для отсчета временных интервалов при формировании ШИМ использу- ются прерывания TMR0. Время обслуживания этого прерывания ограничивает минимальную и максимальную ширину импульса, а следовательно, и мини- мальное / максимальное выходное напряжение. Поэтому программа обработки прерывания была написана с использованием минимального числа циклов. Методика работы с поисковой таблицей используется, чтобы формировать один период функции синуса. Другие формы сигналов, типа постоянного на- пряжения, пилообразных сигналов, напряжения треугольников формы, звуки и т.д., могут быть сформированы также. Число элементов таблицы равно требуе- мому разрешению. При разработке необходимо тщательно исследовать ком- промиссы между периодом ШИМ, частотой среза RC фильтра и разрешением. 228
PIC16C7X Глава 17 17.4.2 ОПИСАНИЕ ПРОГРАММЫ SINE.ASM Программ SINE.ASM состоит из четырех основных сегментов: 1. Основная программа, обеспечивающая инициализацию устройств и формирование временной диаграмма периода синуса за 32 шага. 2. Подпрограмма установки параметров ШИМ, вычисляющая значения времени для низкого и высокого уровня ШИМ . 3. Таблица, состоящая из 32 значений, для формирования одного пе- риода синуса. 4. Программа обработки прерывания вызывается при переполнении TMRO и устанавливает на выходе низкий или высокий уровень сиг- нала. 17.4.3 ПРОГРАММА ФОРМИРОВАНИЯ СИНУСОИДАЛЬНОГО СИГНАЛА (SINE.ASM) TITLE ” Формирование синусоидального сигнала с помощью ШИМ " LIST Р=16С71 INCLUDE <P16C71.INC> CONFIG СР OFF & PWRTE ON & WDT OFF & XT OSC Файл: Автор: Дата: SINE.ASM Rob Stein 12/20/95 Ассемблер: MPASM VO1.40 Частота: 20 МГц ; Описание: ; Формирование синусоидального сигнала частотой 60 Гц ; через универсальный контакт I/O (RB1) и низкочастотный фильтр. ; Один период сигнала формируется за 32 шага программным модулятором ШИМ. Память программ: 98 слов. Память данных: 6 байт. . л**********-*********************************************************** ; Определение постоянных: FXTAL EQU .20000000 Частота кварцевого резонатора. FINST EQU FXTAL/4 Частота выполнения команд. FSINE EQU .60 Частота функции синуса. STEP# EQU . 32 Число шагов. FSTEP EQU FSINE * STEP# частота шагов. ; Определение регистров: TEMPW EQU 0x20 ; Стек для регистра W. DELAYCNT1 EQU 0x21 ; Счетчик низкого уровня ШИМ. DELAYCNT2 EQU 0x22 ; Счетчик высокого уровня ШИМ. STEPCOUNT EQU 0x23 ; Счетчик шагов. OUTLOW EQU 0x24 ; Значение низкого уровня ШИМ для TMR0. OUTHIGH EQU 0x25 ; Значение высокого уровня ШИМ для TMR0 ; Определение paзрядо : PWM EQU 0x01 ; RB1 используемый как выход ШИМ. 229
Глава 17 PIC16C7X ********************************************************************* Вектор сброса 0x000 start Огд Goto ; Переход к программе. . о******************************************************************* ; Вектор прерываний и программа обслуживания. ; Эта подпрограмма прерывания вызывается при переполнении TMR0 ; (переход из OxFF в 0x00. Контролем уровня на контакте RBI определяется ; устанавливаемый уровень и значение низкого или высокого уровня, ; загружаемого в TMR0 (значение OUTLOW или OUTHIGH). ; Подпрограмма прерывания разработана , чтобы минимизировать число команд ; и обеспечить максимальный диапазон ширины импульса от 5 до 95%. . ********************************************************************** Огд 0x004 Адрес вектора прерывания. IntVector Movwf TEMPW Переслать W в стек. Btfsc PORTB, PWM Уровень на контакте низкий? Goto PWMLOW Нет, установить низкий уровень. PWMHIGH Swapf OUTHIGH, W Да, загрузить значение для TMR0. Bsf PORTB, PWM Nop Задержка, для выравнивания ветвей. Movwf TMRO Загрузите время в TMR0.. Bcf INTCON, TOIF ; Сбросить флажок прерывания TMR0. Swapf TEMPW, F Восстановить W, не изменяя флажки. Swapf TEMPW, W IntEndHi Retfie Возврат из прерывания. PWMLOW Bcf PORTB, PWM ; Установить высокий уровень. Swapf OUTLOW, W Загрузить значение для TMR0. Movwf TMRO ; Загрузите время в TMR0. Bcf INTCON, TOIF ; Сбросить флажок прерывания TMR0. Swapf TEMPW, F Восстановить W, не изменяя флажки. Swapf TEMPW, W IntEndLo Retfie Возврат из' прерывания. ********************************************************************* ; Основная программа . ***»*****«*********************************************************** start Clrf STATUS Очистить регистр состояния. Bsf STATUS, RPO Банк 1. Moviw 0x88 Movwf OPTION_REG ; Предделитель TMR0 1:1, PORTB закрыт. Moviw OxFF Movwf TRISA Установить порт А все входы. Clrf TRISB Установить порт В все выходы. Bcf STATUS, RPO Банк 0. Movwf PORTB Установить высокий уровень на PORTB. Clrf TMRO Инициализировать TMR0. Moviw OxAO Movwf INTCON ; Разрешить общие прерывание и TMRO. ResetStep Moviw STEP# Movwf STEPCOUNT Загрузить счетчик для 32 шагов. StepLoop call Delay ; Программная задержка. Movf STEPCOUNT, W Смещение значения в таблице. call SineTable ; Получить значение из таблицы. call SetPWM ; Установка параметров ШИМ Decfsz STEPCOUNT, F Выполнить шаг. Goto StepLoop Goto ResetStep 230
PIC16C7X Глава 17 Подпрограмма установки параметров ШИМ. Вычисляются значения времени для низкого и высокого уровня ШИМ и сохраняются в переменных OUTLOW и OUTHIGH. SetPWM Bcf INTCON# GIE ; Запретить прерывания. Movwf OUTLOW / Сохранить табличное значение. Comf OUTLOW, W / Получить время высокого уровня. Addlw IntEndHi-IntVector ; Скорректировать его ; на время выполнения программы. Movwf OUTHIGH /Сохранить значение высокого уровня. Movf OUTLOW, W Addlw IntEndHi-IntVector ; Скорректировать значение низкого ; уровня на время выполнения программы. Movwf OUTLOW /» Сохранить значение низкого уровня. Swapf OUTLOW, F ; Поменять полубайты значений для Swapf OUTHIGH, F / загрузки без изменения флажков. Bsf INTCON, GIE ; Разрешить прерывания, return ♦о****************************************************************** Таблица значений для одного периода синуса. 32 значения для формирования выходного напряжения от 0.1 до 0.9 VDD (0.5 - 4.5 вольт) функции синуса. SineTable Addwf PCL, F ; Приращение в таблице. Retlw .0 / Фиктивное значение таблицы. dt . 128 ; 0° (2.5 вольт) dt .148, .167, . 185, .200, .213, .222, . 228 dt .230 ; 90° (4.5 вольт) dt .228, .222, . 213, .200, .185, .167, .148 dt .128 ; 180° (2.5 вольт) dt . 108, .89, .71, .56, .43, .34, . 28 dt .26 / 270° (0.5 вольт) dt .28, .34, .43, .56, .71, .89, .108 ************ *********** ******** *********************** *************** Подпрограмма задержки. Задержка используется для обеспечения точности каждого шага. 32 шага позволяют формировать частоту 60 Гц. Примечание: константы выбраны так, чтобы можно было легко изменить частоту(например: для частоты 50 Гц FSINE = .50). TDELAY EQU ADJTDELAY EQU TDELAYHI TDELAYLO FINST/FSTEP /Число циклов задержки. TDELAY/3 - 55 /Коррекция на время выполнения программы. EQU high ADJTDELAY /Старший байт TDELAY. EQU low ADJTDELAY /Младший байт TDELAY. Delay Movlw TDELAYHI Movwf DELAYCNT2 ; Загрузить старший байт счетчика. Clrf DELAYCNT1 LoopDl Decfsz DELAYCNT1, F / Выполнить 256 циклов. Goto LoopDl ; Decfsz DELAYCNT2, F / Скорректировать старший байт. Goto LoopDl / Movlw TDELAYLO Movwf DELAYCNT1 / Загрузить младший байт счетчика. LoopD2 Decfsz DELAYCNT1, F Goto LoopD2 / return • ****** *************************************************************** END ; Конец программы. 231
Глава 17 PIC16C7X 17.4.4 СХЕМА С ИСПОЛЬЗОВАНИЕМ МАТРИЦЫ R-2R Существует много цифро-аналоговых преобразователей с внутренней матрицей резисторов, управляемых выходами цифрового устройства. В таких схемах резисторы соединены в многозвенную цепь, резисторы одного номи- нала соединены в последовательную цепь, а выходы цифрового устройства подключены к ней через резисторы двукратного номинала. На рис. 17-10 Изготовление ЦАП с матрицей R-2R недорогое, фирма BI Technologies поставляет матрицы R-2R для 8 и 10 разрядных схем. 8 разрядные матрицы R - 2R могут быть созданы с использованием дискретных резисторов. Матрицы R-2R при любом способе изготовления имеют низкие EMI излучения и не- большие высокочастотные гармоники и в большинстве устройств не требуют низкочастотных фильтров. 232
PIC16C7X_____________________________._____________________Глава 17 Микроконтроллеры фирмы Microchip имеют мощные выходы на портах I/O с сопротивлением выходных ключей менее 75 Ом, как для логической 'Г, так и для 'О'. Это позволяет подключать матрицу R-2R непосредственно к вы- ходам микроконтроллера без внешних буферных элементов. Чтобы добиться точности до одного младшего разряда, используя 8 разрядный ЦАП, важно выбрать сопротивление резисторов (в данном случае 20кОм) так, чтобы оно было в 256 раз больше сопротивления источника. Для проверки линейности этого устройства использовалось напряжение питания 5В. Проверка выход- ного напряжения проводилась для всех значений, результаты измерений представлены на рис. 17-11. Формирование синусоидального сигнала Самый простой способ формирования синусоидального сигнала через поисковую таблицу. Для формирования сигнала необходимо определить мак- симально допустимые искажения и максимальную частоту преобразования. При использовании этих двух критериев можно определить необходимое число элементов выборки (таблицы) и время выборки: Число элементов выборки = 100 / (% допустимой неточности шага на- пряжения) Время выборки = (Элементы выборки) х (Частота) Пример: Синус частотой 2 кГц, неточность шага напряжения < 8 % Число элементов выборки = 100 / 5 = 20 элементов Время выборки = 20 х 2,000 = 40 кГц = 50 мс / выборку Для формирования синусоидального сигнала пользователь должен соз- дать поисковую таблицу с достаточным числом элементов выборки для одно- го периода. Программа на каждом шаге считывает очередное значение вы- борки из таблицы и пересылает его в регистр выходного порта, изменяя тем самым выходное напряжение матрицы R-2R. Необходимо обеспечить, чтобы значение каждой выборки пересылалось в регистр выходного порта в задан- ный момент временной диаграммы. 233
Глава 17 PIC16C7X Формирование DTMF Многие устройства телефонной связи, типа программы автонабора но- мера, телефонных вспомогательных клавиатур и систем защиты, требуют передачи сигналов DTMF для набора и передачи данных. При использовании матрицы R-2R и семи поисковых таблиц формирования синуса, можно сгене- рировать сигналы DTMF для всей 12 клавишной вспомогательной клавиату- ры при использовании кварцевого резонатора 3.579545 МГц. Стандарт DTMF был первоначально разработан лабораториями Бэлл для использования в телефонных системах AT&T. Имеются и другие специфика- ции, которые вышли из первоначального стандарта и исходят от AT&T, CEPT, МККТТ, и т.д,. Отличие одного стандарта от другого обычно заключается в допуске от- клонения частоты, мощности, различии мощности между двумя тонами и ре- чевой устойчивостью. Рекомендации стандарта МККТТ размещены в Q. 23 и Q. 24 раздел 4.3, том VI, выпуск VI. 1 красной книги МККТТ. Телефонная вспомогательная клавиатура представляется матрицей, состоящей из 4 строк и 3 столбцов с общим количеством 12 клавиш. Каждая строка и столбец представляется своей частотой, следовательно, каждая клавиша представля- ется суммой частот строки и столбца следующим образом: 234
PIC16C7X Глава 17 Таблица 17-1. Частоты вспомогательной клавиатуры с 12 клавишами Частота 1209 1336 1477 697 1 2 3 770 4 5 6 852 7 8 0 941 * 0 # Например: клавиша1 Г представляется одновременно тоном 697 и 1209 Гц. 17.4.5 ПРИМЕР ПРОГРАММЫ DTMF.ASM Программа DTMF.ASM позволяет формировать таблицу сигналов DTMF для всех 12 клавиш. Для реализации всего алгоритма формирования DTMF необходимо всего 285 слов памяти программ, включая все 7 поиско- вых таблиц генерации синуса. Первые 220 слов памяти программ использу- ются для 7 поисковых таблиц генерации синуса. Каждая поисковая таблица заканчивается десятичным числом 127, чтобы показать конец шаблона пе- риода синуса. Следующий раздел программы содержит поисковую таблицу для каждо- го номера клавиши, который используется для выбора таблицы с шаблоном частоты синуса. Подпрограмма Senddtmf используется для формирования звукового сигнала DTMF с шагом 320 мс. Перед вызовом подпрограммы senddtmf номер клавиши загружается в регистр W. Сначала вычисляются ад- реса таблиц с шаблонами синуса для этой клавиши и загружаются в перемен- ные WAVEABASE и WAVEBBASE. Затем для каждого шаблона синуса вы- бирается значение из таблицы и сумма значений двух шаблонов синуса пере- сылается в PORTB. Если выбранное из таблицы значение равно десятичному числу 127, то указатель на текущую позицию таблицы обнуляется. На рис. 17-12 представлена временная диаграмма сигнала DTMF для клавиши DTMF (941 + 1477) 8 15 22 29 35 43 53 57 54 71 78 «5 92 99 -50 -------------------------------------------- Рис. 17-12 Пример сигнала DTMF клавиши " * " 235
Глава 17 PIC16C7X 17.4.6 ЗАКЛЮЧЕНИЕ Использование метода PWM или матрицы R-2R с микроконтроллером PICMICRO позволяют создавать компактные и недорогие устройства за счет их низкой цены и небольшого числа внешних компонентов. 17.4.7 ПРОГРАММА ФОРМИРОВАНИЯ СИГНАЛА DTMF (DTMF.ASM) Имя файла: DTMF.ASM ; * Автор: John Day ; * Microchip Technology ; * Изменение: 1.1 ; * Дата; 20 декабря, 1995 ; * Используемый компилятор MPASM VI. 40 ; * Конфигурация: OSC: XT (3.579545 МГц) ; * WDT: откл. ; * СР: откл. . ********************************************************************** ; * Эта программа формирует сигналы DTMF для набора номера телефона ; * с использованием внешней матрицы R-2R. . ********************************************************************** ; * Память программ: 220 Слов - таблицы шаблонов синуса (7 таблиц); ; * 25 Слов - вспомогательная таблица; ; * 37 Слов - формирование сигнала DTMF; ; * 5 Слов - Инициализация; ; * 25 Слов - Тест, выборка кода клавиши. ; * Память данных: 8 Байт. . ********************************************************************** list р=16С71 ♦include <р16с71.inc> __CONFIG _XT_OSC&_WDT_OFF&_CP_OFF WAVEABASE EQU lOh ; Базовый адрес шаблона синуса А. POINTERA EQU Uh ; Указатель на текущую позицию таблицы А WAVEBBASE EQU 12h ; Базовый адрес шаблона синуса В. POINTERB EQU 13h ; Указатель на текущую позицию таблицы В NEXTVALUE EQU 14h ; Регистр суммы. SINECOUNT EQU 15h ; Счетчик времени LSB. SINECOUNTH EQU 16h ; Счетчик времени MSB. TEMP EQU 17h ; Временная ячейка. ENDSINE EQU . 127 ; Значение, показывающее конец таблицы. . *********** ************ ******** ******************«**************^**** Resetvector ORG 00h ; Вектор СБРОСА. Goto init ; Перейти к программе инициализации. . *********************** *********************************************** * Sinelookup - подпрограмма состоит из 7 таблиц с шаблонами синуса * для двухчастотного набора вспомогательной клавиатуры(4 X 3). * Частота резонатора: 3.579545 Mhz * Команды / цикл: 35 * Основная частота: 1209 1336 1477 697 770 852 941 Гц * Фактическая частота: 1217 1345 1475 691 774 852 946 Гц * Ошибка: 0.7 0.7 -0.1 -0.9 0.5 0-0.5 % * Число значений в таблице: 21 19 52 37 33 30 27 * Общее число значений: 219. * Память программы: 220 Слов - 7 таблиц с шаблонами синуса. * Память данных: нет ORG 10h sinelookup addwf PCL, F sineoffset ;Используется как адрес для вызова таблиц ,-Прибавить смещение к PC, для перехода. ;Испряьзуется для вычисления адреса. 236
PIC16C7X Глава 17 sinerowl Адрес шаблона синуса для строки 1. dt . 149, .170, .190, 208, .224, .236, .246, .253, .255 dt .254, .250, .242, 230, .216, .199, .180, .160, .138 dt .117, .95, .75, .56, .39, .25, .13, .5, .1 dt .0, .2, .9, .19, .31, .47, .65, .85, .106 dt .127 Конец шаблона синуса. sinerow? Адрес шаблона синуса для строки 2. dt .152, .175, .197, 216, .232, .244, .252, .255, .254 dt .248, .238, .224, 207, .186, .164, .140, .115, .91 dt .69, .48, .31, .17, •7, .1, .0, .3, .11 dt .23, .39, .58, .80, .103, .127 sinerow3 Адрес шаблона синуса для строки 3. dt .154, .180, .203, 223, 238, .249, .255, .255, .249 dt .238, .223, .203, 180, 154, .128, .101, .75, .52 dt .32, .17, .6, .0, .0, .6, .17, .32, .52 dt .75, .101, .127 sinerow4 Адрес шаблона синуса для строки 4. dt .157, .185, .210, 230, 245, .254, .255, .250, .238 dt .221, .198, .171, 142, 113, .84, .57, .34, .17 dt .5, .0, .1, .10, .25, .45, .70, .98, .127 sinecolumna Адрес шаблона синуса для столбца А. dt .165, .200, .228, . 247, 255, .252, .238, .215, .183 dt .147, .108, .72, .40, -17, .3, .0, .8, .27 dt .55, .90, .127 s inecolumnb Адрес шаблона синуса для столбца В. dt .169, .206, .235, . 252, 255, .245, .222, .188, .149 dt .106, .67, .33, .10, .0, .3, .20, .49, .86 dt .127 sinecolumnc ; Адрес шаблона синуса для столбца С (2 периода синуса). dt . 173, .212, .241, . 255, 252, .233, .200, .158, .112 dt .68, .32, .8, .0, .8, .32, .68, .112, .158 dt .200, .233, .252, . 255, 241, .212, .173, .128, .82 dt .43, .14, .0, .3, .22, .55, .97, .143, .187 dt .223, .247, .255, . 247, 223, .187, .143, .97, .55 dt .22, .3, .0, .14, .43, .82, .127 . ********************************************************************** ; * sineaddress - подпрограмма поиска базового адреса таблиц шаблонов, ; * W содержит значение адреса клавиши, возвращает смещение для таблицы. ; * Используется W ; * Память программы: 25 слов • ********************* ************************************************** sineaddress Поисковая таблица для адреса шаблона. addwf PCL, f ; Прибавить смещение к PC, для перехода. keyoffset kl retlw sinerowl-sineoffset ; Смешение для строки 1. retlw sinecolumna-sineoffset ; Смещение для столбца А. k2 retlw sinerowl-s ineoffset ; Смещение для строки 1. retlw sinecolumnb-sineoffset ; Смещение для столбца В. k3 retlw sinerowl-sineoffset ; Смещение для строки 1. retlw sinecolumnc-sineoffset ; Смещение для столбца С. k4 retlw sinerow2-sineoffset ; Смещение для строки 2. retlw sinecolumna-sineoffset ; Смещение для столбца А. k5 retlw sinerow2-sineoffset ; Смещение для строки 2. retlw sinecolumnb-sineoffset ; Смещение для столбца В. k6 retlw sinerow2-sineoffset ; Смещение для строки 2. retlw sinecolumnc-sineoffset ; Смещение для столбца С. k7 retlw sinerow3-sineoffset ; Смещение для строки 3. retlw sinecolumna-sineoffset ; Смещение для столбца А. k8 retlw sinerow3-sineoffset ; Смещение для строки 3. retlw sinecolumnb-sineoffset ; Смещение для столбца В. k9 retlw sinerow3-sineoffset ; Смещение для строки 3. retlw sinecolumnc-sineoffset ; Смещение для столбца С. klO retlw sinerow4-sineoffset ; Смещение для строки 4. retlw sinecolumna-sineoffset ; Смещение для столбца А. kll retlw sinerow4-sineoffset ; Смещение для строки 4. retlw sinecolumnb-sineoffset ; Смещение для столбца В., kl2 retlw sinerow4-sineoffset ; Смещение для строки 4. retlw sinecolumnc-sineoffset ; Смещение для столбца С. keyl = kl-keyoffset ; Значение адрес для клавиши "1". 237
Глава 17 PIC16C7X кёу2 кеуЗ k2-keyoffset k3-keyoffset ; Значение ; Значение адреса адреса для для клавиши клавиши ”2" . " 3 ” . кеу4 = k4-keyoffset ; Значение адреса для клавиши ”4’*. кеу5 = k5-keyoffset ; Значение адреса для клавиши "5" . кеуб кб-keyoffset ; Значение адреса для клавиши ”6" . кеу7 — k7-keyoff$et ; Значение адреса для клавиши "7й. кеу8 — k8-keyoffset ; Значение адреса для клавиши " 8 " . кеуЭ k9-keyoffset ; Значение адреса для клавиши ”9" . keystar = klO-keyoffset ; Значение адреса для клавиши •» * •! кеуО = kll-keyoffset ; Значение адреса для клавиши "0" . keypound - kl2-keyoffset ; Значение адреса для клавиши * senddtmf -* подпрограмма вычисления смещения адреса для двух шаблонов * синуса, которые сохраняются в переменных WAVEABASE и WAVEBBASE. * Подпрограмма вызывается со значением клавиши (кеуО - кеу9 или keystar * или keypound) загруженным в W. Значения сигнала DTMF для клавиши * посылается на матрицу R-2R через portB каждые 320 мс. * Память данных: 8 байт. * Память программы: 37 слов. senddtmf movwf TEMP ; Сохранить значение клавиши. call sineaddress ; Получить адрес синуса для строки. movwf WAVEABASE ; Сохранить базовый Ьдрес А. swapf WAVEABASE, F ! Поменять полубайты WAVEABASE movwf POINTERA Инициализировать указатель адреса А. incf TEMP, W Увеличить смещение для второго синуса. call sineaddress ; Получить адрес синуса для столбца movwf WAVEBBASE ; Сохранить базовый адрес В. swapf WAVEBBASE, F ; Поменять полубайты WAVEBBASE. movwf POINTERS Инициализировать указатель адреса В. movlw 20h ; Подготовить число для счетчика циклов movwf SINECOUNTH ; Инициализировать счетчик циклов. loopsine2cyc goto loopsine ; Два пустых цикла, для общего числа 35. loopsine movf POINTERA, W ; Загрузить адрес значения синуса А. call sinelookup ; Получить первое значение из таблицы. movwf NEXTVALUE ; Сохранить полученное значение. xorlw ENDSINE Сравнить с конечным значением таблиц. swapf WAVEABASE, W ; Подготовить базовый адрес. btfsc STATUS, Z ; Конец таблицы? movwf POINTERA Да, восстановить адрес начала таблицы. incf POINTERA, F ; Увеличить указатель текущего значения movf POINTERS, W ; Загрузить адрес значения синуса В. call sinelookup ; Получить второе значение из таблицы. addwf NEXTVALUE, F ; Прибавить второе полученное значение. xorlw ENDSINE г Сравнить с конечным значением таблиц. swapf WAVEBBASE, W ; Подготовить базовый адрес. btfsc STATUS, Z ; Конец таблицы? movwf POINTERS Да, восстановить адрес начала таблицы. incf POINTERS, F ; Увеличить указатель текущего значения rrf NEXTVALUE, W ; Разделить на 2 выходное значение. movwf PORTB Вывод нового значения на матрицу R-2R. goto waste2cyc ; Два пустых цикла, для общего числа 35 waste2cyc decfsz SINECOUNT, F ; Уменьшить LSB счетчика циклов. goto loopsine2cyc ; Счетчик * 0, повторить цикл. decfsz SINECOUNTH, F ! Уменьшить MSB счетчика циклов. goto loopsine ; Счетчик * 0, повторить цикл. retlw 0 ; Возврат, конец формирования синуса 238
PIC16C7X Глава 17 * init - программа инициализации PIC. PORTB установлен нуль и все * контакты конфигурированы как выходы. * Память программ: 5 слов. init clrf clrw bsf clrf bcf PORTB ; Обнулить регистр порта В. ; Обнулить регистр W. STATUS, RPO ; Банк 1. TRISB ; Установить ПОРТ В все выходы. STATUS, RPO ; Банк 0. * testallkeys - подпрограмма проверки формирования сигналов DTMF * для всех клавиш вспомогательной клавиатуры. * Память программ: 25 слов * testallkeys movlw call movlw call movlw call movlw call movlw call movlw call movlw call movlw call movlw call movlw call movlw call movlw call goto keyl senddtmf key2 senddtmf key3 senddtmf key4 senddtmf key5 senddtmf key6 senddtmf key7 senddtmf key8 senddtmf key9 senddtmf keystar senddtmf keyO senddtmf keypound senddtmf testallkeys ; Имитация нажатия клавиши ”1”. ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "2". ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши ”3". ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "4". ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "5". ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши “6”. ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "7". ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "8”. ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши ’’9*'. ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши "0”. ; Формирование сигнала DTMF клавиши. ; Имитация нажатия клавиши ; Формирование сигнала DTMF клавиши. ; Повторить формирование сигналов. END 239
ПРИЛОЖЕНИЯ ОБЗОР МИКРОКОНТРОЛЛЕРОВ PIC12/17 ТАБЛИЦА 1. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC12CXXX Р1С12С508(А) PIC12C509(A) PIC12CE518 PIC12CE519 Частота Тактовая частота (МГц) 4 4 4 4 Память Программируемое ПЗУ памяти программ 512x12 1024 х12 512х 12 1024х 12 , Память данных (байт) 25 41 25 41 Репрограммируемое ПЗУ памяти данных (байт) - - 16 16 Периферия Модули таймера TMRO TMRO TMRO TMRO А/D преобразователь (8 разрядов) каналов - - - - Особенности Внешне пробуждение из режима останова Да Да Да Да Контакты I/O 6/5 6/5 6/5 6/5 Внутреннее подключение выводов к высокому уровню Да Да Да Да Напряжение питания (В) 2.5-5.5 2.5-5.5 2.5-5.5 2.5-5.5 Внутрисхемное прогр аммирование Да Да Да Да Число команд 33 33- 33 33 Типы корпусе® 8 конт. DIP, SOIC 8 конт. DIP, SOIC 8 конт. DIP, SOIC 8 конт. DIP, SOIC ПРИЛОЖЕНИЯ______________________________PIC16C7X
Продолжение таблицы 1. PIC12C671 PIC12C672 PIC12CE673 PIC12CE674 Частота Тактовая частота (МГц) 10 10 10 10 Память Программируемое ПЗУ памяти программ 1024х 14 2048x14 1024х 14 2048x14 Память данных (байт) 128 128 128 128 Репрограммируемое ПЗУ памяти данных (байт) - - 16 16 Периферия Модули таймера TMR0 TMRO TMRO TMRO А/D преобразователь (8 разрядов) каналов 4 4 4 •4 Особенности Внешне пробуждение из режима останова Да Да Да Да Контакты I/O 6/5 6/5 6/5 6/5 Внутреннее подключение выводов к высокому уровню Да Да Да Да Напряжение питания (В) 25-5.5 2.5-5.5 2.5-5.5 2.5-5.5 Внутрисхемное прогр аммиров ание Да Да Да Да Число команд 35 35 35 35 Типы корпусов 8 конт. DIP, SOIC 8 конт. DIP, SOIC 8 конт. DIP, SOIC 8 конт. DIP, SOIC Все PIC12С5ХХ имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные VО контакты. PICI6C7X____________________________ПРИЛОЖЕНИЯ
242 ТАБЛИЦА 2. МИКРОКОНТРОЛЛЕР СЕМЕЙСТВА PIC 14С000 PIC14C000 Частота Максимальная тактовая частота (МГц) 20 Память Программируемое ПЗУ памяти программ 4 К х 14 слов Память данных (байт) 192 ( Периферия Модули таймера TMRO, ADTMR Последовательные порты PC / SMBus, Программируемый A/D преобразователь 10- Кбит, 8 внешних и 6 внутренних каналов, коэффициенты калибровки хранятся в ПЗУ Компараторы 2 Внутреннее опорное напряжение программируемое Особенности Источники прерываний 11 Контакты I/O 22 Напряжение питания (В) 2.7 - 6.0 Внутрисхемное про гр аммиров ание Да Дополнительные возможности Внутренний RC генератор 4MHz, источник опорного напряжения, датчик температуры,, супервизор напряжения питания, два режима низкого потребления (SLEEP и HIBERNATE ) Типы корпусов 28конт. DIP, SOIC, SSOP ПРИЛОЖЕНИЯ________________________________PIC16C7X
ТАБЛИЦА?. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С15Х PIC16C154 PIC16CR154 PIC16C156 PIC16CR156 PIC16C158 PIC16CR158 Частота Максимальная тактовая (МГц) 20 20 20 20 20 20 Память Программируемое ПЗУ памяти программ 512x12 - 1КБх12 - 2КБ x 12 ПЗУ памяти программ - 512х 12 - 1КБ х 12 - 2КБ x 12 Память данных (байт) 25 25 25 25 73 73 Периферия Модули таймера TMR0 TMR0 TMRO TMRO TMRO TMRO Особенности Контакты I/O 12 12 12 12 12 12 Напряжение питания (В) 3.0-5.5 2.5-55 3.0-5.5 2.5-55 3.0-5.5 2.5-55 Число команд 33 33 33 33 33 33 Типы корпусов 18 конт. DIP, SOIC 20 конт. SSOP 18 конт. DIP, SOIC 20 конт. SSOP 18 конт. DIP, SOIC 20 конт. SSOP 18 конт. DIP, SOIC 20 конт. SSOP 18 конт. DIP, SOIC 20 конт. SSOP 18 конт. DIP, SOIC 20 конт. SSOP Все PIC16C15X имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. PIC16C7X______________________________ПРИЛОЖЕНИЯ
244 ТАБЛИЦА4. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С5Х PIC16C505 PIC16C52 PIC16HV540 PIC16C54A PIC16CR54A PIC16C55 Частота Тактовая частота 20 МГц 4 МГц 20 МГц 20 МГц 20 МГц 20 МГц Память Программируемое ПЗУ памяти программ 1024x12 384x 12 512x12 512x12 - 512x12 ПЗУ памяти программ - - - - 512x12 - Память данных (байт) 72 25 25 25 25 24 Периферия Модули таймера TMR0 TMRO TMRO TMRO TMRO TMRO Особенности Контакты I/O 11/12 12 12 12 12 20 Напряжение питания (В) 2.5-5.5 2.5-6.25 3.5-15 2.0-6.25 2.0-6.25 2.5-6.25 Число команд 33 33 33 33 33 33 Варианты микросхем 14 кон DIP, SOIC 18 кон DIP, SOIC 18 кон DIP, SOIC, 20 кон. SSOP 18кон. DIP, SOIC,. 20 кон SSOP 18 кон DIP, SOIC, 20 кон. SSOP 28 кон DIP, SOIC, SSOP PIC16C56 PIC16CR56 PIC16C57 PIC16CR57B PIC16C58A PIC16CR58A Частота Тактовая частота 20 МГц 20 МГц 20 МГц 20 МГц 20 МГц 20 МГц Память Программируемое ПЗУ памяти программ 1Кх 12 2Кх12 - 2Kxl2 - ПЗУ памяти программ - 1Кх12 - 2Кх12 - 2Kxl2 Память данных (байт) 25 25 72 72 73 73 Периферия Модули таймера TMR0 TMR0 TMR0 TMRO TMRO TMRO Особенности Контакты I/O 12 12 20 20 12 12 Напряж ение питания (В) 2.5-6.25 2.5-6.25 2.5-6.25 2.5-6.25 2.0-6.25 2.5-6.25 Число команд 33 33 33 33 33 33 Типы корпусов 18 кон DIP, SOIC, 20 кон SSOP 18 кон DIP, SOIC, 20 кон. SSOP 28 кон DIP, SOIC,. SSOP 28 кон DIP, SOIC,.. SSOP 18 кон DIP, SOIC, 20 кон. SSOP 18 кон DIP, SOIC, 20 кон. SSOP Все PIC16С5Х (за исключением PIC16С52)имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. ПРИЛОЖЕНИЯ________________________________PIC16C7X
ТАБЛИЦА5. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С55Х PIC16C554 PIC16C554A PIC16C556A PIC16C558 PIC16C558A Частота Максимальная тактовая частота (МГц) 20 20 20 20 20 Память Программируемое ПЗУ памяти программ 512x14 512x14 1024х 14 2048х 14 2048 x 14 Память данных (байт) 80 80 80 128 128 Периферия Модули таймера TMR0 TMRO TMRO TMRO TMRO Компараторы - - - - - Внутреннее опорное напряжение - - - - - Особенности Источники прерываний 3 3 3 3 3 Контакты I/O 13 13 13 13 13 Напряжение питания (В) 2.5-5.5 3.0-5.5 3.0-5.5 2.5-5.5 3.0-5.5 Внутрисхемное прогр аммиров ание Да Да Да Да Да Сброс при снижении питания - - - - - Типы корпусов 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC, 20 кон, SSOP 18 кон. DIP, SOIC, 20 кон. SSOP Все PIC16С55Х имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. PIC16C7X____,.............. - .____ПРИЛОЖЕНИЯ
246 ТАБЛИЦАб. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С6ХХ PIC16C620 PIC16C621 PIC16C622 PIC16C642 PIC16C662 Частота Максимальная тактовая частота (МГц) 20 20 20 20 20 Память Программируемое ПЗУ памяти программ 512x14 1Кх 14 2Кх 14 4К х 14 4Кх 14 Память данных (байт) 80 80 128 176 176 Периферия Модули таймера TMR0 TMRO TMRO TMRO TMRO Компараторы 2 2 2 2 2 Внутреннее опорное напряжение Да Да Да Да Да Особенности Источники прерываний 4 4 4 4 5 Контакты I/O 13 13 13 22 33 Напряжение питания (В) 2.5-6.0 2.5-6.0 2.5-6.0 З.О-б.О З.О-б.О Внутрисхемное прогр аммиров ание Да Да Да Да Да Сброс при снижении питания Да Да Да Да Да Типы корпусов 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC, 20 кон. SSOP 18 кон. DIP, SOIC,. 20 кон. SSOP 28 кон. DIP, SOIC 40кон. DIP, 44 кон. PLCC, MQFP Все PIC16C6XX имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты ПРИЛОЖЕНИЯ________________________________PIC16C7X
247 ТАБЛИЦА?. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С6Х PIC16C61 PIC16C62A PIC16CR62 PIC16C63 PIC16CR63 Частота Максимальная тактовая частота (МГц) 20 20 20 20 20 Память Программируемое ПЗУ памяти программ 1Кх 14 2К х 14 - 4Kx 14 - ПЗУ памяти программ - - 2Kx 14 - 4K x 14 Память данных (байт) 36 128 128 192 192 Периферия Модули таймера TMR0 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 Модули компаратора / накопителя / ШИМ - 1 1 2 2 Последовательные порты - SPI/PC SPI/PC SPI/PC, USART SPI/PC, USART Параллельный порт - - - - - Особенности Источники прерываний 3 7 7 10 10 Контакты I/O 13 22 22 22 33 Напряжение питания (В) 3.0-6.0 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 Внутрисхемное программирование Да Да Да Да Да Сброс при снижении питания Да Да Да Да Да Типы корпусов 18 кон. DIP, SOIC 28 кон. SDIP, SOIC, SSOP 28 кон. SDIP, SOIC, SSOP 28 кон. SDIP, SOIC 28 кон. SDIP, SOIC PIC16C7X______________________________ПРИЛОЖЕНИЯ
Продолжение таблицы 7. PIC16C64A PIC16CR64 PIC16C65A PIC16CR65 PIC16C66 PIC16C67 Частота Максимальная тактовая частота (МГц) 20 20 20 20 20 20 Память Про граммируемое ПЗУ памяти программ 2Кх 14 - 4Kx 14 - 8Kx 14 8Kx 14 ПЗУ памяти программ - . 2Kx 14 - 4Kx 14 - - Память данных (байт) 128 128 192 192 368 368 Периферия Модули таймера TMR0, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 TMRO, TMR1, TMR2 Модули компаратора / накопителя / ШИМ 1 1 2 2 2 2 Последовательные порты SPI/PC SPI/PC SPI/PC, USART SPI/PC, USART SPI/PC, USART spi/pc, ; USART Параллельный порт Да Да Да Да - Да Особенности Источники прерываний 8 8 11 11 10 11 Контакты I/O 33 33 33 33 22 33 Напряжение питания (В) 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 Внутрисхемное программирование Да Да Да Да Да Да Сброс при снижении питания Да Да Да Да Да Да Типы корпусов 40 кон DIP, 44 kohPLCC, MQFP, TQFP 40 кон DIP, 44 kohPLCC, MQFP, TQFP 40 кон DIP, 44 kohPLCC, MQFP, TQFP 40 кон DIP, 44 kohPLCC, MQFP, TQFP 28 кон. SDIP, SOIC 40 кон DIP, 44 kohPLCC, MQFP, TQFP Все PIC16С6Х имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. 1Я_______________________________PIC16C7X
ТАБЛИЦА8. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 16С8Х PIC16F83 PIC16CR83 PIC16F84 PIC16CR84 Частота Максимальная тактовая частота (МГц) 10 10 10 10 Память Флеш память программ 512x14 - 1Кх 14 - ПЗУ памяти программ - 512x14 - IKx 14 Память данных (байт) 36 36 1 68 68 ЭППЗУ данных (байт) 64 64 64 64 Периферия Модули таймера TMR0 TMRO TMRO TMRO Особенности Источники прерываний 4 4 4 4 Контакты I/O 13 13 13 13 Напряжение питания (В) 2.0-6.0 2.0-6.0 2.0-6.0 2.0-6.0 Внутрисхемное прогр аммиров ание Да Да ' ' Да Да Типы корпусов 18 кон. DIP, SOIC 18 кон. DIP, SOIC 18 кон. DIP, SOIC 18 кон. DIP, SOIC ВсеР1С16С8Х имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. PIC16C7X______________-- - -______ПРИЛОЖЕНИЯ
о ТАБЛИЦА 9. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC16C9XX PIC16C923 PIC16C924 Частота Максимальная тактовая частота (МГц) 8 8 Память Программируемое ПЗУ памяти программ 4Кх 14 4Кх 14 Память данных (байт) 176 176 Периферия Модули таймера TMRO, TMR1.TMR2 TMRO, TMR1, TMR2 Модули компаратора / накопителя / ШИМ 1 1 Последовательные порты SPI/PC SPI/PC Параллельный порт - - А/D Преобразователь (8 разрядов) каналов - 5 Модуль управления LCD 4x32 сегм. 4 х 32 сегм. Особенности Источники прерываний 8 9 Контакты I/O 25 25 Входные контакты 27 27 Напряжение питания (В) 3.0-6.0 3.0-6.0 Внутрисхемное программирование Да Да Сброс при снижении питания - - Типы корпусов 64 кон. SDIP, TQFP, 68 кон. PLCC 64 кон. SDIP, TQFP, 68 кон. PLCC Все PIC16C9XX имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. ПРИЛОЖЕНИЯ_______________________________PIC16C7X
L/1 ТАБЛИЦА 10. МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC 17СХХХ PIC17C42A PIC17CR42 PIC17C43 PIC17CR43 Частота Максимальная тактовая частота (МГц) 33 33 33 33 Память Программируемое ПЗУ памяти программ (слов) 2К 4К ПЗУ памяти программ (слов) - 2К - 4К Память данных (байт) 232 232 454 454 Периферия Модули таймера TMRO, TMR1, TMR2, TMR3 TMRO, TMR1, TMR2, TMR3 TMRO, TMR1, TMR2, TMR3 TMRO, TMR1, TMR2, TMR3 Модули накопителя / ШИМ 2 2 2 2 Последовательный порт (USART) Да Да Да Да Особенности Аппаратный умножитель Да Да Да Да Внешние прерывания Да Да Да Да Источники прерываний 11 11 11 И Контакты I/O 33 33 33 33 Напряжение питания (В) 2.5-6.0 2.5-6.0 2.5-6.0 2.5-6.0 Количество команд 58 58 58 58 Типы корпусов 40 кон. DIP, 44 кон. PLCC, MQFP, TQFP 40 кон. DIP, 44 кон. PLCC, MQFP, TQFP 40 кон. DIP, 44 кон. PLCC, MQFP, TQFP 40 кон. DIP, 44 кон. PLCC, MQFP, TQFP PIC16C7X_______________________________ПРИЛОЖЕНИЯ
252 Продолжение таблицы 10. PIC17C44 PIC17C752 PIC17C756 Частота Максимальная тактовая частота (МГ ц) 33 33 33 Память Программируемое ПЗУ памяти программ (слов) 8К 8К 16К ПЗУ памяти программ (слов) - - - Память данных (байт) 454 454 902 ' Периферия Модули таймера TMR0.TMR1, TMR2, TMR3 TMR0.TMR1, TMR2, TMR3 TMR0.TMR1, TMR2, TMR3 Модули накопителя / ШИМ 2 4/3 4/3 Последовательный порт (USART) Да , - 2 2 - Особенности Аппаратный умножитель Да Да Да Внешние прерывания Да Да Да Источники прерываний И 18 18 Контакты I/O 33 50 50 Напряжение питания (В) 2.5-6.0 З.О-б.О З.О-б.О Количество команд 58 58 58 Типы корпусе® 40 кон. DIP, 44 кон. PLCC,MQFP,TQFP‘ 64 кон. DIP, 68 кон. LCC, TQFP 64 кон. DIP, 68 кон. LCC,TQFP Все PIC17CXXX имеют внутренний сброс при включении питания, сторожевой таймер, защиту памяти программ и мощные I/O контакты. ПРИЛОЖЕНИЯ_____.. . . . ________________PIC16C7X
PIC16C7X ПРИЛОЖЕНИЯ СОВМЕСТИМОСТЬ КОНТАКТОВ Микроконтроллеры, которые имеют тот же вариант микросхем и одина- ковое расположение контактов VDD, Vss и MCLR считаются совместимыми по контактам. Совместимость по контактам позволяет этим различным мик- роконтроллерам функционировать в одном и том же сокете. Для замены мо- жет потребоваться только небольшое изменение программного обеспечения, (например, микроконтроллеры PIC16C56 и PIC16C61). Но не все микрокон- троллеры совместимы по контактам: так, PIC16C62 совместим с PIC16C63, но не совместим с PIC16C55. Совместимость по контактам не означает, что устройства имеют одни и те же возможности. Например, PIC16C54 совместим по контактам с PIC16C71, но не имеет А/D преобразователя, внутреннего подключения к высокому уровню на контактах PORTB или прерываний. Таблица 11. Совместимые по контактам микроконтроллеры Совместимые микроконтроллеры Вариант микросхемы PIC12C508, PIC12C509, PIC12C671, PIC12C672 8 контактов PIC16C154, PIC16CR154, PIC16C156, PIC16CR156, PIC16C158, PIC16CR158, PIC16C52, PIC16C54, PIC16C54A, PIC16CR54A, PIC16C56, PIC16C58A, PIC16CR58A, PIC16C61, PIC16C554, PIC16C556, PIC16C558, PIC16C620, PIC16C621, PIC16C622, PIC16C641, PIC16C642, PIC16C661, PIC16C662, PIC16C710, PIC16C71, PIC16C711, PIC16C715, PIC16F83, PIC16CR83, PIC16F84A, PIC16CR84 18/20 контактов PIC16C55, PIC16C57, PIC16CR57B 28 контактов PIC16CR62, PIC16C62A, PIC16C63, PIC16CR63, PIC16C66, PIC16C72, PIC16C73A, PIC16C76 28 контактов PIC16CR64, PIC16C64A, PIC16C65A, PIC16CR65, PIC16C67, PIC16C74A, PIC16C77 40 контактов PIC17CR42, PIC17C42A, PIC17C43, PIC17CR43, PIC17C44 40 контактов PIC16C923, PIC16C924 64/68 контактов PIC17C756, PIC17C752 64/68 контактов 253
и м «Издательство Радюамато Практическая радиоэлектроника С 1993 года ежемесячно от Болгарии до Чукотки от Кавказа до Урала украинский радиолюбительский журнал "Рад1оамат (на русском языке) Подписка в любом отделении связи Украины, России и других стран СНГ Подписной ин В каждом номере журнала: Аудио-видео: Hi-Fi и High-End Электроника и компьютер КВ+УКВ: любительский эфир Связь: прием - передача СК,ТВ: прием со спутника и по кабелю Работает магазин "Книга-почтой". Чрайс-писты - в журнале "Радюаматор" ежемесячно. Открыт прием в члены клуба читателей^ "PadioaMamopa". Подробности - в очередных , . номерах журналов. Пишите, звоните, заходите: 03110, а/я 807, Киев, 110, Украина - > Тел. (38-044) 27141 -71,271-96-49. Факс 276-11 -26;; /F E-mail: ra@sea.com.ua .: /'