First of all I want to thank a lot to You sir..
We use The PPI 8255(programmable peripheral interface) for expansion of I/O ports of 8051.
So PPI interfaced with 8051 is memory mapped interfacing(i.e accessing one ppi using address at a time among many others ) in this method only we can interface many 8255 ics(ex: 10/15). Then only we accesss many sensors ,adc, displays...etc
You are interfaced directly to MCU. I want to say again thank a lot.:smile:
Now i cleared that assigning command word problem but i encountered new problem that is linking error in Keil.
Keil shows the below error.
_________________________________
compiling tmpmdfy.c...
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: XDATA
SEGMENT: ?XD?TMPMDFY
LENGTH: 8006H
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL: G
SEGMENT: ?XD?TMPMDFY
Program Size: data=50.0 xdata=32777 code=954
Target not created
___________________________________
Below code is little part of my project.
#include<reg51.h>
#include<string.h>
#include<absacc.h>
#define port P1
#define sec 100
char xdata lcdctr _at_ 0x4001;
char xdata adc_input _at_ 0x8000;
char xdata dataport _at_ 0x4000;
xdata g[0x4003]=0x83;
//sbit rs = port^0;
//sbit rw = port^1;
//sbit e = port^2;
sbit wr= port^0;
sbit rd= port^1;
sbit intr= port^2;
int test_intermediate3=0, test_final=0,test_intermediate1[10],test_intermediate2[3]={0,0,0};
void delay(unsigned int msec )
{
int i ,j ;
for(i=0;i<msec;i++)
for(j=0; j<1275; j++);
}
void lcd_cmd(unsigned char item) //Function to send command to LCD
{
dataport = item;
lcdctr=0x04;
//rs= 0;
//rw=0;
//e=1;
delay(1);
lcdctr=0x00;
//e=0;
return;
}
void lcd_data(unsigned char item) //Function to send data to LCD
{
dataport = item;
lcdctr=0x05;
//rs= 1;
//rw=0;
//e=1;
delay(1);
lcdctr=0x01;
//e=0;
//delay(100);
return;
}
void lcd_data_string(unsigned char *str) // Function to send string to LCD
{
int i=0;
while(str
!='\0')
{
lcd_data(str);
i++;
delay(10);
}
return;
}
void shape() // Function to create the shape of degree
{
lcd_cmd(64);
lcd_data(2);
lcd_data(5);
lcd_data(2);
lcd_data(0);
lcd_data(0);
lcd_data(0);
lcd_data(0);
lcd_data(0);
}
void convert() // Function to convert the values of ADC into numeric value to be sent to LCD
{
int s;
test_final=test_intermediate3;
lcd_cmd(0xc1);
delay(2);
lcd_data_string("TEMP:");
s=test_final/100;
test_final=test_final%100;
lcd_cmd(0xc8);
if(s!=0)
lcd_data(s+48);
else
lcd_cmd(0x06);
s=test_final/10;
test_final=test_final%10;
lcd_data(s+48);
lcd_data(test_final+48);
lcd_data(0);
lcd_data('c');
lcd_data(' ');
delay(2);
}
void main()
{
int i,j;
//adc_input=0xff; ////////////
lcd_cmd(0x38);
lcd_cmd(0x0c); //Display On, Cursor Blinking
delay(2);
lcd_cmd(0x01); // Clear Screen
delay(2);
while(1)
{
for(j=0;j<3;j++)
{
for(i=0;i<10;i++)
{
delay(1);
rd=1;
wr=0;
delay(1);
wr=1;
while(intr==1);
rd=0;
lcd_cmd(0x88);
test_intermediate1=adc_input/10;
delay(1);
intr=1;
}
for(i=0;i<10;i++)
test_intermediate2[j]=test_intermediate1+test_intermediate2[j];
}
test_intermediate2[0]=test_intermediate2[0]/3;
test_intermediate2[1]=test_intermediate2[1]/3;
test_intermediate2[2]=test_intermediate2[2]/3;
test_intermediate3=test_intermediate2[0]+test_intermediate2[1]+test_intermediate2[2];
shape();
convert();
}
}