Помогите разобраться с проблемой. Компилятор sdcc микроконтроллер at89c51ed2.
для записи в епром использую такую функцию:
Код
//--------------------------------------------------------------------------------------------------
void EEPROM_WRITE(unsigned int adress, unsigned char dan)
{
bit EATEMP=0;
while(EECON & 0x01){}
EATEMP=EA;
EA = 0;
EECON = 0x02;
*(( unsigned char __xdata*)adress) = dan;
EECON = 0x00;
EA = EATEMP;
}// end void EEPROM_WRITE(unsigned char adress, unsigned char dan)
//--------------------------------------------------------------------------------------------------
в кейле это работает в sdcc не хочет. Вот сгенерированный sdcc асм .
Код
; -----------------------------------------
_EEPROM_WRITE:
mov r2,dph
mov a,dpl
mov dptr,#_EEPROM_WRITE_adress_1_1
movx @dptr,a
inc dptr
mov a,r2
movx @dptr,a
; DOP_FUNC.C:170: while(EECON & 0x01){}
00101$:
mov a,_EECON
jb acc.0,00101$
; DOP_FUNC.C:171: EATEMP=EA;
mov c,_EA
mov _EEPROM_WRITE_EATEMP_1_1,c
; DOP_FUNC.C:172: EA = 0;
clr _EA
; DOP_FUNC.C:174: EECON = 0x02;
mov _EECON,#0x02
; DOP_FUNC.C:176: *(( unsigned char __xdata*)adress) = dan;
mov dptr,#_EEPROM_WRITE_adress_1_1
movx a,@dptr
mov r2,a
inc dptr
movx a,@dptr
mov r3,a
mov dptr,#_EEPROM_WRITE_PARM_2
movx a,@dptr
mov dpl,r2
mov dph,r3
movx @dptr,a
; DOP_FUNC.C:178: EECON = 0x00;
mov _EECON,#0x00
; DOP_FUNC.C:180: EA = EATEMP;
mov c,_EEPROM_WRITE_EATEMP_1_1
mov _EA,c
ret
;------------------------------------------------------------