20 adet byte içinde değişen biti her değişimde tepit etme.

Başlatan F®T, 28 Ocak 2018, 13:46:57

F®T

Arkadaşlar nasıl başlık atacağıma karar veremedim.
20 adet byte tipi değişkenim var.Bu değişkenlerde bir değişiklik olunca bir adet çıkış portunu 1 edecek.Daha sonra bu çıkışı bir butonla 0 'a çekicem.Sonrasında değişkenlerde tekrar bir değişim olursa yine aynı çıkış portu 1 olacak.Tekrar butonla 0'a çekicem bu tip bir mantık nasıl kurulur.Aşağıdaki gibi bir işlem yapıyorum.Bu işlem byte'ların içinde 0 dan büyük bir değer varsa alarm çıkışını 1 seferlik aktif ediyor.Kabul butonu ile alarm çıkışını devre dışı bırakıyorum. Dediğim durum için nasıl bir mantık kullanmalıyım.Her byte tektek mi kontrol edilmeli yada hepsini aynı anda kontrol edebilirmiyiz?

Dim RSTM      As Byte
Dim KLT       As Byte
Dim AKTAR1 As Byte
Dim AKTAR2 As Byte
Dim SSS    As Byte
Dim ZMN    As Word
Dim MBY[20] As Byte

Symbol ALARM =PORTA.0
Symbol KABUL =PORTC.3

basla:

If KLT=0 Then
  For RSTM=0 To 20
  If MBY[RSTM]>0 Then
  KLT=1:ALARM=1
  EndIf
  Next
EndIf

If KABUL=1 Then
  ALARM=0
EndIf

goto basla






"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Burak

Hepsini aynı anda kontrol edemeyiz Ferit abi .. Teker teker kontrol edeceğiz .. Yani yapmamız gereken 20 adet 'yeni' 20 adet 'eski' isimli dizi değişkenleri oluşturacağız ..
Değişkenlerin başlangıç değerleri yazılımsal olarak mı set ediliyor bilmediğim için direkt olarak algoritmayı veriyorum .




dim eski[20] as byte
dim yeni[20] as byte
dim change   as byte    :    change=0


main:


for i=0 to 19


if eski[i]<>yeni[i]
   eski[i]=yeni[i]
   change=1 : out=1
endif


next i


if buton=0
if change=1
  change=0
  out=0
endif
endif


goto main



Burak
Ω Gens Una Sumus Ω

ete

Elbette bir şeyin değişip değişmediğini anlamanın tek yolu o şeyin eski hali ile yeni halini karşılaştırmaktır.
Karşılaştırma dedinmi de programcılık açısından en kolay metod özellikle değişken karşılaştırmalarında dizi kullanmaktır.
Bu durudma 20 adet (0-19)byte değişkenini ESKI[20) ve aynı değişkenlerin yeni hallerini görebilmek içinde 20 adetlik (0-19) YENİ[20] şeklinde 2 değişkenin olmalı. Bir değişiklik olması ihitmali nerede olacak ise Eski değişkenleri yenilerine eşitleyerek oraya gitmeli ve oradaki işlemlerden sonra değişiklik olan var ise yenisinde değiştirilmelidir.
İşin sonunda 20 adetlik bir döngü kurularak ESKI ile YENI nin bir birine eşit olmadığı konum araştırılmalı var ise ilgili çıkışın aktif edilmelidir.
Aslında sorun çok açık değil. Değişkenler ne değerler alabiliyor ve değişiklik nasıl ve nerede olabiliyor ve değişiklik olduğu anda nasıl değer değişiyor bunlara göre farklı mantıklarda kurulabilir.

Ete

F®T

Sanırım durumu  iyi anlatamadım ama üstadlar tam onikiden vurdu. :)
Burak ve Ete hocam yardımlarınızla takıldığım durumu aştım.Teşekkür ediyorum.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Powered by EzPortal