Сделай Сам Свою Работу на 5

Стек и возвраты из подпрограмм





Кристалл PIC16C84 имеет восьмиуровневый аппаратный стек шириной 13 бит.Область стека не принадлежит ни к программной области ни к области данных, а указатель стека пользователю недоступен. Текущее значение программного счетчика посылается в стек, когда выполняется команда CALL или производится обработка прерывания. При выполнении процедуры возврата из подпрограммы (команды RETLW , RETFIE или RETURN), в программный счетчик выгружается содержимое стека. Регистр PCLATH (0Ah) не изменяется при операциях со стеком.

Данные в EEPROM

Долговременная Память данных EEPROM.

Память данных EEPROM позволяет прочитать и записать байт информации. При записи байта автоматически стирается предыдущее значение и записываются новые данные (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти сохраняется при выключении питания. Кристалл PIC16C84 имеет память данных 64х8 EEPROM бит, которая позволяет запись и чтение во время нормальной работы (во всем диапазоне питающих напряжений). Эта память не принадлежит области регистров ОЗУ. Доступ к ней осуществляется через два регистра: EEDATA <08h>, который содержит в себе восьмибитовые данные для чтения/записи и EEADR <09h>, который содержит в себе адрес ячейки к которой идет обращение. Дополнительно имеется два управляющих регистра: EECON1 <88h> и EECON2 <89h>.



При считывании данных из памяти EEPROM необходимо записать требуемый адрес в EEADR регистр и затем установить бит RD EECON1<0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA защелкиваются.

При записи в память EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр и данные в EEDATA регистр. Затем выполнить специальную последовательность команд, производящую непосредственную запись:

movlv 55h

movwf EECON2

movlv AAh

movwf EECON2

bsf EECON1,WR ;установить WR бит, начать запись

Во время выполнения этого участка программы, все прерывания должны быть запрещены для точного выполнения временной диаграммы. Время записи - примерно 10мс. Фактическое время записи будет изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается. Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN и те, которые выполняют запись должны храниться на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы.



Управление EEPROM

Управляющие регистры для EEPROM

Название Функция Адрес Значение после включения
EEDATA EEPROM регистр данных 08h XXXX XXXX
EEADR EEPROM регистр адреса 09h XXXX XXXX
EECON1 EEPROM 1 управляющий регистр 88h 0000 X000
EECON2 EEPROM 2 управляющий регистр 89h -

Регистры EECON1 и EECON2.

Регистр EECON1 (адрес 88h) - это управляющий регистр шириной пять бит. Младшие пять бит физически существуют, а старшие три бита читаются всегда как “0”

Регистр EECON1 Адрес 88h Сброс при включении 0000X000

- - - EEIF WRERR WREN WR RD

 

Управляющие биты RD и WR запускают соответственно чтение и запись. Они могут быть установлены только программно. Сбрасываются- аппаратно по завершения операций чтения/записи. Запрет программного сброса бита WR предотвращает преждевременное окончание записи.

RD - Бит чтения.

RD =1 : Запускает чтение памяти данных EEPROM. Чтение занимает

один цикл. Устанавливается программно. Обнуляется аппаратно.

WR - Бит записи.

WR =1 : Запускает запись в память данных EEPROM.



Устанавливается программно. Обнуляется аппаратно.

WREN - Бит разрешения записи в память данных EEPROM.

WREN = 1: Разрешена запись.

WREN = 0: Запрещена запись.

После включения питания WREN обнуляется.

Флаг ошибки WRERR устанавливается, когда процесс записи прерывается сигналом сброса /MCLR или сигналом сброса от WDT таймера. Рекомендуем проверять этот флаг WRERR и при необходимости производить перезапись данных, данные и адрес которых сохраняются в регистрах EEDATA и EEADR.

WRERR - Флаг ошибки записи.

WRERR = 1: Флаг устанавливается, когда операция записи

преждевременно прерывается сигналом сброса /MCLR (во время

обычного режима или режима SLEEP) или сигналом сброса WDT во

время обычного режима.

EEIF - Флаг завершения записи.

EEIF = 1: Флаг устанавливается, когда завершена запись.

Соответствующий бит разрешения прерывания - EEIE в

регистре INTCON.

Организация прерываний

Прерывания в PIC16C84 могут быть от четырех источников:

внешнее прерывание с ножки RB0/INT,

прерывание от переполнения счетчика/таймера RTCC,

прерывание по окончании записи данных в EEPROM,

прерывание от изменения сигналов на ножках порта RB<7:4>.

Все прерывания имеют один и тот же вектор/адрес - 0004h. Однако, в управляющем регистре прерываний INTCON записывается:- от какого именно источника поступил запрос прерывания. Записывается соответствующим битом-флагом. Такое прерывание может быть замаскировано индивидуально или общим битом. Единственным исключением является прерывание по концу записи в EEPROM. Этот флаг находится в другом регистре EECON1. Бит общего разрешения/запрещения прерывания GIE (INTCON <7>) разрешает (если=1) все индивидуально незамаскированные прерывания или запрещает (если=0) их. Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON.

Бит GIE обнуляется при сбросе. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывание от ножки INT или порта B, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнению от таймера RTCC. Время реакции всегда одинаковое. В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре флагов. Этот флаг-бит должен быть программно сброшен внутри подпрограммы. Флаги запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIE.

Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания.

Регистр запросов и масок

Управляющий регистр прерываний и его биты

Адрес: 0Bh Значение при сбросе - 0000 0000

GIE EEIE RTIE INIE RBIE RTIF INTF RBIF

 

RBIF -Флаг прерывания от изменения на порту RB.

Флаг устанавливается, когда сигнал на входе RB<7:4> изменяется.

Флаг сбрасывается программным способом.

INTF - Флаг прерывания INT.

Флаг устанавливается, когда на ножке INT появляется сигнал от

внешнего источника прерывания. Сбрасывается программным способом.

RTIF - Флаг прерывания от переполнения RTCC.

Флаг устанавливается, когда RTCC переполняется.

Флаг сбрасывается программным способом.

RBIE - Бит разрешения/запрещения RBIF прерывания.

RBIE = 0 : запрещает RBIE прерывание.

RBIE = 1 : разрешает RBIE прерывание.

INTE - Бит разрешения/запрещения INT прерывания.

INTE = 0 : запрещает INT прерывание.

INTE = 1 : разрешает INT прерывание.

RTIE Бит разрешения/запрещения RTIF прерывания.

RTIE = 0 : запрещает RTIE прерывание.

RTIE = 1 : разрешает RTIE прерывание.

EEIE - Бит разрешения/запрещения прерывания EEPROM записи.

EEIE = 0 : запрещает EEIF прерывание.

EEIE = 1 : разрешает EEIF прерывание.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.