Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 81 99

AlexAlcoa: Удалось избавиться введением контроля бита WR

Я так и думал. Можно было контролировать EEIF, но его надо сбрасывать самому.

Сергей К: это т.н. "магическая последовательность"...

Ну собсна я это и написал, не? Причём не только


MOVLW 55h
MOVWF EECON2
MOVLW AAh
MOVWF EECON2
, но и

BSF EECON1,WR
.

Сергей К: но приведеный мною выше пример работает нормально.

Это который от AlexAlcoa?

 

Zandy: Вот уже второй раз. Так как все-таки надо проверять окончание записи? Почему нельзя проверять взведение флага EEIF в PIR1, а именно сброс WR в EECON1. В чем разница?

Можно и так и эдак. Разница в том, что EEIF надо сбрасывать.

Zandy: Ведь флаг прерывания взводится независимо от того, разрешено глобальное прерывание (GIE=1) или нет (GIE=0).

Абсолютно верно.

Zandy: А потом, если я EEIF не сбросил, то впоследствии при глобальном разрешении прерываний, я ж уйду по org4, а мне допустим этого не надо?...

Нет. Прерывание возникает при выполнении _двух условий_ - EEIF=1 и EEIE=1. Если EEIE=0, то прерывание не возникнет.

 

AHTOXA: Если EEIE=0, то прерывание не возникнет.
Все! Спасибо! Понял!

MOVLW 55h
MOVWF EECON2
MOVLW AAh
MOVWF EECON2
BSF EECON1,WR

Я думаю, если эту штуку макросом заменить, ничего страшного не будет?

 

Конечно ничего Макрос - это просто сокращение. Каждый раз вставляется целиком (разворачивается).

Я бы ещё и переключение страницы, добавил.
Ну и запрет разрешение прерываний, до кучи И оформил бы это в подпрограмму.

Макросы хороши для повышения читаемости, типа

BANK0	macro	
bcf STATUS, RP0
endm

Или когда нужна предельная скорость и расходы на вызов подпрограммы недопустимы.

Ну или когда не хватает пикового стека

 

AHTOXA:
BANK0 macro
bcf STATUS, RP0
endm

А я пишу так:
#define BANK0 bcf STATUS,RP0 ;выбрать Bank 0
#define BANK1 bsf STATUS,RP0 ;выбрать Bank 1

 

AHTOXA: Это который от AlexAlcoa?
нет, http://sergeyk.kiev.ua/microcontrollers/samptoflash.html

AHTOXA: EEIF надо сбрасывать
разве? Я у себя не обращал на него внимание и нормально работало. Как я понял, его следует сбрасывать, если установлено прерывание "окончание записи".

В своей программе я записывал в ППЗУ несколько байт, потому нужно было контролировать окончание записи, чтобы приступить к записи следующего байта. Контролировал я по стостоянию бита WR. Если же в ближайшее время мы не собираемся писать в ППЗУ, то и ждать оканчания записи нет смысла.

 

Сергей К: Если же в ближайшее время мы не собираемся писать в ППЗУ, то и ждать оканчания записи нет смысла.
А если после записи в SLEEP входим? Закончится ли запись в SLEEP режиме?

 

Там, помоему, отдельный генератор стоит, сейчас еще раз гляну мануал...
где-то читал про длительно записи...
....
что-то не могу найти. Там есть ссылка на документ по ППЗУ DS33023. У меня нет его локально
....
длительность записи 4...8мс. Как мне кажется, там свой независимый генератор стоит. И если бы нельзя было засыпать, то они должны были бы упомянуть. А что нам стоит попробовать в железе? ;)

Посмотрите тот документ по ППЗУ, может там детально расписано.

 

Сергей К: Там, помоему, отдельный генератор стоит
Да, там отдельный генератор. Длительность порядка 7 мс.

Мы опять как в чате.
" - Ты глухой? - Нет, я глухой!"

Сергей К: А что нам стоит попробовать в железе?
Изучаю пока. Уж, чем в железе пробовать, лучше сразу проверку окончания записи в цикле заложить перед слипом. Проще будет!

 

Сергей К: AHTOXA: EEIF надо сбрасывать
разве? Я у себя не обращал на него внимание и нормально работало.

Если проверять окончание по EEIF, то его надо сбрасывать. WR - сбрасывается сам.

"Я так думаю!" ©