pic ve kesme

Başlatan x-nomek, 18 Nisan 2015, 11:43:25

x-nomek

18f45k20 modeli pic kulanıyorum ve kesme ile işlemlemlerimi halediyorum fakat kesme bittikden sonra program kaldıgı yerden devam ediyor bunu biliyorum ama benim yapmak istediğim program kaldıgğı yerden değil başlangıçdan başlamasini istiyorum bunu nasıl başarabilirim

while(true)
{
1.komut
2.komut
3.komut
4.komut
}
ben devamli kesme işlemi bitince 1.komuttan başlamısını istiyorum

Karamel

hocam.


while(1)
{
     if(a == 5) a=1;

     if (a == 1){ birinci komut}
     if (a == 2){ ikinci komut}
     if (a == 3){ ucuncu komut}
     if (a == 4){ dorduncu komut}

     a++;
}



interrupt tada a = 1; yaparsaniz hep interrupt sonrasi birinci komut calisir? ::)

Murat Mert

switch case komutu daya uygun değilmi. Break komutundan sonra baştan başlar Bir inceleyin isterseniz.
mert07

baran123

Evet switch case daha iy,i arkadaşın da dediği gibi.

static unsigned int8 flag;
while(TRUE)
{
   switch(flag)
   {
      case 0: func1 break;
      case 1: func2 break;
      case 2: func3 break;
      case 3: func4 break;
   }
}


x-nomek

kesme işlemi burdada kaldıgı yerden devam etmiyecekm

mesala

while (true)
{

delay_ms(100);
led=1;
}

kesme geldigi zaman delay_ms(); en son nerde bıraktıysa 100ms tamamlayıp devam ediyor ben ise baştan 0-100 ms saydırmak istiyorum
yani kesmenin en son kaldıgı adresi nasıl sıfırlarım böyle bir şey yapılabilirmi ?

Recep METE

Kesmenin mantığı bu, kaldığı yerden devam edecek. Bu isi kesmesiz yapabilirsiniz ancak.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

#6
Yemek pişiyor başında bekliyorsunuz.Kapı çaldı(kesme oluştu) kapıdaki amcayla konuştunuz.Sonra hemen ocağın başına dönersiniz.Yemeği baştan yapar mısınız ?
Kesmenin mantığı budur.

selimkoc

18F serisi için;

HiTech Pic18 C compiler için;

void reset()
{
#asm 
  reset
#endasm
}


mikroc;

asm reset;

kudretuzuner

Alıntı yapılan: selimkoc - 18 Nisan 2015, 22:36:16
18F serisi için;

HiTech Pic18 C compiler için;

void reset()
{
#asm 
  reset
#endasm
}


mikroc;

asm reset;

Merhaba,
18 F serisinde asm kodları içinde "RESET" var mı?Teşekkürler.
Amatör

magic_gun

var :) datasheet sayfa 319
hayal etmeden basaramazsınız www.atariturkiye.com

RaMu

Tek problem beklemeyse
başka çözümlerde düşünebilirsin:

#INT_xxxx
void interrupt(void)         //kesme rutini
{
kesmeli=0;         //süreyi tekrar sıfırdan başlat
}

unsigned int8 kesmeli=0;   //
while (true)
{

  for(kesmeli=0:kesmeli<100:kesmeli++)  //bekleme
  {
  delay_ms(1);
  }

led=1;
}
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

E_Kk

Yani programı while ın başına mı döndürmek istiyorsun?
"Meselâ: Hendese bir fendir. Onun hakikatı ve nokta-i müntehası, Cenab-ı Hakk'ın İsm-i Adl ve Mukaddir'ine yetişip, hendese âyinesinde o ismin hakîmane cilvelerini haşmetiyle müşahede etmektir."Sözler

sadogan

Alıntı yapılan: x-nomek - 18 Nisan 2015, 20:55:31
kesme işlemi burdada kaldıgı yerden devam etmiyecekm

mesala

while (true)
{

delay_ms(100);
led=1;
}

kesme geldigi zaman delay_ms(); en son nerde bıraktıysa 100ms tamamlayıp devam ediyor ben ise baştan 0-100 ms saydırmak istiyorum
yani kesmenin en son kaldıgı adresi nasıl sıfırlarım böyle bir şey yapılabilirmi ?
delay_ms(x) gibi komtlar hızlıca birşeyleri test etmek içindir. Gerçek programda bu kadar uzun beklemeler kullanmak
yapısalığı bozar.
Timer kullanmak bu tür sorunları çözer.

kudretuzuner

Amatör

E_Kk

Reset yaparsan, her kesmeye girdiğinde program tekrar tekrar baştan yüklenecek. Donanım izin verir mi bilmiyorum ama şöyle yapabilirsin;
Yazdığın programı dissasembly edip while ın program adresini alırsın. Daha sonra kesme alt programının sonunda Stack Pointer ı Pop ile okuyup yerine push ile  dissasemblyde bulduğun adresi yazarsan, Program Counter kaldığın yerden değil de senin SP ye yüklediğin yerden devam eder. Bunu daha önce denemedim ama sen istersen bir dene.
"Meselâ: Hendese bir fendir. Onun hakikatı ve nokta-i müntehası, Cenab-ı Hakk'ın İsm-i Adl ve Mukaddir'ine yetişip, hendese âyinesinde o ismin hakîmane cilvelerini haşmetiyle müşahede etmektir."Sözler