ccsc fonksiyon çağrılan alt yordamla ilgili sorun

the_night

Üye
Katılım
18 Kas 2007
Mesajlar
51
Puanları
1
arkadaşlar şekildeki gibi bi ana void bide alt void fonksiyonu var alt menüyü cağırıyorum işliyor ama işim bitince alt menüden çıkıp tekrar void main()'e dönmek istiyorum dönemiyorum bi kolayı varmıdır bunun ?

Kod:
void alt_menu (void);
void main()


while(1)
{




anaprog:


if(input(pin_c0))  // menu butonuna basıldı (alt menudeyim)
{
delay_ms(300);


c==1;
while (C<1)
{
lcd_gotoxy(2,3);
lcd_putc("alt menu ");
if(input(pin_c2)) //alt menude ok butonuna basıldı
{
delay_ms(300);
lcd_send_byte(0,0x01);
alt_menu(); // alt menuyu cagırdım ==========> ALT MENU CALISIYOR
}


if(input(pin_c1))
  {
  delay_ms(300);
  c==2;
lcd_send_byte(0,0x01);
goto anaprog;
}
}
 
Bir de aşağıdaki gibi dene bakalım.

Kod:
#include <16f877a.h>
#fuses HS
#fuses NOWDT
#fuses NOPROTECT
#fuses NOBROWNOUT
#fuses NOLVP
#fuses NOPUT
#fuses NOWRT
#fuses NODEBUG
#fuses NOCPD
#use delay (clock=4000000)

#include <lcd.c>

char c;
	
void alt_menu()
{
    if(input(pin_c1))
    {
        delay_ms(300);
        c==2;
        lcd_send_byte(0,0x01);
    }	
}

void main()
{
    while(1)
    {
        if(input(pin_c0)) // menu butonuna basıldı (alt menudeyim)
        {	
            delay_ms(300);
            c==1;
            while (C<1)
            {
                lcd_gotoxy(2,3);
                lcd_putc("alt menu ");
                if(input(pin_c2)) //alt menude ok butonuna basıldı
                {
                    delay_ms(300);
                    lcd_send_byte(0,0x01);
                    alt_menu(); // alt menuyu cagırdım ==> ALT MENU CALISIYOR
                }
            }
        }
    }
}
 
hocam bu mantığın benzerini denedim şimdi bunuda denedim işe yaramıyor alt menüye bi girdimi ordan çıkamıyor geriye yapmak istediğim şu

////////////////////////////////////
ana programımım çalışcak
.
.
(alt yordam çağrılınca ana programı bekletecek oraya gidecek içini calıştırcak işimiz bitince)
.
burdan yani ana programa kaldığı yerden devam edecek
.
.
///////////////////////////////////

sanıyorum bu iş kesmelerle yapılıyor ama yeni olduğum için mantığını oturtamadım daha ve anladığım kadarıyla bu void olayında ikiside kendi başına programmış gibi davranıyor yapmak istediğimde biri ötekinin alt fonksiyonu olcak saygılar teşekkürler ayrıca ayırdığınız vakit için.
 
Bu işin kesme ile bir alakası yok bence.
Tabii kesmelik bir iş yapmak istiyorsan, orasını bilemem.
Ancak normalde ana program çalışıyorken;
Bir fonksiyonu çağırırsın, o fonksiyon işlevini bitirdikten sonra, eğer geriye değer döndürecekse döndürür, döndürmeyecekse çağrıldığı yere dallanır.
Olay bu şekilde işlenir...
 
Sen tam olarak ne yapmak istiyorsun, onu ayrıntılı bir şekilde açıklarsan sevinirim.
Belki de ben konuyu anlamamış da olabilirim...
 
int8 c;
int8 b;
void alt_menu (void);
void main()
{
char X=10;
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
set_tris_a(0x01);
set_tris_c(0xff);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(RA0_RA1_RA3_ANALOG);
lcd_init();
set_adc_channel(0);
delay_us(20);


ana1:


while(1)
{




anaprog:


if(input(pin_c0)) // menu butonuna basıldı (alt menudeyim)
{
delay_ms(300);


c==1;
while (C<1)
{


lcd_gotoxy(2,3);
lcd_putc("alt menu ");
if(input(pin_c2)) //alt menude ok butonuna basıldı
{
delay_ms(300);
lcd_send_byte(0,0x01);
alt_menu(); // alt menuyu cagırdım
c==2;
}
if(input(pin_c1))
{
delay_ms(300);
c==2;
lcd_send_byte(0,0x01);
goto anaprog;
}
}






}
lcd_gotoxy(2,3);
lcd_putc("ana ekran");


}


}

////////////// alt menu icindeki ilk menu fiyat menusu ////////////////
void alt_menu()
{
lcd_gotoxy(1,1);
lcd_putc("fiyat menusu");
b==1;
while (1)
{
if(input(pin_c3)) /// iptale bastım
{
delay_ms(300);
lcd_gotoxy(1,2);
lcd_putc("fiyattan cık");
delay_ms(300);
c==2;
}
}
lcd_gotoxy(1,2);
lcd_putc("fiyattan cık");
////////////// alt menu icindeki ilk menu fiyat menusu ////////////////}


kodun tamamu bu 3 tane tuşum var (ok , iptal , menu) menuye basınca alt menuye gidecek burda iki menum olcak fiyat ve km
fiyatın üzerindeyken ok basarsam fiyatın içine gircek burdaki fiyatın içi olayınıda void de alt menu olarak yaptım bastım içine girdi burda işimi hallettim diyelim ok yada iptale basarsam komple ana ekrana gitsin ana ekranımda void main de ama işte oraya gidemiyor
 
void alt_menu()'de, while (1) yapmışsın, o yüzden içinde dönüp durur...
 
onuda denedim hocam iptale bastıgımda o donguden cıkarsın

void alt_menu()

{
lcd_gotoxy(1,1);
lcd_putc("fiyat menusu");
b==1;
while (b<1)
{
if(input(pin_c3)) /// iptale bastım
{
delay_ms(300);
lcd_gotoxy(1,2);
lcd_putc("fiyattan cık");
delay_ms(300);
c==2;
b==2;
}
GOTO ANAPROG; //////////////////////////////////// DEDİĞİMDE ANAPROG ZATEN KULLANILIYO DİYE HATA VERİYO NAPARSAM
YAPIYIM BURAYA BIKERE GIRERSEM CIKAMIYORUM
}
lcd_gotoxy(1,2);
lcd_putc("fiyattan cık");
 
Tamam şuan üzerinde çalışıyorum kodun.
Proteus'ta kurup da denemem lazım.
Biraz beklemen lazım...
 
estafurullah tabiki
biraz araştırmıştım buraya yazmadan önce #org return gibi komutlar biraz yapmak istediğime cevap verir gibi ama dediğim gibi yeni olunca nereye neyi kullancağımı kestiremiyorum
 

Forum istatistikleri

Konular
127,956
Mesajlar
913,899
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst