Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций ТСИ.doc
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
1.97 Mб
Скачать

Чтение из еерrом-памяти

1. Записать адрес в регистр ЕЕАDR. Проверить, что записанный адрес корректен для данного типа микроконтроллера.

2. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.

3. Инициализировать операцию чтения установкой бита RD в ‘1’.

4. Прочитать данные из регистра ЕЕDАТА.

Пример: Чтение из ЕЕРRОМ памяти данных

BSF STATUS.RP1 ;

BCF STATUS.RPO ; Выбрать банк 2

MOVF ADDR.W ; Записать адрес

MOVWF EEADR ; ячейки

BSF STATUS.RFO ; Выбрать банк 3

BCF EECON1.EEPGD ; Выбрать EEPROM память

BSF EECON1.RD ; Инициализировать чтения

BCF STATUS.RPO ; Выбрать банк 2

MOVF EEDATA.W ; W = EEDATA

Запись еерrом данных

1. Если шаг 10 не был выполнен, то необходимо проверить, что не происходит запись (WR=0).

2. Записать адрес в регистр ЕЕАDR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.

3. Записать 8-разрядное значение в регистр ЕЕDАТА.

4. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.

5. Установить бит WREN в ‘1’, разрешив запись в ЕЕРRОМ память.

6. Запретить прерывания, если они разрешены.

7. Выполнить обязательную последовательность из пяти команд:

- Запись значения 55h в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕССЖ2):

- Запись значения ААh в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕСON2);

- Установить бит WR в ‘1’.

8. Разрешить прерывания (если необходимо).

9. Сбросить бит WREN в ‘0’.

10. После завершения цикла записи сбрасывается в '0' бит WR, устанавливается в ‘1’ флаг прерывания ЕЕIF (сбрасывается программно). Если шаг 1 не выполняется, то необходимо проверить состояние битов ЕЕIF, WR перед началом записи.

Пример: Запись в ЕЕРRОМ память данных

BSF STATUS,RP1 ;

BCF STATU,RPO ; Выбрать банк 3

BTFSC EECON1,WR ; Проверить завершения

GOTO $-1 ; операции записи

BCF STATUS, RPO ; Выбрать банк 2

MOVF ADDR,W ; Указать адрес ячейки

MOVWF EEADR ;

MOVWF EEDATA ;

BSF STATUS,RFO ; Выбрать банк 3

BCF EECON1,EEPGD ; Выбрать EEPROM память данных

BSF EECON1,WREN ; Разрешить запись в EEPROM память данных

BСF INTCON,GIE ; Запретить прерывания

MOVLW 0x55 ; Записать 55h в регистр ЕЕСОN2

MOVWF EECON2 ;

MOVLW OxAA ; Записать ААh в регистр ЕЕСОN2

MOVWF EECON2 ;

BSF EECON1.WR ; Инициализировать запись

BSF INTCON, GIE ; Разрешить прерывания

BCF EECON1.WREN ; Выбрать банк 2

Управление прерываниями Серия рiс16ххх

Регистры SFR, связанные с прерываниями: INTCON, PIE1, PIR1, PIE2, PIR2.

Регистр управления прерываниями INTCON:

R/W - 0

R/W - 0

R/W - 0

R/W - 0

R/W - 0

R/W - 0

R/W - 0

R/W - x

GIE

PEIE

T0IE

INTE(2)

RBIE(1.2)

T0IF

INTF(2)

RBIF(1.2)

Бит 7

Бит 0

GIE = 1/0 - глобальное разрешение/запрещение прерываний.

PEIE = 10 - разрешение/запрещение прерываний от периферии.

T0IE = 1/0 - разрешение/запрещение прерываний по переполнению от TMR0.

INTE = 1/0 - разрешение/запрещение внешнего прерывания.

RBIE = 1/0 - разрешение/запрещение прерываний по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.

T0IF - флаг прерывания по переполнению от TMR0.

INTF - флаг внешнего прерывания.

RBIF - флаг прерывания по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.

Примечания:

1) В некоторых МК вместо битов RBIE и RBIF могут быть GPIЕ и GРIF соответственно.

2) Отсутствует у некоторых МК.

3) В МК с одним периферийным модулем этот бит может быть ЕЕIЕ или АDIЕ.

Регистр РIЕ1:

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

Бит 7

Бит 0

PSPIE: для микроконтроллера РIС16F873 всегда должен быть сброшен

ADIE: 1/0 -разрешение/запрет прерывания от модуля АЦП

RCIE: 10 - разрешение/запрет прерывания от асинхронного последовательного порта при приеме данных

TXIE: 1/0 - разрешение/запрет прерывания от асинхронного последовательного порта при передаче данных

SSPIE: 1/0 - разрешение/запрет прерывания от синхронного последовательного порта

CCP1IE: 1/0 - разрешение/запрет прерывания от модуля ССР

TMR2IE: 1/0 - разрешение/запрет прерывания при совпадении значения Т/С2 со значением регистра РR2

TMR1IE: 1/0 - разрешение запрет прерывания при переполнении Т/С1

Регистр РIЕ2:

-

0

-

EEIE

BCLIE

-

-

CCP2IE

Бит 7

Бит 0

EEIE: 1/0 - разрешение/запрет прерывания при записи ЕЕРRОМ

BCLIE: 1/0 - разрешение/запрет прерывания при коллизии шины синхронного последовательного порта

CCP2IE: 1/0 - разрешение/запрет прерывания от модуля ССР2

Регистр РIR1:

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

Бит 7

Бит 0

PSPIF: для микроконтроллера РIС16F873 всегда должен быть сброшен

ADIF: флаг прерывания от модуля АЦП (10 - преобразование выполнено/ не выполнено)

RCIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер приема заполнен/пуст

TXIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер передачи пуст/заполнен

SSPIF: флаг прерывания от синхронного последовательного порта

CCP1IF: флаг прерывания от модуля ССР1. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ: не используется.

TMR2IF: флаг прерывания при совпадении значения Т/С2 и регистра РR2

TMR1IF: флаг прерывания при переполнении Т/С1

Регистр РIR2:

-

0

-

EEIF

BCLIF

-

-

CCP2IF

Бит 7

Бит 0

EEIF: флаг прерывания при успешном окончании операции записи в ЕЕРRОМ

BCLIF: флаг прерывания при коллизии шины SSР когда он работает в режиме ведущий I2С

CCP2IF: флаг прерывания от модуля ССР2. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ не используется.

Регистр РСОN содержит флаги для определения источника сброса:

• По включению питания (РОR).

• По сигналу на входе - МСLR

• По переполнению WDТ

• По обнаружению снижения напряжения питания (BOR).

-

-

-

-

-

-

POR

BOR

Бит 7

Бит 0

POR: статус сброса при включении, 1/0 сброс при включении произведен/не произведен

BOR: 1/0 - сброс при падении напряжения питания произведен не произведен

Примечание:

Бит -ВОR может быть любым при включении питания и при отключенном детекторе снижения питания (ВОDЕN=0 в регистре конфигурации), поэтому не должен учитываться. Бит -ВОR нужен для обнаружения последующих сбросов МК при снижении питания.

Аппаратно в стеке сохраняется только адрес возврата из обработчика прерывания. Сохранение и восстановление контекста (содержимого регистров W и STATUS) должен осуществлять сам программист.

За прерываниями закреплено 2 вектора прерываний: 0000h (сброса) и 0004h (один для всех прерывания).

При запросе прерывания (устанавливается флаг соответствующего периферийного модуля) в счетчик команд загружается адрес вектора прерывания 0004h. По этому адресу должна быть расположена команда перехода на начальный адрес подпрограммы обработчика прерываний. При этом бит GIЕ = 0.

Обработчик прерывания: должен сохранить контекст вызывающей программы или подпрограммы, определить требуемый источник прерывания и сбросить его установленный флаг, выполнить необходимые действия по обслуживанию прерывания, восстановить контекст и выполнить команду возврата из прерывания. При этом бит GIЕ = 1.

Время перехода на обработку прерывания - 3-4 машинных цикла.