использование FSR для обмена в ОЗУ и запись в EEPROM
Помогите разобраться с моим кодом:
Начиная с адреса 77h в ОЗУ хранится 3 байта (часы, минуты, секунды)
нужно эту группу (из трех байтов) переписать по адресам:
первое назначение ОЗУ:70h-72h EEPROM: 10h-12h
второе назначение ОЗУ:73h-75h EEPROM: 13h-15h
в какое назначение писать определяется selector-ом
если selector=2 то писать надо везде, при этом POINTER_REC=70h
если selector = 1 то писать надо только в какое то одно назначение. POINTER_REC при этом =70h или =73h
так как все по порядку то придумал такой код. но почемуто не работает?
#define _ADRES_BUFER_TIME=77h
..........
forAllNagrusok
movlw _ADRES_BUFER_TIME
movwf POINTER_BUFER_TIME ;настроим указатель
movlw .3
movwf i ;три раза надо делать
while_REC_HHMMSS ;ЗАПИШЕМ ИЗ БУФЕРА В ОЗУ и ЕЕ
movf POINTER_BUFER_TIME,0 ;w:=
movwf FSR
movf INDF , 0 ;W:= само значение
movwf uni_BUF ;uni_BUF:=W
movf POINTER_REC,0 ;w:=адрес назанчения
movwf FSR
movf uni_BUF , 0 ;W:=
movwf INDF
BSF STATUS,RP0 ;выберем 1 банк
movwf EEDATA
movlw 60h ;разница адресов ОЗУ и ЕЕПРОМ
subwf FSR,0 ;W:=FSR-60h 70-60=10h адрес часов
movwf EEADR
call REC_EEDATA_IN_EEADR ;и возврат в 0 банк
incf POINTER_BUFER_TIME,1 ;увеличим указатель
incf POINTER_REC,1 ;увеличим указатель
DECFSZ i,1 ;уменьшить на 1
GOTO while_REC_HHMMSS ; и переходить обратно пока не станет =0
DECFSZ selector,1 ;уменьшить на 1
GOTO forAllNagrusok ; и переходить обратно пока не станет =0
...............................................
...............................................
REC_EEDATA_IN_EEADR ;записать байт из EEDATA по адресу EEADR===
BSF STATUS,RP0 ;выберем 1 банк
BCF INTCON, GIE ;запретить прерыв
BSF EECON1,WREN ;разрешим запись
MOVLW 055h
MOVWF EECON2
MOVLW 0AAh
MOVWF EECON2
BSF EECON1, WR
nop
BSF INTCON, GIE ;разр прерыв
nop
BCF EECON1,WREN ;запретим запись в EEPROM
BCF STATUS,RP1 ;выберем банк 0
BCF STATUS,RP0
RETURN;========================
...................................
|