Данная лабораторная работа предназначена для ознакомления с возможностями ввода-вывода микроконтроллера PIC16C84. Методика с текстом программы по данной работе приведена в приложении. Тестовая программа в данной работе выполняет следующие функции : В обычном режиме содержимое бита 1 порта В отображается на бит 3 порта А. Обновление состояния происходит по прерыванию от порта В. На остальных трех индикаторах отображается переменная из памяти. При появлении сигнала высокого уровня на бите 2 порта B бит 3 порта А переключается на ввод и при переключении на нем с низкого на высокий уровень увеличивается значение переменной и отображается на индикаторах. При появлении сигнала низкого уровня на бите 2 порта В бит 3 порта А опять переключается на вывод и программа возвращается в обычный режим. Далее идет общий обзор портов микроконтроллера PIC16C84.
PORTA-для PICI6C84 - 5-разрядный регистр. Контакт RA4/TOCKI - на входе имеет триггер Шмидта, а на выходе открытый сток выходного транзистора. Все остальные контакты порта RA имеют входные буферы TTL и полные выходные драйверы КМОП.
Все контакты можно конфигурировать как выходы или входы программированием регистра TRISA. Запись "1" в соответствующие разряды регистр TRISA переводит выход в режим высокого импеданса. Запись "0" в регистр TRISA открывает выходные драйверы на выбранных контактах. После записи данных в регистр PORTA они автоматически появляются на контактах I/O откуда и считывается их состояние. Все операции записи представляют собой операции "чтение - модификация - запись". Следовательно, запись в порт подразумевает, что данные считываются с контактов порта, это значение изменяется и затем записывается в регистр данных порта. Контакт RA4 мультиплексирован с входом синхронизации модуля таймера 0 и называется RA4/TOCKI.
Примечание: После "Сброса" при включении питания все контакты конфигурированы как аналоговые входы и читаются как "0".
Регистр TRISA управляет направлением контактов RA даже когда они используются как аналоговые входы. При использовании контактов как аналоговых входов, пользователь должен следить за тем, что бы в регистре TRISA соответствующие разряды были запрограммированы как входы.
Инициализация PORTA
CLRF PORTA инициализация выходных данных PORTA
BSF STATUS,RPO ;установить обращение к банку 1
MOVLW OxCF Значение для инициализации порта:
MOVWF TRISA установить RA<3:0> входы, RA,<5;4> выходы, TRISA <7,6> всегда читается как '0'.
РЕГИСТРЫ PORTB И TRISB
PORTB - это 8-разрядный двунаправленный порт. Любой разряд порта можно конфигурировать как. выход или вход программированием соответствующего разряда регистра TRISB. Запись "1" в соответствующие разряды регистра TRISB переводит выходы в режим высокого импеданса; запись "0" открывает выходные драйверы на выбранных контактах.
Все контакты PORTB могут быть подтянуты К высокому уровню внутренними ключами. Включение ключей выполняется записью "0" в разряд 7 регистра OPTION (бит RBPU). Ключи автоматически выключаются, когда контакт порта конфигурируется как выход. После "Сброса" при включении питания ключи закрываются.
Четыре контакта PORTB (RB7:RB4) формируют прерывание при изменении состояния. Контакты, сконфигурированные тояько как входы, могут вызывать это прерывание (то есть любой контакт RB7:RB4, сконфигурированный как выход, исключается из формирования этого прерывания). Состояние сигналов f на контактах (RB7:RB4) сравнивается со старым. Значением, записанным при последнем чтении PORTB. Сигналы "несоответствия" состояния на контактах RB7:RB4 объединяются по "ИЛИ" и общий сигнал генерирует прерывание изменения состояния порта RB флажком RBIF (INTCON < 0>). Более подробная информация по портам микроконтроллера PIC16С84 приведена в приложении.
3.3.3 Работа с таймером
Данная лабораторная работа предназначена для ознакомления с таймером микроконтроллера PIC16C84. Методика с текстом программы по данной работе приведена в приложении. Тестовая программа в данной работе выполняет следующие функции : По прерыванию от таймера увеличивается значение переменной в памяти и отображается на светодиодах порта А, при изменении уровня на бите 2 порта B в изменяется коэффициент деления предделителя. Далее идет общий обзор таймера микроконтроллера PIC16C84.
Модуль Таймера - это простой 8 разрядный счетчик с переполнением. Источником синхронизации может быть внутренний генератор системы (Fosc /4) или внешний. Когда источник синхронизации внешний, модуль таймера может быть запрограммирован на счет по переднему или заднему фронту входного сигнала.
К модулю таймера может быть подключен предварительный счетчик (предделитель). Предделитель подключается к таймеру или к сторожевому таймеру WDT. Бит PSA (OPTION <3> ) определяет назначение предварительного счетчика, а биты PS2:PSO (OPTION<2:6>) устанавливают коэффициент деления предварительного счетчика. Для таймера 0 можно установить следующие коэффициенты деления предварительного счетчика: 1:1 (когда предварительный счетчик подключен к сторожевому таймеру), 1:2, 1:4, 1:8, 1:16 и 1:32, 1:64, 1:128 и 1:256.
Синхронизация внешней тактовой частоты осуществляется после предварительного счетчика. При использовании внешней синхронизации тактовая частота предделителя может быть выше частоты устройства. Максимальная частота синхронизации составляет 50 МГц.
МОДУЛЬ ТАЙМЕРА 0
Модуль таймера - это таймер/счетчик, который имеет следующие возможности:
•• 8-разрядный таймер / счетчик
•• чтение и запись счетчика
•• 8-разряднй программируемый предварительный счетчик
•• выбор внутренней или внешней синхронизации
•• прерывание по переполнению, переход от FFh к 00h
• выбор фронта при внешней синхронизации
Режим таймера устанавливается при обнулении бита TOCS (OPTION <5>). В режиме таймера модуль таймера увеличивается на каждом цикле команд (без предварительного счетчика). Если в регистр TMR0 записано новое значение, то в течении следующих двух циклов команд приращение не выполняется. Пользователь не может корректировать работу таймера записью нового значения в регистр TMR0. Режим счетчика задается установкой бита TOCS (OPTION <5>). В режиме счетчика таймер 0 увеличивается по каждому переднему или заднему фронту сигнала на контакте RA4/TOCKI, фронт приращения таймера определяется состоянием бита TOSE (OPTION<4>). Если бит TOSE = "0", то выбирается передний фронт сигнала.
Предделитель может быть подключен к модулю таймера или к сторожевому таймеру. Назначение предделителя управляется программно модификацией бита PSA (OPTIOI1 <3>). Обнуление бита PSA подключает предделитель, к модулю таймера. Предделитель не читается и не записывается. Когда предделитель подключен к модулю таймера , то его коэффициент деления может принимать следующие значения: 1:2, 1:4 .... 1:256.
Более подробная информация по таймеру микроконтроллера PIC16С84 приведена в приложении.
3.3.4 Работа с EEPROM
Данная лабораторная работа предназначена для ознакомления с EEPROM микроконтроллера PIC16C84. Методика с текстом программы по данной работе приведена в приложении. Тестовая программа в данной работе выполняет следующие функции : Значение переменной EEPROM считывается и заноситься в переменную в памяти, затем переменная в памяти отображается на индикаторах, при появлении высокого уровня на бите 2 порта B переменная в памяти увеличивается и записывается в EEPROM. При выключении микроконтроллера значение переменной сохраняется, и при следующем включении отображается на индикаторах. Далее идет общий обзор EEPROM микроконтроллера PIC16C84.
Flash-ПЗУ данных доступно для чтения и записи во время нормальной работы. Эта память не отображается непосредственно в адресное пространство памяти данных, а доступна через регистры специального назначения(PCH). Для доступа к Flash-ПЗУ данных используются 4 РСН:
- EECON1
- EECON2
- EEDATA
- EEADR
Регистр EEDATA хранит данные чтения/записи, EEADR содержит адрес ячейки, к которой производиться доступ. PIC16C8X имеет Flash-ПЗУ данных объемом 64 байт по адресам от 00h до 3Fh.
Flash-ПЗУ данных позволяет осуществлять чтение и запись байта данных. При записи происходит автоматическое стирание ячейки и запись новых данных. Flash-ПЗУ рассчитано на очень большое число циклов стирания/записи. Запись управляется встроенным таймером. Время записи варьируется в зависимости от напряжения питания, температуры и имеет технологический разброс.
При установлении защиты кода ЦПУ по-прежнему имеет доступ на чтение/запись к Flash-ПЗУ данных, но программатор не имеет возможности читать и записывать в него.
Регистр EEADR может адресовать до 256 байт Flash-ПЗУ данных из которых реализованы только 64 байта. Старшие два бита участвуют в формировании адреса, поэтому для обращения к 64-х байтному пространству их необходимо устанавливать в 0.
Регистр EECON1 содержит пять управляющих битов, три старших бита не реализованы. Управляющие биты RD и WR инициируют соответственно чтение и запись. Программно эти биты могут быть установлены только в 1. В 0 они устанавливаются аппаратно только по завершению чтения или записи. Невозможность программного установления этих битов в 0 позволяет предотвратить преждевременное завершение операции записи.
Если бит WREN установлен в 1, то запись во Flash-ПЗУ данных разрешена. После РОR этот бит установлен в 1. Бит WRERR устанавливается в 1, если операция записи прерывается сбросом по –MCLR или по WDT во время нормальной работы. В этой ситуации после сброса регистры EEDATA и EEADR останутся без изменения, и пользователь может проверить состояние бита WRERR и повторить запись.
При завершении записи флаг EEIF устанавливается в 1. После проверки его можно программно установить в 0.
Регистр EECON2 не реализован физически, его чтение возвращает 00h. Регистр EECON2 используется исключительно в цикле записи Flash-ПЗУ данных.
3.3.5 Работа с WDT
Данная лабораторная работа предназначена для ознакомления с WDT микроконтроллера PIC16C84. Методика с текстом программы по данной работе приведена в приложении. Тестовая программа в данной работе выполняет следующие функции : При включении микроконтроллера он поочередно подает высокий уровень на светодиоды порта А. В перерывах между этим он входит в спящий режим и вызывается из него прерыванием от WDT. Далее идет общий обзор WDT микрокон-троллера PIC16C84.
СТОРОЖЕВОЙ ТАЙМЕР (WDT)
Сторожевой таймер функционирует от своего RC генератора, который не требует никаких внешних компонентов. Этот RC генератор функционирует не зависимо от основного генератора на контактах OSC1/CLKIN и OSCI/CLFCN. Это означает, что WDT функционирует в режиме останова после команды SLEEP. Окончание счета WDT в процессе выполнения программы, генерирует сброс устройства (сброс от сторожевого таймера). Если устройство находится в режиме останова, то окончание счета WDT пробуждает устройство для продолжения программы. Если бит WDTE в слове конфигурации сброшен, то WDT отключен. Команды CLRWDT и SLEEP сбрасывают WDT и предделитель, если он назначен к WDT, предотвращают окончание счета и условие формирования сброса устройства. Бит ТО в регистре STATUS будет сброшен после окончания счета сторожевого таймера.
ПЕРИОД WDT
WDT имеет номинальный период счета 18 мС (без предделителя). Период счета зависит от температуры, напряжения питания Voo и может изменятся в зависимости от модификации и партии устройств. Если требуется более длительный период счета, то, установкой соответствующих разрядов регистра OPTION в программном обеспечении, к WDT может быть подключен предделитель с коэффициентом деления до 1:128. Таким образом, период счета может быть увеличен до 2,3 с.
РЕКОМЕНДАЦИИ ДЛЯ ПРОГРАММИРОВАНИЯ WDT
Необходимо принимать во внимание что даже при самых плохих
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.