This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

89C51IC2 Xdata issue

Hi ,
I m working on 89c51Ic2. I have created a variable like as below

unsigned char xdata buffer1[256] ;
unsigned  char xdata buffer2[256];

void initBuffer(void)
{
  unsigned char i=0;
  for(i=0;i<256;i++)
  {
    buffer1[i]=0;
    buffer2[i]=0;
  }
}

void printubuffer(void)
{
  unsigned  char i=0;
  for(i=0;i<256;i++)
  {
    uartSendchar(buffer1[i]);
     uartSendchar(' ');
    uartSendchar(buffer2[i]);
  }

}

void main()
{
  initBuffer();
  while(1)
  {
    printubuffer();
    delay(1000); //delay in ms
  }
}
note: in the above uartSendchar(char data) and delay(int) are working fine, so i dint added details about that. I have included all corresponding header files.

 Problem:
>> For me buffer1 values is always showing with number from 0 to 255. its not printing always 0.
buffer2 is showing 0.I got confused in this please help me to solve this issue
>> I have used standard 8051  startup code please refer below startup code, please correct me if anything is wrong,
  i dont have clear knowledge about startup code, please help me



================================================= startup.A51 ===============
$NOMOD51


;  User-defined <h> Power-On Initialization of Memory
IDATALEN        EQU     100H

XDATASTART      EQU     0
XDATALEN        EQU     0x3FF

PDATASTART      EQU     0H
PDATALEN        EQU     0H

;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization

IBPSTACK        EQU     1       ; set to 1 if small reentrant is used.
IBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1
; </h>

PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.
PBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1
; </h>
;</h>

XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.
XBPSTACKTOP     EQU     0xFFFF +1   ; default 0FFFFH+1
; </h>
;------------------------------------------------------------------------------
PPAGEENABLE     EQU     0       ; set to 1 if pdata object are used.

PPAGE           EQU     0
;
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
;  most 8051 variants use P2 as uppermost address byte
PPAGE_SFR       DATA    0A0H
;
; </e>
;------------------------------------------------------------------------------

; Standard SFR Symbols
ACC     DATA    0E0H
B       DATA    0F0H
SP      DATA    81H
DPL     DATA    82H
DPH     DATA    83H

                NAME    ?C_STARTUP


?C_C51STARTUP   SEGMENT   CODE
?STACK          SEGMENT   IDATA

                RSEG    ?STACK
                DS      1

                EXTRN CODE (?C_START)
                PUBLIC  ?C_STARTUP

                CSEG    AT      0
?C_STARTUP:     LJMP    STARTUP1

                RSEG    ?C_C51STARTUP

STARTUP1:

IF IDATALEN <> 0
                MOV     R0,#IDATALEN - 1
                CLR     A
IDATALOOP:      MOV     @R0,A
                DJNZ    R0,IDATALOOP
ENDIF

IF XDATALEN <> 0
                MOV     DPTR,#XDATASTART
                MOV     R7,#LOW (XDATALEN)
  IF (LOW (XDATALEN)) <> 0
                MOV     R6,#(HIGH (XDATALEN)) +1
  ELSE
                MOV     R6,#HIGH (XDATALEN)
  ENDIF
                CLR     A
XDATALOOP:      MOVX    @DPTR,A
                INC     DPTR
                DJNZ    R7,XDATALOOP
                DJNZ    R6,XDATALOOP
ENDIF

IF PPAGEENABLE <> 0
                MOV     PPAGE_SFR,#PPAGE
ENDIF

IF PDATALEN <> 0
                MOV     R0,#LOW (PDATASTART)
                MOV     R7,#LOW (PDATALEN)
                CLR     A
PDATALOOP:      MOVX    @R0,A
                INC     R0
                DJNZ    R7,PDATALOOP
ENDIF

IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)

                MOV     ?C_IBP,#LOW IBPSTACKTOP
ENDIF

IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)

                MOV     ?C_XBP,#HIGH XBPSTACKTOP
                MOV     ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF

IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
                MOV     ?C_PBP,#LOW PBPSTACKTOP
ENDIF

                MOV     SP,#?STACK-1


#if 0
;      Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
                CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0
#endif
;</h>
                LJMP    ?C_START

                END

=================================================



please help me, if anything wrong in startup.a51 please correct me,

tool details:
uvision4: V4.53.0.6
C51:v9.50a
assembler: A51 8.02b
BL51: v6.22
LIB51: v4.29


0