We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi This is code compiled with Keil C, but not working #include <AT89X51.H> xdata char Index _at_ 0x00; void Clear_DDRAM(char index); void main(void) { Clear_DDRAM(0x00); while(1); } void Clear_DDRAM(char index) { int a; for(a=0;a<65536;a++) { P3_4=0; //IOCS=0; P3_1=0; P3_0=0; P1_0=0; //Reset=0; Index=index; P3_4=1; //IOCS=1; Index=Index+a; } } The xdata has 64K address range. Here is my queation: How to series to write data(0x00) into next address(Star address at 0x00). The assembly code is "INC DPTR" so have any instruction like it in keil C.
Hsu, I think people are having a hard time understanding your question. It looks like you are attempting to write a routine to initialize your xdata space. It looks like you want a function that will take a value passed in, and then write that value to every location in xdata. For instance, you want the call:
Clear_DDRam(0x00)
void Fill_DDRAM(unsigned char value); void main(void) { Fill_DDRAM(0x00); while(1); } void Fill_DDRAM(unsigned char value) { unsigned char xdata * data Index; int data loopcount; Index = 0x0000; P3_1 = 0; P3_0 = 0; P1_0 = 0; for (loopcount = 0; loopcount < 65535; loopcount++) { P3_4 = 0; *Index = value; P3_4 = 1; Index++; } *Index = value; //Take care of last location }
Hi, Assuming that the above interpretation(s) is/are correct and all that is required is to fill an area of xram all with the same value, can't the library function memset be used to fill it? Mark.
Mark, Sure, but I don't know if this is just a learning sort of test case for him and he wants to actually do something else in practice. For instance, maybe he wants to change the function to write a pattern to memory or something. Who knows?