ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
109234
tzirulnicov (03.01.2008 15:54, просмотров: 2180) blackbit
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 нормально пишется.