I tried to redesign it, there is not problem in debugging but there are a lot of errors in linking. The problems are saying:
ERROR 104: MULTIPLE PUBLIC DEFINITIONS
WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
I don't have enough experience so i do not know what to do.
could you have a look at the code?
Code:
#include <reg52.h>
#include <stdio.h>
#define XBYTE ((unsigned char volatile xdata*) 0)
void delay(void);
void data_enable1(void) {
delay();
XBYTE[0x8002] = 0x06; // E=0
delay();
XBYTE[0x8002] = 0x16; // E=1
delay();
XBYTE[0x8002] = 0x06; // E=0
}
void instr_enable1(void) {
delay();
XBYTE[0x8002] = 0x04; // E=0
delay();
XBYTE[0x8002] = 0x14; // E=1
delay();
XBYTE[0x8002] = 0x04; // E=0
}
void data_enable2(void) {
delay();
XBYTE[0x8002] = 0x0A; // E=0
delay();
XBYTE[0x8002] = 0x1A; // E=1
delay();
XBYTE[0x8002] = 0x0A; // E=0
}
void instr_enable2(void) {
delay();
XBYTE[0x8002] = 0x08; // E=0
delay();
XBYTE[0x8002] = 0x18; // E=1
delay();
XBYTE[0x8002] = 0x08; // E=0
}
void delay(void) {
unsigned int d;
for (d=0; d<20; d++);}
void display1(int x_page, int y_dimension, int x, int y, unsigned char volatile xdata *myarray) {
// *(myarray+ x*YPOS+XPOS);
int i, j;
for (j=0; j<x; j++) {
unsigned int b = 184 + x_page + x;
delay();
XBYTE[0x8000] = b;
instr_enable1();
for (i=0; i<y; i++) {
unsigned int c = 64 + y_dimension + y;
delay();
XBYTE[0x8000] = c;
instr_enable1();
delay();
XBYTE[0x8000] = *(myarray+ x*j+i);
data_enable1();
}
}
}
void main(void) {
unsigned char volatile xdata* XMEM;
unsigned char volatile xdata sxima[3][4] = {
{3, 4, 0x00, 0x00},
{0x00, 0xFF, 0x00, 0xFF},
{0xFF, 0x00, 0xFF, 0x00}
};
XMEM = &sxima[0][0];
display1(2, 10, sxima[0][0],sxima[0][1], XMEM);
}