Министерство образования Российской Федерации Владимирский государственный университет С.И. Малафеев, А.А. Малафеева, В...
21 downloads
255 Views
2MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации Владимирский государственный университет С.И. Малафеев, А.А. Малафеева, В.С. Мамай В.А. Орлов, М.В. Руфицкий
МИКРОКОНТРОЛЛЕРЫ PIC16C8Х. Архитектура, программирование и применение
Рекомендовано Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальностям «Конструирование и технология электронно-вычислительных средств», «Проектирование и технология радиоэлектронных средств»
Владимир 1999
УДК 621.375(03) М18 Авторы: С.И. Малафеев, А.А. Малафеева, В.С. Мамай, В.А. Орлов, М.В. Руфицкий Рецензенты Кандидат технических наук, зав. лабораторией Национального научного центра горного производства – института горного дела им. А.А. Скочинского А.Г. Павлович Кафедра компьютерных систем автоматизации производства Московского государственного технического университета им. Н.Э. Баумана Печатается по решению редакционно-издательского совета Владимирского государственного университета
М18 Микроконтроллеры PIC16C8Х. Архитектура, программирование и применение: Учеб. пособие / С.И. Малафеев, А.А. Малафеева, В.С. Мамай и др.; Владим. гос. ун-т; Владимир, 1999. 180 с. ISBN 5-89368-148-7 Представлено подробное описание современных RISC микроконтроллеров семейства PIC16C8Х. Рассмотрены примеры практического использования микроконтроллеров в различных системах промышленной автоматики. Предназначено для студентов, обучающихся по специальностям 20.08.00 – проектирование и технология радиоэлектронных средств и 22.05.00 – конструирование и технология электронно-вычислительных средств. Табл. 27. Ил. 59. Библиогр.: 12 назв.
ISBN 5-89368-148-7
©
©
С.И. Малафеев, А.А. Малафеева, В.С. Мамай, В.А. Орлов, М.В. Руфицкий, 1999 Владимирский государственный университет, 1999 2
ВВЕДЕНИЕ В современных системах автоматики, измерительной и электронной техники ведущую роль играют однокристальные микроконтроллеры. Это обусловлено их малой стоимостью и простотой использования, главным образом в системах, работающих в режиме реального времени. Прообразом современных контроллеров с RISC-архитектурой (RISC - Reduced Instruction Set Computer - компьютер с сокращённой системой команд) считают периферийный контроллер поддержки ввода-вывода 16-разрядного процессора, разработанного фирмой GI в 1975 году. В нём не требовалась сложная обработка. Поэтому его набор команд был сильно ограничен, но почти все команды выполнялись за один машинный такт. Благодаря этому обеспечивалось высокое быстродействие вычислительных операций. Современные микроконтроллеры семейства PIC16/17 характеризуются: высокой производительностью; архитектура RISC микроконтроллеров PIC устанавливает новый промышленный стандарт: 5 млн операций в секунду; - электрически перепрограммируемой памятью; - минимальным энергопотреблением; - минимальным размером корпуса. Указанные возможности наряду с низкой стоимостью обеспечили микроконтроллерам семейства PIC множество приложений в различных областях техники: связи, промышленной электронике, автоматике, вычислительной и измерительной технике и др. В настоящем пособии приведено подробное техническое описание микроконтроллеров семейства PIC16C8X фирмы Microchip Technology Inc. и рассмотрены практические примеры их использования в устройствах и системах промышленной автоматики. Авторы выражают благодарность А.В. Бахиреву, П.Б. Ежову Е.М. Ильиной и Р.М. Князеву за помощь в подготовке книги. 3
1. АРХИТЕКТУРА И ОСНОВНЫЕ ФУНКЦИИ МИКРОКОНТРОЛЛЕРОВ PIC16C8X Микроконтроллеры семейства PIC16C8X представляют собой дешевые, высокопроизводительные, полностью статические, 8-разрядные КМОП микроконтроллеры с RISC архитектурой. Система команд содержит только 35 команд. Все команды выполняются за один машинный цикл (400 нс на 10 МГц), кроме команд передачи управления, которые выполняются за два машинных цикла. В своем классе микроконтроллеров PIC16C8X отличаются высокой производительностью за счет компактных 14битных команд. Простые в использовании и легко запоминаемые команды уменьшают время разработки устройства. Микроконтроллеры семейства PIC16C8X имеют особенности, уменьшающие стоимость системы и требования к питанию. Схема запуска по включению питания и таймер запуска генератора позволяют во многих случаях обойтись без внешних схем сброса. Возможен выбор одного из четырех тактовых генераторов, среди которых есть RC генератор и микропотребляющий генератор LP. Дополнительный режим пониженного энергопотребления SLEEP, сторожевой таймер WDT и возможность защиты программы от считывания позволяют эффективно использовать микроконтроллеры этого семейства в широком спектре применений. Изделия семейства поддерживаются: макроассемблером, программным симулятором, внутрисхемным эмулятором, компилятором C, дешевым отладочным программатором и промышленным программатором. Все программные средства предназначены для работы на IBM-совместимых компьютерах. В настоящее время фирма Microchip выпускает следующие типы микроконтроллеров: 1. Электрически перепрограммируемые микроконтроллеры. 2. Микроконтроллеры, программируемые изготовителем (QTР). Эту группу составляют электрически перепрограммируемые устройства, отличающиеся тем, что их программирование осуществляется на заводе-изготовителе. 3. Микроконтроллеры, последовательно программируемые изготовителем (SQTP). В таких изделиях несколько задаваемых 4
пользователем ячеек в каждом микроконтроллере программируются различным серийным номером. Номера могут быть случайными, псевдослучайными или последовательными. Последовательное программирование позволяет каждому устройству иметь собственный уникальный номер, который может использоваться в качестве пароля, кода доступа или идентификации. 4. Масочные микроконтроллеры (ROM), например, PIC16FR83, PIC16FR84, обеспечивают минимальную стоимость при крупносерийных заказах. Такие устройства не позволяют заносить серийный номер в программную память, необходимая информация может быть сохранена в ЭППЗУ данных. 1.1. Архитектура микроконтроллеров Высокая производительность микроконтроллеров PIC16C8X обусловлена большим числом архитектурных особенностей, характерных для RISC микроконтроллеров. PIC16C8X используют Гарвардскую архитектуру, основанную на концепции раздельных шин и областей памяти для данных и команд. Это увеличивает скорость обмена по сравнению с традиционной Принстонской архитектурой, в которой команды и данные передаются по одной и той же шине. Разделение шин команд и данных позволяет увеличить разрядность команды по сравнению с разрядностью данных. Шина данных и память данных (ОЗУ) PIC16C8X имеют разрядность 8 бит, а шина команд и программная память (ЭППЗУ или ПЗУ) имеют разрядность 14 бит. Такая концепция позволяет использовать простую, но мощную систему однословных команд, разработанную так, что битовые, байтовые и регистровые операции выполняются с высокой скоростью и с перекрытием по времени выборок команд и циклов их выполнения. Двухступенчатый конвейер обеспечивает одновременную выборку и исполнение команды. Все команды, кроме команд передачи управления, выполняются за одни цикл (400 нс при тактовой частоте 10 МГц). PIC16F83 и PIC16FR83 адресуют 512 14-разрядных слов памяти программы, а PIC16C84, PIC16F84 и PIC16FR84 адресуют 1024 14разрядных слов памяти программы. Вся память программы является внутренней. 5
Микроконтроллеры PIC16C8X используют прямую и косвенную адресацию всех регистров и ячеек памяти. Все специальные регистры и счетчик команд также отображаются на память данных. Ортогональная (симметричная) система команд позволяет выполнять любую операцию с любым регистром, используя любой метод адресации. Это облегчает программирование для PIC16C8X и значительно уменьшает время, необходимое на обучение работе с микроконтроллером. Регистры PIC16C8X разделяются на две функциональные группы: специальные регистры и регистры общего назначения. Специальные регистры включают в себя регистр таймера/счетчика (TMR0), счетчик команд (PC), регистр состояния (STATUS), регистры ввода/вывода (PORT), регистр косвенной адресации (FSR) и регистры управления встроенным электрически перепрограммируемым ПЗУ (EEADR, EEDATA, EECON1, EECON2). Кроме того, специальные регистры управляют конфигурацией портов ввода-вывода и режимом предварительного делителя. Регистры общего назначения используются программой для хранения переменных по усмотрению пользователя. В микроконтроллере PIC16C8X имеется 8-разрядное арифметикологическое устройство (АЛУ) и рабочий регистр W. АЛУ выполняет сложение, вычитание, сдвиг, битовые и логические операции. В командах, имеющих два операнда, одним из операндов является рабочий регистр W. Второй операнд может быть константой или содержимым любого регистра ОЗУ. В командах с одним операндом, операнд может быть содержимым рабочего регистра или любого регистра ОЗУ. Для выполнения всех операций АЛУ используется рабочий регистр W, который не может быть прямо адресован. В зависимости от результата выполнения операции изменяются значения битов переноса (C), десятичного переноса (DC) и нуля (Z) в регистре состояния STATUS. При вычитании биты C и DC работают как биты заема и десятичного заема соответственно. В описании команд SUBWF и ADDWF приведены необходимые примеры. Структурная схема микроконтроллеров PIC16C8X показана на рис. 1.1, назначение выводов приведено в табл. 1.1.
6
Шина команд
OSC2/CLKOUT OSC1/CLKIN
Времязадающая схема
Декодер команд и схема управления
Регистр команд
14
Память программы ЭППЗУ 512х14 1Кх14
5
13
MCLR
7
Регистры общего назначения (ОЗУ) 36х8 68х8
8
Мультиплексор
Регистр W
АЛУ
Косвенный адрес
Адрес ОЗУ
Регистр состояия
FSR
7
Мультиплесор адреса
Шина данных
Рис. 1.1. Структурная схема PIC16C8X
VDDVSS
Сторожевой таймер
Схема сброса
Таймер запуска генератора
Таймер включения питания
5
Прямой адрес
8-уровневый стек (13 бит)
13
Счетчик команд
Порты ввода/вывода
Таймер TMR0
PORTB
PORTA RA3:RA0
RA4/TOC1
EEADR
ЭППЗУ Память данных 64х8
Память данных ЭППЗУ
EEDATA
7
Таблица 1.1 Назначение выводов PIC16C8X Наименование
DIP
SOIC
Тип
Буфер
RA0 RA1 RA2 RA3 RA4/T0CKI
17 18 1 2 3
17 18 1 2 3
I/O I/O I/O I/O I/O
TTL TTL TTL TTL ST
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6
6 7 8 9 10 11 12
6 7 8 9 10 11 12
I/O I/O I/O I/O I/O I/O I/O
TTL/ST(1) TTL TTL TTL TTL TTL TTL/ST(2)
RB7
13
13
I/O
TTL/ST(2)
MCLR /VPP
4
4
I
ST
OSC1/CLKIN
16
16
I
ST/CMOS(3)
OSC2/ CLKOUT
15
5
O
—
VDD
14
14
Р
—
VSS
5
5
P
—
Примечание Двунаправленный порт ввода/вывода
Выход с открытым стоком/вход таймера TMR0 Двунаправленный порт ввода/вывода. Программируемые подтягивающие резисторы. Вход внешних прерываний
Прерыв. по измен. состояния Прерыв. по измен. состояния Прерывание по изменению состояния, тактирование при программировании Прерывание по изменению состояния, данные при программировании Вход сброса/напряжение программирования. Сброс низким уровнем Вход генератора/внешняя тактовая частота Выход генератора. Подключается к резонатору. В режиме RC выход ¼ тактовой частоты OSC1 Положительное напряжение питания Общий вывод
8
Обозначения: I - вход, O - выход, I/O - вход/выход, P - питание, — не используется, TTL - вход ТТЛ, ST - вход с триггером Шмидта. Примечания: 1. Буфер является триггером Шмидта при использовании в режиме внешних прерываний (кроме PIC16C84, в котором буфер остается ТТЛ). 2. Буфер является триггером Шмидта при использовании в режиме последовательного программирования. 3. Буфер является триггером Шмидта при использовании в режиме RC генератора и КМОП входом в остальных случаях.
Входная тактовая частота, поступающая с вывода OSC1/CKLIN, внутри делится на четыре, и из нее формируются четыре циклические не перекрывающиеся тактовые последовательности Q1, Q2, Q3 и Q4. Счетчик команд увеличивается в такте Q1, команда считывается из памяти программы и защелкивается в регистре команд в такте Q4. Команда декодируется и выполняется в течение последующего цикла в тактах Q1...Q4. Схема тактирования и выполнения команды изображена на рис. 1.2. Цикл выполнения команды состоит из четырех тактов Q1...Q4. Выборка команды и ее выполнение совмещены по времени таким образом, что выборка команды занимает один цикл, а выполнение следующий цикл. Эффективное время выполнения команды составляет один цикл. Если команда изменяет счетчик команд ( например,
Рис.1.2. Цикл выполнения команды
9
команда CALL), то для выполнения этой команды потребуется два цикла (рис. 1.3). Цикл выборки начинается с увеличения счетчика команд в такте Q1. В цикле выполнения команды выбранная команда защелкивается в регистр команд в такте Q1. В течение тактов Q2, Q3 и Q4 происходит декодирование и выполнение команды. В такте Q2 считывается память данных (чтение операнда), а запись происходит в такте Q4. MOVLW Ssh Загрузка 2 MOVWF PORTB Загрузка 3 CALL SUB_1 Загрузка 4 Пропуск PORTA, BIT3 BSF
Рис.1.3. Выборка команд
1.2. Организация памяти Внутренняя память в микроконтроллерах PIC16C8X состоит из двух частей: памяти программы и памяти данных. Память программы и память данных имеют раздельные шины, поэтому доступ к ним может происходить одновременно. Память данных делится на регистры общего назначения (ОЗУ) и специальные регистры. Работа с регистрами общего назначения, относящимися к базовой структуре PIC16C8X, описана в этом разделе. Специальные регистры, используемые для управления периферийными модулями, описаны далее в соответствующих разделах. Память данных PIC16C8X также содержит электрически перепрограммируемое ПЗУ (ЭППЗУ) данных. Эта память доступна косвенным образом через регистры EEADR, EEDATA, EECON1, EECON2. ЭППЗУ имеет объем 64 байта и адреса 00...3Fh. Подробнее ЭППЗУ описано в 1.5. 1.2.1.
Организация памяти программы
Микроконтроллеры PIC16C8X имеют 13-разрядный счетчик команд, способный адресовать до 8K14 слов памяти программы. В PIC16F83 и PIC16FR83 присутствуют только первые 51214 (000010
01FFh) слов памяти программы, а в PIC16C84, PIC16F84 и PIC16FR84 присутствуют 1K14 (0000-03FFh) слов памяти программы, остальные адреса зарезервированы для будущих модификаций. Обращения к адресам свыше физически реализованных вызывают отображение на физически реализованные адреса. Например, для PIC16C84 обращение по адресам 20h, 420h, C20h, 1020h, 1420h, 1820h и 1C20h выберет одну и ту же команду, расположенную по адресу 20h. При сбросе процессор запускается с адреса 0000h, вектор прерывания расположен по адресу 0004h (рис. 1.4).
1.2.2.
Организация памяти данных
Память данных разделяется на две области. Первая представляет собой регистры специальных функций, вторая регистры общего назначения (ОЗУ). Специальные регистры включают в себя регистр таймера/счетчика реального времени (TMR0), счетчик команд (PC), регистр состояния (STATUS), регистры ввода/вывода (PORT) и регистр косвенной адресации (FSR). Кроме того, специальные регистры управляют конфигурацией портов ввода-вывода и режимом предварительного делителя. Регистры общего назначения используются для хранения переменных по усмотрению пользователя. Доступ к части регистров специальных функций, управляющих периферийными устройствами, осуществляется через механизм выбора банков. Биты, управляющие переключением банков, находятся в регистре STATUS. На рис. 1.5. показана организация памяти данных PIC16C8X. Все регистры могут быть адресованы прямо или косвенно, с использованием регистра косвенной адресации FSR. Непосредственная адресация поддерживается специальными командами, загружающими данные из памяти программы в рабочий регистр W. Регистры общего назначения могут быть адресованы прямо или косвенно, с использованием регистра косвенной адресации FSR. 11
Регистры специального назначения используются для управления функциями микроконтроллера (рис. 1.4, табл. 1.2 и 1.3). Регистры специального назначения могут быть разделены на два набора: регистры, относящиеся к базовым функциям и регистры, относящиеся к периферийным устройствам, которые описаны в соответствующих разделах.
PC CALL, RETURN RETFIE, RETLW
...
Стек уровня 1
Память программы
Стек уровня 6 Вектор сброса
0000h
Вектор прерываний
0004h
01FFh (PIC16F83, PIC16FR83) 03FFh (PIC16C84, PIC16F84, PIC16FR84) 1FFFh
Рис. 1.4. Организация памяти программы и стека PIC16C8X
Регистр состояния STATUS содержит флаги состояния АЛУ, состояние контроллера при сбросе и биты выбора страниц памяти данных. Регистр STATUS доступен для любой команды. Однако биты TO и PD устанавливаются аппаратно и не могут быть изменены программно. Это следует иметь в виду при выполнении команд с использованием регистра состояния. Например, команда CLRF 12
Регистры 00 h 01 h 02 h 03 h 04 h 05 h 06 h 07 h 08 h 09 h 0Ah 0Bh 0Ch
Косвенный адрес(*)
Косвенный адрес(*)
TMR0 PCL STATUS FSR PORTA PORTB
OPTION PCL STATUS FSR TRISA TRISB
EEDATA EEADR PCLATH INTCON
EECON1 EECON2 (*) PCLATH INTCON
36/68 регистров общего назначения (ОЗУ)
Отображаются на банк 0
2Fh 30 h (PIC16F83, PIC16FR83 PIC16C84) 4F h 50h (PIC16F84,
80 h 81 h 82 h 83 h 84 h 85 h 86 h 87 h 88 h 89 h 8Ah 8Bh 8Ch
Afh B0h
CFh D0h
PIC16FR84) 7Fh
FFh Банк 0
Банк 1
(*) – не физический регистр; – отсутствует, считывается как 0. Рис. 1.5. Организация памяти данных PIC16C8X 13
Таблица 1.2 Описание регистров PIC16C8X Ад- Название рес Банк 0 00h INDF 01h 02h 03h
TMR0 PCL STATUS(2)
04h 05h
FSR PORTA
Бит 7
Бит 6
Бит 5
Бит 4
Бит 3
Бит 2
Бит 1
Бит 0
Используется значение FSR для доступа к памяти данных (не физический регистр) 8-разрядный счетчик/таймер Младшие 8 разрядов счетчика команд PC IRP RP1 RP0 Z DC C TQ PD Регистр косвенной адресации RA4/ — — —
RA3
RA2
RA1
RA0
TOSKI
06h 07h 08h 09h 0Ah
PORTB EEDATA EEADR PCLATH
0Bh INTCON Банк 1 80h INDF 81h 82h 83h
OPTION
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Не используется, считывается как ‘0’ Регистр данных ЭППЗУ Регистр данных ЭППЗУ — — — Буфер старших 5 разрядов счетчика команд PC(1) GIE EEIE TOIE INTE RBIE TOIF INTF RBIF Используется значение FSR для доступа к памяти данных (не физический регистр) PSA PS2 PS1 PS0 RB P U INTE- TOCS TOSE DG
PCL Младшие 8 разрядов счетчика команд PC STATUS(2) IRP RP1 RP0 TO PD
84h 85h
FSR TRISA
86h 87h 88h
TRISB EECON1
89h 8Ah
EECON2 PCLATH
8Bh
INTCON
Z
DC
C
Регистр косвенной адресации — — — Регистр управления направлением PORTA Регистр управления направлением PORTB Не используется, считывается как ‘0’ — — — EEIF WRE WREN WR RD RR Регистр управления ЭППЗУ (не физический фильтр) — — — Буфер старших 5 разрядов счетчика команд PC(1) GIE EEIE TOIE INTE RBIE TOIF INTF RBIF
14
Таблица 1.3 Регистры PIC16C8X Адрес 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh
Название INDF TMR0 PCL STATUS(2) FSR PORTA PORTB EEDATA EEADR PCLATH INTCON INDF OPTION PCL STATUS(2) FSR TRISA TRISB EECON1 EECON2 PCLATH INTCON
Значение по включению питания ---- ---Xxxx xxxx 0000 0000 0001 1xxx Xxxx xxxx - - - x xxxx xxxx xxxx ---- ---Xxxx xxxx Xxxx xxxx - - - 0 0000 0000 000x ---- ---1111 1111 0000 0000 000? ?xxx Xxxx xxxx - - - 1 1111 1111 1111 ---- ---- - - 0 x000 ---- ---- - - 0 0000 0000 000x
Значение по сбросу по MCLR и WDT ---- ---uuuu uuuu 0000 0000 000? ?uuu uuuu uuuu - - - u uuuu uuuu uuuu ---- ---uuuu uuuu uuuu uuuu - - - 0 0000 0000 000u ---- ---1111 1111 0000 0000 000? ?uuu uuuu uuuu - - - 1 1111 1111 1111 ---- ---- - - 0 ?000 ---- ---- - - 0 0000 0000 000u
Обозначения: x - не определено, u - не меняется, – - отсутствует, читается как ‘0’, ? - зависит от условий. Примечания: 1. Старшие разряды счетчика команд непосредственно не доступны. Обращение к старшим битам осуществляется через регистр PCLATH (PC). Содержимое PCLATH может быть записано в старшие разряды счетчика команд PC, но содержимое PC не может быть записано в PСLATH. 15
2. Биты TO и PD регистра STATUS не изменяются по сигналу сброса MCLR . 3.Заштрихованы физически отсутствующие биты.
STATUS обнулит все биты, кроме битов TO и PD , а затем установит бит Z = 1. После выполнения этой команды регистр состояния будет иметь значение 000u u100 ( TO и PD не изменились). Поэтому рекомендуется для изменения регистра состояния использовать только команды битовой установки BCF, BSF, а также MOVWE и SWAPF, которые дополнительно не меняют биты регистра состояния. Биты IRP и RP1 (STATUS ) не используются в PIC16C8X и должны быть программно установлены в ‘0’. Использование этих битов в качестве битов общего назначения не рекомендуется для совместимости с новыми продуктами. Биты C и DC при вычитании функционируют как биты заема и десятичного заема, соответственно. Подробнее описание приведено в табл.1.4. Если регистр STATUS используется в качестве регистра назначения для команд, изменяющих биты Z, DC и C, то непосредственно запись в эти три бита запрещается. Биты устанавливаются в соответствии с внутренней логикой контроллера. Воздействие команд на биты регистра состояния описано в гл. 2. Регистр OPTION (табл.1.5) доступен для чтения и записи и содержит управляющие биты, которые определяют коэффициенты деления и использования предварительного делителя, источник внешних прерываний, а также подтягивающие резисторы на PORTB. Если предварительный делитель установлен на сторожевой таймер WDT (PSA = ‘1’), то таймер TMR0 имеет коэффициент деления 1:1.
Регистр INTCON (табл.1.6) доступен для чтения и записи и содержит биты разрешения прерываний и флаги прерываний от различных источников. Флаги прерываний устанавливаются при возникновении условия прерывания независимо от состояния соответствующих битов разрешения прерываний и бита общего разрешения прерываний GIE (INTCON). 16
Таблица 1.4 Регистр состояния STATUS Регистр: STATUS R/W IRP бит 7
Адрес
R/W RP1
R/W RP0
C
Carry/ Borrow Перенос/ Заём
DC
Digit carry/ Borrow Десятичный перенос/ Заём
Z
Zero Ноль
PD
Power down Выключение питания
TO
Time-out Тайм-аут
03h, 83h
Состояние по включению питания: 0001 1xxx
R
R
TO
PD
R/W Z
R/W DC
R/W C бит 0
Бит является флагом переноса команд сложения ADDWT, ADDLW и инверсным флагом заема для команд вычитания SUBWF, SUBLW. Бит устанавливается в ‘1’ в командах сложения ADDWT и ADDLW, если в результате операции из старшего разряда произошел перенос (результат больше 0FFh). При выполнении команд сдвига RRF, RLE бит загружается из младшего или старшего бита сдвигаемого регистра, соответственно. Вычитание осуществляется путем прибавления дополнительного кода второго операнда. Бит устанавливается в ‘1’ в командах вычитания SUBWF и SUBLW, если при вычитании не произошло заема (результат больше или равен 0) Бит устанавливается в ‘1’ в командах ADDWF и ADDLW, если произошел перенос из бита 3 результата. Бит устанавливается в ‘1’ в командах вычитания SUBWF и SUBLW, если при вычитании не произошло заема из бита 4 Бит устанавливается в ‘1’, если результат арифметической или логической операции равен нулю Бит устанавливается в ‘1’ по выключению питания по команде CLRWDT. Бит сбрасывается в ‘0’ по команде SLEEP Бит устанавливается в ‘1’ по включению питания, а также командами CLRWDT и SLEEP. Бит сбрасывается в ‘0’ по срабатыванию сторожевого таймера 17
Окончание табл. 1.4 Биты RP0, RP1 выбирают одну из четырех страниц памяти данных: RP1 RP0 : PR0 Register Bank 0 0 : страница 0 (000h...07Fh) RP1 Select Выбор 0 1 : страница 1 (080h...0FFh) страницы памя- 1 0 : страница 2 (100h...17Fh) ти программы 1 1 : страница 3 (180h...1FFh) Для PIC16C8X используется только бит RP0. Бит RP1 должен быть установлен в ‘0’ IRP Unimplemented Не используется. Бит должен быть установлен в ‘0’ Не используется Обозначения: R - только чтение, R/W - чтение и запись.
Таблица 1.5 Регистр OPTION Регистр: OPTION R/W R/W INTDG RB P U бит7
Адрес 81h R/W R/W T0CS T0SE
PS0, PS1, PS2
Prescaler Value Значение предварительного делителя
PSA
Prescaler Assigment Назначение предварительного делителя
Состояние по включению питания: 1111 1111 R/W R/W R/W R/W PSA PS2 PS1 PS0 бит0 КоэфКоэфPS2 PS1 PS0 фициент фициент деления деления TMR0 WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8 1:4 0 1 1 1:16 1:8 1 0 0 1:32 1:16 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128 1 – Предварительный делитель включен после WTD 0 – Предварительный делитель включен перед WTD 18
Окончание табл. 1.5 TOSE
TOCS
INTEDG
RBPU
TMR0 source edge select Выбор фронта переключения TMR0 TMR0 clock source select Выбор источника тактирования TMR0 фронта переключения Interrupt Edge select Выбор фронта переключения RB0/INT PORTB Pull-Up enable Разрешение подтягивающих резисторов на PORTB
1 - TMR0 увеличивается по перепаду 1/0 на входе TOCKI 0 - TMR0 увеличивается по перепаду 0/1 на входе TOCKI 1 - Сигнал со входа TOCKI 0 - Внутренняя тактовая частота CLKOUT=CLKIN/4
1 - Прерывание по перепаду 0/1 на входе RB0/INT 0 - Прерывание по перепаду 1/0 на входе RB0/INT 1 - Подтягивающие резисторы на PORTB отключены 0 - Подтягивающие резисторы на PORTB отключены на всех разрядах, запрограммированных как входы
Обозначения: R/W - чтение и запись.
1.2.3. PCL и PCLATH Счетчик команд (PC) 13-разрядный. Младшим байтом счетчика команд служит регистр PCL, доступный для чтения и записи. Старшие разряды счетчика команд PC не могут быть непосредственно считаны или записаны, а адресуются через регистр PCLATH. Содержимое регистра PCLATH заносится в счетчик команд, когда PC загружается новым значением. Это происходит в командах CALL, GOTO и при записи в PCL. По сигналу RESET в счетчик команд записывается ‘0’. Загрузка счетчика команд в различных ситуациях показана на рис. 1.6. 19
Таблица 1.6 Регистр INTCON Регистр: INTCON R/W R/W GIE EEIE
бит 7
Адрес 0Bh,8Bh R/W R/W T0IE INTE
Состояние по включению питания: 0000 000x R/W R/W R/W R/W RBIE TOIF INTF RBIF
бит 0
RBIF RB port change Interrupt Flag bit. Устанавливается в ‘1’ по Флаг прерывания по изменению изменению состояния хотя бы на состояния порта B одном из входов RB7:RB4. Сбрасывается программно INTF RB0/INT Interrupt Flag bit. Устанавливается в ‘1’ по Флаг прерывания INT прерыванию INT. Сбрасывается программно TOIF TMR0 Oferflow Interrupt Flag bit. Устанавливается в ‘1’ при Флаг прерывания по переполнении таймера TMR0. переполнению таймера TMR0 Сбрасывается программно RBIE RB port change Interrupt enable RBIE = 0: запрещает прерывания bit. от INTF; Маска прерывания RBIF RBIE = 1: запрещает прерывания от RBIF INTE RB0/INT Interrupt Enable bit. INTE = 0: запрещает прерывания Маска прерывания INT от INTF; INTE = 1: запрещает прерывания от INTF TOIE TMR0 Oferflow Interrupt bit. TOIE = 0: запрещает прерывания Маска прерывания TMR0 от TOIF; TOIE = 1: запрещает прерывания от TOIF EEIE EE write complete Interrupt bit. EEIE = 0: запрещает прерывания Маска прерывания от записи в от EEIF; ЭППЗУ EEIE = 1: запрещает прерывания от EEIF GIE Global Interrupt Enable bit. GIE = 0: прерывания запрещены; Флаг разрешения прерываний GIE = 1: разрешены все немаскированные прерывания Обозначение: R/W — чтение и запись.
20
Рис. 1.6. Загрузка счетчика команд в различных ситуациях
Вычисляемый переход осуществляется путем добавления смещения к счетчику команд (ADDWF PCL). При осуществлении табличного чтения с использованием вычисляемых переходов следует внимательно рассматривать случаи, когда таблица пересекает границу, определяемую разрядностью PCL (каждые 256 байт). Подробное описание приведено в примере применения AN556 “Реализация табличного чтения”.
Стек. Микроконтроллеры семейства PIC16C8X содержат 8-уровневый аппаратный стек (см. рис. 1.4). Стек не является частью памяти программы или памяти данных, а указатель стека не может быть считан или записан. При выполнении команды CALL или при прерывании в вершину стека заносится содержимое счетчика команд, предварительно увеличенное на единицу. Одновременно старое значение из вершины стека переписывается в стек следующего уровня. Значение из стека извлекается по командам RETURN, RETLW и RETFIE. Содержимое регистра PCLATH не изменяется при операциях со стеком. Стек работает как последовательный буфер. После того, как в стек было подряд занесено восемь значений счетчика команд, девятое значение переписывает значение, которое было занесено первым. Десятое значение перепишет значение, занесенное вторым, и так далее. При девятом и последующих последовательных извлечениях из стека будет считано то же значение, что и при восьмом извлечении, а именно значение, которое было занесено в 21
стек первым. Биты, указывающие на переполнение и пустоту стека, отсутствуют. Страничная адресация памяти программы. Микроконтроллеры PIC16F83 и PIC16FR83 имеют 512 слов памяти программы, PIC16C84, PIC16F84 и PIC16FR84 имеют 1024 слова памяти программы. Команды CALL и GOTO позволяют осуществлять переходы в диапазоне 2048 адресов, поскольку имеют 11-разрядное поле адреса. Биты PCLATH, предназначенные для переключения страниц памяти программы, не используются в PIC16C8X. Использование этих битов в качестве битов общего назначения не рекомендуется для совместимости с новыми продуктами. 1.2.4. Косвенная адресация данных Регистр INDF физически не существует и используется совместно с регистром FSR для косвенной адресации данных (рис.1.7). Любая команда, использующая регистр INDF, в действительности обращается к регистру данных, адресуемому регистром косвенной адресации FSR. Например, в команде ADDWF INDF, к регистру W будет прибавлено содержимое регистра, адрес которого находится в FSR. Чтение косвенным образом самого регистра INDF даст результат 00h (т.е. FSR = 0). Косвенная запись в регистр INDF аналогична, хотя биты состояния могут быть изменены. Программа, использующая косвенную адресацию для записи нулей в 16 последовательно расположенных ячеек ОЗУ с адреса 2Fh, приведена в примере 1.2.1. Пример 1.2.1. Использование косвенной адресации. movlw 020 ; Заносим в FSR адрес первой очищаемой ячейки памяти. movwf FSR ; NEXT clrf INDF ; Это начало цикла очистки ячеек. Команда, адресующаяся к регистру INDF, в результате по очереди очищает все ячейки. 22
incf
FSR, 1
btfss goto CONT
FSR,4 NEXT …
; Следующий адрес. Когда пройдут все 16 адресов (10h), в регистре FSR окажется установленным бит 4 (00110000=30h) и цикл закончится ; Все закончено? ; Нет, следующая ячейка. ; Продолжение программы. 1.3. Регистры Ввода/Вывода
Микроконтроллеры семейства PIC16C8X имеют два порта ввода/вывода, PORTA и PORTB. Некоторые разряды портов имеют дополнительные функции. Программа может считывать и записывать данные в регистры ввода-вывода аналогично регистрам общего назначения. При чтении всегда считывается действительное состояние выводов, независимо от того, запрограммированы отдельные биты как входы или как выходы. После сброса все разряды программируются как входы
Рис. 1.7. Прямая и косвенная адресация 23
(выходы находятся в высокоимпедансном состоянии), поскольку регистры управления портами TRISA и TRISB устанавливаются в ‘1’. Разряд порта ввода-вывода определяется как выход, если соответствующий бит в регистре управления портом установлен в ‘0’. 1.3.1. Регистр PORTA Регистр ввода-вывода PORTA (рис.1.8 и рис.1.9) имеет разрядность 5 бит. Старшие 3 бита физически отсутствуют и считываются как ‘0’. Разряд RA4 имеет вход с триггером Шмидта и выход с открытым стоком. Все остальные разряды PORTA имеют ТТЛ входные уровни и КМОП выходы. Разряд RA4 объединен с входом таймера TMR0. Описание регистра PORTA приведено в табл. 1.7. Описание регистров, связанных с PORTA, дано в табл. 1.8. Таблица 1.7 Описание регистра PORTA Наименование RA0 RA1 RA2 RA3 RA4/T0CKI
Тип I/O I/O I/O I/O I/O
Буфер TTL TTL TTL TTL ST
Примечание Вход/выход. Вход/выход. Вход/выход. Вход/выход. Вход/выход с открытым стоком/вход таймера TMR0.
Обозначения: TTL - вход, ST - вход с триггером Шмидта.
Пример 1.3.1. Инициализация PORTA. CLRF PORTA
;Очистка выходных защелок PORTA.
BSF STATUS, RB0
;Выбор банка 1.
MOVLW 00F MOLWE TRISA
;Значение для выбора направления. ;Установить RA как входы и RA4 как выход. ;Выбор банка 1.
BCF STATUS, PR0
24
Рис.1.8 Структурная схема RA
Рис.1.9. Структурная схема вывода RA4
Таблица 1.8 Описание регистров, связанных с PORTA Адрес 05h
Название PORTA
85h
TRISA
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1
Бит 0 RA0
—
—
—
RA4/ T0CKI
—
—
—
Регистр управления направлением PORTA
RA3
RA2
RA1
АдНазваЗначение по включению Значение по сбросу по рес ние питания M C LR и WDT 05h PORTA - - - x xxxx - - - u uuuu 85h TRISA - - - 1 1111 - - - 1 1111 Обозначения: x - не определено, u - не меняется, — - отсутствует, читается как ‘0’, ? - зависит от условий. Заштрихованы физически отсутствующие биты. 25
Для PIC16C84 в конфигурации с кварцевым резонатором и тактовой частоте менее 500 кГц могут возникать ложные импульсы внутреннего генератора при переключении состояния вывода RA0 PORTA. Этого не происходит при внешнем тактировании и в конфигурации с PC генератором. Для предотвращения подобных ситуаций рекомендуется сохранять вывод RA0 в статическом состоянии и не переключать его с входа на выход. 1.3.2. Регистр PORTВ Регистр ввода-вывода PORTB (рис.1.10 - 1.12) 8-разрядный. Все разряды PORTB имеют внутренние подтягивающие резисторы, которые могут быть включены установкой в ‘0’ бита RBPU (OPTION). Подтягивающие резисторы автоматически отключаются, если соответствующий разряд программируется как выход. По включению питания подтягивающие резисторы отключаются. Имеется возможность прерывания по изменению состояния от четырех разрядов PORTB (выводы RB7:RB4). Прерывание может возникнуть только от тех разрядов PORTB, которые запрограммированы как входы, выходы не включаются в процедуру сравнения. Текущее состояние разрядов PORTB, запрограммированных как входы, сравнивается с состоянием, защелкнутым в регистр PORTB при последнем считывании. При несовпадении возникает прерывание по изменению состояния, которое может вывести микроконтроллер из режима пониженного энергопотребления SLEEP. Для сброса прерывания в подпрограмме обработки необходимо выполнить следующие действия. Считать PORTB, это сбросит условие несовпадения. Сбросить флаг RBIF; считывание PORTB необходимо для сброса флага RBIF. Прерывание по несовпадению совместно с программно управляемыми подтягивающими резисторами позволяет легко реализовать интерфейс клавиатуры и обеспечить выход из режима пониженного энергопотребления по нажатию клавиши. Обработка прерывания по изменению состояния имеет особенности для отдельных процессоров. 26
Рис. 1.10. Структурная схема выводов RB
PIC16C84. Если изменение состояния одного из разрядов PORTB происходит в момент считывания PORTB (в начале цикла Q2), то флаг прерывания RBIF может не установиться и, соответственно, прерывание по изменению не произойдет. Поэтому не рекомендуется опрашивать PORTB при использовании прерывания по изменению состояния. PIC16F83/FR83/F84/FR84. Для возникновения прерывания по изменению состояния минимальная длительность импульса должна быть не менее TCY. Подробное описание регистра PORTB дано в табл.1.9. Описание регистров, связанных с PORTB, приведено в табл. 1.10. Пример 1.3.2. Инициализация PORTB. CLRF PORTB ; Установка выходных регистров PORTB. BSF STATUS, RB0 ; Выбор банка 1. MOVLW 0CF ; Значение для задания направления. MOVWF TRISB
; Установить RB как входы, RB ; как выходы и RB как входы. 27
Таблица 1.9 Описание регистра PORTB Наименование RB0/INT
Тип
RB1
I/O
RB2
I/O
TTL
RB3
I/O
TTL
RB4
I/O
TTL
RB5
I/O
TTL
RB6
I/O
TTL/ST(2)
RB7
I/O
TTL/ST(2)
I/O
Буфер
Примечание
TTL/ST(1) Вход/выход, вход внешних прерываний. Программируемый подтягивающий резистор TTL Вход/выход. Программируемый подтягивающий резистор Вход/выход. Программируемый подтягивающий резистор Вход/выход. Программируемый подтягивающий резистор Вход/выход, прерывание по изменению. Программируемый подтягивающий резистор Вход/выход, прерывание по изменению. Программируемый подтягивающий резистор Вход/выход, прерывание по изменению, тактирование при программировании Программируемый подтягивающий резистор Вход/выход, прерывание по изменению, тактирование при программировании. Программируемый подтягивающий резистор
Обозначения: TTL - вход, ST - вход с триггером Шмидта. Примечания: 1. Буфер является триггером Шмидта при использовании в режиме внешних прерываний (кроме PIC16C84, в котором буфер ТТЛ). 2. Буфер является триггером Шмидта при использовании в режиме последовательного программирования. 28
Рис.1.11. Структурная схема выводов RB для PIC16С84
Рис. 1.12. Структурная выводов RB PIC16F83/FR83/F84/FR84
схема для
Таблица 1.10 Описание регистров, связанных с PORTB Ад- Назва- Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит рес ние 0 06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 81h OPTION RB PU INT T0CS T0SE PSA PS2 PS1 PS0 EDG 86h TRISB регистр управления направлением PORTB Ад- Назварес ние 06h PORTB 81h OPTION 86h TRISB
Значение по включению питания хxxx xxxx 1111 1111 1111 1111
Значение по сбросу по M C LR и WDT uuuu uuuu 1111 1111 1111 1111
Обозначения: x - не определено, u - не меняется. Заштрихованы не связанные с PORTB биты. 29
1.3.3. Программирование портов Организация двунаправленных портов. Некоторые команды выполняются в режиме чтение - модификация - запись. Например, команды BCF и BSF считывают содержимое порта целиком, модифицируют один бит и выводят результат обратно. При использовании этих команд с портами, в которых некоторые разряды запрограммированы как входы, а некоторые как выходы, необходима осторожность. Например, команда BSF для пятого бита регистра PORTB сначала считывает все восемь бит, затем выполняется установка пятого бита и новое значение байта целиком записывается в выходную защелку. Если другой бит регистра PORTB используется в качестве двунаправленного входа/выхода (например бит 0) и в данный момент он определен как вход, входной сигнал на этом выводе будет считан и записан обратно в выходную защелку этого же вывода, затирая ее предыдущее состояние. До тех пор, пока этот вывод остается в режиме входа, никаких проблем не возникает. Однако если позднее линия 0 переключится в режим выхода, ее состояние будет неопределенным. Команда считывания порта считывает состояние вывода, а не выходных регистров. Например, если разряд порта запрограммирован как выход и установлен в ‘1’, но внешняя схема поддерживает низкий уровень на выводе, порт будет считываться как ‘0’. На вывод, работающий в режиме выхода, не должны подключаться внешние нагрузки по схеме “монтажное И” либо “монтажное ИЛИ”. Возникающие при этом большие токи могут повредить кристалл. Обращение к портам ввода-вывода. Запись в порт вывода происходит в конце цикла выполнения команды. При чтении данные должны быть стабильны в начале цикла выполнения команды (рис.1.13). Будьте внимательны при операциях чтения, следующих сразу же за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на выводе успело стабилизироваться до начала исполнения следующей команды чтения. Время установления напряжения на выводе зависит 30
от подключенной к нему нагрузки и может меняться в широких пределах. Пример 1.3.3. Выполнение операции чтение – модификация запись с портом ввода-вывода. ; Начальные установки порта: PORTB - входы, ; PORTB - выходы. ; Разряды PORTB имеют внешние нагрузки. ; ; ; Защёлка PORTB Выводы PORTB ; BCF PORTB, 7 ; 01pp pppp 11pp pppp BCF PORTB, 6 ; 10pp pppp 11pp pppp BCF STATUS, RPO BCF TRISB, 7 ; 10pp pppp 11pp pppp BCF TRISB, 6 ; 10pp pppp 10pp pppp ; ;Примечание: можно было предположить, что результирующее ;значение будет 00pp pppp. Однако вторая команда BCF ;вызывает защёлкивание в RB7 высокого уровня в соответствии ;с состоянием вывода RB7.
Рис. 1.13. Последовательный ввод/вывод 31
1.4. Модуль таймера Модуль таймера имеет следующие особенности: 8- разрядный таймер/счетчик; - доступен по чтению и записи; 8-разрядный программируемый предварительный делитель; внутреннее и внешнее тактирование; прерывание по переполнению счетчика (переход от 0FFh к 00h); выбор фронта тактирующего импульса при внешнем тактировании. Упрощенная структура модуля таймера приведена на рис. 1.14. Описание регистров, связанных с TMRO, дано в табл. 1.11. Режим таймера выбирается установкой в '0' бита T0CS (OPTION). В режиме таймера TMR0 увеличивается в каждом командном цикле (в отсутствии предварительного делителя). Если происходит запись в TMR0, то увеличение счетчика задерживается на два последующие цикла выполнения команды (рис. 1.15 и 1.16). Запись в TMR0 должна вестись с учетом этой задержки. При необходимости проверки регистра TMR0 на ноль без влияния на процесс счета рекомендуется пользоваться командой MOVF TMR0,W. Режим счетчика выбирается установкой в '1' бита T0CS (OPTION).В этом режиме TMR0 увеличивается по каждому перепаду 1/0 или 0/1 на выводе TOCKI. Перепад, увеличивается значением TMR0, выбирается битом выбора фронта переключения T0SE (OPTION).Установка этого бита в '0' вызывает увеличение TMR0 по перепаду 0/1. Предварительный делитель может использоваться модулем сторожевого таймера WDT или модулем таймера. Подключение предварительного делителя задается битом PSA (OPTION). Установка бита PSA в '1' подключает предварительный делитель к модулю WDT и устанавливает коэффициент деления для TMR0 1:1. Установка бита PSA в '0' подключает предварительный делитель к модулю таймера. Коэффициент деления предварительного делителя может быть установлен битами PS0 - PS2 регистра OPTION (см. табл.1.5). Сам предварительный делитель не доступен для чтения и записи. 32
Рис.1.14. Структурная схема таймера
Рис. 1.15. Внутреннее тактирование без предварительного делителя
Рис. 1.16. TMRO: внутреннее тактирование с предварительным делителем 1:2
33
Таблица 1.11 Регистры, связанные с TMR0 01h TMR0
xxxx xxxx
0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x
81h OPTION RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 1111 1111
85h TRISA TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 ---1 1111
uuuu uuuu
0000 000u
1111 1111
---1 1111
8-разрядный счетчик/таймер
Адрес Название Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Значение по включению питания Значение по сбросу по MCLR и WDT
Обозначения: x - не определено, u - не меняется, - отсутствует, читается как '0'. Заштрихованные биты не связанные с TMR0.
1.4.1. Прерывание от TMR0 Прерывание от TMR0 вырабатывается при переполнении счетчика (переход от 0FFh к 00h). При переполнении устанавливается в '1' бит T0IF (OPTION). Прерывание может быть замаскировано установкой в '0' бита T0IF (OPTION). Бит должен быть сброшен в '0' в процедуре обработки прерывания от TMR0 до того как прерывания снова будут разрешены. Прерывание от TMR0 не может вывести микроконтроллер из режима пониженного энергопотребления SLEEP, поскольку в режиме SLEEP 34
таймер TMR0 выключен. На рис. 1.17 приведена временная диаграмма прерывания от TMR0.
Рис. 1.17. Тактирование прерывания
1.4.2. Использование TMR0 с внешним сигналом Если для тактирования TMR0 используется внешний сигнал, то он должен удовлетворять определенным требованиям для синхронизации с внутренней тактовой частотой. Кроме того, между перепадом на выводе T0CKI и реальным увеличением счетчика TMR0 есть некоторая задержка. Синхронизация с внешним сигналом. Если предварительный делитель не используется, внешний тактовый сигнал совпадает с выходом предварительного делителя. Синхронизация RA4/T0CKI с внутренней тактовой частотой осуществляется фиксацией выхода предварительного делителя в тактах Q2 и Q4 внутренней тактовой последовательности (рис.1.18). Поэтому сигнал на входе T0CKI должен сохранять как высокий, так и низкий уровень в течение не менее двух TOSC (плюс небольшая задержка). Когда используется предварительный делитель, входной сигнал TMRO делитcя асинхронным счетчиком предварительного делителя, поэтому выходной сигнал делителя является симметричным. Определяя требования к входному сигналу, 35
необходимо учесть работу асинхронного счетчика. Сигнал на входе T0CKI должен иметь период не менее четырех TOSC (плюс небольшая задержка), деленный на коэффициент деления предварительного делителя. Ограничением длительности высокого и низкого уровней сигнала на входе T0CKI в этом случае является минимальная длительность 10 нс. Задержка увеличения TMR0. Так как вывод предварительного делителя синхронизован с внутренней тактовой частотой, то возможна небольшая задержка между перепадом сигнала на выводе TOCKI и моментом увеличения содержимого TMR0. На рис.1.18 показана задержка между перепадом внешнего сигнала и моментом увеличения содержимого TMR0.
Рис.1.18. Внешнее тактирование
1.4.3. Предварительный делитель Встроенный 8-разрядный счетчик может использоваться как предварительный делитель для TMR0 или как дополнительный делитель для сторожевого таймера WDT (рис. 1.19). Необходимо учесть, что делитель может быть использован либо с TMR0, либо со сторожевым таймером WDT, но не одновременно. 36
Биты PSA и PS0-PS2 в регистре OPTION задают режим использования предварительного делителя и его коэффициент деления. Когда предварительный делитель используется с TMR0,
Рис.1.19. Структурная схема предварительного делителя WDT
все команды, производящие запись в регистр TMR0 (например, CLRF, TMR0, MOWF TMR0, BSF TMR0, x и т.д.), очищают предварительный делитель. Когда предварительный делитель используется со сторожевым таймером WDT, команда CLRWDT очищает предварительный делитель одновременно со сбросом сторожевого таймера WDT. Предварительный делитель не может быть считан или записан программно. По сбросу предварительный делитель содержит все '0'. Переключение предварительного делителя. Назначение предварительного делителя задается программно и может быть изменено в процессе выполнения программы. Чтобы избежать непредусмотренного сброса контроллера, при переключении предварительного делителя с TMR0 на WDT должна быть 37
выполнена последовательность команд, приведенная в примере 1.4.1. Пример 1.4.1. Переключение предварительного делителя с TMR0 на WDT. BCF STATUS, PR0 ; Установка банка 0. CLRF TMR0 ; Сброс TMR0. BSF STATUS, PR0 ; Установка банка 1. CLRWDT ; Сброс WDT и предварительного де; лителя. MOVLW b ' xxxx1xxx ' ; Укажите новое значение предвари; тельного делителя. MOVWF OPTION ; BCF STATUS, PR0 ; Установка банка 0. Для переключения предварительного делителя с WDT на TMR0 должна быть выполнена последовательность команд, приведенная в примере 1.4.2. Эта последовательность должна быть выполнена даже в том случае, если сторожевой таймер WDT запрещен. Пример 1.4.2. Переключение предварительного делителя с WDT на TMR0. CLRWDT ; Сброс WDT и предварительного дели; теля. BCF STATUS, PR0 ; Установка банка 1. MOVLW b ' xxxx1xxx ' ; Укажите новое значение предваритель ; ного делителя, источник тактирования ; и фронт переключения TMR0. MOVWF OPTION ; BCF STATUS, PR0 ; Установка банка 0.
1.5. ЭППЗУ данных Микроконтроллеры семейства PIC16C8X имеют встроенную электрически перепрограммируемую память данных (ЭППЗУ) объемом 648 бит, допускающую запись и чтение во всем диапазоне напряжения питания контроллера. Эта память не принадлежит к 38
области регистров ОЗУ. Для доступа к ней используются 4 регистра управления: EECON1, EECON2, EEDATA, EEADR. Регистр EEDATA содержит 8-разрядные данные для чтения или записи, а регистр EEADR содержит адрес ячейки, к которой идет обращение. Объем ЭППЗУ во всех микроконтроллерах PIC16C8X 64 байта, диапазон адресов от 00h до 3Fh. Обращение к ЭППЗУ при чтении и записи осуществляется побайтово. При записи байта автоматически стирается предыдущее значение и записываются новые данные (стирание перед записью). Эти операции производит встроенный автомат записи. Содержимое ячеек ЭППЗУ сохраняется при включении питания. Время одного цикла записи составляет примерно 10 мс и контролируется встроенным автоматом записи. Фактически время записи зависит от напряжения питания, температуры и может меняться от кристалла к кристаллу. Встроенное ЭПЗУ допускает большое число циклов чтения/записи - до 1000000. Когда микроконтроллер защищен от считывания, ЭППЗУ по-прежнему может быть записано и считано под управлением программы, однако не может быть записано или считано при помощи программатора, сведения о регистрах, связанных с ЭППЗУ данных, приведены в табл. 1.12 и 1.13.
1.5.1. Регистр EEADR Регистр EEADR может адресовать до 256 байт ЭППЗУ. В микроконтроллер PIC16C8X реализованы только первые 64 байта ЭППЗУ и, соответственно, используются только разряды EEADR. Старшие два бита также декодируются, поэтому для обращения к ЭППЗУ биты EEADR должны быть установлены в '0'.
1.5.2. Регистры EECON1 и EECON2 Регистр EEСON1 (адрес 88h) - это управляющий регистр разрядностью пять бит. Его описание дано в табл. 1.12. Младшие пять бит физически существуют, а старшие три бита всегда считываются как '0'. 39
Управляющие биты RD и WR инициируют чтение и запись, соответственно. Программно можно только установить в '1' эти биты. Таблица 1.12 Регистр EECON1 Регистр: INTCON U бит 7
Адрес: 88h
U
U
Состояние по включению питания 0000 000X R/W EEIF
RD
Read control bit Бит управления чтением
WR
Write control bit Бит управления записью
WREN
EEPROM Write enable bit. Бит разрешения записи в ЭППЗУ EEPROM Error flag bit. Флаг ошибки записи в ЭППЗУ
WRERR
R/W WRERR
R/W WREN
R/S WR
R/S RD бит 0 Установка RD = 1 начинает цикл чтения из ЭППЗУ. Чтение занимает один цикл выполнения команды. Бит сбрасывается аппаратно и не может быть сброшен программно Установка WD = 1 начинает цикл чтения из ЭППЗУ. Бит сбрасывается аппаратно по окончании записи и не может быть сброшен программно WREN = 0: запрет записи в ЭППЗУ; WREN = 1: разрешение записи в ЭППЗУ Устанавливается, если операция записи была прервана сигналом
сброса MCLR (в режиме SLEEP или в обычном режиме) или по сбросу от сторожевого таймера в обычном режиме EEIF EEPROM write Устанавливается, если операция operation interrupt Flag записи успешно завершена. Должен bit.Флаг окончания сбрасываться программно. Бит записи в ЭППЗУ разрешения прерывания по окончанию записи в ЭППЗУ находится в регистре INTCON Обозначения: U - отсутствует, читается как '0', R/W - чтение и запись, R/S чтение и установка. 40
Сбрасываются в '0' эти биты аппаратно по завершении операции чтения или записи, соответственно. Запрет программного сброса бита WR предотвращает преждевременное окончание записи. Для предотвращения случайных записей в ЭППЗУ предусмотрен бит WREN (EECON1). При включении питания этот бит сбрасывается. Флаг WRERR(EECON1) устанавливается, когда процесс записи в ЭППЗУ прерывается сигналом сброса MCLR или сбросом от сторожевого таймера WDT. Рекомендуется после сброса проверять этот флаг и при необходимости производить перезапись данных. Данные и адрес в регистрах EEDATA и EEADR при сбросе с не изменяются. Флаг прерывания EEIF устанавливается в '1', когда встроенный автомат завершает запись в память данных. Он должен быть сброшен программно. Регистр EEСON2 физически отсутствует. При чтении EEСON2 считывается '0'. Регистр EEСON2 предназначен исключительно для использования в последовательности команд, осуществляющей запись в ЭППЗУ.
1.5.3. Чтение и запись в ЭППЗУ Для считывания данных из ЭППЗУ необходимо записать требуемый адрес в регистр EEADR и затем установить в '1' бит RD (EECON1). Данные появятся в следующем командном цикле в регистре EEDATA, откуда и могут быть прочитаны. Данные в регистре EEDATA защелкиваются и обновляются только при следующей операции считывания или записи в ЭППЗУ (пример 1.5.1). Пример 1.5.1. Чтение ЭППЗУ. BCF MOVLW MOVWF BSF BSF BCF MOVF
STATUS,PRO CONFIG_ADDR EEADR STATUS,PRO EECON1,RD STATUS,PRO EEDATA,W
; Установка банка 0. ; ; Адрес чтения. ; Установка банка 1. ; Чтение ЭППЗУ. ; Установка банка 0. ; Считанные данные в W.
Для записи данных в ЭППЗУ необходимо сначала записать требуемый адрес в регистр EEADR и данные в регистр EEDATA. 41
Затем необходимо выполнить специальную последовательность команд, инициирующую запись (пример 1.5.2). Пример 1.5.2. Запись в ЭППЗУ. BSF BCF MOVLW MOVWF MOVLW MOVWF BSF
STATUS,PRO INTCON,GIE 55h EECON2 AAh EECON2 EECON1,RD
BSF
INTCON,GIE
;Установка банка 1. ;Запрет прерываний. ; ;Запись 55h. ; ;Запись AAh. ;Установка бита WR ;начало цикла записи. ;Разрешение прерываний.
Запись не начнется, если эта последовательность не будет выполнена в нужном порядке без дополнительных временных задержек, поэтому во время выполнения этого участка программы все прерывания должны быть запрещены. Запись происходит примерно 10 мс. Кроме того, для разрешения записи должен быть установлен в '1' бит WREN (EECON). Этот механизм предназначен для предотвращения случайной записи в ЭППЗУ при сбоях программы. Рекомендуется держать бит WREN, установленным в '0', все время, кроме тех случаев, когда нужно произвести запись в ЭППЗУ. Бит WREN не сбрасывается в '0' аппаратно. Установка в '0' бита WREN после начала цикла записи не оказывает влияния на текущий цикл записи в ЭППЗУ. Бит WR не может быть установлен в '1', пока бит WREN не будет установлен в '1'. По окончании цикла записи бит WR аппаратно сбрасывается и устанавливается флаг прерывания EEIF (EECON1). Пользователь может разрешить это прерывание или просто опрашивать бит EEIF. Бит EEIF должен быть сброшен программно. Для PIC16C84 длительность цикла записи при некоторых условиях может превышать типовое значение 10 мс, поэтому для проверки окончания цикла записи следует обязательно использовать прерывание или опрашивать бит EEIF. 42
Если условия эксплуатации близки к предельно допустимым, рекомендуется проверять данные, записанные в ЭППЗУ (пример 1.5.3). Типовые ошибки записи в ЭППЗУ имеют следующий характер: бит, записанный как '1', из-за утечек считывается как '0'.
Пример 1.5.3. Проверка записи. BCF STATUS,PRO ;Установка банка 0. ;Любой код. MOVF EEADATA,W ; Должен быть установлен банк 0. BSF STATUS,PRO ;Установка банка 1. BSF EECON1,RD ; BСF STATUS,PRO ; ;Записанное значение (в регистре W) и ;считанное в регистре EEDATA) ;совпадают? SUBWF EEDATA,W ; BTFSS STATUS,Z ; GOTO WR_ERR ;Не совпадали, ошибка записи. ;Продолжение программы. Для защиты от случайной записи используются несколько механизмов. При включении питания бит WREN сбрасывается. В течение времени работы таймера включения питания PWRT (72 мс) запись также запрещена. Кроме того, для записи в ЭППЗУ необходимо выполнить специальную инициализирующую процедуру. Перечисленные механизмы обеспечивают надежную защиту от случайной записи в случае сбоев напряжения питания или программных сбоев. Когда установлен бит защиты программы от считывания, микроконтроллер может считывать и записывать нескремблированные данные из/в ЭППЗУ. Для микроконтроллеров с ПЗУ программы существуют два бита защиты памяти программы: один для памяти программы и второй для ЭППЗУ. Для PIC16C84 рекомендуется, чтобы биты EEADR были всегда установлены в '0'. Если хотя бы один из этих битов 43
установлен в '1', максимальный потребляемый ток микроконтроллера IDD увеличивается примерно до 400 мкА. Если оба бита EEADR установлены в '0', ток потребления не превышает 150 мкА. Таблица 1.13 Регистры, связанные с ЭППЗУ данных Адрес
08h 09h
Название
Бит
Бит
Бит
Бит
7
6
5
4
Бит 2
Бит
Бит
1
0
Регистр данных ЭППЗУ Регистр адреса ЭППЗУ
EEDATA
EEADR
0Bh INTCON GIE 88h EECON1
Бит 3
-
EEIE TOIE INTE RBIE
-
-
TOIF
Значение по выключению питания xxxx xxxx xxxx xxxx
INTF RBIF
EEIF WRERR WREN WR
RD
89h EECON2
Значение по сбросу по
MCLR WDT uuuu uuuu uuuu uuuu
и
0000 000x 0000 000u - - - 0 x000
- - - 0 ?000
---- ----
---- ----
Обозначения: x - не определено, u - не меняется, - отсутствует, читается как '0', ? - зависит от условий. Заштрихованные биты не связаны с ЭППЗУ данных.
1.6. Специальные функции Семейство микроконтроллеров PIC16C8X имеет набор специальных функций, предназначенных для расширения возможностей системы, минимизации стоимости, исключения навесных компонентов, обеспечения минимального энергопотребления и защиты кода от считывания. В PIC16C8X реализованы следующие специальные функции: выбор типа генератора; сброс: - схема сброса по включению питания (POR); - таймер сброса (PWRT); - таймер запуска генератора (OST); прерывания; сторожевой таймер (WDT); режим пониженного энергопотребления (SLEEP); 44
защита кода от считывания; биты идентификации; внутрисхемное программирование. Микроконтроллеры PIC16C8X имеют сторожевой таймер WDT, который может быть выключен только через бит конфигурации WDTE. Для повышения надежности он работает от собственного RCгенератора. Имеются также два таймера, формирующие необходимые задержки при включении питания. Таймер запуска генератора (OST) сохраняет микроконтроллер в состоянии сброса для стабилизации работы генератора. Таймер сброса PWRT формирует фиксированную задержку 18 мс после выключения питания. Присутствие этих таймеров позволяет во многих применениях отказаться от схемы внешнего сброса. Режим пониженного энергопотребления SLEEP предназначен для обеспечения очень малого тока потребления в ожидании (менее 1 мкА при выключенном сторожевом таймере). Выход из режима SLEEP возможен по внешнему сигналу сброса или по окончанию выдержки сторожевого таймера. Возможность выбора типа генератора позволяет эффективно использовать микроконтроллеры семейства в различных приложениях. Использование RC-генератора позволяет уменьшить стоимость системы, а LP-генератор сокращает энергопотребление.
1.6.1. Биты конфигурации Микроконтроллеры PIC16C8X имеют набор битов конфигурации, устанавливающихся на этапе программирования кристалла (табл. 1.14 – 1.16). Эти биты отображаются на специальный адрес 2007h. Адрес 2007h находится за пределами памяти программы в диапазоне адресов конфигурации/тестирования (2000h-3FFFh), который доступен только в режиме программирования. Биты FOSC1, FOSС0 определяют тип генератора, бит WDTE разрешает использование сторожевого таймера WDT, бит CP предназначен для защиты от считывания памяти программы, а бит DP - для защиты от считывания памяти данных. 45
1.6.2. Конфигурации генераторов Типы генераторов. В микроконтроллерах семейства PIC16C8X предусмотрены четыре типа генераторов. Пользователь Таблица 1.14 Слово конфигурации PIC16C84 Регистр: CONFIG U U бит 13 FOSC1 FOSC0
WDTE
PWRTE CP
U -
U -
Адрес: 2007h U -
U -
U -
U -
OSC Selection Выбор типа генератора
Watchdog Timer Enable Разрешение сторожевого Таймера Power-up Timer Enable Разрешение таймера включения питания Code Protection Защита от считывания
U -
P CP
P PWRTE
P WDTE
P FOSС1
P FOSС0 бит 0
FOSC1 FOSC0: 1 1 RC генератор 1 0 HS генератор 0 1 XT генератор 0 0 LP генератор 1 – сторожевой таймер разрешен 0 – сторожевой таймер запрещен 1 – таймер включения питания разрешен 0 – таймер включения питания запрещен 1 – защита от считывания выключена 0 – защита от считывания включена
Обозначения: U - отсутствует, считывается как ‘1’, P - программируемый бит.
должен запрограммировать два конфигурационных бита (FOSC1 и FOSC0) для выбора одного из четырех режимов: LP Lower Power Микромощный резонатор. XT Crystal Керамический или кварцевый генератор. HS High Speed Высокочастотный кварцевый резонатор. RC Resistor/ Capacitor RC цепочка. Кварцевый генератор. В режимах XT, LP и HS к выводам OSC1/CLKIN и OSC1/CLKOUT подключается кварцевый или керамический резонатор (рис.1.20). Схема генератора PIC16C8X предусматривает использование резонаторов с параллельным резонансом. Использование резонаторов с последовательным 46
резонансом может привести к возбуждению резонатора на частоте, выходящей за пределы параметров резонатора. Для резонаторов с AT срезом может использоваться последовательный резистор RS. Кроме Таблица 1.15 Слово конфигурации PIC16FR83/FR84 Регистр: CONFIG P
Адрес: 2007h
CP CP CP CP CP CP DP CP CP CP
бит 13 FOSC1 FOSC0
WDTE PWRTE
CP
PWRTE
WDTE FOSС1 FOSС0
бит 0 OSC Selection Выбор типа генератора
Watchdog Timer Enable Разрешение сторожевого таймера Power-up Timer Enable Разрешение таймера включения питания Program Memory Code Protection Защита от считывания памяти программы
FOSC1 FOSC0: 1 1 RC генератор 1 0 HS генератор 0 1 XT генератор 0 0 LP генератор 1 – сторожевой таймер разрешен 0 – сторожевой таймер запрещен 1 – таймер включения питания запрещен 0 – таймер включения питания разрешен 1 – защита от считывания выключена 0 – защита от считывания включена Для защиты от считывания памяти программы должны быть установлены все биты CP 1 – защита от считывания выключена 0 – защита от считывания включена
Data Memory Code Protection Защита от считывания памяти данных Обозначения: P - программируемый бит. DP
того, резистор RS может использоваться в режимах HS и XT для защиты от перегрузки резонаторов с низким уровнем возбуждения. Рекомендуемый диапазон значений RS от 100 Ом до 1 кОм. В режимах XT, LP и HS генератор PIC16C8X может также 47
тактироваться от внешнего источника, подключаемого к выводу OSC1/CLKIN (рис. 1.21). Значения емкостей конденсаторов для различных типов генераторов указаны в табл. 1.17 и 1.18. Таблица 1.16 Слово конфигурации PIC16F83/F84 Регистр: CONFIG P P P P P CP
CP CP
CP CP
P
P
P P
CP DP CP CP
Адрес: 2007h P P P CP
PWRTE
WDTE
P
P
FOSС1
FOSС0
бит 13
бит 0 FOSC1 FOSC0: FOSC1 1 1 RC генератор FOSC0 1 0 HS генератор 0 1 XT генератор 0 0 LP генератор Watchdog Timer Enable 1 – сторожевой таймер разрешен Разрешение сторожевого 0 – сторожевой таймер запрещен WDTE Таймера 1 – таймер включения питания PWRTE Power-up Timer Enable Разрешение таймера запрещен включения питания 0 – таймер включения питания разрешен Program Memory Code 1 – защита от считывания выключена Protection 0 – защита от считывания включена CP Защита от считывания Для защиты от считывания памяти памяти программы программы должны быть установлены все биты CP Обозначения: P - программируемый бит. OSC Selection Выбор типа генератора
Схема тактирования от внешнего источника. При тактировании от внешнего источника может использоваться внешний осциллятор со встроенной схемой генератора или внешний тактовый генератор на ТТЛ или КМОП логике. Внешний осциллятор может использоваться для получения лучшей стабильности в широком диапазоне изменения температуры и питающего напряжения. Внешний тактовый генератор на ТТЛ или КМОП логике может быть построен в двух вариантах: для резонаторов с последовательным и с параллельным резонансом. 48
Таблица 1.17 Рекомендуемые ёмкости конденсаторов для керамического резонатора Тип генератора XT
HS
Рабочая частота
Емкость конденсаторов (С1=С2)
455 кГц 2.0 МГц 4.0 МГц
47...100пФ 15...33пФ 15...33пФ
8.0 МГц 10.0 МГц
15...33пФ 15...33пФ
Рис. 1.20. Схема подключения кварцевого и керамического резонатора (режимы HS, XT и LP)
Таблица 1.18 Рекомендуемые ёмкости конденсаторов для кварцевого резонатора Тип генератора LP
XT HS
Рабочая частота
Емкость конденсаторов (С1=С2) 32 кГц 68…100 200 кГц 15…33 100 кГц 100...150пФ 2.0 МГц 15...33пФ 4.0 МГц 15...33пФ 4.0 МГц 15...33пФ 10.0 МГц 15...33пФ
Рис. 1.21. Схема тактирования от внешнего источника (режимы HS, XT и LP)
На рис. 1.22 приведена схема генератора на ТТЛ-логике для резонаторов с параллельным резонансом. Схема предназначена для возбуждения резонатора на основной частоте. Инвертор 74AS04 (аналоги 1531ЛН1 и 1533ЛН1) служит для сдвига фазы на 180, что требуется для возбуждения на частоте параллельного резонанса. Переменный резистор R1 выводит 74AS04 в линейный режим. На рис. 1.23 приведена схема внешнего генератора для резонаторов с последовательным резонансом. Схема также предназначена для работы на основной частоте резонатора. Резисторы 330 Ом выводят инверторы 74AS04 в линейный режим. 49
RC-генератор. Когда не предъявляются высокие требования к точности и стабильности частоты генератора, применение RCгенератора позволяет дополнительно уменьшить стоимость системы. Частота RC-генератора зависит от питающего напряжения, значений резистора REXT, конденсатора CEXT, рабочей температуры и незначительно изменяется от разброса характеристик кристаллов. На частоту генерации при малых значениях CEXT также влияет собственная емкость корпуса кристалла и емкость монтажа. Кроме того, нужно учитывать также температурный дрейф резистора REXT и конденсатора CEXT. На рис. 1.24 приведена схема включения RC генератора. Для значений REXT ниже 2.2 кОм генератор может работать нестабильно или не запускаться. При очень больших значениях REXT (например, 1МОм) генератор становится чувствительным к помехам, утечкам и влажности. Рекомендуемый диапазон значений REXT от 5 кОм до 100 кОм. Хотя генератор работоспособен и при отсутствии внешнего конденсатора (CEXT=0), для увеличения стабильности работы рекомендуется использовать конденсатор R2 10K
К другим устройствам R3 4,7K 74AS04 1
74AS04 1
PIC16C8X CLKIN
330
330
74AS04
74AS04
К другим устройствам 74AS04
PIC16C8X CLKIN
XTAL
R1 10K
0.1 XTAL
C1 C2 20
20
Рис. 1.22. Схема внешнего генератора с возбуждением на частоте параллельного резонанса
Рис. 1.23. генератора с частоте резонанса
Схема внешнего возбуждением на последовательного
50
V DD Rext
PIC16C8X OSC1
Внутренняя частота
N
Cext
OSC2/CLKOUT
Рис. 1.24. Схема включения RC-генератора
емкостью более 20 пФ. При малой емкости CEXT или вообще без него, частота генератора сильно зависит от монтажных емкостей. Разброс будет тем больше, чем больше величина резистора REXT (так как влияние токов утечки на частоту RC-генератора сильнее при больших значениях REXT) и чем меньше величина емкости CEXT (так как в этом случае сильнее проявляется влияние монтажных емкостей). В приложении приведены графики зависимости частоты генерации от напряжения питания и температуры. На выводе OSC2/CKLOUT в режиме RC присутствует сигнал с частотой генератора, деленной на четыре, который может быть использован для синхронизации других схем. При использовании режима RC не допускается тактировать микроконтроллеры от внешней логики во избежание повреждения входных цепей генератора.
1.6.3. Сброс Микроконтроллеры PIC16C8X имеют следующие способы сброса: сброс по включению питания (POR); сброс по входу MCLR при обычной работе; сброс по входу MCLR в режиме пониженного энергопотребления SLEEP; сброс по сторожевому таймеру WDT при обычной работе; сброс по сторожевому таймеру WDT в режиме пониженного энергопотребления SLEEP. 51
При сбросе некоторые регистры не изменяют свое состояние. При включении питания они имеют неопределенное значение, в остальных случаях их состояние не изменяется. Большинство других регистров устанавливаются в определенное состояние в случаях сброса по включению питания, по входу MCLR или по сторожевому таймеру при обычной работе. Они не изменяются при сбросе по сторожевому таймеру из режима пониженного энергопотребления SLEEP, поскольку эта ситуация рассматривается как продолжение обычной работы. Биты TO и PD (STATUS) устанавливаются в зависимости от причины сброса (табл. 1.20). На рис. 1.25 приведена структурная схема узла сброса. Для всех микроконтроллеров семейства PIC16C8X, кроме PIC16C84, на входе MCLR имеется фильтр, защищающий от небольших импульсов помехи. 1
Внешний сброс
MCLR SLEEP
&
Выход WDT
S 1
Сброс по включению питания
VDD
&
OST/PWRT
OST
& OSC!/ CLKIN
Сброс кристалла R
Q
&
PWRT &
Разрешение OST
Разрешение PWRT
Рис.1.25 Упрощенная схема узла сброса 52
1.6.4. Сброс при включении питания (POR), таймер сброса (PWRT) и таймер запуска генератора (OST)
Сброс по выключению питания (POR). Микроконтроллеры семейства PIC16C8X содержат специальную схему внутреннего аппаратного сброса по включению питания POR. Для использования этой схемы достаточно соединить выводы MCLR и VDD. При этом отсутствует необходимость во внешних RC компонентах, обычно используемых в схемах сброса. Внутренний импульс сброса по включению питания формируется при достижении питающим напряжением минимального уровня (1,2 – 1,7 В). Работа схемы POR гарантируется при скорости установления напряжения не менее 0,05 В/мс и начальном напряжении VDD не более 0,2 В. Схема сброса POR не вырабатывает сброса при выключении питания. Дополнительную информацию о работе схемы сброса можно получить из AN607 “Отладка включения питания”. Таймер сброса (PWRT) предназначен для формирования выдержки времени (типовое значение 72 мс) при включении питания микроконтроллера и работает от отдельного внутреннего RC- генератора. В течение этого времени микроконтроллер находится в состоянии сброса. Эта выдержка времени позволяет напряжению питания VDD установиться до нормального значения. Бит конфигурации PWRTE может разрешить или запретить работу с PWRT. Таймер запуска генератора (OST) формирует задержку в 1024 импульса генератора с входа OSC1 после окончания выдержки времени PWRT. Эта задержка предназначена для запуска и стабилизации работы кварцевого резонатора. Задержка OST формируется только в режимах XT, LP и HS и только при включении питания и выходе из режима пониженного энергопотребления SLEEP.
53
Последовательность включения питания. При включении питания формируется следующая последовательность сигналов (рис. 1.26 – 1.28). Сначала формируется сигнал внутреннего сброса POR, затем выдержка времени PWRT, затем включается таймер запуска генератора OST. Общее время запуска зависит от конфигурации генератора и состояния бита PWRTE (табл. 1.19). Например, в режиме RC с запрещенным PWRT задержка будет отсутствовать. Все выдержки отсчитываются от внутреннего сигнала POR. Если сигнал MCLR находился в низком уровне достаточно долго после выключения питания, чтобы выдержки времени успели закончиться, то при переключении MCLR в высокий уровень выполнение программы начнется немедленно. Этот режим удобно использовать для тестовых целей или для синхронизации более чем одного PIC16CXX для одновременного запуска. В табл. 1.20 приведены значения битов TO и PD , в табл. 1.21 описаны условия сброса для специальных регистров, в табл. 1.22 приведены условия сброса для всех остальных регистров. Внешний сброс. На рис. 1.29 приведена типовая схема внешнего сброса. Данная схема необходима, если скорость нарастания напряжения питания недостаточна (менее 0,05 В/мс) либо используется низкочастотный кварцевый резистор. Диод D предназначен для разряда конденсатора C при выключении питания. Величина резистора R не должна превышать 40 кОм, чтобы падение
Таблица 1.19 Задержки в различных ситуациях
Тип генератора
XT,HS,LP RC
Включение питания PWRT запрещен 72 мс + 1024 TOSC 72 мс
PWRT запрещен 1024 TOSC —
Выход из режима SLEEP 1024 TOSC —
54
VDD MCLR INTERNAL POR
TPWRT
PWRT TIME-OUT
TOST
OST TIME-OUT
Рис. 1.26. Включение питания с внешним сигналом сброса: 1-й случай INTERNAL RESET VDD MCLR INTERNAL POR
TPWRT
PWRT TIME-OUT
TOST
OST TIME-OUT INTERNAL RESET
Рис. 1.27. Включение питания с использованием схемы внешнего сброса: 2-й случай VDD MCLR INTERNAL POR PWRT TIME-OUT
TPWRT
TOST
OST TIME-OUT INTERNAL RESET
Рис. 1.28. Включение питания с использованием схемы внутреннего сброса
55
Таблица 1.20 Состояние битов TO и PD в зависимости от причины сброса Состояние
TO
PD
1 0
1 X
Сброс по включению питания
X
0
0 0 1
1 0 1
Бит PD установлен в процессе сброса по включению питания Сброс по WDT из рабочего режима Сброс по WDT из режима SLEEP
1
0
Бит TO установлен в процессе сброса по включению питания
Сброс по MLCR из рабочего режима Сброс по MLCR из режима SLEEP
Таблица 1.21 Условия сброса для счетчика команд и регистра STATUS Условие Включение питания Сброс по MCLR из рабочего режима Сброс по MCLR из режима SLEEP Cброс по WDT из рабочего режима Сброс по WDT из режима SLEEP Выход по прерыванию из режима SLEEP
Счетчик команд 000h 000h 000h 000h PC+1 PC+1(1)
Регистр STATUS 0001 1xxx 0001 1uuu 0001 0uuu 0000 1uuu uuu0 0uuu uuu1 0uuu
Обозначения: х - не определено, u - не меняется Примечания: Если при выходе по прерыванию из режима SLEEP установлен бит GIE, в счетчик команд загружается адрес вектора прерывания (0004h).
56
Таблица 1.22 Состояние регистров после сброса Регистр
Адрес
Сброс по включению питания
Сброс по МСLR из Выход из рабочего режима и режима SLEEP режима SLEEP, по прерыванию сброс по WDT из и по WDT рабочего режима W xxxxxxxx uuuuuuuu uuuuuuuu INDF 00h ---------------------TMRO 01h xxxxxxxx uuuuuuuu uuuuuuuu PCL 02h 0000h 0000h PC+1 (2) (3) STATUS 03h 00011xxx 000??uuu uuu??uuu (3) FSR 04h xxxxxxxx uuuuuuuu uuuuuuuu PORTA 05h - - - xxxxx - - - uuuuu - - - uuuuu PORTB 06h xxxxxxxx uuuuuuuu uuuuuuuu EEDATA 08h xxxxxxxx uuuuuuuu uuuuuuuu EEADR 09h xxxxxxxx uuuuuuuu uuuuuuuu PCLATH 0Ah - - - 00000 - - - 00000 - - - uuuuu INTCON 0Bh 0000000x 0000000u uuuuuuuu (1) INDF 80h OPTION 81h 11111111 11111111 uuuuuuuu PCL 82h 0000h 0000h PC+1 (2) (3) STATUS 83h 0001xxx 000??uuu uuu??uuu (3) FSR 84h xxxxxxxx uuuuuuuu uuuuuuuu TRISA 85h - - 11111 - - 11111 - - - uuuuu TRISB 86h 11111111 11111111 uuuuuuuu EECON1 88h - - -0x000 - - - 0?000 - - -0uuuu EECON2 89h ---------------------PCLATH 8Ah - - - 00000 - - - 00000 - - - uuuuu INTCON 8Bh 0000000x 0000000u uuuuuuuu (1) Обозначения: х - не определено, u - не меняется, -отсутствует, читается как 0, ? - значение зависит от условий. Примечания: 1. Один или более бит регистра INTCON будут изменены (причина выхода из режима SLEEP). 2. Если при выходе по прерыванию из режима SLEEP установлен бит кода GIE, в счетчик команд загружается адрес вектора прерывания(0004h). 3. Условия сброса для счетчика команд и регистра STATUS приведены в табл. 1.21. 57
напряжения на нем не превысило 0,2 В при максимальном токе утечки входа MCLR 5 мкА. При большем значении падения напряжения уровень напряжения на выводе MCLR /VPP будет достаточен для надежного сброса. Резистор R1 может иметь значение в диапазоне от 1 до 100 кОм и предназначен для ограничения тока по выводу MCLR при перезаряде конденсатора C и импульсных помехах. На рис. 1.30 приведена схема внешнего сброса с использованием стабилитрона. Эта схема вырабатывает сигнал сброса, когда напряжение питания VDD становится на 0,7 В ниже, чем напряжение на стабилитроне. В схеме на рис. 1.31 вместо стабилитрона используется резистивный делитель. Сигнал сброса становится меньше, чем
VDD
R1 R2 . R1
Рис. 1.29. Схема внешнего сброса
Рис. 1.30. Схема внешнего сброса со стабилитроном
1.6.5. Прерывания Микроконтроллеры PIC16C8X имеют 4 источника прерывания: внешнее прерывание от вывода RB0/INT; прерывание при переполнении счетчика/таймера TMR0; прерывание по окончанию записи данных в EEPROM; прерывание при изменении сигналов на выводах порта RB . Логика прерываний приведена на рис. 1.32. Временная диаграмма прерываний по выводу INT показана на рис. 1.33. 58
Все прерывания имеют один и тот же адрес/вектор 0004h. При этом в регистре управления прерываниями INTCON (0Bh) записывается, от какого именно источника поступил запрос прерывания. Прерывания могут быть запрещены индивидуально или общим битом. Бит общего разрешения/запрещения прерывания GIE (INTCON ) разрешает (если установлен в ‘1’) все индивидуально незамаскированные прерывания или запрещает их (если сброшен в ‘0’). Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON. Бит GIE обнуляется при сбросе. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата сохраняется в стеке, а в счетчик команд загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывание от вывода INT или порта B, составляет от трех до четырех периодов тактовой частоты (рис. 1.33). В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре INTCON. Этот бит должен быть программно сброшен внутри
Рис. 1.31. Схема внешнего сброса с резистивным делителем
Рис. 1.32. Логика прерываний
59
Рис. 1.33. Временная диаграмма прерывания по выводу INT
подпрограммы обработки прерывания для исключения рекурсивных прерываний. Флаги запросов прерываний не зависят от соответствующих маскирующих битов и бита общего разрешения GIE. Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания. Внешнее прерывание по выводу RBO/INT осуществляется по перепаду сигнала: либо по перепаду 01, если бит INTEDG в регистре OPTION установлен, либо по перепаду 10, если бит INTEDG сброшен. Когда на выводе INT фиксируется перепад сигнала, устанавливается бит запроса INTF (INTCON). Это прерывание может быть запрещено сбросом управляющего бита INTE (INTCON). Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен. Состояние бита GIE при этом определяет, будет ли процессор переходить на подпрограмму прерывания после выхода 60
из режима SLEEP. Диаграмма прерываний по выводу INT приведена на рис.1.33. Прерывание от таймера/счетчика TMR0. Переполнение счетчика TMR0 (FFh00h) установит бит запроса TOIF (INTCON). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски TOIE (INTCON). Прерывание от порта RB. Любое изменение сигналов на четырех входах порта RB установит бит RBIF (INTCON). Это прерывание может быть запрещено/разрешено установкой/сбросом бита маски RBIE (INTCON). Прерывание от ЭППЗУ. Флаг запроса прерывания по окончании записи в ЭППЗУ EEIF (EECON1) устанавливается по окончании записи данных в ЭППЗУ. Это прерывание может быть замаскировано сбросом бита (EECON).
1.6.6. Сохранение состояния при прерываниях При прерывании в стеке автоматически сохраняется только значение счетчика команд PC. Обычно пользователю также необходимо сохранить некоторые регистры (например, регистры W и STATUS). В примере 1.6.1 приведена возможная процедура сохранения и восстановления регистров W и STATUS. Для временного хранения используются регистры W_TEMP и STATUS_TEMP. Пример 1.6.1. Сохранение и восстановление регистров W и STATUS при прерывании. PUSH MOVWF SWAPF MOVMF ISR . .
W_TEMP STATUS,W STATUS_TEMP
; Сохранить W в регистре TEMP ; ; Сохранить STATUS в регистре TEMP. ; Процедура обработки прерывания.
61
. POP SWAPF MOVWF SWAPF SWAPF
STATUS_TEMP,W STATUS W_EMP,F W_TEMP,W
; ; Восстановить STATUS ; ; Восстановить W, не меняя STATUS.
1.6.7. Сторожевой таймер (WDT) Сторожевой таймер (WDT) (рис. 1.34) представляет собой независимый встроенный RC генератор, не требующий никаких внешних цепей. Он работает, даже если основной тактовый генератор остановлен, как это происходит при исполнении команды SLEEP. При нормальной работе сторожевой таймер по истечении заданной выдержки времени вырабатывает сигнал сброса. Если контроллер находился в режиме пониженного энергопотребления SLEEP, срабатывание сторожевого таймера выводит его из этого режима и переводит в режим нормальной работы. Функционирование сторожевого таймера может быть запрещено путем записи ‘0’ в бит конфигурации WDTE на этапе программирования микросхем. Описание регистров, связанных со сторожевым таймером, дано в табл. 1.23. Период сторожевого таймера. Номинальная выдержка сторожевого таймера составляет 18 мс (без использования предварительного делителя). Она зависит от температуры и напряжения питания, а также меняется от разброса характеристик кристаллов. Если требуется увеличить время задержки, то к WDT может быть подключен встроенный предварительный делитель с коэффициентом деления до 1:128, программируемый путем записи в регистр OPTION. Таким образом могут быть реализованы выдержки до 2,3 секунды. Команды ‘CLRWDT’ и ‘SLEEP’ обнуляют WDT и предварительный делитель, если он подключен к WDT. Таким образом, выдержка времени начинает отсчитываться сначала, и на некоторое время выработка сигнала сброс предотвращается. При срабатывании сторожевого таймера обнуляется бит TO в регистре STATUS. 62
Особенности программирования WDT. Выдержка времени сторожевого таймера максимальна при следующей комбинации параметров: минимальное напряжение VDD, максимальная температура и максимальный коэффициент деления делителя. При этих условиях выдержка времени сторожевого таймера может составлять несколько секунд. От источника тактирования TMR0
0 Сторожевой таймер
1
M U X
Дополнительный делитель
8
PSA
8
1 MUX
Разрешение WDT
PS2:PS0 К TMR0
0
1
MUX
PSA
Выход WDT Рис. 1.34. Структурная схема сторожевого таймера
1.6.8. Режим пониженного электропитания (SLEEP) Вход в режим пониженного энергопотребления SLEEP осуществляется командой SLEEP. По этой команде сторожевой таймер, если он был разрешен при программировании контроллера, сбрасывается и начинает отсчет времени, в регистре состояния STATUS сбрасывается бит PD и устанавливается бит TO , а тактовый генератор выключается. Порты ввода/вывода сохраняют состояние, которое они имели до входа в режим SLEEP. Для снижения тока, потребляемого в этом режиме, все разряды внешних портов кристалла должны находиться либо на уровне VSS, 63
либо на уровне VDD. Все разряды портов, находящиеся в высокоимпедансном состоянии, должны быть соединены через внешние резисторы VSS и VDD, чтобы избежать токов переключения, вызываемых плавающим потенциалом на высокоомных входах. Вход TOCKI также должен иметь потенциал VDD или VSS. Вход MCLR должен иметь высокий логический уровень VIHMC. Следует отметить, что сигнал внутреннего сброса, вырабатываемый сторожевым таймером, не переключает вывод MCLR в низкий уровень. Выход из режима SLEEP. Микроконтроллеры семейства PIC16C8X могут выйти из режима SLEEP по одному из следующих событий: Таблица 1.23 Регистры, связанные со сторожевым таймером Адрес Название Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Значение по включению питания Значение по сбросу по MCLR и WDT
2007h CONFIG (2) (2) (2) CP PWRTE(1) WDTE FOCS1 FOCS0 (2) 1111 1111
81h OPTION RBPU
INTEDG TOCS TOSE PSA PS2 PS1 PS0 1111 1111
Обозначения: Заштрихованные биты не связаны с WDT. Примечания: 1. Смотри табл. 1.14, 1.15, 1.16 для операций с битом PWRTE. 2. Смотри табл. 1.14, 1.15, 1.16 для операций с битами CP и DP.
внешний сброс - импульс низкого уровня на выводе MCLR ; сброс при срабатывании сторожевого таймера WDT (если он разрешен); 64
прерывание от вывода RB0/INT, по изменению порта PB или по окончанию записи ЭППЗУ. Биты TO и PD регистра состояния могут быть использованы для определения причины сброса (табл. 1.20). Бит PD регистра состояния устанавливается при включении питания и обнуляется командой SLEEP. Бит TO позволяет определить, чем был вызван выход из режима SLEEP: внешним сигналом на выводе MCLR или срабатыванием сторожевого таймера (рис. 1.35). Он обнуляется только при сбросе сторожевого таймера.
Рис. 1.35. Выход из режима SLEEP по прерыванию
При выполнении команды SLEEP следующая команда по адресу PC+1 выбирается из памяти. Чтобы микроконтроллер вышел из режима пониженного энергопотребления по прерыванию, необходимо установить (разрешить) соответствующие биты разрешения прерывания. Выход из режима пониженного 65
энергопотребления произойдет независимо от состояния бита GIE. Если бит GIE установлен в ‘0’ (запрещен), микроконтроллер продолжает выполнение с команды, следующей после команды SLEEP. Если же бит GIE установлен в ‘1’ (разрешен), микроконтроллер выполняет команду, следующую за командой SLEEP, и затем переходит на адрес прерывания 0004h. Если выполнение команды, следующей за командой SLEEP, недопустимо, необходимо после команды SLEEP добавить команду NOP. Если прерывания запрещены (бит GIE установлен в ’0’), но хотя бы для одного из источников прерывания установлен бит разрешения прерываний и соответствующий флаг разрешения прерываний, микроконтроллер немедленно выйдет из режима SLEEP. Команда SLEEP будет выполнена. Независимо от причины сброса, при выходе из режима SLEEP сторожевой таймер WDT обнуляется.
1.6.9. Защита программы от считывания Программа, записанная в ЭППЗУ или в ПЗУ, может быть защищена от считывания при помощи установки в ‘0’ бита защиты CP в слове конфигурации. В режиме защиты программы содержимое памяти программы не может быть прочитано в исходном виде, тем самым невозможно реконструировать записанную программу. Кроме того, при установленном бите защиты невозможно допрограммировать контроллер. Микроконтроллеры с ПЗУ имеют два бита защиты программы от считывания. Бит CP защищает от считывания память программы, бит DP предназначен для защиты памяти данных (ЭППЗУ). Если необходимо перезаписать память данных в микроконтроллере с ПЗУ, то необходимо предварительно стереть все данные в ЭППЗУ и только затем можно стереть бит защиты.
66
1.6.10. Индивидуальная метка Микроконтроллеры PIC16C8X имеют четыре специальных адреса (2000h-2003h), не являющиеся частью памяти программы. Они предназначены для хранения идентификационного кода (ID) пользователя, контрольной суммы и другой информации. Как и слово конфигурации, они могут быть прочитаны или записаны только с помощью программатора. Программно эти адреса недоступны. Для обеспечения возможности чтения одинаковой информации как в обычном режиме, так и в режиме с установленным битом защиты от считывания, рекомендуется использовать только четыре младших бита по каждому адресу для хранения кода ID. Старшие 10 бит рекомендуется устанавливать в ‘1’. Для микроконтроллеров с ПЗУ эти значения должны предоставляться вместе с программным кодом.
1.6.11. Внутрисхемное программирование Микроконтроллеры PIC16C8X могут быть запрограммированы непосредственно в готовом устройстве. Для этого требуется два вывода для подключения тактового сигнала CLK и данных DATA и три вывода для питающего напряжения VDD, программирующего напряжения VPP и общего вывода GND (рис. 1.36). Эта возможность позволяет изготавливать устройства с незапрограммированными микроконтроллерами, занося в них код программы непосредственно перед продажей. Таким способом можно обеспечить использование самой последней версии программного обеспечения, а также учесть особенности конкретного потребителя. Переход в режим программирования происходит по переходу сигнала MCLR от VIL до VIHH, когда на выходах RB6 и RB7 установлен низкий уровень. Вывод RB6 используется в качестве тактового сигнала, а вывод RB7 в качестве двунаправленного 67
разряда данных. В режиме программирования разряды RB6 и RB7 имеют на входе триггеры Шмидта. Для микроконтроллеров с ПЗУ память программ и память данных могут быть считаны (если не установлены биты защиты от считывания), но только память данных (ЭППЗУ) может быть переписана.
Внешний К цепям схемы PIC16CXX разьем +5V
VDD
0V VPP
VSS MCLR
CLK
RB6
Data I/O
RB7
К цепям схемы
Рис. 1.36. Типовая схема подключения для внутрисхемного программирования в последовательном режиме
68
2. ОПИСАНИЕ СИСТЕМЫ КОМАНД 2.1. Форматы и поля команд Каждая команда PIC16C8X представляет собой 14-разрядное слово, содержащее поле кода операции OPCODE и поле операндов. Общий формат команды показан на рис. 2.1. Описание полей команд дано в табл. 2.1. Система команд PIC16C8X приведена в табл. 2.1. Система команд включает в себя команды работы с байтами, команды работы с битами, команды управления и операции с константами. Для команд работы с байтами ‘f’ обозначает регистр, с которым производится действие, а бит ‘d’ определяет регистр назначения. При ‘d’=0 результат помещается в регистр W, при ‘d’=1 результат перемещается в регистр ‘f’, заданный в команде. Для команд работы с битами ‘b’ означает номер бита, участвующего в команде, а ‘f’ – регистр, в котором этот бит расположен. Для команд управления и операций с константами ‘k’ обозначает 8- или 11-битовую константу или идентификатор. Все команды выполняются в течение одного командного цикла, кроме следующих двух случаев:
переход по проверке условия, если результат проверки условия – истина;
изменение счётчика команд как результат выполнения команды.
В этих случаях команда выполняется за два цикла с выполнением второго цикла как NOP. Один командный цикл состоит из четырёх периодов генератора. Таким образом, для генератора с частотой 4 МГц время выполнения команды составляет 1 мкс. Если выполняется переход по проверке условия или в результате выполнения команды изменился счётчик команд, время выполнения этой команды при тактовой частоте 4 МГц составляет 2 мкс. 69
Команды работы с байтами 13
8
7
OPCODE
6
0
d
f (FILE#)
b=0 для назначения W b=1 для назначения f f=7-разрядный адрес регистра Команды работы с битами 13
10 9
OPCODE
7 6
b (BIT #)
0
f (FILE#)
b=3-разрядный номер бита f=7-разрядный адрес регистра Команды управления и операции с константами 13
8 7
0
OPCODE
k (literal)
k=8-разрядное значение
Общий формат команд
Таблица 2.1 Описание полей команд Поле
Описание
f
Адрес регистра
w
Рабочий регистр
b
Номер бита в 8-разрядном регистре
k
Константа
x
Не используется. Ассемблер формирует код с х=0.
d
Регистр назначения: d=0 – результат в регистре W; d=1 – результат в регистре f. По умолчанию d=1.
label
Имя метки
TOS
Top Of Stack Вершина стека
PC
Program Counter Счетчик команд
70
Окончание табл. 2.1 TO
Time-Out Тайм аут
PD
Power Down Выключение питания
dest
Регистра назначения: рабочий регистр W или регистра, заданный в команде
[]
Необязательные параметры
()
Содержание
Присвоение
Битовое поле
Из набора
Таблица 2.2
Код команды
Прим.
Название команды
Биты сост.
Мнемокод
Циклы
Система команд PIC16С8Х
Команды работы с байтами ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ
f,d f,d f
INCF INCFSZ
f,d f,d
IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORF
f,d f,d f
f,d f,d f,d
f,d f,d f,d f,d f,d
Сложение W с f Логическое И W и f Сброс регистра f Сброс регистра W Инверсия регистра f Декремент регистра f Декремент f, пропустить команду, если 0 Инкремент регистра f Инкремент f, пропустить команду, если 0 Логическое ИЛИ W и f Пересылка регистра f Пересылка W в f Холостая команда Сдвиг f влево через перенос Сдвиг f вправо через перенос Вычитание W из f Обмен местами тетрад в f Исключающее ИЛИ Wи f
1 1 1 1 1 1 1(2)
00 0111 d f f f f f f f 00 0101 d f f f f f f f 00 0001 1 f f f f f f f 00 0001 0xxx xxxx 00 1001 d f f f f f f f 00 0011 d f f f f f f f 00 1011 d f f f f f f f
C,DC,Z Z Z Z Z Z
1 1(2)
00 1010 d f f f f f f f 00 1111 d f f f f f f f
Z
1,2 1,2,3
1 1 1 1 1 1 1 1 1
00 0100 d f f f f f f f 00 1000 d f f f f f f f 00 0000 1f f f f f f f 00 0000 0xx0 0000 00 1101 d f f f f f f f 00 1100 d f f f f f f f 00 0010 d f f f f f f f 00 1110 d f f f f f f f 00 0110 d f f f f f f f
Z Z
1,2 1,2
C C C,DC,Z
1,2 1,2 1,2 1,2 1,2
Z
1,2 1,2 2 1,2 1,2 1,2,3
71
Окончание табл. 2.2 Команды работы с битами BCF BSF BTFSC
f,b f,b f,b
BTFSS
f,b
Сброс бита в регистре f Установка бита в регистре f Пропустить команду, если бит в f равен нулю Пропустить команду, если бит в f равен 1
1 1 1(2)
01 00bb bf f f f f f f 01 01bb bf f f f f f f 01 10bb bf f f f f f f
1,2 1,2 3
1(2)
01 11bb bf f f f f f f
3
Команды передачи управления и операции с константами ADDLW k ANDLW k CALL k CLRWDT GOTO IORLW
k k
MOVLW k RETFIE RETLW k RETURN SLEEP SUBLW k XORLW k
Сложение константы и W Логическое И константы и W Вызов подпрограммы Сброс сторожевого таймера WDT Переход по адресу Логическое ИЛИ константы и W Пересылка константы в W Возврат из прерывания Возврат из подпрограммы с загрузкой константы в W Возврат из подпрограммы Переход в режим SLEEP Вычитание W из константы Исключающее ИЛИ константы иW
1 1 2 1
11 111x kkkk kkkk 11 1001 kkkk kkkk 10 0kkk kkkk kkkk 00 0000 0110 0100
2 1
10 1kkk kkkk kkkk 11 1000 kkkk kkkk
1 2 2
11 00xx kkkk kkkk 00 0000 0000 1001 11 01xx kkkk kkkk
2 1 1 1
00 0000 0000 1000 00 0000 0110 0011 11 110x kkkk kkkk 11 1010 kkkk kkkk
C,DC,Z Z TO,PD
Z
TO,PD C,DC,Z Z
Примечания: 1. Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защёлке порта, включенного на ввод, находится ‘1’, а внешнее устройство формирует на этом выводе ‘0’, то в этом разряде данных будет записан ‘0’. 2. Если операндом команды является содержимое регистра TMR0 (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMR0, будет сброшен. 3. Если в результате выполнения команды изменяется счётчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выполняется как NOP.
2.2. Описание команд ADDLW
Add literal to W Сложение константы и W 72
Синтаксис: ADDLW k Операнд: 0k255 Операция: (W)+(k)(W) Биты состояния: C,DC,Z Код:
11 111x kkkk kkkk
Описание: Содержимое регистра W складывается с 8-битовой константой k. Результат сохраняется в регистре W. Циклов: Пример:
ADDWF Синтаксис: Операнд: Операция: Биты состояния: Код:
1 ADDLW 0x15 Перед выполнением команды: W=0x10 После выполнения команды: W=0x25
Add W and f Сложение W c f ADDWF f,d 0f127,d[0,1] (W)+(f) (dest) C,DC,Z 00 0111 dfff ffff
Описание: Содержимое регистра W добавляется к содержимому регистра f. Если d=0, результат сохраняется в регистре W. Если d=1 результат сохраняется в том же регистре f. Циклов: Пример:
1 ADDWF FSR, 0 Перед выполнением команды: W=0x17 FSR=0xC2 После выполнения команды: W=0xD9 FSR=0xC2
ANDLW
AND literal to W Логическое И константы и W
Синтаксис: Операнд: Операция: Биты состояния: Код:
ANDLW k 0k255 (W).AND.(k) (W) Z 11 1001 kkkk kkkk
Описание: Содержимое регистра W логически умножается на 8битовую константу k. Результат сохраняется в регистре W. Циклов: Пример:
1 ANDLW 0x5F 73
Перед выполнением команды: W=0xA3 После выполнения команды: W=0x03
ANDWF
AND W and f Логическое И W и f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
ANDWF f,d 0f127,d [0,1] (W).AND.(f) (dest) Z 00 0101 dfff ffff Содержимое регистра W логически умножается на содержимое регистра f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. 1 ANDWF FSR,1 Перед выполнением команды: W=0x17 FSR=0xC2 После выполнения команды: W=0x17 FSR=0x02
Циклов: Пример:
BCF
Bit Clear f Сброс бита в регистре f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание: Циклов: Пример:
BCF f, b 0f127,0b7 0f(b) Не изменяются 01 00bb bfff ffff Бит b регистра f сбрасывается в 0. 1 BCF FLAG_REG,7 Перед выполнением команды: FLAG_REG=0xC7 После выполнения команды: FLAG_REG=0x47
BSF Синтаксис: Операнд: Операция: Биты состояния: Код:
Set f Установка бита в регистре f BSF f, b 0f127,0b7 1f(b) Не изменяются 01 01bb bfff ffff 74
Описание: Циклов: Пример:
Бит b регистра f устанавливается в 1. 1 BSF FLAG_REG,7 Перед выполнением команды: FLAG_REG=0x0A После выполнения команды: FLAG_REG=0x8A
BTFSC
Bit Test f, Skip if Clear Пропустить команду, если бит равен нулю
Синтаксис: Операнд: Операция: Биты состояния: Код:
BTFSC f,b 0f127,0b7 Пропустить, если f(b)=0 Не изменяются 01 10bb bfff ffff
Описание: Если бит b регистра f равен 1, выполняется следующая команда. Если бит регистра равен 0, следующая команда, считанная в текущем командном цикле, игнорируется, и вместо неё в следующем цикле выполняется NOP, в результате команда выполняется за два цикла. Циклов: Пример:
1(2) HERE BTFSC FLAG, 1 FALSE GOTO PROCESS_CODE TRUE . . Перед выполнением команды: PC=адрес HERE После выполнения команды: если FLAG=0, PC=адрес TRUE если FLAG=1, PC=адрес FALSE
BTFSS
Bit Test f, Skip if Set Пропустить команду, если бит равен единице
Синтаксис: Операнд: Операция: Биты состояния: Код:
BTFSS f,b 0f127,0b7 Пропустить, если f(b)=1 Не изменяются 01 11bb bfff ffff
Описание: Если бит b регистра f равен 0, выполняется следующая команда. Если бит регистра равен 1, следующая команда, считанная в текущем командном цикле, игнорируется и 75
вместо неё в следующем цикле выполняется NOP, в результате команда выполняется за два цикла. Циклов: Пример:
1(2) HERE BTFSS FLAG, 1 FALSE GOTO PROCESS_CODE TRUE . . Перед выполнением команды: PC=адрес HERE После выполнения команды: если FLAG=1, PC=адрес TRUE если FLAG=0, PC=адрес FALSE
CALL
Call subroutine Вызов подпрограммы
Синтаксис: Операнд: Операция:
CALL k 0k2047 (PC)+1TOS, kPC, (PCLATH)PC Не изменяются 10 0kkk kkkk kkkk
Биты состояния: Код:
Описание: Адрес возврата (PC+1) сохраняется в стеке. Младшие 11 бит адреса загружаются в PC из кода команды. Старшие два бита адреса загружаются в PC из регистра PCLATH Циклов: Пример:
2 HERE CALL THERE Перед выполнением команды: PC=адрес HERE После выполнения команды: если FLAG=1, PC=адрес TRUE если FLAG=0, PC=адрес FALSE
CLRF
Clear f Сброс регистра f
Синтаксис: Операнд: Операция: Биты состояния: Код:
CLRF f 0f127 00hf, 1Z Z 00 0001 1fff ffff 76
Описание: Циклов: Пример:
Содержимое регистра f сбрасывается в 0 и бит Z устанавливается в 1. 1 CLRF G_REG
Перед выполнением команды: G_REG=0x5A После выполнения команды: G_REG=0x00, Z=1 CLRW
Clear W Сброс регистра W
Синтаксис: CLRW Операнд: Нет Операция: 00hW, 1Z Биты состояния: Z Код: 00 0001 0xxx xxxx Описание: Содержимое регистра W сбрасывается в 0 и бит Z устанавливается в 1. Циклов: 1 Пример: CLRW Перед выполнением команды: W=0x5A После выполнения команды: W=0x00, Z=1 CLRWDT
Clear watchdog timer Сброс сторожевого таймера WDT
Синтаксис: CLRWDT Операнд: Нет Операция: 00hWDT, 0WDT prescaler, 1 ТО , 1 PD Биты состояния: ТО , PD Код: 00 0000 0110 0100 Описание: Команда сбрасывает сторожевой таймер WDT и предварительный делитель. В регистре состояния устанавливаются биты TO и PD. Циклов: 1 Пример: CLRWDT Перед выполнением команды: WDT counter=0x00 После выполнения команды: WDT prescaler=0, TO=1, PD=1 COMF Complement f 77
Инверсия регистра f Синтаксис: COMF f,d Операнд: 0f127, d [0,1] Операция: f ( dest ) Биты состояния: Z Код: 00 1001 dfff ffff Описание: Содержимое регистра f инвертируется. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Циклов: Пример:
1 COMF REG1, 0 Перед выполнением команды: REG1=0x13 После выполнения команды: REG1=0x13, W=0xEC
DECF
Decrement f Декремент регистра f
Синтаксис: DECF f,d Операнд: 0f127, d [0,1] Операция: f 1 ( dest ) Биты состояния: Z Код: 00 0011 dfff ffff Описание: Содержимое регистра f уменьшается на 1. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Циклов: 1 Пример: DECF CNT, 1 Перед выполнением команды: CNT=0x01, Z=0 После выполнения команды: CNT=0x00, Z=1 DECFSZ Синтаксис: Операнд: Операция: Биты состояния: Код:
Decrement f, Skip if 0 Декремент регистра f, пропустить команду, если 0 DECFSZ f,d 0f127, d [0,1] f 1 ( dest ) ; пропустить, если (dest)=0 Не изменяются 00 1011 dfff ffff 78
Описание: Содержимое регистра f уменьшается на 1. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Если результат не равен 0, выполняется следующая команда. Если результат равен 0, следующая команда, считанная в текущем командном цикле, игнорируется, и вместо неё в следующем цикле выполняется NOP, в результате команда выполняется за два цикла. Циклов: 1(2) Пример: HERE DECFSZ CNT, 1 GOTO LOOP CONTINUE . . Перед выполнением команды: PC=адрес HERE После выполнения команды: CNT=CNT-1 если CNT=0, PC=адрес CONTINUE если CNT0, PC=адрес HERE+1 GOTO
Goto addres Переход по адресу
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
GOTO k 0k2047 kPC, (PCLATH)PC Не изменяются 10 1kkk kkkk kkkk Младшие 11 бит адреса загружаются в PC из кода команды. Старшие два бита адреса загружаются в PC из регистра PCLATH 2 HERE GOTO THERE Перед выполнением команды: PC=адрес HERE После выполнения команды: PC=адрес THERE
Циклов: Пример:
INCF
Increment f Инкремент регистра f 79
Синтаксис: INCF f,d Операнд: 0f127, d [0,1] Операция: f 1 ( dest ) Биты состояния: Z Код: 00 1010 dfff ffff Описание: Содержимое регистра f увеличивается на 1. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Циклов: 1 Пример: INCF CNT, 1 Перед выполнением команды: CNT=0xFF, Z=0 После выполнения команды: CNT=0x00, Z=1 INCFSZ
Increment f, Skip if 0 Инкремент регистра f, пропустить команду, если 0
Синтаксис: Операнд: Операция: Биты состояния: Код:
INCFSZ f,d 0f127, d [0,1] f 1 ( dest ); пропустить, если (dest)=0 Не изменяются 00 1111 dfff ffff
Описание:
Содержимое регистра f увеличивается на 1 Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Если результат не равен 0, выполняется следующая команда. Если результат равен 0, следующая команда, считанная в текущем командном цикле, игнорируется, и вместо неё в следующем цикле выполняется NOP, в результате команда выполняется за два цикла. 1(2) HERE INCFSZ CNT, 1 GOTO LOOP CONTINUE . . Перед выполнением команды: PC=адрес HERE После выполнения команды: CNT=CNT+1
Циклов: Пример:
80
если CNT=0, PC=адрес CONTINUE если CNT0, PC=адрес HERE+1 IORLW
Inclusive OR literal to W Логическое ИЛИ константы и W
Синтаксис: IORLW k Операнд: 0k255 Операция: (W).OR.(k) (W) Биты состояния: Z Код: 11 1000 kkkk kkkk Описание: Содержимое регистра W логически складывается с 8битовой константой k. Результат сохраняется в регистре W. Циклов: 1 Пример: IORLW 0x35 Перед выполнением команды: W=0x9A После выполнения команды: W=0xBF IORWF
Inclusive OR W and f Логическое ИЛИ W и f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
IORWF f,d 0f127,d [0,1] (W).OR.(f) (dest) Z 00 0100 dfff ffff Содержимое регистра W логически складывается с содержимым регистра f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. 1 IORWF RES, 0 Перед выполнением команды: RES=0x13
Циклов: Пример: W=0x91
После выполнения команды:
RES=0x13
W=0x93 81
MOVF
Move f Пересылка регистра f
Синтаксис: MOVF f,d Операнд: 0f127, d [0,1] Операция: (f) (dest) Биты состояния: Z Код: 00 1000 dfff ffff Описание: Содержимое регистра f пересылается в регистр W, если d=0, и в тот же регистр f, если d=1. Назначение d=1 имеет смысл использовать для проверки регистра на ноль, поскольку команда изменяет флаг Z. Циклов: 1 Пример: MOVF FSR, 0 После выполнения команды: W=значение FSR
MOVLW
Move literal to W Пересылка константы в W
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание: Циклов: Пример:
MOVLW k 0k225 k (W) Не изменяются 11 00xx kkkk kkkk 8-битовая константа k загружается в регистр W. 1 MOVLW 0x5A После выполнения команды: W=0x5A
MOVWF
Move W to f Пересылка W в f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
MOVWF f 0f127 (W) (f) Не изменяются 00 0000 1fff ffff Содержимое регистра W пересылается в регистр f. 82
Циклов: Пример:
1 MOVWF OPT Перед выполнением команды: OPT=0xFF W=0x4F После выполнения команды: OPT=0x4F W=0x4F
NOP
No operation Холостая команда
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание: Циклов: Пример:
NOP Нет Нет Не изменяются 00 0000 0xx0 0000 Нет операции. 1 NOP
OPTION
Операнд: Операция: Биты состояния: Код: Описание: Циклов: Пример:
Примечание:
RETFIE
Load OPTION Register Загрузка регистра OPTION Синтаксис: OPTION Нет (W) OPTION Не изменяются 00 0000 0110 0010 Содержимое регистра W загружается в регистр OPTION 1 OPTION Перед выполнением команды: W=0x07 После выполнения команды: OPTION=0x07 Для обеспечения совместимости с будущими продуктами семейства PIC16CXX не рекомендуется использовать эту команду.
Return from interrupt Возврат из прерывания
Синтаксис: Операнд:
RETFIE нет 83
Операция: Биты состояния: Код: Описание: стека
Циклов: Пример:
RETLW
TOSPC, 1GIE Не изменяются 00 0000 0000 1001 Адрес возврата восстанавливается из вершины (TOS) в PC. Разрешаются прерывания (устанавливается бит GIE) 2 RETFIE После прерывания: PC=TOS GIE=1 Return with literal in W Возврат из программы с загрузкой константы в W
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
Циклов: Пример:
RETURN
RETLW k 0k255 kW, TOSPC Не изменяются 11 01xx kkkk kkkk 8-битовая константа k загружается в регистр W. Адрес возврата восстанавливается из вершины стека (TOS) в PC. 2 CALL TABLE ; W содержит смещение в . ; таблице . ; Теперь W содержит значение . ; из таблицы TABLE ADDWF PC ; W=смещение. RETLW k1 ; Начало таблицы. . ; RETLW kn ; Конец таблицы.
Return from subroutine Возврат из подпрограммы
Синтаксис: Операнд:
RETURN Нет 84
Операция: Биты состояния: Код: Описание: Циклов: Пример:
RLF
TOSPC Не изменяются 00 0000 0000 1000 Адрес возврата восстанавливается из вершины стека (TOS) вPC. 2 RETURN После прерывания: PC=TOS
Rotate Left f through carry Сдвиг f влево через перенос
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
RLF f,d 0f127,d [0,1] fd,fC,Cd C 00 1101 dfff ffff Содержимое регистра f сдвигается на 1 бит влево через бит переноса. Команда сбрасывает сторожевой таймер WDT предварительный делитель. Если d=0, результат сохраняется в регистре W. Если d=1 результат сохраняется в том же регистре f.
С
Регистр ‘f’
Циклов: Пример:
1 RLF REG1,0 Перед выполн. команды: REG1=11100110 C=0 После выполн. команды: REG1=11100110 C=1 W=11001100
RRF
Rotate Right f through carry Сдвиг f вправо через перенос
Синтаксис: Операнд: Операция: Биты состояния:
RRF f,d 0f127,d [0,1] fd,fC,Cd C 85
Код: Описание:
00 1100 dfff ffff Содержимое регистра f сдвигается на 1 бит влево через бит переноса. Команда сбрасывает сторожевой таймер WDT предварительный делитель. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f.
С Циклов: Пример:
Регистр ‘f’
1 RRF REG1,0 Перед выполн. команды: После выполн. команды:
REG1=11100110 C=0 REG1=11100110 C=0 W=01110011
SLEEP
Go into standby mode Переход в режим SLEEP
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
SLEEP Нет 00hWDT, 0WDT prescaler, 1 TO , 0 PD TO , PD 00 0000 0110 0011 Команда сбрасывает сторожевой таймер WDT и предварительный делитель. В регистре состояния устанавливается бит TO и сбрасывается бит PD . Процессор переходит в режим SLEEP с включенным генератором. 1 SLEEP
Циклов: Пример:
SUBLW
Subtract W from literal ВычитаниеW из константы
Синтаксис: Операнд: Операция:
SUBLW k 0k255 (k) - (W) (W) 86
Биты состояния: Код: Описание:
Циклов: Пример 1:
Пример 2:
Пример 3:
C,DC,Z 11 110x kkkk kkkk Содержимое регистра W вычитается из 8-битовой константы k. Результат сохраняется в регистре W. Биты C и CD устанавливаются в 1 в случае отсутствия заема из старшего разряда. 1 SUBLW 0x02 Перед выполнением команды: W=1 После выполнения команды: W=1 C=1 ;результат положительный SUBLW 0x02 Перед выполнением команды: W=2 После выполнения команды: W=0 C=1 ;результат ноль SUBLW 0x02 Перед выполнением команды: W=3 После выполнения команды: W=FF C=0 ;результат отрицательный
SUBWF
Subtract W from f Вычитание W из f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
SUBWF f,d 0f127,d [0,1] (f) - (W) (dest) C,DC,Z 00 0010 dfff ffff Содержимое регистра W вычитается из содержимого регистра f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Биты C и CD устанавливаются в 1 в случае отсутствия заема из старшего разряда. 1 SUBWF REG1,1 Перед выполнением команды: REG1=3 W=2 После выполнения команды: REG1=1 W=2 C=1 ;результат положительный SUBWF REG1,1 Перед выполнением команды: REG1=2 W=2 После выполнения команды: REG1=0 W=2 C=1 ;результат ноль 87
Циклов: Пример 1:
Пример 2:
Пример 3:
SUBWF REG1,1 Перед выполнением команды: REG1=1 W=2 После выполнения команды: REG1=0xFF W=2 C=0 ;результат отрицательный
SWAPF
Swap halves f Обмен тетрад в f
Синтаксис: Операнд: Операция: Биты состояния: Код: Описание:
Циклов: Пример:
TRIS
SWAPF f,d 0f127,d [0,1] fd,fd Не изменяются 00 1110 dfff ffff Содержимое старшей и младшей тетрад регистра f обменивается. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. 1 SWAPF REG,0 Перед выполнением команды: REG=0xA5 После выполнения команды: REG=0x5A
Load TRIS Register Загрузка регистра TRIS
Синтаксис: TRIS f Операнд: 5f7 Операция: (W) TRIS register f Биты состояния: Не изменяются Код: 00 0000 0110 0fff Описание: Содержимое регистра W загружается в регистр TRISA или TRISB при f=5 или 6, соответственно. Циклов: 1 Пример: TRIS PORTB Перед выполнением команды: W=0xA5 После выполнения команды: TRISB=0xA5 Примечание: Для обеспечения совместимости с будущими продуктами семейства PIC16CXX не рекомендуется использовать эту команду.
XORLW
Exclusive OR literal to W Исключающее ИЛИ константы и W 88
Синтаксис: Операнд: Операция: Биты состояния: Код:
XORLW k 0k255 (W).XOR.(k) (W) Z 11 1010 kkkk kkkk
Описание: Содержимое регистра W поразрядно складывается с 8-битовой константой k по модулю 2. Результат сохраняется в регистре W. Циклов: 1 Пример: XORLW 0xAF Перед выполнением команды: W=0xB5 После выполнения команды: W=0x1A
XORWF
Exclusive OR W and f Исключающее ИЛИ W c f
Синтаксис: XORWF f,d Операнд: 0f127,d [0,1] Операция: (W).XOR.(f) (dest) Биты состояния: Z Код: 00 0110 dfff ffff Описание: Содержимое регистра W поразрядно складывается с содержимым регистра f по модулю 2. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в том же регистре f. Циклов: 1 Пример: XORWF REG,1 Перед выполнением команды: REG=0xAF W=0xB5 После выполнения команды: REG=0x1A W=0xB5
89
3. ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ PIC16C8X В СИСТЕМАХ ПРОМЫШЛЕННОЙ АВТОМАТИКИ Отличительные особенности микроконтроллеров семейства PIC16C8X: очень большой объем вычислений, осуществляемый в реальном или близком к реальному времени; простая организация режима программирования; эффективная защита информации; многофункциональная периферия; наличие специальных функций; широкие диапазоны питающего напряжения и температуры окружающей среды; низкое энергопотребление и высокая надёжность. Все это позволяет создавать средства автоматики с качественно новыми свойствами и характеристиками. В настоящей главе рассматриваются некоторые результаты разработки специализированных технических средств автоматики на основе микроконтроллеров PIC16C84, PIC16C71 и др. 3.1. Измерительные устройства и системы на основе микроконтроллеров 3.1.1. Индикатор металлических предметов в потоке топлива Индикатор металлических предметов предназначен для автоматического обнаружения случайных опасных для защищаемого оборудования магнитных и немагнитных металлических предметов в потоках топлива, транспортируемых неметаллическими ленточными конвейерами на электростанциях и других объектах топливно-энергетического комплекса. Устройство обеспечивает: обнаружение металлических предметов в потоке топлива; формирование сигнала управления исполнительным устройством (металлоулавливателем, приводом транспортера и др.); включение реле аварийной световой и звуковой сигнализации. Чувствительным элементом индикатора металлических предметов служит дифференциально-резонансный датчик сборной конструкции, содержащий три индуктивно связанные катушки, 90
расположенные в специальной немагнитной рамке, установленной в плоскости, перпендикулярной конвейерной линии. Питание генераторной катушки осуществляется от специального формирователя гармонического сигнала с усилителем мощности. Две приемные катушки соединены с входом усилителя разбаланса. Внесение любого металлического предмета в пространство между обмотками эквивалентно внесению короткозамкнутого контура. В результате этого происходит разбаланс напряжений в приемных обмотках, напряжение разбаланса усиливается входным усилителем электронного блока. Электронный блок устройства содержит следующие основные функциональные узлы: генератор переменного напряжения, усилитель мощности, входной усилитель разбаланса, выпрямитель, фильтр, формирователь сигнала управления электромагнитным сепаратором и блок питания. Принципиальная схема генератора и усилителя переменного напряжения показа на рис. 3.1. Для формирования гармонического сигнала использован 8разрядный микроконтроллер DD1 (PIC 16C84). Параллельный код, соответствующий синусоидальному напряжению, с выходов RB0…RB7 микросхемы DD1 преобразуется цифроаналоговым преобразователем, реализованным на микросхемах DD2 и DА1. Ниже приведена программа формирования квазисинусоидального сигнала. LIST P=16C84 RTCC equ H'01' STATUS equ H'03' PORT_A equ H'05' PORT_B equ H'06' Z equ 2 PA0 equ 5 PA1 equ 6 se016 equ d'128' se115 equ d'152' se214 equ d'176' 91
92
Рис. 3.1. Схема генератора и усилителя переменного напряжения
se313 equ d'198' se412 equ d'217' se511 equ d'233' se610 equ d'245' se79 equ d'252' se8 equ d'254' se1731 equ d'103' se1830 equ d'79' se1929 equ d'57' se2028 equ d'38' se2127 equ d'22' se2226 equ d'10' se2325 equ d'3' se24 equ d'1' start bsf STATUS,PA0 movlw H'01' movwf H'81' movlw 0 movwf H'86' bcf STATUS,PA1 bcf STATUS,PA0 begin movlw se016 call sub_1 movlw se115 call sub_1 movlw se214 call sub_1 movlw se313 call sub_1 movlw se412 call sub_1 movlw se511 call sub_1 movlw se610 call sub_1 93
movlw se79 call sub_1 movlw se8 call sub_1 movlw se79 call sub_1 movlw se610 call sub_1 movlw se511 call sub_1 movlw se412 call sub_1 movlw se313 call sub_1 movlw se214 call sub_1 movlw se115 call sub_1 movlw se016 call sub_1 movlw se1731 call sub_1 movlw se1830 call sub_1 movlw se1929 call sub_1 movlw se2028 call sub_1 movlw se2127 call sub_1 movlw se2226 call sub_1 movlw se2325 call sub_1 movlw se24 call sub_1 movlw se2325 94
call sub_1 movlw se2226 call sub_1 movlw se2127 call sub_1 movlw se2028 call sub_1 movlw se1929 call sub_1 movlw se1830 call sub_1 movlw se1731 call sub_1 goto begin sub_1 movwf PORT_B sub_3 movf RTCC,0 btfss STATUS,Z goto sub_3 movlw D'245' movwf RTCC nop nop return END Квазисинусоидальный сигнал следующие характеристики: частота, Гц амплитуда, В шаг квантования по амплитуде, В шаг квантования по времени, мкс
на
выходе
DА1
имеет
1500 1,25 0,01 20,8 (1/32 часть периода) Усилитель мощности выполнен на микросхеме DА2 и транзисторах VT1…VT6. Коэффициент усиления усилителя по напряжению 60. Допустимое сопротивление нагрузки – 500 Ом. Принципиальная схема выходного усилителя напряжения и формирователя сигнала управления исполнительным устройством показана на рис. 3.2. Усилитель напряжения реализован на 95
операционном усилителе DА1. Коэффициент усиления регулируется с помощью резистора R3. Диод VD осуществляет выпрямление усиленного сигнала разбаланса. Фильтр нижних частот реализован с помощью резистора R и конденсатора С. Постоянное напряжение, пропорциональное сигналу разбаланса, действует на входе RB4 микроконтроллера DD1. Логический формирователь сигнала управления исполнительным устройством реализован на основе микроконтроллера DD1 (PIC 16C84). Алгоритм работы формирователя сигнала управления следующий. Контроллер анализирует амплитуду сигнала, поступающего на вход RB4, и регистрирует моменты превышения входным сигналом порогового уровня. В результате этого в оперативной памяти микроконтроллера запоминается последовательность импульсов U e при t i t t i i ; x 0 при 0 t t i , t i i ; i 1,2 ,..., k , где Ue – сигнал, соответствующий уровню логической единицы; i - интервал времени, соответствующий превышению входным сигналом микроконтроллера порогового уровня (прохождению металлического предмета через датчик); i - текущий номер события (обнаружение металлического предмета). Цикл работы формирователя сигнала управления исполнительным устройством начинается при обнаружении металлического предмета в случае выключенного исполнительного устройства в момент времени tj. При этом в счетчике событий (обнаружение металлического предмета) записывается начальное число j = 1. На выходе контроллера DD1 формируется сигнал управления в соответствии с уравнением U e при t T t t k T k ; y 0 при t k T k t t k 1 T , 96
97
Рис. 3.2. Схема формирователя сигнала управления
где Т – интервал времени задержки включения электронного сепаратора, равный времени движения металла на транспортере от датчика до металлоулавливателя; - время включения исполнительного устройства; k - количество металлических предметов, обнаруженных в течение одного цикла (начало цикла соответствует обнаружению металлического предмета при выключенном исполнительном устройстве, конец цикла – выключение исполнительного устройства). Программа для микроконтроллера-формирователя сигнала управления исполнительным устройством приведена ниже. LIST P=16F84 RTCC equ H'01' STATUS equ H'03' PORT_A equ H'05' PORT_B equ H'06' Z equ 2 PA0 equ 5 PA1 equ 6 TIMEZAD equ H'0C' TIME_2 equ H'0D' TIME equ H'0E' TIMEON equ H'0F' TIMEOFF equ H'10' TIME_1S equ H'11' FLEM equ H'12' start bsf STATUS,PA0 movlw H'05';делитель на 64 movwf H'81' movlw B'00011111';настройка порта В 1-вход, 0-выход movwf H'86' bcf STATUS,PA1 bcf STATUS,PA0 movlw 0 movwf PORT_B movwf TIME 98
movwf FLEM start1 movlw D'8' movwf TIME_2 movlw D'7' btfss PORT_B,3;произведена замена btfsc на btfss, goto bit_0 ;т.к. переключатели на земле real_1 BTFSS PORT_B,2 goto bit_1 real_2 BTFSS PORT_B,1 goto bit_2 real_3 BTFSS PORT_B,0 goto bit_3 goto real_4 bit_0 addlw D'1' goto real_1 bit_1 addlw D'2' goto real_2 bit_2 addlw D'4' goto real_3 bit_3 addlw D'8' real_4 movwf TIMEZAD addwf TIME_2,1 movlw D'155' movwf TIME_1S zader movf RTCC,0 btfss STATUS,Z goto zader movlw D'4'; подстройка RTCC до 1с movwf RTCC decfsz TIME_1S,1 goto begin incf TIME,1 movlw D'155' movwf TIME_1S 99
begin btfss PORT_B,4 goto nol_2 btfss FLEM,0 goto nol_1 movf TIME_2,0 movwf TIMEOFF movf TIME,0 addwf TIMEOFF,1 goto nol_2 nol_1 movf TIME,0 movwf TIMEON movwf TIMEOFF movf TIMEZAD,0 addwf TIMEON,1 movf TIME_2,0 addwf TIMEOFF,1 bsf FLEM,0 nol_2 movf TIME,0 subwf TIMEON,0 btfss STATUS,Z goto nol_3 btfss FLEM,0 goto nol_3 bsf PORT_B,5 bcf FLEM,0 nol_3 movf TIME,0 subwf TIMEOFF,0 btfss STATUS,Z goto zader bcf PORT_B,5 goto zader END 100
3.1.2. Прибор для измерения температуры воды в системе теплоснабжения Устройство предназначено для работы в составе автоматизированной системы контроля параметров теплоэнергетических процессов и обеспечивает оперативный контроль температуры прямой (горячей) и обратной (холодной) воды в тепловом узле. Прибор состоит из двух модулей: измерительного преобразователя температуры воды в частоту следования импульсов и модуля индикации. Функциональная схема прибора показана на рис. 3.3.
Рис 3.3. Функциональная схема прибора контроля температуры воды
Измерительный преобразователь температуры в частоту следования импульсов содержит два источника тока ИТ1 и ИТ2, выходы которых подключены к термопреобразователям сопротивления ТС1 и ТС2. Напряжения с выходов датчиков преобразуются в частоту следования импульсов с помощью ПНЧ1 и ПНЧ2 синхронного типа. Тактовые импульсы для ПНЧ формируются на прямом и инверсном выходах Т-триггера Т, на входе которого действуют выходные импульсы генератора Г с частотой 128 Гц. Таким образом выходные импульсы ПНЧ1 и ПНЧ2 всегда сдвинуты во времени на интервал, равный или кратный 101
периоду следования, импульсов генератора Г. Импульсы с выхода ПНЧ1 инвертируются инвертором И и передаются на выход по одной линии с выходными импульсами ПНЧ2 с помощью выходного устройства ВУ. В модуле индикации производится разделение положительных и отрицательных импульсов с помощью входного устройства, преобразование импульсных последовательностей в коды и отображение этих кодов с помощью двух цифровых индикаторных устройств. Преобразование частота-код и управление цифровыми индикаторными устройствами реализованы с помощью микроконтроллера МК типа PIC16F84. Принципиальные схемы измерительного преобразователя температуры в частоту следования импульсов и модуля индикации показаны на рис. 3.4 и 3.5 соответственно. Программа для микроконтроллера приведена ниже. #include "P16F84.INC" ;Начало программы numind equ 30 fa equ 33 delc equ 34 dela equ 35 delb equ 36 wa1 equ 31 wa2 equ 32 ; a0 a1 a2 a3 a4 a5 a6 a7 ;1 2 3 4 5 6 ; num6 ... num1 ; adr of 18..1F Hex ; sc4(+) sc3(-) c0 equ B'00111111' c1 equ B'00000110' c2 equ B'01011011' c3 equ B'01001111' c4 equ B'01100110' c5 equ B'01101101' 102
103
c7
equ
B'00000111' 104
c8 c9
equ equ
B'01111111' B'01101111'
a0 a1 a2 a3 a4 a5
equ equ equ equ equ equ
B'00000010' B'00000100' B'00000000' B'00000101' B'00000001' B'00000110'
; Начало программы goto main ; подпрограмма декодирования BCD в коды зажигания сегментов bcdseg addwf PCL,1 retlw c0 retlw c1 retlw c2 retlw c3 retlw c4 retlw c5 retlw c6 retlw c7 retlw c8 retlw c9 ; подпрограмма декодирования адреса индикатора adra addwf PCL,1 nop retlw a0 retlw a1 retlw a2 retlw a3 retlw a4 retlw a5 ;********************************************************* 105
; Основная программа ;********************************************************* main movlw H'18' movwf FSR cicl clrf INDF incf FSR,1 btfss FSR,6 goto cicl movlw movwf movlw movwf movlw movwf movlw movwf movlw movwf
D'2' delc D'1' dela D'1' delb D'78' wa1 D'78' wa2
bsf STATUS,RP0 movlw H'01' movwf H'81' movlw B'00011000' movwf H'85' movlw 0 movwf H'86' bcf STATUS,RP1 bcf STATUS,RP0 ; цикл опроса входов wait movf TMR0,0 btfsc STATUS,Z goto wait wait2 movf TMR0,0 106
btfss STATUS,Z goto wait2 ; опрос портов btfss PORTA,3 goto sc1 bcf fa,3 goto nosig3 sc1 btfsc fa,3 goto nosig3 decfsz wa1,1 goto econ1 incf wa1,1 bsf fa,3 movlw H'18' movwf FSR beg1 incf INDF,1 movlw D'10' subwf INDF,0 btfss STATUS,Z goto econ1 clrf INDF incf FSR,1 goto beg1 econ1 nosig3 btfsc PORTA,4 goto sc2 bcf fa,4 goto nosig4 sc2 btfsc fa,4 goto nosig4 107
decfsz wa2,1 goto econ2 incf wa2,1 bsf fa,4 movlw H'1B' movwf FSR beg2 incf INDF,1 movlw D'10' subwf INDF,0 btfss STATUS,Z goto econ1 clrf INDF incf FSR,1 goto beg1 econ2 nosig4 ; делитель на 2 тактов decfsz delc,1 goto wait movlw D'2' movwf delc ; Вывод числа на индикатор ; вывод адреса в порт А incf numind,1 movlw D'7' subwf numind,0 btfsc STATUS,Z clrf numind movf numind,0 movwf FSR call adra movwf PORTA 108
; заносим смещение в регистр косвенного адреса и вызываем число movlw H'37' addwf FSR,1 movf INDF,0 ; декодируем BCD в коды зажигания сегментов call bcdseg movwf PORTB comf PORTB,1 ; конец вывода чисел на индикатор ; делитель на 247 и 58 decfsz dela,1 goto wait movlw D'247' movwf dela decfsz delb,1 goto wait movlw D'7' movwf delb ; делаем зеркальную копию регистров цифр movlw movwf movlw movwf
D'78' wa1 D'78' wa2
movlw H'18' movwf FSR loop bcf FSR,5 movf INDF,0 clrf INDF 109
bsf FSR,5 movwf INDF incf FSR,1 btfss FSR,6 goto loop goto wait END
Технические данные прибора диапазон измеряемой температуры прямой (горячей) воды, С обратной (холодной) воды, С основная приведенная погрешность преобразования, %, амплитуда выходных импульсов канала измерения температуры горячей воды, В температуры холодной воды, В тип первичных преобразователей
+70...+150 +40...+70 не более 0,75 +12 -12 ТСМ-50
3.1.3. Устройство измерения глубины скважины при бурении При бурении взрывных скважин на открытых горных разработках требуется контроль положения бурового инструмента и глубины образующейся скважины. Функциональная схема устройства, разработанного для этой цели, показана на рис. 3.6. Она содержит первичный преобразователь перемещения, состоящий из профилированного диска 1, соединенного с помощью троса 2 с буровым ставом, и измерительной головки 3 с двумя индуктивными выключателями положения ИВП 4 и 5, пульт управления 6, блок индикации 7 и вычислительный модуль 8. 110
Рис. 3.6. Функциональная схема устройства для измерения глубины скважины при бурении
При движении бурового става происходит вращение диска 1, сегменты которого попадают в зоны действия индуктивных выключателей положения 3 и 4. В результате происходит замыкание нормально замкнутых контактов выключателей и считывание результата. Использование двух выключателей положения обеспечивает возможность измерения перемещений в прямом и обратном направлениях. Вычислительные процедуры: установка измерительного преобразователя в начальное положение, расчет текущего значения глубины, установка и хранение заданного значения глубины скважины и управление индикацией производятся с помощью специализированного контроллера, выполненного на основе 8-разрядного RISC-процессора PIC 16C84. Пульт управления содержит кнопки: S1 (Уст.) – установка измерителя в исходное положение; S2 (Режим) -– управление режимами установки измерителя в исходное положение и задание глубины скважины; S3 (Больше), S4 (Меньше) – кнопки установки заданной глубины скважины и тумблер S5 (Блок.) прерывания измерений при выполнении вспомогательных операций. В устройстве предусмотрены следующие режимы: ожидание команды управления; имеет место при включении источника питания до установки глубины скважины и характеризуется миганием цифрового индикатора; установка заданной глубины скважины; реализуется нажатием 111
кнопок S1,S3 и S4; установка начальной точки отсчета; при заданном исходном положении бурового инструмента; одновременное нажатие кнопок S1 и S2 вызывает обнуление цифрового индикатора; измерение глубины скважины; при движении бурового става до заданной глубины результат измерения отображается с помощью цифрового индикатора, при достижении уставки включается сигнализация, далее результат отображается при мигании индикаторов; блокировка устройства; для проведения вспомогательных операций измерения прерываются, результат при этом сохраняется в памяти контроллера. Техническая характеристика устройства Диапазон измерения, м 0...100 Разрешающая способность, м 0,1 Напряжение питания, В ~220 Габаритные размеры приборного модуля, мм 180х170х120 Масса, не более, кг 1,0
3.1.4. Прибор для испытаний автоматических выключателей В практике эксплуатации электрооборудования и систем автоматики промышленных предприятий важное место занимает проверка характеристик максимальной токовой и тепловой защиты автоматических выключателей. Аппаратура для проведения таких испытаний должна обеспечивать регулирование переменного тока в диапазоне от номинального значения Iн для автоматического выключателя до (11 —15)Iн, измерение действующего тока и запоминание его значения при отключении, измерение времени срабатывания защиты, простоту эксплуатации и надежность. На рис. 3.7 показана функциональная схема комплектного испытательного устройства, разработанного для проверки и на-
112
Рис. 3.7. Схема прибора для испытаний автоматических выключателей
стройки автоматических выключателей с электромагнитными и тепловыми расцепителями. Прибор обеспечивает максимальный ток 1500 A. Алгоритм работы устройства заключается в стабилизации (при испытании тепловой защиты) или плавном увеличении (при испытании максимальной токовой защиты) тока, протекающего 113
через замкнутые контакты испытуемого автоматического выключателя, до срабатывания защитного отключения. Силовая часть устройства содержит понижающий трансформатор 15, резистор 16, сглаживающий дроссель 19 с двумя обмотками, два встречно-параллельных оптоэлектронных тиристора 20 и 21, автоматический выключатель 34, контактор 33 переключения обмоток дросселя 19 и тумблер 30 переключения диапазонов. К вторичной обмотке понижающего трансформатора 15 подключаются замкнутые контакты 1 испытуемого автоматического выключателя. Регулирование тока осуществляется с помощью встречно-параллельных тиристоров, включенных в первичную цепь трансформатора 15. Управляющая и измерительная часть прибора включает измерительный шунт 7, соединенный последовательно с контактами 1 испытуемого выключателя, аналоговый усилитель мощности 8 с переключаемым коэффициентом передачи, устройство выделения модуля 9, задатчик тока 6, реле 14, управляющее переключением коэффициента передачи аналогового усилителя 8, два микроконтроллера 17 и 29, два кварцевых резонатора 22 и 23, усилитель-формирователь импульсов 18, модуль индикации 32, формирователь импульсов синхронизации 27, кнопку «Пуск» 10, кнопку установки тока 11, переключатель режимов работы 12. В устройстве использованы высокопроизводительные 8-разрядные RISC-микроконтроллеры PIC16C84 и PIC16C711. В приборе предусмотрено два режима работы: испытание максимальной токовой защиты; испытание тепловой защиты. В режиме испытания максимальной токовой защиты выполняется измерение действующего значения тока, приводящего к отключению автомата. Нажатие кнопки 10 «Пуск» инициализирует в микроконтроллере 17 следующие программы: формирование импульсов управления для тиристоров, фаза которых относительно синхронизирующего напряжения изменяется по линейному закону от 180 эл. град. в сторону уменьшения; вычисление действующего значения тока по алгоритму: 114
Iд
1 N
1 N 2 , i ( jt ) N j 1
где N - число отсчетов за период Т; t - шаг квантования; t = T/N; Т - период сети. Значения N = 256; t = 0,078 мс. Скорость нарастания тока 50 А/с для I диапазона; 150 А/с для II диапазона. В конце каждого периода измерения, равного периоду сети, результат поступает в микроконтроллер 29, который выполняет масштабирование результата и управляет отображением информации с помощью цифрового прибора 32. После размыкания контактов 1 ток в силовой цепи прерывается, тиристоры 20 и 21 выключаются, а энергия, запасенная в трансформаторе 15, рассеивается в резисторе 16. В измерительном модуле (микропроцессор 29) при этом сохраняется максимальное значение тока, вызвавшее срабатывание защитного отключения. Это значение отображается с помощью цифрового прибора 32 до следующего эксперимента. Если защитное отключение не сработало, то при достижении током максимального значения для соответствующего диапазона (500 А для I диапазона и 1500 А для II диапазона) формирование импульсов управления для тиристоров прекращается. При испытании тепловой защиты осуществляется измерение времени срабатывания защитного отключения при заданном токе. В этом режиме задание тока осуществляется с помощью потенциометра 6 при нажатой кнопке 11, значение тока отображается с помощью цифрового прибора 32. При отпускании кнопки 11 в оперативной памяти микропроцессора 17 сохраняется значение угла включения тиристоров, соответствующее заданному току. При нажатии кнопки «Пуск» в микропроцессоре 17 инициализируются программы: формирования импульсов управления тиристорами с фазой, обеспечивающей протекание в нагрузке заданного тока; отсчета времени от момента включения. Коды, соответствующие отсчетам времени, принимаются микропроцессором 29, который обеспечивает отображение времени 115
в секундах с помощью цифрового прибора 32. При размыкании контактов 1 автомата отсчет времени прекращается, а на цифровом приборе отображается число, соответствующее времени срабатывания тепловой защиты в секундах. Если защитное отключение не сработало в течение 30 с, то формирование импульсов управления тиристорами прекращается. Программа для микроконтроллера управления индикацией (PIC16C84) имеет следующий вид. 16C84 COMMENT (#) ------------------------------------------------
Драйвер индикации, модуль ------------------------------------------------
NAME BLIN4.ASM 17:48pm 03-13-1997
(рабочая версия) 17:58pm 03-04-1997
------------------------------------------------
# INCLUDE 16C84.inc TIM=2 TOK=1 KAL=3 TOKD=4 TOKM=5 PER=10H BLANK=0FFH ; размещение точки PTOK =7;2;7;3 ; тока тепл. защ. PTOKD=7;2 ; тока динам. защ. PKAL =1;2;7;3 ; калибровки PTIM =2 ; времени PTOKM =1;2 ; тока тепл. защ. 116
;***************************************************** ; множители делители ; ВЕРСИЯ шунт 500;20;2000;600;200 ампер MNKAL = 15;100;30;15;10;3 DLKAL = 1;3;2;1;3;2
; множит. в реж. калибровки ; делит. в реж. калибровки
MNTOK = 45;10;90;45;10;9
; множит. в реж. изм. тока тепл. защ. ; делит. в реж. изм. тока тепл. защ.
DLTOK = 1;1;2;1;1;2
;***************************************************** ; системные параметры KTIM = 1 include bl1sys.inc ;-----------------------------------------------; Распределение регистров памяти ;-----------------------------------------------ORG 0CH ; var byte COUN1 COUN2 COUNB BDIG DB 1 BADR DB 1 BLED DB 0 BLED1 DB 1 BLED2 DB 1
DB 1 DB 1 DB 1
; счетчик индикатора ; счетчик резерв ; счетчик битов приемника ; буфер цифры индикатора ; буфер адреса индикатора ; буфер индикатора BCD формат ; 1 тетрада ; 2 тетрада 117
BLED3 DB 1 BLED4 DB 1 ILED DD 0 ILED1 DB 1 ILED2 DB 1 ILED3 DB 1 ILED4 DB 1
; 3 тетрада ; 4 тетрада ; буфер принятых данных ; 1-байт ; 2-байт ; 3-байт ; 4-байт (не используется=0)
BUPR DB 1 ; буфер приема с интерфейса BUPR1 DB 1 FLAG DB 1 ; пользовательские флаги STEK DB 1 ; PSW DB 1 ; POINT DB 1 ; var bit FLCL EQU FLAG,0 ; флаг прер. по таймеру FDAT EQU FLAG,1 ; флаг конца приема данных FLWR EQU FLAG,2 ; флаг принятия данных ;-----------------------------------------------------------CODE ORG 000H GOTO START ; переход на вектор начальной загрузки ORG 004H GOTO PRER ; переход на п/п обработки прерываний ORG 010H include b16_bcd.inc include MUL8-B.inc include BDIV.inc START: 118
; установка портов CALL USTPA CALL USTPB TESTIN: CLRF INTCON CLRF COUN1 CLRF BDIG CLRF BADR CLRF COUN2 CLRF POINT CALL INIRTCC CALL CLRIND BSF BSF BSF GOTO
; очистить счетчик индикатора ; ... буфер данных индикатора ; ... буфер адреса индикатора ; ... счетчик приемника
; очистить индикатор
RTIE INTE GIE WORK
;-----------------------------------------------; Рабочий режим индикатора ;-----------------------------------------------WORK: ;-----------------------------------------------BSF BSF BSF
RTIE INTE GIE
BTFSC FLWR GOTO WORKRD BTFSC FLCL 119
GOTO WORKLED GOTO WORK WORKRD: BCF BCF
FLWR INTE
MOVF ILED3,0 XORLW blank BTFSC Z GOTO CLRIND MOVF ILED3,0 XORLW KAL BTFSC Z GOTO CALKAL MOVF ILED3,0 XORLW TOK BTFSC Z GOTO CALTOK MOVF ILED3,0 XORLW TIM BTFSC Z GOTO CALTIM MOVF ILED3,0 XORLW PER BTFSC Z GOTO INDPER
GOTO WORK 120
MM3: MOVF ILED1,0 MOVWF L_BYTE MOVF ILED2,0 MOVWF H_BYTE MM4: BCF
GIE
CALL B16_BCD CALL APAKBCD BSF
GIE
GOTO WORK CALTIM: MOVLW PTIM MOVWF POINT GOTO MM3 ;-----------------------------------------------CALTOK: BCF
GIE
MOVLW MOVWF
PTOK POINT
MOVF ILED1,0 MOVWF MULCND MOVLW MOVWF
MNTOK MULPLR 121
CALL MUL8_B MOVLW MOVWF
DLTOK TEMPd
CALL DIV16_8 GOTO MM4 ;-----------------------------------------------CALKAL: BCF
GIE
MOVLW MOVWF
PKAL POINT
MOVF ILED1,0 MOVWF MULCND MOVLW MOVWF
MNKAL
; множитель в режиме калибровки
MULPLR
CALL MUL8_B MOVLW MOVWF
DLKAL TEMPd
CALL DIV16_8 GOTO MM4 ;-----------------------------------------------CLRLED: MOVLW MOVWF
00H BLED1 122
MOVWF MOVWF MOVWF
BLED2 BLED3 BLED4
GOTO WORK ;-----------------------------------------------TABLSIM: ; таблица символов индикатора ADDWF PC,1 RETLW ZN0 RETLW ZN1 RETLW ZN2 RETLW ZN3 RETLW ZN4 RETLW ZN5 RETLW ZN6 RETLW ZN7 RETLW ZN8 RETLW ZN9 RETLW ZNA RETLW ZNb RETLW ZNC RETLW ZNd RETLW ZNE RETLW ZNF ;----------------------------------------------------TABLADR: ; таблица адреса буфера ADDWF PC,1 RETLW BLED1 RETLW BLED2 RETLW BLED3 RETLW BLED4 ;----------------------------------------------------TABLADR1: ; таблица адреса буфера 123
ADDWF RETLW RETLW RETLW RETLW
PC,1 ILED1 ILED2 ILED3 ILED4
;----------------------------------------------------; п/п обработки прерываний ;----------------------------------------------------PRER: BTFSC INTF GOTO PRWR BTFSC RTIF GOTO PRCLK RETFIE PRWR: BCF CALL BTFSS BSF CLRF BCF
FLWR RDI2C Z FLWR RTCC INTF
RETFIE PRCLK:
; обработка прерывания от таймера
BCF RTIF ; сброс аппаратного флага BSF FLCL ; установить флаг таймера CALL INIRTCC RETFIE WORKLED: BCF
FLCL 124
MOVF COUN1,0 MOVWF BADR RLF BADR,1 RLF BADR,1 MOVF COUN1,0 CALL TABLADR MOVWF FSR MOVF F00,0 ANDLW 0FH CALL TABLSIM MOVWF BDIG MOVLW MOVWF
0FFH PORTB
MOVF BADR,0 ; переслать в порт MOVWF PORTA; значение адреса цифры BsF dp movf coun1,0 XORWF POINT,0 BTFSC Z BcF dp MOVF BDIG,0 MOVWF PORTB
; переслать в порт ; значение цифры
INCF COUN1,0 ANDLW 03H MOVWF COUN1 GOTO WORK RETPR: BTFSC PSW,0 BCF C 125
MOVF STEK,0 RETFIE LDBLED: MOVF ILED1,0 MOVWF BLED1 MOVF ILED2,0 MOVWF BLED2 MOVF ILED3,0 MOVWF BLED3 MOVF ILED4,0 MOVWF BLED4 RETURN USTPB: MOVLW KUSTB TRIS PORTB MOVLW 0FFH MOVWF PORTB RETURN USTPA: MOVLW KUSTA TRIS PORTA RETURN APAKBCD: ; распаковка BCD числа movf r2,0 andlw 0Fh movwf bled1 swapf r2,0 andlw 0Fh movwf bled2 126
movf r1,0 andlw 0Fh movwf bled3 swapf r1,0 andlw 0Fh movwf bled4 RETURN ldtest: ; загрузка тест-числа movlw 00 movwf l_byte movlw 00 movwf h_byte return CLRIND: ; очистить индикатор MOVLW MOVWF MOVWF MOVWF MOVWF
0H bLED1 bLED2 bLED3 bLED4
RETURN ;----------------------------------------------------; Ввод в регистр ввода байта по I2C ;----------------------------------------------------; ввод данных производится в буфер BUPR RDI2C: ; CALL RDBYTE ;1 RDBYTE1:
; чтение байта 1 127
CLRF BUPR MOVLW 8 MOVWF COUNB INIC1: ; начало такта приема BTFSC WRI RETLW
0
BTFSC DCI GOTO INIC1
; прием байта закончен ? ; нет - идем на ожид. нов. такта ; начало такта приема бита
INIC11: BTFSC WRI RETLW
0
BTFSS DCI GOTO INIC11 BCF BTFSC BSF RRF
C DI C BUPR
; прием байта закончен ? ; нет - идем на ожид. нов. такта ; такт приема бита закончен
; прием ; бита ;в ; буфер приема
DECFSZ COUNB GOTO INIC1
; инкремент счетчика бит
MOVF BUPR,0 MOVWF ILED1 ;2 ;
CALL RDBYTE
RDBYTE2:
; чтение байта 2 128
CLRF BUPR MOVLW 8 MOVWF COUNB INIC2: ; начало такта приема BTFSC WRI RETLW
0
BTFSC DCI GOTO INIC2
; прием байта закончен? ; нет - идем на ожид. нов. такта ; начало такта приема бита
INIC12: BTFSC WRI RETLW
0
BTFSS DCI GOTO INIC12 BCF BTFSC BSF RRF
C DI C BUPR
; прием байта закончен? ; нет - идем на ожид. нов. такта ; такт приема бита закончен
; прием ; бита ;в ; буфер приема
DECFSZ COUNB GOTO INIC2
; инкремент счетчика бит
MOVF BUPR,0 MOVWF ILED2 ;3 ; CALL RDBYTE RDBYTE3: ; чтение байта 3 CLRF BUPR MOVLW 8 129
MOVWF
COUNB
INIC3: ; начало такта приема BTFSC WRI RETLW
0
BTFSC DCI GOTO INIC3
; прием байта закончен? ; нет - идем на ожид. нов. такта ; начало такта приема бита
INIC13: BTFSC WRI RETLW
0
BTFSS DCI GOTO INIC13 BCF BTFSC BSF RRF
C DI C BUPR
; прием байта закончен? ; нет - идем на ожид. нов. такта ; такт приема бита закончен
; прием ; бита ;в ; буфер приема
DECFSZ COUNB GOTO INIC3
; инкремент счетчика бит
MOVF BUPR,0 MOVWF ILED3 RETLW
1
INDPER: ; индикация перегрузки movlw movwf movwf movwf
0eh bled1 bled2 bled3 130
movwf bled4 RETURN INIRTCC: ; инициализация таймера CLRWDT MOVLW KTIM MOVWF RTCC MOVLW KPDD; предделителя OPTION RETURN
Технические данные устройства: диапазон регулирования тока, А диапазон I 15...500 диапазон II 15...1500 основная приведенная погрешность измерения действующего значения тока, %, не более 2 основная приведенная погрешность измерения времени срабатывания защиты, %, не более 1 значение единицы младшего разряда при измерении тока, А 1 измерении времени, с 0,01 максимальное допустимое сопротивление внешней цепи, при котором гарантируется протекание максимального тока, мОм, не более 2 напряжение питания ~220 максимальный ток, потребляемый прибором от сети, А, не более 40 габариты, мм 380х320х300 масса, кг, не более 25 охлаждение воздушное естественное
131
3.2. Устройства автоматической защиты в электрических сетях 3.2.1 Устройство защиты электрической сети от однофазных замыканий на землю В системах электроснабжения промышленных предприятий для защитного отключения при однофазных замыканиях на землю, как правило, используют направленные защиты нулевой последовательности, реагирующие на установившиеся токи и напряжения. Принцип действия таких устройств основан на измерении фазового сдвига между током и напряжением нулевой последовательности. Защита срабатывает, если измеренное значение фазы находится в заданной зоне, определяемой настройкой схемы. Надежная работа такого устройства обеспечивается только при установившихся гармонических напряжениях и токах. Однако при переходных режимах в электрических сетях часто возникают длительные субгармонические колебания с частотами, близкими к частоте сети, например, 33 Гц. Экспериментально установлено, что для этих колебаний сдвиг фазы между током и напряжением нулевой последовательности находится в зоне срабатывания защиты. Это служит причиной ложных срабатываний защиты. Устройства для защитного отключения должны отвечать следующим требованиям: обеспечивать высокую надежность срабатывания при различных условиях работы электрических сетей; иметь высокую селективность при широком диапазоне изменения токов и напряжений нулевой последовательности; иметь высокие эргономические характеристики и низкую стоимость. На рис. 3.8 приведена функциональная схема микроконтроллерного устройства направленной защиты, удовлетворяющего сформированным требованиям. Схема содержит преобразователь 1 токового сигнала в потенциальный, первый 3 и второй 2 фильтры нижних частот, первый 4 и второй 5 усилители, первый 6 и второй 9 пороговые элементы; четыре релейных элемента 7, 8, 10 и 11, драйвер 12 питания микроконтроллера, блок питания 13, микроконтроллер 14, кварцевый резонатор 16, два 132
исполнительных усилителя 17 и 18, детектор 19, трансформатор
Рис. 3.8. Схема устройства защиты электрической сети от замыканий на землю
питания 20, реле 22 с двумя группами контактов 15 и 21, три элемента индикации 23, 24 и 25. Для тестового контроля устройства 133
используется внешняя цепь, состоящая из кнопки 25, конденсатора 27 и тумблера 28. Входными сигналами устройства служат выходные сигналы трансформаторов тока и напряжения нулевой последовательности. Преобразователь 1 представляет собой шунт, преобразующий ток нулевой последовательности в пропорциональное напряжение. Фильтры нижних частот 2 и 3 имеют идентичные частотные характеристики и предназначены для подавления высокочастотных составляющих входных сигналов. Прецизионные усилители 4 и 5 служат для усиления выходных сигналов фильтров соответственно 3 и 2. Пороговые элементы 6 и 9 преобразуют переменные напряжения u4 и u5 с выходов усилителей 4 и 5 в импульсные последовательности: U при u 4 U T ; u6 e 0 при u 4 U T ;
U при u 5 0; u9 e 0 при u 5 0;
где u6, u9 – выходные сигналы пороговых элементов соответственно 6 и 7, Ue – напряжение, соответствующее уровню логической единицы. Релейные элементы 7, 8, 10 и 11 формируют сигналы с уровнями логической единицы в случае превышения абсолютными значениями входных сигналов порогов переключения этих элементов, т.е.: U при u 4 U T ; u 7 u8 e 0 при u 4 U T ;
U при u5 U H ; u10 u11 e 0 при u5 U H ;
где UТ; -UТ; UН и –UН – уровни переключения релейных элементов соответственно 7, 8, 10 и 11. Таким образом, на выходах релейных элементов 7, 8, 10 и 11 формируются сигналы с уровнями логической единицы в случае превышения мгновенными значениями сигналов, пропорциональных току и напряжению нулевой последовательности, уровней переключения релейных элементов. 134
Микроконтроллер 14 реализует программу обработки данных, поступающих на его входы, по следующему алгоритму: 1. Проверка условия u4 > Uт; 2. Проверка условия u5 > Uн; 3. Проверка условия (Тт/2) = 10 мс ± D, где Тт —период выходного сигнала токового канала; D - допустимое для номинального режима работы сети отклонение периода; 4. Проверка условия (Тн/2) = 10 мс ± D, где Тн —период сигнала канала напряжения нулевой последовательности; 5. Проверка условия 1