seri iletişimle ilgili bir sorun

Başlatan private_korsan, 09 Kasım 2010, 18:36:59

private_korsan

..............................
...............................
yap:
		GoSub a:gosub b:gosub c:gosub d:gosub e:
		SerIn2 gir,BAUD,10,yap,[sec]
		IF sec="b" Then goto bir
		IF sec="g" Then GoTo iki
		IF sec="m" Then GoTo uc
		IF sec="i" Then GoTo dort
		IF sec="s" Then GoTo bes
		IF sec="a" Then GoTo alti
		GoTo yap
...............................
...............................


iyi akşamlar arkadaşlar proramda şöyle bir sorunurum var yap isimli label çalışımaya başladığı zaman sırayla a,b,c,dve e ye gidip geliyor fakat bu labellerin herbiri yaklaşık (yaptığı işlemlerden dolayı süre ölçmek ,adc okumak v.s) 200 milisaniye sürüyor bu yüzden serin komutuna o esnada gelen bilgi varsa alamıyor yani pc den basılan buton çalışmamış oluyor butona arkaka arkaya yakalayasıya kadar basmak gerekiyor acaba bu sorunu nasıl çözebilirim

justice_for_all

arkadsim seri porttan kac bayt bilgi geliyor peki...pic basic te kesme varmi bilmiyorum ya kesmeyle yapabilirsin yada bilgiyi alincaya kadar main kisminda bekletirsin programi yani bilgiyi alana kadar seri in kodunu calistirmalisin...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

private_korsan

bilgiyi alıncaya kadar bekletmek gibi bir şey yapamam çünkü pc den ne zaman butona basılacağı belli değil yani herhangi bir zamanda butona basılabilir

justice_for_all

peki basic de kesme varmi biliyomusun kesme kullanabiliyomusun...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

neural

Usart kesmesini aktif yaparsan herhangi bir bilgi geldiğinde kesme oluşur. Kesme alt programında ilgili işlemleri yaparsın, böylelikle gereksiz yere beklememiş ve verinin kaybolmaması sağlamış olursun. (teoride)

Program içerisinde önemsiz işleri ana döngü içinde çözebilirsin, önemli olanları kesme kullanarak yapabilirsin.

Kullandığın denetleyici ne olduğunu bilmiyorum ama PIC16 serisi olduğunu varsayarsak tek bir kesme vektörü bulunmakta. Bu yüzden birden fazla kesme kaynağını kullandığında kesme bayraklarına bakarak hangi kesmenin oluştuğunu anlarsın. Bunlara sıraya koyarak öncelik dahi yapabilirsin.

Kolay gelsin.

private_korsan

kesmeyi burada nasıl kullanacağımı bir türlü anlayamadım çünkü diyelimki kesme kullandım ve kesme anında yap etiketine programı dallandırdım.fakat gelen bilgiye göre program yeni bir etikete gidecek ve oradada bilgi gelmesi beklenecek eğer kesme kullanırsam yeni gelen bilgide kesme oluştuğu anda program yine yap etiketine gitmeyecekmi

justice_for_all

kesme geldigi zaman program kesme rutinine gider orayi hallettikten sonra program kaldigi yerden devam eder...

seri bilgiyi modul gibi bisemi vercek neyde kullancaksin bunu...

pic basic diilde c ile yapsan olurmu odev mi bu acaba...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

neural

#7
Dim bayrak As Byte

ON INTERRUPT GOTO kesme

loop:        ' ana döngüde sürekli işlemler yapılıyor.
	gosub a
	gosub a
	gosub a
	gosub a
	
	' bayrak değişkenini bakarak bir şeyler yapabilirsin.
    goTo loop

a:
	nop
	nop
	return

kesme:
	if RCIF = 1 then
		RCIF = 0	' bayrağı temizle
		' Seri veri geldiği için kesme oluşmuş 
		' ilgili işlemleri yap
		' Bayrak adlı değişkene gelen veriyi secip gerekli düzenlemeleri yap.
	    
	endif

resume


Yüzeysel olarak böyle bir şey yapabilirsin.

justice_for_all

Alıntı yapılan: neural - 09 Kasım 2010, 20:25:17
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Yasin Ergene                                      *
'*  Notice  : Copyright (c) 2010 GNU v1.0                       *
'*          : All Rights Reserved                               *
'*  Date    : 09/11/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F877
 

ALL_DIGITAL = True	
Dim bayrak As Byte

ON INTERRUPT GOTO kesme

loop:        ' ana döngüde sürekli işlemler yapılıyor.
	gosub a
	gosub a
	gosub a
	gosub a
	
	' bayrak değişkenini bakarak bir şeyler yapabilirsin.
    goTo loop

a:
	nop
	nop
	return

kesme:
	if RCIF = 1 then
		RCIF = 0	' bayrağı temizle
		' Seri veri geldiği için kesme oluşmuş 
		' ilgili işlemleri yap
		' Bayrak adlı değişkene gelen veriyi secip gerekli düzenlemeleri yap.
	    
	endif

resume


böyle bir şeyler yapabilirsin.


evet bu sekilde yapabilirsin hatta daha  hizli olmasi icin kesme icinde bi degiskenin degerini 1 yapip ana fonksiyonda bu degiskeni kontrol ettirtsin eger degisken 1 ise senin islemleri yapsin degilse 1 olmasiniz beklesin...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

private_korsan

çok teşekkür ederim sanırım kafamda bir şeyler canlandı bir an önce denemem lazım sonucu size bildiririm

justice_for_all

Alıntı yapılan: justice_for_all - 09 Kasım 2010, 20:34:25

evet bu sekilde yapabilirsin hatta daha  hizli olmasi icin kesme icinde bi degiskenin degerini 1 yapip ana fonksiyonda bu degiskeni kontrol ettirtsin eger degisken 1 ise senin islemleri yapsin değilse 1 olmasiniz beklesin...


Onemli Not: Eger yukarida dedigim gibi yaparsaniz islemi bitirdikten sonra 1 yaptiginiz degiskeni sifirlamayi unutmayiniz...

Kolay gelsin...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

private_korsan

ilk denemem oldukça başarılı oldu fakat donanımsal bir sorun sanırım pic yandı neyse artık yarın pic i değiştiririm cevaplarınız için teşekkürler

justice_for_all

peki donanimi gorebilirmiyim bekli bi sorun vardir baglantilarda tekrar yanmasin pic...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

private_korsan

yok hocam ya sağolasın beslemede kırmızı yerine sarı kabloyu kullanınca...... pc power kullanıyorum devreyi delikli pertinansa yaptım tabi heryer kablo ister istemez böyle sorunlar çıkıyor herneyse artık ne yapmam gerktiğini bildiğim için bu gece çizimi bitireceğim kart üzerinde çalışmalarıma devam edeceğim verdiğiniz bilgiler için teşekkür ederim eminim yardımınıza yine ihtiyaç duyacağım

justice_for_all

arkadasim aklinda bulunsun herzaman arti girise dogru takilmis bi diyot koy o zaman hic bise olmaz ters taksan bile
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay