break komutu

Başlatan yaban34, 21 Şubat 2022, 00:44:23

yaban34

selamlar break komutu ile ilgili örnek buton kesme kırma  programı varmı  yapamadım..

ete

PBP da BREAK komutu yok. Hangi derleyiciden söz ediyorsun acaba?

Ete

Hattuşa

Alıntı yapılan: yaban34 - 21 Şubat 2022, 00:44:23selamlar break komutu ile ilgili örnek buton kesme kırma  programı varmı  yapamadım..
break komutu protonda mevcut ama pek kullandığımız komut değildir. Ancak pek çok alternatifleri vardır bu komutun, keşke yapmak istediğiniz ile ilgili kodu burda paylaşmış olsaydınız size alternatifleri önerebilirdik.

ete

Proton kullanım klavuzuna bakınca BREAK komutunun PBP daki EXIT komutu ile eşdeğer özellikte olduğunu anladım.
Bir FOR....NEXT döngüsünden çıkmak için kullanılabilliyor.
FOR I=0 to 100
  IF I=20 THEN break
   .....
NEXT
BREAK komutu çalışınca program bu satıra atlıyor. Kısaca döngüden çıkmak için ikinci bir şart yaratmış oluyor.

Break komutu aynı zamanda başka bir döngü tipi olan  WHILE ...WEND döngüsünden de çıkabilmek için ikinci bir şart yaratılmasını sağlayabiliyor.
WHILE I<100
  IF I=90 THEN break
WEND
şeklindeki örnekte I değişken değeri 100 den küçük olduğu müddetçe program while-wend arasında dönüp durur. I değeri 90 olduğunda ise WEND satırından bir sonraki satıra atlayacaktır.
Bu komut görüldüğü üzere herhangi bir döngü içinden başka bir şarta bağlı olarak çıkabilmek yada döngüyü belirli bir noktada kesip çıkmak için kullanılıyor ama BUTTONkomutu ile birlikte kullanılabileceğini sanmıyorum.

Ete




yaban34

proton basic sayfası olduğu için yazmamıştım 
16f628a ile seven segment sayıcı hazırladım 628in portb leri çıkış olarak kullanıyorum

butonlar port'a da  kesme yapamadım port'a da kesme yok butona her basışta yukarı aşağı  saydırırken son rakamda  flash yaptırıyorum
yanıp sönmede zaman olduğundan butono basınca hemen algılamıyor döngüde olduğu için...nasıl yapabilirim



 TUS0=0 Then
     DelayMS 300
     SAYI=SAYI+1
     While PORTA.0=0 : 
     If SAYI=8 Then
     SAYI=0 '
     PORTB=0x3F'
     DelayMS 100
     EndIf
     EndIf
     
     If TUS1=0 Then
     DelayMS 300  
     SAYI=SAYI-1
     If SAYI=255 Then SAYI=7 '
     While PORTA.1=0 : Wend '
     DelayMS 100
     EndIf

mehmet

Display yazdırma kısmını kesme içine
alırsanız, ana döngü içinde buton
zamanı size kalır.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr

ete

Bu komutları nasıl flash yaptıracağını anlamadım. Zaten flash kontrolünü tuş kontrol mekanizmasının içine almakda bence yanlış. Flash denilen sistemde yada sizin sisteminizde son rakam 9 olmalı neden 8 de bunu yapıyorsunuz oda mechul.
Ayrıca flash mekanizmasında önce sayının doğru değeri gösterilmeli yaklaşık 100-150 ms bekleyip sonra displayı sıfırlamalı(karartmalı) yine bir okadar daha bekleyip yeniden sayının doğru değeri gösterilmeli.
Flash için mesela bir F değişkeni ve birde FLASH değişkeni (ikiside BIT cinsinden) kullanıp flash=1 ise F değerini toggle yapmalı ve Fnin 1 olduğu durumda ekran sıfırlanmalı ve sıfır olduğu durumda ise ekrana doğru değer verilmelidir.
Programın tamamını özellikle ekrana yazdırma kısmını göremediğim için genel anlamda kod vermeye çalışacağım.
Bana göre istediğini yapmak için olması gereken kod aşağıdaki şekilde olmalı;
IF TUS0=0 THEN
  SAYI=SAYI+1
  IF SAYI=9 THEN 
    FLASH=1 
  ELSE
     FLASH=0
  ENDIF
  WHILE TUS=0:WEND
  DELAYMS 80
ENDIF

IF TUS1=0 THEN
   SAYI=SAYI-1
   IF SAYI=255 THEN 
    SAYI=0:FLASH=1
   ELSE
     FLASH=0
   ENDIF
   WHILE TUS1=0:WEND
   DELAYMS 80
ENDIF

IF FLASH=1 THEN
   TOGGLE F  (VEYA F=1-F   VEYA F =!F)
   IF F=1 THEN 
     SAYI=0 :PORTB=0x3F
   BURAYA ELSE DEYİP NORMAL SAYI DEĞERİNİ GÖSTERECEK KOMUT EKLENMELİ ASLINDA  
   ENDIF   
ENDIF
 DELAYMS 100  'BU EKRAN GÖSTERİM GECİKMESİ
GOTO TUS_KONTROL

ETE

Powered by EzPortal