LM35 Sensor Interface with 8051 in C

Temperature Conversion Problem

  • (7 Pages)
  • +
  • 1
  • 2
  • 3
  • Last »

94 Replies - 26210 Views - Last Post: 20 September 2010 - 01:28 AM Rate Topic: -----

#1 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 04:49 AM

Dear people,

I am currently working on my final year project and I have chosen to compare a 3D solar panel with a flat solar panel. One of the parameters I am trying to calculate is the temperature of the both solar panels. I have advanced quite a lot in the programming area and also have constructed a hardware diagram using Proteus.

To all of those programming students out there... PLEASE NOTE that the 8051 has an internal ADC in port 1 as I have seen many forums stating that the 8051 does not have an internal ADC and this is not correct.

Going back to my problem, the only values that I am getting from my "temperature sensor" are 00.0 and 11.1. Since I am running this on a simulation, the temperature sensor was made up of a simple potentiometer. Vary the resistance, and the temperature should change accordingly. I am strongly confident that the problem is coming for my conversion.

PLEASE CHECK MY CONVERSION!! I am attaching a text file containing the program and the hardware picture.

//Using LM35 Tempreture Sensor interface with 8051 including expansion port for data logger

//Pre-processor commands
#include <reg51.h>
#include <absacc.h>

//Additional Pre-processor commands
#define PPIA 	 0x4000 				//Port A
#define PPIB	 0x4001 				//Port B
#define PPIC 	 0x4002 				//Port C 
#define PPICNTRL 0x4003 				//8255 Control Register
#define VOLT1ADC P2						//ADC Port (output)

//Single Bit Definitions
sbit SENS1=P1^0;
sbit SENS2=P1^1;
//sbit VOLTM1=P1^2;
//sbit VOLTM2=P1^3;

sbit readAD=P3^7;
sbit write=P3^6;
sbit chipsel=P3^4;
sbit intr=P3^3;

//Prototype Functions in use
void disp_mess(unsigned char mymess[],length); 	//no return parameters
void PPI_data(unsigned char value1);
void PPI_cmd(unsigned char value1);
void PPI_data2(unsigned char value2);
void PPI_cmd2(unsigned char value2);
void PPI_data3(unsigned char voltage);
void PPI_cmd3(unsigned char voltage);
void LCDDelay(unsigned char ustime); 			//Enable Pulse
void CHARDelay(unsigned int mstime); 
void disp(unsigned char value1,length);			//in between Characters
void TEMPDelay(unsigned int time);		//in between Tempreture readings
void INITSER();
void conv();//A to D Conversion
void read();// Read from A/D port

unsigned char tempconv1(void);
unsigned char tempconv2(void);
void volt1conv(unsigned char voltage,length); //Voltage Conversion to ASCII

unsigned int A2DM;
unsigned int ADC;


//Main Function Block
void main(void)
{
	unsigned char temp1;
	unsigned char temp2;
	unsigned char volt1;
	unsigned char i;

	while(1)	 //infinite loop
	{
		XBYTE[PPICNTRL]=0x80; 		//Control word ALL Ports o/p
		//LCD commands
		PPI_cmd(0x38); 				//init. LCD 2 lines, 5x7 matrix, 8-bits
		PPI_cmd(0x0E); 				//LCD on, cursor on
		PPI_cmd(0x01); 				//Clear LCD screen
		PPI_cmd(0x80); 				//change cursor pos
		
		//LCD messages for TEMPERATURE
		disp_mess("Sens 1: ",0x0C); 	//display message on line 1
			{ 						
				temp1=tempconv1();
				disp(temp1,1);			// Command To Display 0x2A (*)
				disp(0xDF,1);
				disp_mess("C",1);	
			}

		PPI_cmd2(0xC0); 				//change cursor pos
		disp_mess("Sens 2: ", 0x0C); 	//display message on line 2	
			{ 					
				temp2=tempconv2();
				disp(temp2,1);			// Command To Display 0x2A (*)
				disp(0xDF,1);
				disp_mess("C",1);	
			}

		PPI_cmd(0x01);

		{							
		A2DM = 0;
		for(i=0;i<10;i++)			  	//10 loops to achieve correct value
		{
			conv();                  	//Start conversion
			read();                  	//Read ADC
			A2DM += ADC;			 	//insert value into array adc_avg and increament
		}

		A2DM = A2DM/10;
		//PPI_cmd3(0x80);
		disp_mess("Volt 1: ", 0x0C);
		ADC = A2DM * 19;			   	//Value is Units

		volt1conv((unsigned char)(ADC/1000));
		PPI_data3('.');				 	//decimal point
		ADC = ADC%1000;					//Remainder is 2 dp
		volt1conv((unsigned char)(ADC/10));

		PPI_data3('V');
		}
		TEMPDelay(50);
	//	exit: goto exit; 				//micro stay here

	}
}



//Tempreture Convertion Value for SENSOR 1
unsigned char tempconv1()
{
	unsigned char input1,val1,val1A,val1B,val1C;
	
	input1=SENS1;		 //read input from Port 1.0

	val1=input1/1000;
	val1A=input1%10;
	val1B=val1A%10; 	 //remainder is Units digit
	val1C=val1B%10; 	 //remainder of second division is Tens digit

    val1A=val1A|0x30;
	val1B=val1B|0x30;	 //ASCII Convertions
	val1C=val1C|0x30;
  
	PPI_cmd(0x87);		 //LCD Position
	PPI_data(val1C);
	PPI_cmd(0x88);
	PPI_data(val1B);
	PPI_cmd(0x89);
	PPI_data('.');
	PPI_data(val1A);
}

//Tempreture Convertion Value for SENSOR 2
unsigned char tempconv2()
{
	unsigned char input2,val2,val2A,val2B,val2C;
	
	input2=SENS2;		 //read input from Port 1.1

	val2=input2/100;   	//divide by 10
	val2A=input2%10;
	val2B=val2A%10; 	//remainder is Units digit
	val2C=val2B%10; 	//remainder of second division is Tens digit

	val2A=val2A|0x30;
	val2B=val2B|0x30;	 //ASCII Convertions
	val2C=val2C|0x30;

	PPI_cmd2(0xC7);		 //LCD Position
	PPI_data2(val2C);
	PPI_cmd2(0xC8);
	PPI_data2(val2B);
	PPI_cmd2(0xC9);
	PPI_data2('.');
	PPI_data2(val2A);
}

//Voltage Conversion Value for VOLTMETER 1
void volt1conv(unsigned char voltage,length)
{
	char temp1,temp2;
	temp1 = voltage;	   // insert value of voltage (hex) into temp1 array
	temp2=0;			   // clear temp2 array
	do
	{
		temp1 = temp1-100;	//decrease value of temp1 by 100
		if(temp1>=0)
			temp2++;	   // increament temp2 by 1
	} 
	while(temp1>=0);	   //as long as temp1 is greater or equal to 0

	if(temp2>0)
	PPI_data3(temp2+0x30);	 //Convert temp2 to ASCII
	temp2=0;
	temp1 = temp1+100;

	do
	{
		temp1 = temp1-10;
		if(temp1>=0)
			temp2++;
	} 
	while(temp1>=0);		//as long as temp1 is greater or equal to 0
	PPI_data3(temp2+0x30);
	temp2 = temp1+10;
	PPI_data3(temp2+0x30);
}

// Prototype Function Decleration To Display SENSOR 1 On LCD
void disp(unsigned char value1,length)	
{
	unsigned char y,val1;		// Variable y For Loop
	for(y=0;y<length;y++)		// Loop
	{
		val1 =value1;
		PPI_data(val1);
		CHARDelay(200);			// LCD Is Defned To Port 0
		
	}
}

// Prototype Function Decleration To Display SENSOR 2 On LCD
void disp2(unsigned char value2,length)	
{
	unsigned char y,val2;		// Variable y For Loop
	for(y=0;y<length;y++)		// Loop
	{
		val2 =value2;
		PPI_data2(val2);
		CHARDelay(200);			// LCD Is Defned To Port 0
		
	}
}

//LCD Messages for SENSOR 1
void disp_mess(unsigned char mymess[],length)
{
	unsigned char val1;
	unsigned char i;

	for(i=0;i<length;i++)
	{
		val1=mymess[i];
		PPI_data(val1);
		CHARDelay(200); 	//delay for characters
	}
}

//LCD Command for SENSOR 1
void PPI_cmd(unsigned char value1)
{	
	//RS=0 for command			 						
	XBYTE[PPIA]=value1; 	//RW=0 for write
	
	//strobe the Enable Pin
	XBYTE[PPIB]=0x04; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x00; 		//E=0
	CHARDelay(200); 		//delay for commands
}

//LCD Data for SENSOR 1
void PPI_data(unsigned char value1)
{ 	
	//RS=1 for data												
	XBYTE[PPIA]=value1; 	//RW=0 for write
	//strobe the Enable pin
	XBYTE[PPIB]=0x05; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x01; 		//E=0
}

//LCD Command for SENSOR 2
void PPI_cmd2(unsigned char value2)
{	
	//RS=0 for command			 						
	XBYTE[PPIA]=value2; 	//RW=0 for write
	
	//strobe the Enable Pin
	XBYTE[PPIB]=0x04; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x00; 		//E=0
	CHARDelay(200); 		//delay for commands
}

//LCD Data for SENSOR 2
void PPI_data2(unsigned char value2)
{ 	
	//RS=1 for data												
	XBYTE[PPIA]=value2; 	//RW=0 for write
	//strobe the Enable pin
	XBYTE[PPIB]=0x05; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x01; 		//E=0
}

//ADC Routine for Conversion
void conv()
{
	chipsel = 0;		//Make CS low
	write = 0;			//Make WR low
	write = 1;			//Make WR high
	chipsel = 1;		//Make CS high
	while(intr);		//Wait for INTR to go low
}

void read()
{
	chipsel = 0;		//Make CS low
	readAD = 0;			//Make RD low
	ADC = VOLT1ADC;		//Read ADC port
	readAD = 1;			//Make RD high
	chipsel = 1;		//Make CS high
}

//LCD Command for Voltage 1
void PPI_cmd3(unsigned char voltage)
{	
	//RS=0 for command			 						
	XBYTE[PPIA]=voltage; 	//RW=0 for write
	
	//strobe the Enable Pin
	XBYTE[PPIB]=0x04; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x00; 		//E=0
	CHARDelay(200); 		//delay for commands
}

//LCD Data for Voltage 1
void PPI_data3(unsigned char voltage)
{ 	
	//RS=1 for data												
	XBYTE[PPIA]=voltage; 	//RW=0 for write
	//strobe the Enable pin
	XBYTE[PPIB]=0x05; 		//E=1 for H-to-L pulse
	LCDDelay(18); 			//~100us
	XBYTE[PPIB]=0x01; 		//E=0
}

//Serial Communication Settings
void INITSER()
{
	TMOD=0x20;
    SCON=0x50;
    TH1=0xFD;
    TL1=0xFD;
    TR1=1;
}

//LCD Enable Pulse
void LCDDelay(unsigned char ustime)
{
	unsigned char i;
	//single loop
	for(i=0;i<ustime;i++);
}

//Delay used for Message Characters
void CHARDelay(unsigned int mstime)
{
	unsigned int i,j;
	//nested loops
	for(i=0;i<mstime;i++) 		//outer loop
	for(j=0;j<190;j++); 		//inner loop
}

//Delay between Tempreture readings
void TEMPDelay(unsigned int time)
{
	unsigned int x,z,y;
	//nested loops
	for(x=0;x<time;x++)
	for(z=0;z<255;z++)
	for(y=0;y<255;y++);
}

Attached image(s)

  • Attached Image

Attached File(s)

  • Attached File  Temp.txt (8.26K)
    Number of downloads: 1104

This post has been edited by JackOfAllTrades: 29 August 2010 - 04:51 AM
Reason for edit:: Added code to post.


Is This A Good Question/Topic? 0
  • +

Replies To: LM35 Sensor Interface with 8051 in C

#2 #define  Icon User is offline

  • Duke of Err
  • member icon

Reputation: 1276
  • View blog
  • Posts: 4,398
  • Joined: 19-February 09

Re: LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 06:34 AM

Hi, on line 122, you divide by 1000.

     val1=input1/1000;


On line 147 you divide by 100 but the comment says divide by 10.

     val2=input2/100;    //divide by 10 


Generally, a unsigned char is stored as one byte which gives a value range of 0 to 255. Integer division of any number between 0 and 255 by 1000 always results in 0.
Was This Post Helpful? 1
  • +
  • -

#3 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 06:40 AM

View Post#define, on 29 August 2010 - 05:34 AM, said:

Hi, on line 122, you divide by 1000.

     val1=input1/1000;


On line 147 you divide by 100 but the comment says divide by 10.

     val2=input2/100;    //divide by 10 


Generally, a unsigned char is stored as one byte which gives a value range of 0 to 255. Integer division of any number between 0 and 255 by 1000 always results in 0.



Regarding the comment that is a mistake as I tried to alter the values to see what happens and I forgot to change the comment.

Now regarding the unsigned char, I tried many numerical values in order to try and obtain a correct results however nothing happened. I also altered the array to an INT instead of a CHAR. I am starting to think that P1.0 (single pin) can only gives values of 1 or 0 which I know is not correct.
Was This Post Helpful? 0
  • +
  • -

#4 Salem_c  Icon User is offline

  • void main'ers are DOOMED
  • member icon

Reputation: 1576
  • View blog
  • Posts: 3,004
  • Joined: 30-May 10

Re: LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 06:46 AM

> PLEASE NOTE that the 8051 has an internal ADC in port 1 as I have seen many forums stating that the 8051 does not have an internal ADC and this is not correct.
The original one didn't.
Many customised variants don't either.
I can just barely make out from your diagram that you're using an 80C51.

So I looked up a data sheet, and still no mention of ADC
http://www.nxp.com/d...8XC51_8XC52.pdf

So which variant are you using (post a link to a data sheet for example).

Is your simulation also matching the processor variant you're using?
Was This Post Helpful? 0
  • +
  • -

#5 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 06:51 AM

View PostSalem_c, on 29 August 2010 - 05:46 AM, said:

> PLEASE NOTE that the 8051 has an internal ADC in port 1 as I have seen many forums stating that the 8051 does not have an internal ADC and this is not correct.
The original one didn't.
Many customised variants don't either.
I can just barely make out from your diagram that you're using an 80C51.

So I looked up a data sheet, and still no mention of ADC
http://www.nxp.com/d...8XC51_8XC52.pdf

So which variant are you using (post a link to a data sheet for example).

Is your simulation also matching the processor variant you're using?



http://www.keil.com/...l/t89c51ac2.pdf that is the board I am using. Note the A to D converter (features). Also the simulation is matched to the processor variant as I had many assignments where I had to use the same board and similar simulations.
Was This Post Helpful? 1
  • +
  • -

#6 jimblumberg  Icon User is offline

  • member icon


Reputation: 3845
  • View blog
  • Posts: 11,753
  • Joined: 25-December 09

Re: LM35 Sensor Interface with 8051 in C

Posted 29 August 2010 - 07:34 AM

See Chapter 16 (page 87) of your data sheet on how to setup and read the internal AtoD. Also I would move the LCD setup out of the while loop. It only needs to be initialized once.


Jim
Was This Post Helpful? 1
  • +
  • -

#7 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 02:41 AM

View Postjimblumberg, on 29 August 2010 - 06:34 AM, said:

See Chapter 16 (page 87) of your data sheet on how to setup and read the internal AtoD. Also I would move the LCD setup out of the while loop. It only needs to be initialized once.


Jim


I have read the data sheet and came up with this code

unsigned int tempconv1()
{

int temp1=0,temp2=0;
int channel = 0;
int x=0;
int y=0;

channel = 0x01;	 //select channel 0 (P1.0 as ADCIN)
ADCF = 0x02;	 //configure CH0 as ADCIN AN0/P1.0
ADCON = 0x20;	 //Enable ADC. ADEN bit = '1'


ADCON &= 0xF9;	 //start of conversion; ADEN bit='1'
ADCON |= channel;	 //ADEN = '1', SCH0-SCH2 = "000"
ADCON |= 0x09;	 //start of conversion in standard mode; ADEN='1'; ADSST=1'

while ((ADCON & 0x01) != 0x01);	 //wait for end-of-conversion

ADCON &= 0xEF;	 //clear end of conversion
temp1 = (ADDH<< 2)+(ADDL);	 //read value


x = (temp1) / 10;	 //LCD data conversion 
x = ((x) | (0x30) );
PPI_cmd(0x87);
PPI_data(x);
LCDDelay(250);

y = (temp1) % 10;
y = ( (y) | (0x30) );
PPI_cmd(0x88);
PPI_data(y);
LCDDelay(250);



However the problem still persists and this time nothing is changing.

This post has been edited by sarmanu: 30 August 2010 - 03:00 AM
Reason for edit:: Added code tags.

Was This Post Helpful? 0
  • +
  • -

#8 jimblumberg  Icon User is offline

  • member icon


Reputation: 3845
  • View blog
  • Posts: 11,753
  • Joined: 25-December 09

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 07:40 AM

Are you returning anything from your tempconv1()? In main you are displaying the return value. I would start by just displaying the 'raw' AtoD value and if it changes with your pot then start converting the value to a voltage/temperature reading one step at a time. I would return temp1 from the function.



Jim
Was This Post Helpful? 1
  • +
  • -

#9 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 07:46 AM

View Postjimblumberg, on 30 August 2010 - 06:40 AM, said:

Are you returning anything from your tempconv1()? In main you are displaying the return value. I would start by just displaying the 'raw' AtoD value and if it changes with your pot then start converting the value to a voltage/temperature reading one step at a time. I would return temp1 from the function.



Jim



what do you mean by raw? Also, I have two conversion routines. The one that is shown on the full program works but only displays 1 or 0 as I change the pot so some conversion is happening however not a good conversion. I am certain that the problem is coming from the conversion routine. I hope someone here can help me out as that is my last piece of the program.
Was This Post Helpful? 0
  • +
  • -

#10 jimblumberg  Icon User is offline

  • member icon


Reputation: 3845
  • View blog
  • Posts: 11,753
  • Joined: 25-December 09

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 07:51 AM

By raw I mean
temp1 = (ADDH<< 2)+(ADDL);

and do not do any other conversions.


Jim
Was This Post Helpful? 1
  • +
  • -

#11 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 07:58 AM

View Postjimblumberg, on 30 August 2010 - 06:51 AM, said:

By raw I mean
temp1 = (ADDH<< 2)+(ADDL);

and do not do any other conversions.


Jim



I just did that and the cursor kept on going without giving a value, also I tried to remove the division by 100 from the first value and still the output was a 0. I think that P1.0 is not being read at all and therefore there is no value in it, thus giving a reading of 0 however I have also tried other channels, even reading directly from the sbit of SENS 1 (P1.0) and still the reading is 0.
Was This Post Helpful? 0
  • +
  • -

#12 jimblumberg  Icon User is offline

  • member icon


Reputation: 3845
  • View blog
  • Posts: 11,753
  • Joined: 25-December 09

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 08:06 AM

Could you please post your modified code.
Was This Post Helpful? 1
  • +
  • -

#13 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 08:28 AM

View Postjimblumberg, on 30 August 2010 - 07:06 AM, said:

Could you please post your modified code.


unsigned int tempconv1(void)

{

int temp1=0,temp2=0;
int channel = 0;
int x=0;
int y=0;
int z=0;

channel = SENS1;	 //select channel 0 (P1.0 as ADCIN)	ADC Input
ADCF = 0x02;	 //configure CH0 as ADCIN AN0/P1.0
ADCON = 0x20;	 //Enable ADC. ADEN bit = '1'  ADC Control


ADCON &= 0xF9;	 //start of conversion; ADEN bit='1'
ADCON |= channel;	 //ADEN = '1', SCH0-SCH2 = "000"
ADCON |= 0x09;	 //start of conversion in standard mode; ADEN='1'; ADSST=1'

while ((ADCON & 0x01) != 0x01);	 //wait for end-of-conversion

ADCON &= 0xEF;	 //clear end of conversion
temp1 = (ADDH<< 2)+(ADDL);	 //read value


x = (temp1;) /// 100;	 //LCD data conversion 
x = ((x) | (0x30) );
PPI_cmd(0x87);
PPI_data(x);
LCDDelay(250);

//y = (temp1) % 100;
//y = ( (y) | (0x30) );
//PPI_cmd(0x88);
//PPI_data(y);
//LCDDelay(250);

//z = (temp1) / 100;
//z = ((z) | (0x30));
//PPI_cmd(0x89);
//PPI_data('.');
//PPI_data(z);
//LCDDelay(250);

//	unsigned char input1,val1,val1A,val1B,val1C;
	
//	input1=SENS1;		 //read input from Port 1.0

//	val1=input1/10;
//	val1A=input1%5;
//	val1B=val1A%5; 	 //remainder is Units digit
//	val1C=val1B%5; 	 //remainder of second division is Tens digit

//    val1A=val1A|0x30;
//	val1B=val1B|0x30;	 //ASCII Convertions
//	val1C=val1C|0x30;
  
//	PPI_cmd(0x87);		 //LCD Position
//	PPI_data(val1C);
//	PPI_cmd(0x88);
//	PPI_data(val1B);
//	PPI_cmd(0x89);
//	PPI_data('.');
//	PPI_data(val1A);
}


there they are... the routine canceld out is the one that gives me 0 and 1, whilst the one above it is modifies so as to read the adc without any conversions done, whilst putting P1.0 into the array channel

This post has been edited by JackOfAllTrades: 30 August 2010 - 09:43 AM
Reason for edit:: Added code tags.

Was This Post Helpful? 0
  • +
  • -

#14 JackOfAllTrades  Icon User is offline

  • Saucy!
  • member icon

Reputation: 5954
  • View blog
  • Posts: 23,224
  • Joined: 23-August 08

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 09:44 AM

C'mon...you want to be a software developer, you've got to play by the rules, whether it's in code or on forums.

When posting code, you do so in code tags!

:code:
Was This Post Helpful? 0
  • +
  • -

#15 con-!  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 65
  • Joined: 29-August 10

Re: LM35 Sensor Interface with 8051 in C

Posted 30 August 2010 - 09:54 AM

View PostJackOfAllTrades, on 30 August 2010 - 08:44 AM, said:

C'mon...you want to be a software developer, you've got to play by the rules, whether it's in code or on forums.

When posting code, you do so in code tags!

:code:


ok... xs
Was This Post Helpful? 0
  • +
  • -

  • (7 Pages)
  • +
  • 1
  • 2
  • 3
  • Last »