PIC18F452 не пишет в EEPROM Сабж. Что я делаю не так?
Обработчик прерываний высокого уровня заканчивается строками:
[CODE]
; Записать полученное значение в EEPROM
clrf WREG
movwf EEADR
movf ind_val,w
movwf EEDATA
bcf EECON1,EEPGD
bsf EECON1,WREN
movlw 55h
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON2,WR
;bsf INTCON, GIE, 0
bsf INTCON, PEIE, 0
movff B_TEMP,BSR
movf W_TEMP,W
movff S_TEMP,STATUS
retfie
[/CODE]
В документации сказано, что после того, как чип завершит запись в EEPROM, мне надо сбросить WREN, а узнаю я об этом по EEIF.
Потому по вектору 0х00 у меня отрабатывается:
[CODE]
bsf PIE2,EEIE; разрешаем прерывание по окончании записи в EEPROM
clrf IPR2; прерывания по завершении окончания записи в EEPROM имеют низкий приоритет
[/CODE]
Прерывание низкого уровня у меня при переполнении TMR0 и по завершении записи в EEPROM. Обработчик:
[CODE]
low_int
movwf W_TEMP2
movff STATUS,S_TEMP2
movff BSR,B_TEMP2
; если прерывание возникло из-за окончания записи в EEPROM
btfss PIR2,EEIF
goto change_ind
bcf EECON1,WREN
bcf PIR2,EEIF
goto end_low_int
change_ind
(...здесь обрабатывается случай прерывания от tmr0..)
end_low_int
bcf INTCON, TMR0IF, 0
;bsf INTCON, GIE, 0; Разрешаем прерывания
movlw 0x64; Смещение TMR0L
movwf TMR0L, 0
movff B_TEMP2,BSR
movf W_TEMP2,W
movff S_TEMP2,STATUS
retfie
[/CODE]
При включении ус-ва содержимое EEPROM успешно считывается и выводится на индикатор, а вот когда производится запись в EEPROM - в EEPROM ничего не меняется. Вроде всё делал по DS39564A... :( Что не так?
Программатором в EEPROM нормально пишется.
-
- ИМХО Все, разобрался - просто опечатался в коде :) теперь все работает - tzirulnicov(03.01.2008 16:17)