Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

problem with if condition and long array

Status
Not open for further replies.

john120

Banned
Joined
Aug 13, 2011
Messages
257
Helped
11
Reputation
22
Reaction score
10
Trophy points
1,298
Activity points
0
Hello every body ,can you plz help me to solve the problem of switch in the following codes;the first if condition does nt work but the rest operate very well for
the second is for displaying:Sine
The third displays :Square;see the codes below
#include <16f877a.h>
#DEVICE ADC=10
#Device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include "lcd.c"
#define ARRAY_SIZE 191
//#define ARRAY_SIZE 250
#define status 0
#define INPUT_DELAY 150 //ms

float value,p1,p2,p3;
float value1,v1,v2,v3;
int i,found;
float l;

const float k[]={
12349,12341,12319,12315,12300.9,12289,12260,12262,12248,12230.01,
12229.99,12209.99,12200.01,12199.99,12179.95,12180,12179.39,12170,12160,12151.3,
12150,12120,12100,12099,12095,12094.99,12085,12070,12050,12025,
12015,12010,12000,11995,11990,11985,11970,11968.99,11960,11955,
11950,11945,11940,11935,11930,11900,11885,11870,11841,11832.4};
const float t[]={
11822.3,11812,11810,11800,11790,11738.5,11736.5,11735,11725,11715,
11700,11685,11675,11660,11645,11630,11599.99,11585,11575,11565,
11550,11535,11515,11505,11498.8,11440,11430,11418,11415,11426,
11415,11404,11396,11385.6,11375,11365,11355,11345,11335,11299.99,
11285,11274.99,11274,11235,11225,11215,11199.5,11185,11175,11165};
const float u[]={
11150,11135,11120,11105,11080,11065,11052,11035,11025,11010,
10997.99,10985,10975,10964,10952,10940,10925,10915,10900,10885,
10875,10862,10850,10820,10800,10785,10775,10765,10759,10758.6,
10758.3,10748.2,10735,10725,10712,10700,10685,10672,10661,10650,
10632,10624,10613,10610,10600,10580,10560,10550,10540,10530};
const float s[]={
10519.5,10515,10500,10485,10470,10455,10440,10425,10412,10400,
10385,10370,10355,10340,10320,10300,10289.99,10275,10265,10260,
10250,10240,10225,10215,10210,10200,10185,10182,10180,10175,
10170,10165,10160,10155,10155,10145,10140,10135,10125,10120,
};

//one array divided into 3 arrays
const float j[]={
12359,12348,12340,12318,12303,12301,12280,12264,12261.2,12245,
12230,12230,12210,12200,12199.99,12199.96,12179.99,12179.38,12169.99,12159.99,
12151.29,12149.99,12120,12099.99,12098.99,12098,12097.99,12084.99,12069.99,12049.99,
12024.99,12014.99,12009.99,11999.99,11994.99,11989.99,11980,11969,11968.99,11959.99,
11954.99,11949.99,11944.99,11939.99,11934.99,11929.99,11899.99,11880,11869.99,11840.99};

const float m[]={
11832.39,11822.29,11811.99,11809.99,11799.99,11749.49,11738.49,11736.49,11734.99,11724.99,
11714.99,11699.99,11684.99,11674.99,11659.99,11644.99,11629.99,11599.97,11584.99,11574.99,
11564.99,11549.99,11525,11514.99,11504.99,11498.7,11439.99,11429.99,11417.99,11434.99,
11425.99,11414.99,11403.99,11395.99,11385.59,11374.99,11364.99,11354.99,11344.99,11334.99,
11299.98,11284.99,11275,11249.98,11234.99,11224.99,11214.99,11199.49,11184.99,11174.99};
//11274.99
const float n[]={
11164.99,11149.99,11134.99,11119.99,11090,11079.99,11064.99,11051.99,11034.99,11024.99,
11009.99,10997.98,10984.99,10974.99,10963.99,10951.99,10939.99,10924.99,10914.99,10899.99,
10884.99,10874.99,10861.99,10849.99,10819.99,10799.99,10784.99,10774.99,10764.99,10758.99,
10758.59,10758.29,10748.19,10734.99,10724.99,10711.99,10699.99,10684.99,10671.99,10660.99,
10649.99,10631.99,10623.99,10612.99,10609.99,10599.99,10579.99,10559.99,10549.99,10539.99};

const float p[]={
10529.99,10519.49,10514.99,10499.99,10484.99,10469.99,10454.99,10439.99,10424.99,10411.99,
10399.99,10384.99,10369.99,10354.99,10330,10319.99,10299.99,10289.98,10274.99,10264.99,
10259.99,10249.99,10239.99,10224.99,10214.99,10209.99,10199.99,10184.99,10181.99,10179.99,
10174.99,10169.99,10164.99,10159.99,10159.99,10149.99,10144.99,10139.99,10129.99,10124.99,
};

void main()
{
set_tris_d(0x00);
set_tris_a(0xff);
set_tris_c(0x00);

lcd_init();
delay_us(200);

output_high(PIN_C4);


setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);

set_timer1(0);
setup_timer_1(t1_external | T1_DIV_BY_8);
delay_ms(250);
setup_timer_1(T1_DISABLED);
value=get_timer1();
value1=((value*32)-59528)/100;


while(1)
{
set_adc_channel(0);
delay_us(20);
v1=read_adc();
p1 = ((v1 * 5)/1023.0);

set_adc_channel(1);
delay_us(20);
v2=read_adc();
p2=((v2 * 5)/1023.0);

set_adc_channel(2);
delay_us(20);
v3=read_adc();
p3=((v3 * 5)/1023.0);

lcd_gotoxy(1,1);
printf(lcd_putc,"\f%f",p3);
//delay_ms(1000);
lcd_gotoxy(6,2);
printf(lcd_putc,"\%f",p1);
lcd_gotoxy(6,1);
//delay_ms(1000);
printf(lcd_putc,"\%f",p2);
delay_ms(1000);


printf(lcd_putc,"\fConnect Probe");
delay_ms(1500);
continue;

while((p3<=3.9)&&(p3>=0))
{
if((value1<= j)&&(k<=value1))
{
for ( i =0,found=-1;i <ARRAY_SIZE ; i++)

l=(0.1*i)+8.0;
printf(lcd_putc,"\f%2.1f", l);
printf(lcd_putc,"\%%");
delay_ms(3500);
}
else if((value1<= m)&&(t<=value1))
{
for ( i =0,found=-1;i <ARRAY_SIZE ; i++)

l=(0.1*i)+13.0;
lcd_gotoxy(4,1);
printf(lcd_putc,"\f%2.1f", l);
printf(lcd_putc,"\%%");
delay_ms(3500);
output_high(PIN_C4);
}
else if((value1<= n)&&(u<=value1))
{
for ( i =0,found=-1;i <ARRAY_SIZE ; i++)

l=(0.1*i)+18.0;
delay_ms(15);
lcd_gotoxy(4,1);
printf(lcd_putc,"\f%2.1f", l);
printf(lcd_putc,"\%%");
delay_ms(3500);
output_high(PIN_C4);

}
else if((value1<= p)&&(s<=value1))
{
for ( i =0,found=-1;i <ARRAY_SIZE ; i++)

l=(0.1*i)+23.0;
delay_ms(15);
lcd_gotoxy(4,1);
printf(lcd_putc,"\f%2.1f", l);
printf(lcd_putc,"\%%");
delay_ms(3500);
output_high(PIN_C4);

}
}



while((p2<=3.9)&&(p2>=0))
{

delay_ms(100);
printf(lcd_putc, "\fSquare");
delay_ms(2000);
}


while((p1<=3.9)&&(p1>=0))
{
delay_ms(100);
printf(lcd_putc, "\fSine");
delay_ms(2000);
}

}
}

Help me to see why the first button is not working.As you see I am using ccs and PIC16F877A

Thanks
 
Last edited:

Hi John
it would have been better if you had commented your code properly.
Moreover I think the problem is in your code.
if((value1<= j)&&(k<=value1))
{
for ( i =0,found=-1;i <ARRAY_SIZE ; i++)

l=(0.1*i)+8.0;
printf(lcd_putc,"\f%2.1f", l);
printf(lcd_putc,"\%%");
delay_ms(3500);
}
here you've checked the condition without defining the value of i and then after if statement you are running a for loop. and this for loop does not have a parenthesis enclosing after it so it will only execute one statement i.e. l=(0.1*i)+8.0;
I did not give much heed to understand what you are actually trying to do, but all I see if you are using a value of 'i' without giving a prior notion to it.
Moreover for your help and better debugging I would recomend you to use a simulator to check operation of your code.
I'm sure you are using MPLAB IDE and it comes with an integrated simulator. that will make your task easier and you can debug your code with much ease.
Regards
Shatruddha
 

Here initial value of i is 0 and it loops till i is less than ARRAY_SIZE. (for ( i =0,found=-1;i <ARRAY_SIZE ; i++)) for loop is inside the if condition and executes if if condition becomes true.
 

Jayanth I see you have used following statement
printf(lcd_putc,"\fConnect Probe");
delay_ms(1500);
continue;
can you tell me why have you used a continue here?
All I can figure out is this continue statement prevents execution of all the statements that come after it and you are stuck in infinite loop of while(1) which executes till continue and then goes back to first statement.
I dont see any blocking statement which blocks your continue statement at any point of time.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top