bagusdj
Member level 3
- Joined
- Nov 25, 2012
- Messages
- 67
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,286
- Activity points
- 1,766
#include<reg52.h>
sbit triac=P3^0;
void cct_init(void);
void initint0(void);
void firing(void);
void delay(unsigned int count)
{
unsigned int i;
while(count) {
i = 115;
while(i>0) i--;
count--;
}}
void cct_init(void)
{
P3=0x05; //triac is on when active low
}
void initINT0(void)
{
IT0=1;
EX0=1;
EA=1;
}
void firing(void)
{
if(value>10 & value>=20) //1st condition
{triac=1;
delay(5);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(value>20 & value>=30) //2nd condition
{triac=1;
delay(4);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(value>30 & value>=40) //3rd condition
{triac=1;
delay(3);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(value>40 & value>=50) //4th condition
{triac=1;
delay(2);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(value>50) //5th condition; full power
{triac=0;
EA=0;
EA=1;}
else
{triac=1; //6th condition; triac not firing at all
EA=0;
EA=1;}
}
void external0_isr(void) interrupt 0
{
firing();
}
void main(void)
{
cct_init();
initINT0();
}
// Program to interface TGS2600 using ADC 0809. The output of TGS2600 is displayed on LCD. Controller interrupt is used to generate the clock for driving ADC 0808.
#include<reg52.h>
sbit ale=P1^0; //address latch enable
sbit oe=P1^3; //output enable
sbit sc=P1^1; //start conversion
sbit eoc=P1^2; //end of conversion
sbit clk=P1^7; // clock
sbit ADD_A=P1^4; // Address pins for selecting input channels.
sbit ADD_B=P1^5;
sbit ADD_C=P1^6;
sfr lcd_data_pin=0xA0; //P2 port
sbit rs=P3^7;
sbit rw=P3^1;
sbit en=P3^6;
sbit triac=P3^0;
sfr input_port=0x80; //P0 port
unsigned int bitvalue,decimal_value,key,left_value,value,number,ascii1,ascii2,ascii3,flag,key1;
void timer0() interrupt 1 // Function to generate clock of frequency 500KHZ using Timer 0 interrupt.
{
clk=~clk;
}
void delay(unsigned int count)
{
unsigned int i;
while(count) {
i = 115;
while(i>0) i--;
count--;
}}
void lcd_command(unsigned char comm) //Function to send command to LCD.
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(10);
en=0;
}
void lcd_data(unsigned char disp) //Function to send data to LCD.
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(10);
en=0;
}
lcd_dataa(unsigned char *disp) //Function to send string data to LCD.
{
int x;
for(x=0;disp[x]!=0;x++)
{
lcd_data(disp[x]);
}
}
void lcd_ini() //Function to inisialize the LCD
{
lcd_command(0x38);
delay(5);
lcd_command(0x0E);
delay(5);
lcd_command(0x80); //Force cursor to blink at line 1 positon 0
delay(5);
}
void BCD() // Binary to decimal conversion to send the data to LCD
{
key1++;
key=0;
flag=0;
number=input_port;
number= number*39;
number= number/100;
value=number%10;
number=number/10;
ascii1=value+48;
if(number!=0)
{
value=number%10;
number=number/10;
ascii2=value+48;
flag=1;
}
else
{
ascii2=48;
flag=1;
}
if(number!=0)
{
value=number%10;
number=number/10;
ascii3=value+48;
key=2;
}
else
{
ascii3=48;
key=2;
}
if(key==2)
lcd_data(ascii3);
if(flag==1)
lcd_data(ascii2);
lcd_data(ascii1);
if(key1==3)
{
key1=0;
ascii3=0;
ascii2=0;
ascii1=0;
delay(10);
}
}
void adc() //Function to drive ADC
{
while(1)
{
ADD_C=0; // Selecting input channel 2 using address lines
ADD_B=0;
ADD_A=1;
delay(2);
ale=1;
delay(2);
sc=1;
delay(1);
ale=0;
delay(1);
sc=0;
while(eoc==1);
while(eoc==0);
oe=1;
BCD();
lcd_command(0x88);
delay(2);
oe=0;
}
}
void main()
{
eoc=1;
ale=0;
oe=0;
sc=0;
key1=0;
TMOD=0x02; //timer0 setting for generating clock of 500KHz using interrupt enable mode.
TH0=0xFD;
IE=0x82;
TR0=1;
lcd_ini();
lcd_dataa("PPM : ");
lcd_command(0x88);
adc();
}
In your first code value is a integer/float variable and in the second code value is a string variable. What do you want to do?
You cannot assign value of sensor written on LCD that is string to if function. You can only use it if it is a integer/float variable. Depending on the value of variable value (in your situuation it is 20) you should select the timer.
// Program to interface TGS2600 using ADC 0809. The output of TGS2600 is displayed on LCD. Controller interrupt is used to generate the clock for driving ADC 0808.
#include<reg52.h>
sbit ale=P1^0; //address latch enable
sbit oe=P1^3; //output enable
sbit sc=P1^1; //start conversion
sbit eoc=P1^2; //end of conversion
sbit clk=P1^7; // clock
sbit ADD_A=P1^4; // Address pins for selecting input channels.
sbit ADD_B=P1^5;
sbit ADD_C=P1^6;
sfr lcd_data_pin=0xA0; //P2 port
sbit rs=P3^7;
sbit rw=P3^1;
sbit en=P3^6;
sbit triac=P3^0;
sfr input_port=0x80; //P0 port
unsigned int bitvalue,decimal_value,key,left_value,value,number,ascii1,ascii2,ascii3,flag,key1;
void cct_init(void);
void initint0(void);
void firing(void);
void timer0() interrupt 1 // Function to generate clock of frequency 500KHZ using Timer 0 interrupt.
{
clk=~clk;
}
void delay(unsigned int count)
{
unsigned int i;
while(count) {
i = 115;
while(i>0) i--;
count--;
}}
void cct_init(void)
{
P3=0x05; //triac is on when active low
}
void initINT0(void)
{
IT0=1;
EX0=1;
EA=1;
}
void external0_isr(void) interrupt 0
{
firing();
}
void lcd_command(unsigned char comm) //Function to send command to LCD.
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(10);
en=0;
}
void lcd_data(unsigned char disp) //Function to send data to LCD.
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(10);
en=0;
}
lcd_dataa(unsigned char *disp) //Function to send string data to LCD.
{
int x;
for(x=0;disp[x]!=0;x++)
{
lcd_data(disp[x]);
}
}
void lcd_ini() //Function to inisialize the LCD
{
lcd_command(0x38);
delay(5);
lcd_command(0x0E);
delay(5);
lcd_command(0x80); //Force cursor to blink at line 1 positon 0
delay(5);
}
void BCD() // Binary to decimal conversion to send the data to LCD
{
key1++;
key=0;
flag=0;
number=input_port;
number= number*39;
number= number/100;
value=number%10;
number=number/10;
ascii1=value+48;
if(number!=0)
{
value=number%10;
number=number/10;
ascii2=value+48;
flag=1;
}
else
{
ascii2=48;
flag=1;
}
if(number!=0)
{
value=number%10;
number=number/10;
ascii3=value+48;
key=2;
}
else
{
ascii3=48;
key=2;
}
if(key==2)
lcd_data(ascii3);
if(flag==1)
lcd_data(ascii2);
lcd_data(ascii1);
if(key1==3)
{
key1=0;
ascii3=0;
ascii2=0;
ascii1=0;
delay(10);
}
}
[B]void firing(void) //conducted if interrupt occurs
{
if(input_port>10 & input_port<=20) //1st condition
{triac=1;
delay(5);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>20 & input_port<=30) //2nd condition
{triac=1;
delay(4);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>30 & input_port<=40) //3rd condition
{triac=1;
delay(3);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>40 & input_port<=50) //4th condition
{triac=1;
delay(2);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>50) //5th condition; full power
{triac=0;
EA=0;
EA=1;}
else
{triac=1; //6th condition; triac not firing at all
EA=0;
EA=1;}
}[/B]
void adc() //Function to drive ADC
{
while(1)
{
ADD_C=0; // Selecting input channel 2 using address lines
ADD_B=0;
ADD_A=1;
delay(2);
ale=1;
delay(2);
sc=1;
delay(1);
ale=0;
delay(1);
sc=0;
while(eoc==1);
while(eoc==0);
oe=1;
BCD();
lcd_command(0x88);
delay(2);
oe=0;
}
}
void main()
{
cct_init();
initINT0();
eoc=1;
ale=0;
oe=0;
sc=0;
key1=0;
TMOD=0x02; //timer0 setting for generating clock of 500KHz using interrupt enable mode.
TH0=0xFD;
IE=0x82;
TR0=1;
lcd_ini();
lcd_dataa("PPM : ");
lcd_command(0x88);
adc();
}
can u post the circuit.................
make me clear what u want to do..................
// Program to interface TGS2600 using ADC 0809. The output of TGS2600 is displayed on LCD. Controller interrupt is used to generate the clock for driving ADC 0808.
#include<reg52.h>
sbit ale=P1^0; //address latch enable
sbit oe=P1^3; //output enable
sbit sc=P1^1; //start conversion
sbit eoc=P1^2; //end of conversion
sbit clk=P1^7; // clock
sbit ADD_A=P1^4; // Address pins for selecting input channels.
sbit ADD_B=P1^5;
sbit ADD_C=P1^6;
sfr lcd_data_pin=0xA0; //P2 port
sbit rs=P3^7;
sbit rw=P3^1;
sbit en=P3^6;
sbit triac=P3^0;
sfr input_port=0x80; //P0 port
unsigned int bitvalue,decimal_value,key,left_value,value,number,ascii1,ascii2,ascii3,flag,key1;
void cct_init(void);
void initint0(void);
void firing(void);
void timer0() interrupt 1 // Function to generate clock of frequency 500KHZ using Timer 0 interrupt.
{
clk=~clk;
}
void delay(unsigned int count)
{
unsigned int i;
while(count) {
i = 115;
while(i>0) i--;
count--;
}}
void cct_init(void)
{
P3=0x05; //triac is on when active low
}
void initINT0(void)
{
IT0=1;
EX0=1;
EA=1;
}
void external0_isr(void) interrupt 0
{
firing();
}
void lcd_command(unsigned char comm) //Function to send command to LCD.
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(10);
en=0;
}
void lcd_data(unsigned char disp) //Function to send data to LCD.
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(10);
en=0;
}
lcd_dataa(unsigned char *disp) //Function to send string data to LCD.
{
int x;
for(x=0;disp[x]!=0;x++)
{
lcd_data(disp[x]);
}
}
void lcd_ini() //Function to inisialize the LCD
{
lcd_command(0x38);
delay(5);
lcd_command(0x0E);
delay(5);
lcd_command(0x80); //Force cursor to blink at line 1 positon 0
delay(5);
}
void BCD() // Binary to decimal conversion to send the data to LCD
{
key1++;
key=0;
flag=0;
number=input_port;
number= number*39;
number= number/100;
value=number%10;
number=number/10;
ascii1=value+48;
if(number!=0)
{
value=number%10;
number=number/10;
ascii2=value+48;
flag=1;
}
else
{
ascii2=48;
flag=1;
}
if(number!=0)
{
value=number%10;
number=number/10;
ascii3=value+48;
key=2;
}
else
{
ascii3=48;
key=2;
}
if(key==2)
lcd_data(ascii3);
if(flag==1)
lcd_data(ascii2);
lcd_data(ascii1);
if(key1==3)
{
key1=0;
ascii3=0;
ascii2=0;
ascii1=0;
delay(10);
}
}
void firing(void) //conducted if interrupt occurs
{
if(input_port>10 & input_port<=20) //1st condition
{triac=1;
delay(5);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>20 & input_port<=30) //2nd condition
{triac=1;
delay(4);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>30 & input_port<=40) //3rd condition
{triac=1;
delay(3);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>40 & input_port<=50) //4th condition
{triac=1;
delay(2);
triac=0;
delay(1);
triac=1;
EA=0;
EA=1;}
else if(input_port>50) //5th condition; full power
{triac=0;
EA=0;
EA=1;}
else
{triac=1; //6th condition; triac not firing at all
EA=0;
EA=1;}
}
void adc() //Function to drive ADC
{
while(1)
{
ADD_C=0; // Selecting input channel 2 using address lines
ADD_B=0;
ADD_A=1;
delay(2);
ale=1;
delay(2);
sc=1;
delay(1);
ale=0;
delay(1);
sc=0;
while(eoc==1);
while(eoc==0);
oe=1;
BCD();
lcd_command(0x88);
delay(2);
oe=0;
}
}
void main()
{
cct_init();
initINT0();
eoc=1;
ale=0;
oe=0;
sc=0;
key1=0;
TMOD=0x02; //timer0 setting for generating clock of 500KHz using interrupt enable mode.
TH0=0xFD;
IE=0x82;
TR0=1;
lcd_ini();
lcd_dataa("PPM : ");
lcd_command(0x88);
adc();
}
void firing(void) //conducted if interrupt occurs
u are not all calling the below function...........
Code:void firing(void) //conducted if interrupt occurs
void firing(void)
the functionCode:void firing(void)
is not been called in any of the functions
void external0_isr(void) interrupt 0
{
firing();
}
void adc() //Function to drive ADC
{
while(1)
{
ADD_C=0; // Selecting input channel 2 using address lines
ADD_B=0;
ADD_A=1;
delay(2);
ale=1;
delay(2);
sc=1;
delay(1);
ale=0;
delay(1);
sc=0;
while(eoc==1);
while(eoc==0);
oe=1;
BCD();
lcd_command(0x88);
delay(2);
oe=0;
firing();
}
}
i think this may work...................
try this
post the full circuit include the load (fan) triac and other thing.............
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?