Отчет по практике: Сетевые источники питания
2. Понижение напряжения на ножке /MCLR ниже Vss(земля) вызывает большие токи, более 80 мА, и может привести к повреждению этой линии. Поэтому, рекомендуется подавать сигналы на ножку /MCLR через ограничивающий резистор 50-100 Ом.[1]
Обзор регистров и ОЗУ:
Все программные объекты, с которыми может работать PIC, представляют собой физические регистры. Чтобы понять, как работает PIC, нужно разобраться с тем, какие регистры у него существуют и как с каждым из них работать. Hачнем с набора операционных регистров. Этот набор состоит из регистра косвенной адресации (f0), регистра таймера/счетчика (f1), программного счетчика (f2), регистра слова состояния (f3), регистра выбора (f4) и регистров ввода/вывода (f5,f6).
Эти регистры представляют основную часть программно-доступных объектов микроконтроллера.
f0...РЕГИСТР КОСВЕHHОЙ АДРЕСАЦИИ IND0: Регистр косвенной адресации f0 физически не существует. Он использует регистр выбора f4 для косвенной выборки одного из 64 возможных регистров. Любая команда, использующая f0, на самом деле обращается к регистру данных, на который указывает f4.
f1...РЕГИСТР ТАЙМЕРА/СЧЕТЧИКА TMR0: Регистр таймера/счетчика TMR0 может быть записан и считан как и любой другой регистр. TMR0 может увеличиваться по внешнему сигналу, подаваемому на вывод RTCC, или по внутренней частоте, соответствующей частоте команд.
Основное применение таймера/счетчика - подсчет числа внешних событий и измерение времени. Сигнал от внешнего или внутреннего источника также может быть предварительно поделен при помощи встроенного в PIC программируемого делителя.
f2...ПРОГРАММHЫЙ СЧЕТЧИК PCL: Программный счетчик (PC) используется для генерации последовательности адресов ячеек ПЗУ программы, содержащих 14-разрядные команды.
Ширина программного счетчика - 13 бит. Младший байт программного счетчика (PCL) доступен для чтения и записи и находится в регистре 02h. Старший байт программного счетчика (PCH) не может быть прямым образом прочитан или записан. Старший байт программного счетчика может быть записан через PCLATH регистр, адрес которого 0Ah. В зависимости от того, загружается ли в программный счетчик новое значение во время выполнения команд CALL, GOTO, или в младший байт программного счетчика (PCL) производится запись, - старшие биты программного счетчика загружаются из PCLATH разными способами
f3...РЕГИСТР СЛОВА СОСТОЯHИЯ STATUS: Регистр слова состояния похож на регистр PSW, существующий в большинстве микропроцессоров. В нем находятся бит переноса, десятичного переноса и нуля, а также биты режима включения и биты страничной адресации.
f4...РЕГИСТР ВЫБОРА FSR: Как было уже сказано, регистр выбора FSR используется вместе с регистром косвенной адресации f0 для косвенной выборки одного из 64 возможных регистров. Физически задействовано 36 регистров ОЗУ пользователя, расположенных по адресам 0Ch-2Fh и 15 служебных регистров, расположенных по различным адресам.
f5, f6...РЕГИСТРЫ ВВОДА/ВЫВОДА PORTA, PORTB Регистры f5 и f6 соответствуют двум портам ввода/вывода, имеющимся у PIC16C84.
Порт A имеет 5 разрядов PA4-PA0, которые могут быть индивидуально запрограммированы как входы или выходы при помощи регистра TRISA, имеющего адрес 85h. Линии PA<3:0> двунаправленные, а линия PA4 -выход с открытым стоком. Адрес регистра порта А - 05h. Относящийся к порту А управляющий регистр TRISA расположен на первой странице регистров по адресу 85h. TRISA<4:0> - это регистр шириной 5 бит. Если бит управляющего TRISA регистра имеет значение единица, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки.
Порт В - это двунаправленный порт, шириной в восемь бит (адрес регистра 06h). Относящийся к порту В управляющий регистр TRISB расположен на первой странице регистров по адресу 86h. Если бит управляющего TRISB регистра имеет значение единица, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки. У каждой ножки порта В имеется небольшая активная нагрузка (около 100мкА) на линию питания. Она автоматически отключается, если эта ножка запрограммирована как вывод. Более того, управляющий бит RBPU OPTION<7> может отключить (RBPU=1) все нагрузки. Сброс при включении питания также отключает все нагрузки.
Порт B имеет 8 разрядов PB7-PB0 и программируется при помощи регистра TRISB, имеющего адрес 86h.
Четыре линии порта В (PB<7:4>) имеют способность вызвать прерывание при изменении значения сигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в защелке, генерируется высокий уровень. Выходы детекторов "несовпадений" PB4,PB5,PB6,PB7 объединяются по ИЛИ и генерируют прерывание RBIF (запоминаемое в INTCON<0>). Любая линия, настроенная как вывод, не участвует в этом сравнении. Прерывание может вывести кристалл из режима SLEEP. В подпрограмме обработки прерывания следует сбросить запрос прерывания одним из следующих способов:
1) Запретить прерывания при помощи обнуления бита RBIE INTCON<3>.
2) Прочитать порт В. Это завершит состояние сравнения.
3) Обнулить бит RBIF INTCON<0>.
Прерывание по несовпадению и программно устанавливаемые внутренние активные нагрузки на этих четырех линиях могут обеспечить простой интерфейс например с клавиатурой, с выходом из режима SLEEP по нажатию клавиш. Ножка RB0 совмещена с входом внешнего прерывания INT
Задание 1 в разряде регистра TRIS программирует соответствующий разряд порта как вход. При чтении порта считывается непосредственное состояние вывода, при записи в порт запись происходит в буферный регистр.
Проблемы при организации двунаправленных портов:
-Некоторые команды внутренне выполняются как чтение+запись. Например, команды BCF и BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. Например, команда BSF для бита 5 регистра f6 (порт В) сначала считает все восемь бит. Затем выполняются действия над битом 5 и новое значение байта целиком записывается в выходные защелки. Если другой бит регистра f6 использует я в качестве двунаправленного ввода/вывода (скажем бит 0) и в данный момент он определен как входной, входной сигнал на этой ножке будет считан и записан обратно в выходную защелку этой-же ножки, затирая ее предыдущее состояние.
До тех пор пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако, если позднее линия 0 переключится в режим вывода, ее состояние будет неопределенным.
На ножку, работающую в режиме вывода, не должны "наваливаться" внешние источники токов("монтажное И", "монтажное ИЛИ"). Результирующие большие токи могут повредить кристалл.
Последовательное обращение к портам ввода/вывода:
Запись в порт вывода происходит в конце командного цикла. Но при чтении, данные должны быть стабильны в начале командного цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на ножке (зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения
f8, f9...РЕГИСТРЫ ЭППЗУ EEDATA, EEADR: PIC16C84 имеет встроенное электрически перепрограммируемое ПЗУ размером 64 байта, которое может быть считано и записано при помощи регистра данных EEDATA и регистра адреса EEADR. Запись нового байта длится около 10 мсек и управляется встроенным таймером. Регистр EECON1 (адрес 88h) - это управляющий регистр шириной пять бит. Младшие пять бит физически существуют, а старшие три бита читаются всегда как `0`.