Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: x-nomek - 18 Nisan 2015, 11:43:25

Başlık: pic ve kesme
Gönderen: x-nomek - 18 Nisan 2015, 11:43:25
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
Başlık: Ynt: pic ve kesme
Gönderen: Karamel - 18 Nisan 2015, 11:51:23
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? ::)
Başlık: Ynt: pic ve kesme
Gönderen: Murat Mert - 18 Nisan 2015, 12:37:06
switch case komutu daya uygun değilmi. Break komutundan sonra baştan başlar Bir inceleyin isterseniz.
Başlık: Ynt: pic ve kesme
Gönderen: baran123 - 18 Nisan 2015, 14:57:42
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;
   }
}

Başlık: Ynt: pic ve kesme
Gönderen: 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 ?
Başlık: Ynt: pic ve kesme
Gönderen: Recep METE - 18 Nisan 2015, 21:13:54
Kesmenin mantığı bu, kaldığı yerden devam edecek. Bu isi kesmesiz yapabilirsiniz ancak.
Başlık: Ynt: pic ve kesme
Gönderen: baran123 - 18 Nisan 2015, 21:24:03
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.
Başlık: Ynt: pic ve kesme
Gönderen: 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;
Başlık: Ynt: pic ve kesme
Gönderen: kudretuzuner - 18 Nisan 2015, 23:41:05
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.
Başlık: Ynt: pic ve kesme
Gönderen: magic_gun - 18 Nisan 2015, 23:51:56
var :) datasheet sayfa 319
Başlık: Ynt: pic ve kesme
Gönderen: RaMu - 19 Nisan 2015, 00:08:44
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;
}
Başlık: Ynt: pic ve kesme
Gönderen: E_Kk - 19 Nisan 2015, 13:31:18
Yani programı while ın başına mı döndürmek istiyorsun?
Başlık: Ynt: pic ve kesme
Gönderen: sadogan - 19 Nisan 2015, 13:55:08
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.
Başlık: Ynt: pic ve kesme
Gönderen: kudretuzuner - 19 Nisan 2015, 13:56:54
Alıntı yapılan: magic_gun - 18 Nisan 2015, 23:51:56
var :) datasheet sayfa 319
Merhaba,
Teşekkürler.
Başlık: Ynt: pic ve kesme
Gönderen: E_Kk - 19 Nisan 2015, 17:46:39
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.
Başlık: Ynt: pic ve kesme
Gönderen: x-nomek - 20 Nisan 2015, 01:08:24
Alıntı yapılan: E_Kk - 19 Nisan 2015, 17:46:39
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.

bunu denmeye çalişcam