Hi,
I am using Compiler 51 v 8.09 and Atmel AT89c51RD2 chip.When I try to save data to internal flash the return value from routine is always not ok (0xF0), when I run the same code on Phlips P89c51RD2 processor the return code is OK. Here is routine that I use to save data to flash:
AUXR1 EQU 0xA2 ; Define AUXR1 Special Function Register
; FUNCTION _set_code (BEGIN)
SET_CODE SEGMENT CODE RSEG SET_CODE
PUBLIC _set_code
_set_code: ; set_code()
MOV DPL,R7 ; Set DPTR = cp MOV DPH,R6
MOV A,IE ; Save Interrupt Enable PUSH ACC
CLR A ; Disable All Interrupts MOV IE,A
MOV R0,#20 ; Set R0 = Oscillator Frequency MOV R1,#2 ; Set R1 = Program Data Byte Function Code MOV A,R5 ; Set ACC = Byte to Program
MOV AUXR1,#20H ; Set ENBOOT = Enable Boot Rom
LCALL 0xFFF0 ; Call PGM_MTP & Program Data Byte
MOV AUXR1,#0 ; Clear ENBOOT = Disable Boot Rom
MOV R7,A ; Set R7 = Return Value - 0=Ok FF=Fail
POP ACC ; Restore Interrupt Enable MOV IE,A
RET ; Return
END
; FUNCTION _set_code (END)
the parameters for function are address in flash (0xC000) and value to write.
Could somebody help me to understand what wrong with code or why the same code run on Philps and not on Atmel( I did recompile the code for each processor separetly)?