RS-232 ile veri alırken kilitlenme sorunu

Başlatan ugurer, 28 Kasım 2016, 12:32:53

ugurer

Merhaba arkadaşlar. Pc'den rs232 ile aldığım char bilgiyi printf lie tekrar bilgisayara göndermeye çalışıyorum fakat bilgisayardan veri yolladığım anda pic kitleniyor. Denetleyici olarak 18f46k22 kullanıyorum. Yazdığım kodlar bunlar. Yardımlarınız için şimdiden teşekkür ederim.
char klavye[80];               
                                        
#int_rda
void serihaberlesme_kesmesi ()
{
 disable_interrupts(int_rda); // int_rda kesmesini pasif yap
 gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
 enable_interrupts(int_rda);
}

void main()                               
{ 
   enable_interrupts(INT_TIMER0);               
   enable_interrupts(GLOBAL); 
   enable_interrupts(int_rda);
}


while(1){
printf("\n %s ",klavye);}

Salih

gets(klavye);


komutu bildiğim kadarıyla Return karakterini bekler.
Gönderdiğiniz string'in sonuna return karakteri ekleyerek gönderin.

ugurer

Cevabınız için teşekkürler fakat ilgilenirken farklı bir yöntem bulup onunla gerçekleştirdim.

muhittin_kaplan


RaMu

#4
Çözüm yazılmamış konu sevmiyoruz.

CcsC kesme içinde interrupt kapatmanın hiçbir manası yoktur,
#int_rda
void serihaberlesme_kesmesi ()
{
 disable_interrupts(int_rda); // int_rda kesmesini pasif yap
...

Dolayısıyla kesme çıkışındaki şu ifadede gereksiz olur;
#int_rda
void serihaberlesme_kesmesi ()
{
...
 enable_interrupts(int_rda);
}


Gelelim esas konuya,
Uart alma kesmesinde sıralı olarak birçok byte alınamaz,
uart belirsiz bir çalışma şekli gösterebilir,
buffer taşması olabilir vs. vs.
Şu ifade hatalı olur;
#int_rda
void serihaberlesme_kesmesi ()
{
...
 gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
...
}

Bunun yerine
#int_rda
void serihaberlesme_kesmesi ()
{
..."Siradaki kaç oldu arttır-eksilt-kontrol-sıfırla vs."
 getchar( klavye[Siradaki] ); // String ifadenin sıradaki gelen 1 BYTE ını al ve "klavye" adlı dizinin 'Siradaki' değişkenine aktar.
...
}

Doğru çalışır.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ugurer

Merhabalar, forumda yeni olduğum için alıntı yapmayı becerememişim galiba. Dediğiniz gibi tek tek veri alıp sonrasında birleştirmek gerekiyor.
https://www.picproje.org/index.php/topic,58924.0.html Burada ki yöntemi kullandım ve sorunsuz çalışıyor.