Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PIC 16f876 code problem..

Status
Not open for further replies.

dmadroja

New Member
here below i have copied my code...
it has three analog input and 3 svensegment display..
here when there is a fault call for first loop it runs properly...
but for second and third loop it breaks the loop of fault and m not getting where i have made a mistake...
can any one help me out????
in stimulation code runs properly but in hardware it shows this problem...


CODE:::

#include <16f876a.h>
#USE STANDARD_IO (C)
#USE STANDARD_IO (B)
//#INT_TIMER1
//#INT_CCP2
//#pragma cofig POSCMOD = OFF
#use delay (clock=4000000)
//#bit capture_2 = 0x0c.2;
//float r,f,w;
void display(int);
void disply(int);
void fault(int);
void mdisplay(int16);
//int frequency();

void main()
{while(1)
{int16 data;


{ int i;


output_low(pin_a5);
output_high(pin_a3);
output_high(pin_c1);
output_high(pin_c2);

for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data=read_adc();
output_bit(pin_c2,0);
if(data>=235||data<=3)
{fault(3);
}
output_bit(pin_c2,0);
mdisplay((data+185));
//delay_us(150);
}

output_bit(pin_c2,1);

for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data=read_adc();

if(data>=235||data<=3)
{fault(2);
}
output_bit(pin_c1,0);
mdisplay((data+185));

}

output_bit(pin_c1,1);


for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data=read_adc();

if(data>=235||data<=3)
{fault(1);
}

output_bit(pin_a3,0);
mdisplay((data+185));




}

/*for (i=0;i<=5;i++);
{ data=frequency();
mdisplay(data);
delay_ms(10);
}*/
}
}
}
void mdisplay(int16 data)
{int a,b,c,temp;
a=data%10;
temp=data/10;
b=temp%10;
c=data/100;
output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b2);
display(c);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(b);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(a);
delay_ms(10);
output_low(pin_b4);
}

void display(int a)
{output_low(pin_c3);
output_low(pin_c4);
output_low(pin_c5);
output_low(pin_c6);
output_low(pin_c7);
output_low(pin_b1);
output_low(pin_b0);
if(a==0)
{ output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);

}
else if(a==1)
{output_high(pin_c4);
output_high(pin_c5);
}
else if(a==2)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b0);}
else if(a==3)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b0);
}
else if(a==4)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==5)
{output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==6)
{ output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==7)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
}
else if(a==8)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==9)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==10)
{output_high(pin_c3);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==11)
{output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
//
}
else if(a==12)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
}


void fault(int a)
{int16 data1;
switch(a)
{
case 1: output_bit(pin_a5,1);
output_bit(pin_a4,0);

setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
do
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
output_bit(pin_a3,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}


}
while(data1>=235||data1<=3);

output_bit(pin_a3,1);
case 2: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
do
{ setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
output_bit(pin_c1,0);
if(data1<=3)

{ disply(1);}
else if(data1>=235)
{ disply(2);}

}
while(data1>=235||data1<=3);

output_bit(pin_c1,1);
case 3: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
do
{setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
output_bit(pin_c2,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}

}
while(data1>=235||data1<=3);

output_bit(pin_c2,1);
}
output_bit(pin_a4,1);
output_bit(pin_a5,0);
}


void disply(int a)
{output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
if(a==1)
{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(11);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4); }

else{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(12);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4);

}
}
 
Can you please clean up your code?
I can not go through such a mess... Please show the code and put comments on the section that doesnt work so we can take a look at it instead of searching through your code for it.

Possibly provide the part that doesn't work separately.
Thankyou.
 
Status
Not open for further replies.

Latest threads

Back
Top