Seri Haberleşme Esnasında Program Aksıyor

Başlatan izturk, 14 Şubat 2015, 15:47:34

izturk

#priority int_ccp2,int_ccp1,int_rtcc,int_timer1

#int_rtcc
void tarama_kesmesi()
{
saniye_sayac++;
if(saniye_sayac==3){yuzmili++;yuzmili_say++;saniye_sayac=0;}
if(yuzmili==10){yuzmili=0;saniye++;saniye1++;}

set_timer0(0);
}

#int_ccp2
void enc_kesmesi()
{
if(enc_on_sayac==0){enc_sayac--;enc_on_sayac=ayar[48];}
enc_on_sayac--;
}

#int_ccp1
void ccp_kesmesi()
{
enc_on_sayac++;
if(enc_on_sayac==ayar[48]){enc_sayac++;enc_on_sayac=0;}
}

#int_timer1
void tmr1_kesmesi(void)
{
set_timer1(0);

t2_sayac++;
if(t2_sayac==250)
{
for(s=0;s<5;s++)
{
putc(gonder[s]);
}
al[0]=timed_getc();



if(al[0]=='S')
{
for(s=1;s<5;s++)
   {
   al[s]=timed_getc();
   }
}  
t2_sayac=0;
}



}


Merhaba Arkadaşlar.
Programımda kesmeleri yukarıdaki gibi oluşturdum. timer0 kesmesi zaman sayıyor. ccp kesmeleri enkoder sayıyor. timer1 kesmesi de seri haberleşme yapıyor.bunların yanında bir de programın bazı yerlerinde çağırdığım, bazı girişleri kontrol eden bir program parçam daha var.

Timer1 kesmesini aktif edip seri haberleşmeye başladığım zaman diğer kesmeler aksıyor. zamanlar yavaşlıyor. enkoder pals kaçırıyor.vs
seri haberleşmenin bu kadar yavaş olması normal değil gibi geldi bana.

5 bayt veri gönderip 5 bayt veri alıyorum. karşı taraf veriyi alır almaz 5 bayt cevap gönderiyor. Acaba veriyi gönderdikten sonra gelen veriyi beklemede mi vakit kaybediyorum.

Osilatör ve rs232 ayar kısmı da şöyle

#use delay(int=32000000)
#use rs232(baud=9600,xmit=PIN_d6,rcv=PIN_d7,enable=pin_b4)


Haberleşmeyi başka türlü yapabilirmiyim. Bir fikri olan var mı? Gerekirse seri haberleşme aksayabilir. Ama diğer kısımların aksamaması lazım.

İyi çalışmalar herkese

Salih

Seri haberleşme veri geldi kesmesini kullan.
Veri geldi mi diye beklememiş olursun.

izturk

Seri haberleşme pinlerini kullanamıyorum. Seri haberleşme kesmesini farklı bi yerde kullanmayı planlamıştım. Başka bi kartla daha haberleşecek daha sonra.

Murat Mert

S.A.
Sn. Arkadaşım çift uartlı pic kullan. Bu belirttiğin pinler 18FXXKXX serisi piclerde tam uart2 donanımsal bacakları programına uygun.

#include <18F46K22.h>
#device ADC=10
#use delay(crystal=20000000)


#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
#use rs232(baud=9600,parity=N,xmit=PIN_D6,rcv=PIN_D7,bits=8,stream=PORT2)


#INT_RDA
void  RDA_isr(void) 
{

}

#INT_RDA2
void  RDA2_isr(void) 
{

}

void main()
{

   enable_interrupts(INT_RDA);
   enable_interrupts(INT_RDA2);
   enable_interrupts(GLOBAL);

   while(TRUE)
   {
      //TODO: User Code
   }

}
mert07

izturk

Tşekkürler. Şimdi aldım 46k22 yi deneyeceğim. Zaten geçmeyi düşünüyordum. Sonucu bildiririm.