|
|
View previous topic :: View next topic |
Author |
Message |
mafia666 Guest
|
program is not working |
Posted: Thu Feb 07, 2008 3:19 pm |
|
|
When this code is running, after few countings program loses time calculation, restarts the calculation from the beginning. Maybe you will see a problem? Do i need to write results to eeprom? Sorry for dumb question - i am really beginner in programing pic uc.
Code: | #include<16f628.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay (clock=20000000)
#include"lcd628.c"
//**************** Variables*********************************
int trukme,periodas,sekund,minut,daliklis,a,b,busena,menlaik;
#define voztuvas pin_a2
#define variklis pin_a3
#define tarp pin_a0
#define veikim pin_a1
//**************************Time calculation******************
void laikas()
{
daliklis=daliklis+1;
if (daliklis==10)
{
daliklis=0;
sekund=sekund+1;
if (sekund==60)
{sekund=0; minut=minut+1;}
}
}
//****************************** Budejimas *************************************
void logo()
{
lcd_gotoxy(1,1);
printf(lcd_putc," Pramoniniai ");
lcd_gotoxy(1,2);
printf(lcd_putc," Irenginiai ");
}
//***************************monitoring***********************
void monitoringas()
{
if (busena==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," Iki Atidarymo ");
lcd_gotoxy(1,2);
printf(lcd_putc," Liko - min ");
lcd_gotoxy(7,2);
printf(lcd_putc,"\%02d",a);
}
if (busena==1)
{
lcd_gotoxy(1,1);
printf(lcd_putc," Iki Uzdarymo ");
lcd_gotoxy(1,2);
printf(lcd_putc," Liko - sek ");
lcd_gotoxy(7,2);
printf(lcd_putc,"\%02d",b);
}
}
//********************* MENIU ***************************
void meniu()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Period. - min ");
lcd_gotoxy(1,2);
printf(lcd_putc,"Trukme - sek ");
menlaik=0;
ratukas:
menlaik=menlaik+1;
if(!input(tarp)){menlaik=0; periodas=periodas+1; if(periodas==15){periodas=1;} }
if(!input(veikim)){menlaik=0; trukme=trukme+5; if(trukme==55){trukme=5;}}
lcd_gotoxy(10,1);
printf(lcd_putc,"\%02d",periodas);
lcd_gotoxy(10,2);
printf(lcd_putc,"\%02d",trukme);
delay_ms(200);
if(menlaik<10) goto ratukas;
}
//************************ process*************************
void vykdymas()
{
if(!input(variklis))
{
laikas();
if(periodas==minut) {sekund=0;minut=0;busena=1;output_high(voztuvas);}
if(busena==1 && trukme==sekund){sekund=0;busena=0;output_low(voztuvas);}
a=periodas-minut;b=trukme-sekund;
monitoringas();
}
else
{
logo();
minut=0;sekund=0;
}
}
//*********************** main program***********************
void main()
{
lcd_init();
output_low(pin_b2);
trukme=25; periodas=5;sekund=0;minut=0;daliklis=0;busena=0;
delay_ms(300);
meni:
if(!input(tarp) || !input(veikim)) meniu();
vykdymas();
delay_ms(100);
goto meni;
} |
|
|
|
ELCouz
Joined: 18 Jul 2007 Posts: 427 Location: Montreal,Quebec
|
|
Posted: Thu Feb 07, 2008 3:45 pm |
|
|
Quote: | #use delay (clock=20000000) |
XT fuses is for slower osc. (<10 mhz) use HS instead!
Code: | meni:
if(!input(tarp) || !input(veikim)) meniu();
vykdymas();
delay_ms(100);
goto meni; |
uh you mean While ?
Code: | While(1){
if(!input(tarp) || !input(veikim)) meniu();
vykdymas();
delay_ms(100);
} |
Best Regards,
Laurent |
|
|
mafia666 Guest
|
|
Posted: Fri Feb 08, 2008 2:20 am |
|
|
The thing is, that lcd shows only menu text, it stops to count time, sometimes seems like pic is being restarted. Can it be because of that fuse? Maybe i need to store data in eeprom or etc? |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Fri Feb 08, 2008 8:40 am |
|
|
Quote: | sometimes seems like pic is being restarted. Can it be because of that fuse? | Yes, this is possible. A PIC running at 20MHz needs HS fuse. For 4MHz or slower you use XT. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|