Курсовая работа: Разработка и описание работы устройства на PIC-контроллере
Регистр INTCON - это полностью доступный для чтения и
записи регистр, в котором хранятся биты, управляющие различными источниками
прерываний.
bit7 GIE - бит глобального запрета прерываний
1 = разрешены все немаскируемые прерывания
0 = запрещены все прерывания
bit6 EEIE - разрешение прерывания по окончанию записи в
EEPROM
1 = прерывание по окончанию записи разрешено
0 = прерывание по окончанию записи запрещено
bit5 T0IE - разрешение прерывания по переполнению TMR0
1 = прерывание разрешено
0 = прерывание запрещено
bit4 INTE - разрешение прерывания по входу RB0/INT
1 = прерывание разрешено
0 = прерывание запрещено
bit3 RBIE - разрешение прерывания по изменению
состояния на входах порта В, линии RB7-RB4
1 = прерывание разрешено
0 = прерывание запрещено
bit2 T0IF - флаг прерывания по переполнению таймера/счетчика
TMR0
1 = TMR0 был переполнен (следует сбросить
программно!)
0 = TMR0 не был переполнен
Флаг используется для определения источника
прерывания,
bit1 INTF - флаг прерывания по входу RB0/INT
1 = произошло прерывание по входу RB0/INT (следует
сбросить программно!)
0 = не происходило прерывания по входу RB0/INT
Флаг используется для определения источника
прерывания.
bit0 RBIF - флаг прерывания по изменению состояния на
входах RB7-RB4
1 = на одном из выводов RB7-RB4 произошло изменение
уровня (следует сбросить программно!)
0 = не происходило прерывание по изменению уровня
Флаг используется для определения источника
прерывания.
Программный счетчик.
Программный счетчик микроконтроллера (PC) содержит 13
разрядов. Младший байт счетчика является полностью доступным для чтения и
записи регистром PCL (адрес 02h, 82h). Старшие пять байтов счетчика
непосредственно не доступны для чтения и записи. Обращение к ним происходит
через регистр PCLATCH (адрес 0Ah, 8Ah), являющийся буфером-защелкой для старших
битов счетчика. Содержимое PCLATCH переносится в старшие биты PC, когда
происходит запись нового значения в программный счетчик. Это случается, когда
выполняются команды CALL, GOTO или регистр PCL является регистром назначения
для результата арифметической операции.
Стек
Микроконтроллеры PIC16F84 имеют 8-уровневый 13-битный
аппаратный стек. Стек не является частью памяти данных или программ и указатель
стека не доступен для чтения или записи.
Косвенная адресация: регистры INDF и FSR
Регистр INDF не является физическим регистром. При
обращении к этому регистру на самом деле адресуется регистр, адрес которого
указан в регистре FSR (т.е. FSR является указателем). Такая адресация является
косвенной.
Порты ввода-вывода
Контроллеры PIC16F84 имеют два порта ввода-вывода,
PORTA и PORTB. Каждый вывод порта может быть запрограммирован на ввод или на
вывод установкой соответствующего бита в регистрах TRISA и TRISB. Выводимые
значения фиксируются в регистрах-защелках PORTA и PORTB. Направление
ввода-вывода может быть изменено в произвольный момент времени.
Двунаправленный порт А, регистры PORTA и TRISA
Регистр PORTA представляет собой 5-битную защелку.
Линия RA4 имеет триггер Шмитта на входе в режиме ввода и открытый сток в режиме
вывода. Остальные линии порта А по входу работают со стандартными уровнями TTL,
выходы подключаются к комплементарным выходным CMOS драйверам. Линия RA4
используется также как вход внешних тактовых импульсов для таймера TMR0.
Направление передачи данных для каждой линии
программируется отдельно, установкой или сбросом битов bit0...bit4 регистра
TRISA. Установка бита в 1 настраивает соответствующую линию на ввод. Выходной
драйвер при этом переходит в высокоимпедансное состояние. Установка бита в 0
настраивает линию порта на вывод и выводит на нее содержимое соответствующего
бита защелки PORTA. По умолчанию при включении питания все линии настроены на
ввод. При чтении порта А всегда считываются действительные логические уровни на
выводах, независимо от того, запрограммированы отдельные разряды как входы или
как выходы.
Рисунок 3.3 - Блок-схема порта А, линии RA4 (а) и
RA0-RA3 (b)
Двунаправленный порт В, регистры PORTB и TRISB
Порт В представляет собой 8-битный двунаправленный
порт. Выходные значения записываются в регистр-защелку PORTB. Направление
ввода-вывода определяется установкой или сбросом битов регистра TRISB.
Установка бита в 1 настраивает соответствующую линию на ввод, переводя выходной
драйвер в высокоимпедансное состояние, а-0 - на вывод. При включении питания
все линии по умолчанию настроены на ввод. Как и для порта А, чтение порта В
всегда возвращает действительные значения на выводах, независимо от направления
передачи данных для каждого вывода.
Все выводы порта В имеют встроенную отключаемую
нагрузку в виде резисторов, подключенных к шине питания (подтягивающие
резисторы). Нагрузка включается и отключается одновременно для всех выводов при
помощи бита 7 RBPU регистра OPTION_REG. При включении питания RBPU= 1 и
нагрузка отключена. Программное обнуление бита RBPU подключает нагрузку, но для
линий, настроенных на вывод нагрузка автоматически отключается.
Линии RB4...RB7 могут использоваться как входы прерывания
по изменению уровня. В этом качестве используются только линии, настроенные на
ввод. В каждом командном цикле происходит сравнение текущих значений на выводах
с предыдущими, зафиксированными в специальной защелке. Если хотя бы на одном из
этих выводов произошло изменение уровня, формируется прерывание. Длительность
импульса, который распознается как изменение уровня, должна быть не менее 4-х
периодов тактовой частоты. Программно распознать, по какой из линий RB4...RB7
произошло прерывание, невозможно.
Это прерывание выводит контроллер из состояния SLEEP.
Рисунок 3.4 - Блок-схема порта В, линии RB7-RB4 (а) и RB3-RB0
(b)
Модуль TIMER0 и регистр TMR0
TIMER0 является программируемым модулем
таймера/счетчика. Он имеет в своем составе:
-8-битный таймер/счетчик TMR0, доступный для чтения и
записи как регистр,
-программируемый предварительный делитель
(предделитель) мультиплексор входного сигнала
-генератор прерывания по переполнению регистра TMR0 с
FFh в 00h.
Предделитель
Предделитель является 8-битным счетчиком, который
также может быть использован, как выходной делитель (постделитель) сторожевого
таймера. Если предделитель подключен к модулю TIMER0, то он не может
использоваться со сторожевым таймером, и наоборот. Когда предделитель подключен
к таймеру/счетчику, все команды, использующие запись в регистр TMR0, обнуляют
предделитель. Если предделитель подключен к сторожевому таймеру, они обнуляются
совместно, командой CLRWDT. Предделитель недоступен для прямой записи или чтения.
Подключение предделителя может быть изменено "на
лету", то есть во время выполнения программы.
Работа с EEPROM
Память данных EEPROM доступна для чтения и записи во
всем рабочем диапазоне питающих напряжений и предназначена для хранения
8-битных значений. Перед записью нового значения предыдущее стирается.
Микроконтроллеры PIC16F84 имеют 64 байта EEPROM с адресами от 00h до 3Fh, но
эти ячейки недоступны путем прямой адресации в адресном пространстве
микроконтроллера. Для доступа к ним используется косвенная регистровая
адресация через специальные регистры. Всего при работе с EEPROM используется
четыре специальных регистра:
-EECON1
-EECON2
-EEDATA
-EEADR
Регистр обмена EEDATA содержит 8-битные данные
чтения/записи. EEADR хранит адрес ячейки, к которой происходит обращение. Несмотря
на то, что в PIC16F84 физически существует только 64 байта EEPROM, декодируются
все биты адреса. Поэтому необходимо следить за значением в EEADR, чтобы не
выйти за пределы адресного пространства. При записи в EEPROM требуется строго
выдерживать временной интервал, который контролируется встроенным таймером.
Время записи может варьироваться от кристалла к кристаллу, а также в
зависимости от питающего напряжения и температуры.
Когда у микроконтроллера установлен бит защиты кода,
процессор может читать и записывать EEPROM, но для программатора эта память
становится недоступна.
Регистры EECON1 и EECON2
Регистр EECON1 является контрольным регистром, у
которого физически доступны младшие пять бит. Старшие три недействительны и
всегда читаются как "0".
bit 7-5 Физически недоступны, всегда читаются как
"0"
bit 4 EEIF - флаг прерывания по окончанию записи
1 = запись завершена (должен быть сброшен программно)
0 = запись не завершена или не начиналась
bit 3 WRERR - флаг ошибки записи в EEPROM
1 = запись преждевременно прервана
0 = запись прошла успешно
bit 2 WREN - разрешение записи в EEPROM
1 = разрешен цикл записи
0 = запрещена запись
bit1 WR - бит управления записью
1 = начать цикл записи. Программная установка бита
является командой начать цикл записи. Сбрасывается этот бит только аппаратно,
когда цикл записи окончен.
0 = цикл записи данных завершен
bit1 RD - бит управления чтением
1 = начать чтение данных из EEPROM. Чтение занимает
один командный цикл. Программная установка бита является командой начать
чтение. Бит сбрасывается только аппаратно.
0 = чтение не начато
Невозможность программно сбросить бит WR предохраняет
от случайного преждевременного прерывания цикла записи, поскольку этот цикл
занимает несколько машинных тактов.
Бит WREN при включении питания сброшен, что
предохраняет от случайной записи. Бит WRERR устанавливается, когда операция
записи прервана сбросом по входу MCLR или сбросом по переполнению сторожевого
таймера. В этом случае, при повторном старте, пользователь может проверить бит
WRERR и, при необходимости, повторить запись. Данные и адрес в регистрах EEDATA
и EEADR при сбросе не теряются.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9 |