Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контроллеры PIC фирмы Microchip.doc
Скачиваний:
11
Добавлен:
07.09.2019
Размер:
204.29 Кб
Скачать

Адресация к ячейкам озу

(f4). Указатель при косвенной адресации. Для PIC16C54/C55/C56: Биты 0-4 регистра (f4) выбирают один из 32 регистров в режиме косвенной адресации, т.е. когда в команде есть обращение к регистру косвенной адресации (f0). Биты 5-7 не используются и всегда читаются как единицы. Если косвенная адресация не используется, регистр f4 может быть использован как 5-ти битовый регистр общего назначения. Для PIC16C57. Биты 5 и 6 регистра (f4) определяют номер текущего банка данных. Первые 16 байт каждого банка представляют собой физически одни и те же регистры. Только, когда бит 4 у (f4) установлен в единицу (указывает на следующие 16 байт),- биты 5 и 6 выбирают один из четырех банков по 16 регистров каждый. Бит 7 регистра (f4) не используется и всегда читается как единица. Регистры общего назначения для целей пользователя Для PIC16C54/C55/C56: Регистры с адресами f= 08H...1FH являются регистрами общего назначения.

Только для PIC16C57: Адреса регистров в PIC16C57 распределены следующим образом: 08h - 0Fh : регистры общего назначения, которые выбираются всегда вне зависимости от номера выбранного банка. 10h - 1Fh : регистры общего назначения, когда выбран банк 0. 20h - 2Fh : регистры физически идентичные регистрам f 00h - f 0Fh. 30h - 3Fh : регистры общего назначения, когда выбран банк 1. 40h - 4Fh : регистры физически идентичные регистрам f 00h - f 0Fh. 50h - 5Fh : регистры общего назначения, когда выбран банк 2. 60h - 6Fh : регистры физически идентичные регистрам f 00h - f 0Fh. 70h - 7Fh : регистры общего назначения, когда выбран банк 3.

Регистры ввода/вывода. (Порты). Регистры ввода/вывода могут управляться, как любые другие регистры. Однако, команда "чтение" (например MOVF_6,W) всегда считывает фактический уровень сигнала на выводе_порта. В частности, он может быть непредсказуем, когда на разряд, запрограммированный на "выход", будет подан внешний сигнал. После сигнала "Сброс" все порты ввода/вывода устанавливаются на "вход" (электрически эквивалентно третьему состоянию), управляющие регистры ввода/вывода (TRISA, TRISB, TRISC) устанавливаются в единицы (конфигурация на вход). Для того, чтобы конфигурировать некоторые разряды порта на выход, необходимо установить соответствующие биты в нужном TRIS регистре в "0". Это можно делать командой "TRIS_f". Каждый вывод порта ввода/вывода может быть запрограммирована отдельно на вход или на выход. Для этого существуют спец. TRISx регистры.

Рис. 9.3. Разряд порта ввода/вывода

TRISA. Управляющий регистр для порта A. Используются биты 0-3., т.к. порт А имеет ширину четыре бита.

TRISB. Управляющий регистр для порта B.

TRISC. Управляющий регистр для порта C. При исполнении команды "TRIS_f" содержимое регистра W загружается в один из управляющих регистров ввода/вывода. Если бит управляющего TRISx регистра получает значение единица, то соответствующий вывод будет устанавливаться на вход и электрически в третье состояние. Ноль переключает линию на выход и одновременно выводит на нее содержимое соответствующего регистра защелки. В управляющие TRISx регистры можно только записывать. При действии сигнала "Сброс", все биты этих регистров устанавливаются в единицы.

(f5). Порт А. Порт А является 4-битовым портом ввода/вывода. Используются только младшие 4 бита (RA0-RA3). Старшие биты 4-7 всегда читаются как нули.

(f6). Порт B. Является 8-битовым портом ввода/вывода.

(f7). Порт С. Для PIC16C55/C57: 8-битовый порт ввода/вывода. Для PIC16C54/C56: внутренний регистр памяти (не порт) общего назначения. При операциях ввода порты не защелкиваются. Входной сигнал должен присутствовать пока идет процесс чтения (напр. MOVF_6,_W). При операциях вывода порты защелкиваются и сохраняют значение до тех пор пока не будут перезаписаны. На рисунке не показаны диоды, которые защищают выводы порта от внешних импульсов большого напряжения. Они ограничивают импульсное напряжение на выводе порта значениями от Vss - 0,6 до Vdd + 0,6 В. Если статическое напряжение, по каким либо причинам, выйдет за указанные пределы, то возникнут большие статические токи, способные вывести кристалл из строя. Проблемы при организации двунаправленных портов

Некоторые команды внутренне выполняются как чтение+запись. Например, команды BCF_и_BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. Например, команда BSF для бита 5 регистра f6 (порт В) сначала считает все восемь бит. Затем выполняются действия над битом 5 и новое значение байта целиком записывается в выходные защелки. Если другой бит регистра f6 используется в качестве двунаправленного ввода/вывода (скажем бит 0) и в данный момент он определен как входной, входной сигнал на этом разряде будет считан и записан обратно в выходную защелку этого же разряда, затирая ее предыдущее состояние. До тех пор пока этот разряд остается в режиме входа, никаких проблем не возникает. Однако, если позднее разряд 0 переключится в режим выхода - состояние будет неопределенным. На вывод, работающий в режиме выхода, не должны подключаться внешние источники токов("монтажное И", "монтажное ИЛИ"). Результирующие большие токи могут повредить кристалл. Причину см. выше Последовательное обращение к портам ввода/вывода.

Запись в порт вывода происходит в конце командного цикла. Но при чтении, данные должны быть стабильны в начале командного_цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на выводе (зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения.

Сторожевой таймер. представляет собой полностью готовый встроенный RC генератор. Он будет работать, даже если основной генератор остановлен, как это бывает при исполнении команды SLEEP. Таймер вырабатывает сигнал сброса. Выработка таких сбросов может быть запрещена путем записи нуля в специальный бит, который расположен вне программной памяти EPROM. Эту операцию производят на этапе программирования микросхем.

Выдержка времени WDT. Номинальная выдержка WDT составляет 18 мс (без использования делителя). Она зависит от температуры, напряжения питания, от особенностей типа микросхемы. Если требуются большие задержки, то к WDT может быть подключен делитель с коэффициентом деления до 1:128; который программируется путем записи в регистр OPTION. Здесь могут быть реализованы выдержки до 2.5 секунд. Команды "CLRWDT" и "SLEEP" обнуляют WDT и делитель, если он подключен к WDT. Это запускает выдержку времени сначала и предотвращает на некоторое время выработку сигнала сброс. Если сигнал сброса от WDT все же произошел, то одновременно обнуляется бит "TO" в регистре статуса (f3). В схемных решениях с высоким уровнем помех, содержимое регистра OPTION подвержено сбою. Поэтому регистр OPTION должен обновляться через равные промежутки времени. Регистр конфигурации предварительного_делителя и RTCC. Значениями битов в этом регистре (он не имеет адреса!) определяется подключение предварительного_делителя к RTCC или WDT), коэффициент его деления, источник счетных импульсов, выбирается фронт сигнала для RTCC. Регистр OPTION предназначен только для записи и имеет ширину 6 бит. Во время исполнения команды "OPTION" содержимое регистра W загружается в этот регистр. По сигналу "Сброс" все биты этого регистра устанавливаются в единицы.

b5

b4

b3

b2

b1

b0

Option

RTS

RTE

PSA

PS2

PS1

PS0

Биты PS2...PS0 настройка предварительного делителя

PS2...PS0

Коэффициенты деления


RTCC

WDR

000

2

1

001

4

2

010

8

4

011

16

8

100

32

16

101

64

32

110

128

64

111

256

128

PSA- Бит, указывающий, что делитель работает с:

0 - RTCC

1 – WDT RTE- Фронт сигнала RTCC:

0 - инкремент по положительному фронту на выводе RTCC

1 - инкремент по отрицательному фронту на выводе RTCC RTS- Источник сигнала для RTCC:

0 - сигнал от внутреннего генератора

1 - Внешний сигнал на выводе RTCC

(f1). Таймер/счетчик. В регистр RTCC можно загрузить данные или считать из него, как из любого другого регистра. Содержимое этого регистра может быть инкрементировано фронтом внешнего сигнала, поступающим на вход RTCC кристалла, или внутренним сигналом синхронизации (CLKOUT=Fosc/4). Структурная схема содержит элемент "MUX"- это электронный переключатель. Для того, чтобы 8-битовый предварительный делитель присоединить к таймеру/счетчику, нужно установить определенным образом PSA бит и биты PS в регистре Option. Регистр Option - это специальный регистр, (у него нет адреса в памяти данных) но к нему можно обратиться при помощи спец."Option" команды. Если предварительный_делитель подключен к таймеру/счетчику (RTCC), любые команды записи в сам RTCC (регистр f1, напр. ClrF1, BSF1,5.. . и т.п.) - очищают его. Бит "RTS" (RTCC signal Source) в регистре Option, определяет источник счетных импульсов,- это или внутренний источник или внешний. RTS = 1:

Сигналом синхронизации для таймера/счетчика RTCC или для предварительного делителя, если он подключен к RTCC, является сигнал, поступающий на вывод RTCC корпуса. Значение бита 4 (RTE) в регистре Option определяет, происходит ли счет по заднему фронту (RTE=1) или по переднему фронту (RTE=0) сигнала на выводе RTCC. RTS = 0:

Регистр RTCC инкрементируется по сигналу внутренней синхронизации (=Fosc/4). В этом случае значение бита "RTE" в регистре Option и сигнал на выводе RTCC не имеют значения. Однако вывод RTCC следует подключить к Vdd или к Vss, как удобнее, чтобы случайно не попасть в режим теста и обеспечить корректность в режиме низкого потребления. Пока на таймер/счетчик RTCC поступают синхроимпульсы, (не важно внешние или внутренние, подключен предварительный делитель к RTCC или нет), регистр f1 RTCC инкрементируется, когда значение RTCC достигнет "0FFH" - регистр обнуляется, а счет продолжается. Счетные импульсы задерживаются на два командных цикла. Например, после записи информации в RTCC, инкрементирование его произойдет через два командных цикла. Такое происходит со всеми командами, которые производят запись или чтение-модификацию-запись f1 (напр. MOVF f1, CLRF f1). Если RTCC нужно проверить на равенство нулю без останова счета, следует использовать инструкцию MOVF_f1,W.

Предварительный делитель. 8 - битный счетчик используется или как предварительный делитель перед RTCC или как делитель частоты после сторожевого_таймера. Если делитель подсоединен к RTCC, то он не может быть подключен к сторожевому таймеру и наоборот. Биты PSA и PS0 - PS2 в регистре OPTION определяют включение делителя и устанавливают его коэффициент деления. Предварительный делитель может подключаться по-разному.Когда он присоединен к RTCC, все команды производящие запись в RTCC (например, CLRF_1, MOVWF_1, BSF_1,x... и т.д.) будут одновременно обнулять и делитель. Когда делитель подключен к WDT, команда CLRWDT также обнулит делитель вместе со сторожевым таймером. Подключение делителя- программно управляемое. Чтобы избежать несанкционированного сигнала "Сброс" во время переключения делителя с RTCC на WDT, надо выполнить определенную последовательность команд.

Режим пониженного энергопотребления. Вход в режим SLEEP осуществляется командой SLEEP. По этой команде, если WDT разрешен, то он сбрасывается и начинает счет времени, бит "PD" в регистре статуса (f3) сбрасывается, бит "TO" устанавливается, а встроенный генератор выключается. Порты ввода/вывода сохраняют состояние, которое они имели до входа в режим SLEEP. Для снижения потребляемого тока в этом режиме, выводы, запрограммированные на выход должны иметь такие значения, которые исключают токи между выводами кристалла и внешними устройствами. Выводы, запрограммированные на вход должны быть соединены внешними резисторами с высоким или низким уровнем, чтобы избежать токов переключения, вызываемых плавающими высокоомными входами. То же и про RTCC. Вывод /MCLR должен быть под напряжением Vihmc.

Выход из режима SLEEP. Выход из режима SLEEP осуществляет WDT(если он разрешен) или внешний нулевой импульс на выводе /MCLR- сброс. В обoих случаях PIC16C5X будет находиться в режиме сброса в течение времени запуска_генератора, а затем только начнется выполнение программы. Бит "PD" в регистре статуса (f3), который устанавливается при включении, но обнуляется командой "SLEEP", может быть использован для определения предыдущего состояния процессора : или процессор был в режиме "SLEEP"(горячий старт), или было просто включено питание (холодный старт). Бит "TO" позволяет определить, чем был вызван выход из режима SLEEP: или внешним сигналом на выводе /MCLR, или срабатыванием WDT. Примечание: Некоторые случаи требуют наличия R/C цепочки на выводе /MCLR для увеличения выдержки на запуск. В этом случае не рекомендуется выход из режима "SLEEP" по срабатыванию WDT потому, что не будет разряжаться внешний конденсатор сброса и выдержка на запуск генератора будет равна обычной длительности.