PAUSE komutu sorunu

Başlatan bahdiyarusta, 10 Ocak 2015, 01:28:33

bahdiyarusta

hocam merhaba.

bir şey sormak istiyorum:

Kısaca

BASLA:
PORTB.0=0
IF ARTIR=1 THEN SAYAC=SAYAC+100
PAUSE 100
IF AZALT=1 THEN SAYAC=SAYAC-100
PAUSE 100
IF CALIS=1 THEN
PORTB.0=1
PAUSE SAYAC
GOTO BASLA
ENDIF
GOTO BASLA
END

burda basit bir zamanlayıcı yapmayı amaçladım. kodlarım kısaca yukardaki gibi
artır azalt tuşlarıyla zamanı ayarladıktan sonra calıs butonu basacagım ve ayarladıgım zaman kadar çıkış 1 olacak zaman sonunda 0 olarak duracak.  merakım şu?; örneğin artıra 10 defa bastım sayac degerlerını ekranda görüyorum 1000 yazıyor. burda bekleme sürem 1sn. ekrana 1000 yazdıktan sonra calıstır butonuna basacagım. 1sn çıkış alacagım 15 20 sn kadar bekledikten sonra tekrar basacagım toplamda bu butona yaklaşık 500-1000 defa bas çek yapacam  belli bir adet den sonra 1sn lik bekleme süresi bozulur mu yoksa sayaç degeri sabit kalarak zamanı korur mu? 1000 defa bastıgımda bile çıkış 1sn olur mu yoksa 1,0002 gibi ufak bir sapma olabilir mi?


<<<***bahdiyarusta****>>>
                  - 66 -

ete

Sapmalar her zaman olur. Program akışına bir bakarsan tuşlara basmadığın zaman da 100+100 ms bir beklemen var zaten . Bu bekletme tuşa bassan da var basmasanda var öyle ayarlamışsın çünki.
Zamanın şaşmamasını istiyorsan mutlaka kesme kullanmak zorundasın ama kullandığın mantık da kesmeye pek müsait değil, zaman sabit değil tuşa bastığın kadar artıyor. Programda olmayan bölümlerden bahsediyorsun ekrana yazdırma gibi bunlar hep komut gecikmesine  sebep olurlar.
Sonuçta şöyle toparlayalım. Sayac=1000 ise sen calıs tuşuna her bastığın anda program hep 1000 ms bekleme yapar. Bu değişmez. Değişen tek şey işlemci frekansının tam tamına 4 mhz olması ve böylece komutun da buna bağlı 1000 ms gecikme yaratmasıdır. Zira frekans 4 mhz değilde 3,9 mhz olursa kumut süreside ona göre yavaşlar. Tabiiki hızlanma da mümkün ama bu hep hızlı veya hep yavaş şeklinde olur arada farklı çıkmaz. Pek çok faktör var bu işin içinde.

Ete

bahdiyarusta

anlamadıgım yer var hocam şimdi tuş sekmesini önlemek için oralara zaman koydum bu zamanlar sayacın içini hiç etkilemiyor ki. tuşa basınca sayacı 100 artırıyorum. sonuçta 10 defa artıra basıyorum. sayacım 1000 olmuş oluyor. burda çalış butonuna bastıgımda program

portb.0=1
pause sayac
portb.0=0

diyorum burda sayac kadar çalış ve dur dediğim zaman sayacın içi 1000 bu hiç sapmayacak. programda for döngüsü vs. de yok.
sadece bu satırda sayaç kadar bekle diyorum. burda sapma olmaz diye bu şekilde kurdum aklımda.
<<<***bahdiyarusta****>>>
                  - 66 -

ete

Düşündüğün doğru sapma olmaz. Bunu sormayada gerek yoktu aslında mantığın cevabını buluyor zaten.

Ete

bahdiyarusta

TEşekkür ederim hocam...
:)
<<<***bahdiyarusta****>>>
                  - 66 -

Powered by EzPortal