avatar_Hattuşa

PROTONDA OYNAK DEGER

Başlatan Hattuşa, 05 Nisan 2014, 18:11:33

Hattuşa

slm arkadaşlar;
protonun help PDF sinde konu olan sword,sbyte oynak değer kullanımlarını neden gerçekte göremiyoruz yada kullanamıyoruz,
yani amacım; float tipi bir değişken kullanmadan sbyte veya sword değişkeni tanımlayarak -+128 veya -+65532 değerde kullanılamıyor mu?
yada ben yanlışmı biliyorum?
MaIn:
ADCON0 =%00000101
            adcB =ADIn 1
            While ADCON0.1==1 :Wend
           
ADCON0 =%00000001
            adcA =ADIn 0
            While ADCON0.1==1 :Wend 
         
          sD =adcA -adcB
          If sD >125 Then sD =125
         
          ds =adcA -adcB

          Print At 1,1,Dec adcA,"  "
          Print At 2,1,Dec adcB,"  "
          Print At 3,1,Dec sD,"  "  'sbyte değer
          Print At 4,1,Dec ds,"  "  'sword değer
          DelayMS 100       
           

GoTo MaIn


yukarıda iki analog değeri çıkartma işleminde adcA adcB den küçük olduğunda - değerde göstermesi gerekmez mi? yada nasıl yapabiliriz.

ete

Sayıları işaretleri ile birlikte kullanmak istediğin zaman sayının değer aralığı değişir.
SBYTE değişkenleri -128 ile +127 aralığında değer alır.
SWORD değişkenleri ise -32768 ile +32767 aralığında değer alabilir.

Verdiğin açıklamada da bunlar yazıyor zaten.

Ete

Hattuşa

hocam söylemek istediğim sbyte ve sword değişkenleri hem isisde hemde reelde çalışmıyor, ancak akşam muhiddin kaplan hocam alternatif olarak bir algoritma önerdi ve - alteransı print edebilmek adına, o da şu şekilde çalışıyor

BYTE için

A= 100
B =150

main:
sonuc =A-B

if sonuc.7 =1 then
sonuc =256 -sonuc
print at 1,1,"-",dec sonuc
else
print at 1,1,dec sonuc
endif
goto main


WORD için :

A= 500
B =700

main:
sonuc =A-B

if sonuc.15 =1 then
sonuc =65536 -sonuc
print at 1,1,"-",dec sonuc
else
print at 1,1,dec sonuc
endif
goto main


yani byte için 7. bit kontrol ediyoruz, 1 ise - değer 0 ise + değer
word için 15. biti aynı şekilde kontrol ediyoruz

ete

İşaret önemli değilde sadece sonuç önemli ise ben sıklıkla şunu kullanırım.
Sonuc=ABS(A-B)
yani absolute değer alırsın. Bu kısa komut Muhittin hocanın önerdiği işi yapmaktadır.
Tek kusuru var kimin büyük olduğunu anlayamazsın.
Ete

Hattuşa

bu noktada bişey sormak istiyorum ete hocam; (bu arada ABS komutunuda anlamış olduk tşk ederim)
şimdi basit bir matematik işlemimiz var ve işlemcimizde ramdan veya çok fazla değişkenden dolayı tanımlamalarımızı kısıtlı ve dikkatli kullanmamız gerekiyor, bunu göz önünde bulundurarak basit bir matetamtik yapmam gerekiyor, şöyle ki

A =1500  (word tipi)
B =1480 (word tipi)
sonuc =A-B


dediğimizde bizim sonuç değerimiz  (256 ya kadarlık kısma ihtiyacımız var ötesi bizi ilgilendirmiyorsa) biz sonuc değişkenini byte olarak tanımlamamızda bir sakınca varmıdır?
zira word değişkeni byte göre 2 kat büyük

ete

Sonuç her zaman 256 dan küçük olacak ise yapabilirsin. PBP buna müsade ediyor. Zaman zaman bende kullanırım bu tekniği
Ancak sonuç 256 yı geçerse alacağın sonuç, (sonuç-256) şeklinde olur bunu unutma.

Ete


Hattuşa

Alıntı yapılan: ete - 06 Nisan 2014, 14:46:47
Sonuç her zaman 256 dan küçük olacak ise yapabilirsin. PBP buna müsade ediyor. Zaman zaman bende kullanırım bu tekniği
Ancak sonuç 256 yı geçerse alacağın sonuç, (sonuç-256) şeklinde olur bunu unutma.

Ete



anladım tşk ederim hocam, kullanacağım sonuç max. 180 değerini taşıyacak ve değişkenlerimde epey var o yüzden idareli kullanmalıyım.

Powered by EzPortal