A portunda değişiklik kesmesi

Başlatan atillaa, 26 Ekim 2013, 11:33:31

atillaa

merhaba arkadaşlar uygulamamda A portunda değişiklik kesmesi yapmaya çalışıyorum. Kullandığım pic 16f690, ancak kesmede bir sıkıntı var bir türlü çözemedim. Kodda sıkıntı kesmeye girip çıkmaması.
void main(void)
{

unsigned char o_veri[10];

TRISA=0x07;
PORTA=0x00;
ANSEL = 0;
ANSELH = 0;

GIE=1;
RABIE=1;
RABIF=0;
IOCA=0b00000010;

while(1)
{
if(kesme==1)
{
//
}
}
}

 void interrupt ISR(void)
{
	if(RABIF==1)
	{
		kesme=1;
		RABIF = 0;
		led=1;
	}
}


kesmeden dönmüyor arkadaşlar, yardımlarınızı bekliyorum

tyildizak

interrupt isr() çıkışında gie=0 yapın. Sonradan tekrar aktif edersiniz.

atillaa

hocam kodu şu şekle çevirdim çalıştı
void interrupt interupt_handler(void)
{
	if(RABIF==1)
	{
		if(sag_2==1)
		{
			kesme=1;
			//led=1;
		}
		if(yukari_1==1)
		{
			//led=0;
		}
		if(enter_3==1)
		{
			//
		}
		RABIF = 0;
	}
}

XX_CİHAN_XX

Alıntı yapılan: tyildizak - 26 Ekim 2013, 12:07:09
interrupt isr() çıkışında gie=0 yapın. Sonradan tekrar aktif edersiniz.
interrupt girişinde "gie=0" yapmanın hiç bir manası yoktur çünkü kesme oluştuğu anda gie biti zaten donanımsal olarak sıfırlanır.
Kesme rutinin den çıkılırken de (RETFIE) komutu ile birlikte gie biti otomatik olarak tekrar set edilir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.