RS232 kesmesi 18f452

Başlatan trilian, 30 Ağustos 2013, 13:55:50

trilian

18f452 den 8ve 9ncu bacaklardan veri alıp gönderiyorum sıkıntım gelen veriyi wait komutuyla bekletiyorum ve sıkıntı oluyor bilgisayardan veri geldiğinde bunu algılayıp serin2 komutunu nalsıl çalıştırırım yada rs232 kesmesini sade dille bana açıklayan olabilirmi serin2 ve serout2 için

ete

Usart kesmesini yanlış bildiğin verdiğin açıklamadan anlaşılıyor. Wait bekletme komutu değildir. İstediğin veriyi bekleme komutudur. Bilgisayardan veri yollarken başına bir işaret yerleştirirsen yalnızca o bilgi pic tarafından algılanır yada alınır. Usart kesmesi kullandığın zaman kesme iki şekilde oluşabilir. Birincisi herhangi bir bilgi yada parazit kesme oluşturabilir. Bu durumda wait komutu ile vereceğin timeout süresi boşuna wait komutunda bekleme ihtimalini ortadan kaldırır.
İkinci alternatifte ise kesme gerçekten bilgisayardan yollanan bilgi tarafından oluşturulur ve beklendiği şekilde gelen bilgi alınır.  Şimdi birinci alternatife tekrar dönersek komut genelde şöyle yazılırsa amaca uygun çalışır.
Hserin 10,atla,[wait("ete",gelen]
Komutta yer alan 10 rakamı kesme oluştuktan sonra 10 ms süre ile ete işaretinin bekleneceğini gelmediği taktirde atla isimli etikete atlanarak bekleme işine son verileceği ni gösterir. Böylece parazitlerin oluşturacağı yanlış kesme lerde programın boşuna 65535 ms beklenmesi önlenmiş olur.
Elbette 10 ms lik değer tecrübe ile saptanmış bir değerdir. Daha fazlası da verilebilir ama bana göre gerekli değildir.

Usart kesmesi kullanırken usart portu (RX pini) undan bir bilgi girdiği zaman hemen kesme oluşur. Şayet yollanan bilgi direk işaret ile başlıyor ise (mesela ete bilgisi) ilk harfin yada ilk iki harfin kaçırılacağı kesindir. Bu nedenle uyandırma ve beraberinde preambl denilen ön bilgi yollama her zaman tercih edilmelidir. Örnek vermek gerekir ise bilgisayardan yalnızca "ete" ve peşinden yollanan bilgi ( mesela "ete",23) yollanacak olursa ilk yollanan bilginin kaçırılma ihtimali yüksektir. Muhtemelen "e" harfi kesmeyi oluşturur ve ardından gelen hserin komutu yalnızca "te",23 bilgisini alır. Tabiiki wait komutu "ete" bilgisi bekleyeceği için 23 bilgiside hiç alınmaz. Bu şekil kullanma yerine ,  $AA,$AA,$AA,$AA,$AA ve ardından yine 5 adet $00 ve ardından 5 adet $FF bilgisi yollayıp peşine "ete",23 bilgisi ve yine peşine 1 adet 10 ve 1 adet 13 bilgisi yollarsanız ilk yollanan AA - 00 - FF bilgileri portu uyandırır ve wait komutu "ete" işertini bekler hale gelir. Böylece gelen ete işReti ve peşinden gelenlerde garanti olarak alınarak alma işlemi sorunsuz bir şekilde halledilmiş olur.
Bu işlemin serin yada serin2 ile sağlıklı yapılamaz.

Ete

trilian

teşekkürler wait yazarken serin2 deki veriyi bekleme için yazmıştım ama açıklayıcı bir yazı olmamış neden kesme istediğime gelince program sürekli bir döngüde ve döngü değişken sürelerde arada sıkıntı yaratabilir endişesi ile kesme olmazmı diye düşündün verdiğiniz bilgiler için teşekkürler rs232 kesmesini deneyecem tekrar bilginize başvurmak ümidiyle

Powered by EzPortal