[an error occurred while processing this directive]
|
;Естественно, сначала "пишем" байт.WrtMem: ;запись
;Input: mem - байт для записи в EEPROMbanksel EEDATA ;банк 0 (гораздо проще!!!)
clrf INTCON ;запрет прерываний
movlw 0x00 ;Адрес = 0
movwf EEADR ;
movf mem,w ;Байт для записи
movwf EEDATA ;banksel EECON1 ;банк 1
bsf EECON1,WREN ;разрешаем писАть в EEPROM
bcf EECON1,EEIF ;если вдруг захочется юзать прерывание.
movlw 0x55 ;инициирующая последовательность.
movwf EECON2 ;
movlw 0xAA ;
movwf EECON2 ;
bsf EECON1,WR ;запускаем запись.
;Таймер на 20 мс (с запасом в 2 раза). Грубо расчитано для тактовой частоты в 4МГц
;для других значений тактовой частоты следует пересчитать.clrf TempTimer ;5 циклов * 256 раз = 1280 циклов
movlw d'255' ;1280 циклов * 16 раз = 20480 циклов (при Fosc=4MHz = ~20ms)
movwf TempTimer1LoopWaitEEWR:
btfss EECON1,WR ;
goto EEWRComplete ;+2
decfsz TempTimer ;+1=3
goto LoopWaitEEWR ;+2=5
decfsz TempTimer1
goto LoopWaitEEWREEWRComplete:
bсf EECON1,WREN ;запрещаем писАть в EEPROM
banksel EEDATA ;bank 0
;Именно про это вы и забыли, в результате, чтение
;начиналось в Банке 1.
;желателен и контроль бита EECON1,WRERR на отсутствие ошибки.;Теперь разберемся с чтением...
RdMem ;чтение
banksel EEADR ;это как раз то, про что вы забыли :((
bсf EECON1,WREN ;запрещаем писАть в EEPROM (на всякий случай, не повредит)
movlw 0x00 ;Адрес чтения
movwf EEADR ;
banksel EECON1 ;bank 1
bsf EECON1,RD ;запускаем чтение
banksel EEDATA ;bank 0
;результат чтения байта корректен уже в цикле, следующем за разрешением чтения...
movf EEDATA,w ;берём результат в Аккумулятор.
movwf mem ;кидаем его в требуемый регистр
Вроде ничего не забыл.
Написал сей код по памяти минут за 30... На симуляторе не откатывал, пару раз пробежал глазами - вроде всё корректно, хотя, где-нибудь возможны очипятки и просьба "ногами не пинать" :)
И ещё один совет...
Память данных в PIC16F84 как и в PIC16C84 подвержена к произвольной перезаписи.
В связи с этим настоятельно не рекомендую храниить в ней какие-либо данные, жизненно необходимые для вашей программы. Иначе, по прошествию некоторого времени вам получите "Эхо Событий" в виде необходимости "носиться" по сотне объектов и "заливать" прошивку в EEPROM.
Лушше использовать PIC16CE62x, они понадежнее, да и CodeProtect с них снять достаточно сложно ;)
Желаю Удачи.
Builder++
E-mail: info@telesys.ru