0-255'in tersini alıp 255-0 yapmak ve REV komutu

peoneak

Üye
Katılım
15 Şub 2009
Mesajlar
7
Puanları
1
Rev komutu degişkenlerle kullanılabiliniyor mu? Örneklerde hep sabit binary sayılar ile kullanılmış oldugunu gördüm. Bende o örneklerden yola cıkarak değişkenler ile aşagıdaki gibi bir kod parcacıgı yazdım hata vermiyor ama programa bir etkisi olmadı. Neden olabilir.

Sonuc VAR BYTE
Ters VAR Byte
Ters = Sonuc Rev 8

Sonuc bir direnç degişimi ve 0-255 arası bir deger bana lazım olan ise 255-0 deger degişimi, Yani direnc arttıkca degerin artmasını degilde azalmasını istiyorum. O yüzden böyle bir yola başvurdum. Bu işlemi yapmak için başka yöntemler varmı?
 
Şöyle bir kodum var. 877A da ADC girişi AN5 nolu bacaktan. LCD'de bu bacaktan cıkan Sonuc degerini 0-255 arası görüyorum ama Ters degerini herzaman 0 olarak görüyorum. Kodun neresinde bir yanlışlık veya eksiklik olabilir.

Kod:
DEFINE LCD_DREG     PORTB 
DEFINE LCD_DBIT     0
DEFINE LCD_RSREG    PORTB
DEFINE LCD_RSBIT    4
DEFINE LCD_EREG     PORTB
DEFINE LCD_EBIT     5
DEFINE LCD_BITS     4
DEFINE LCD_LINES    2

DEFINE  ADC_BITS    8
DEFINE ADC_CLOCK    3
DEFINE  ADC_SAMPLEUS    50

Sonuc VAR BYTE
Ters VAR Byte
Ters =  Sonuc^^255

TRISE = %11111111
ADCON1 = %00000000
 
PAUSE 500

DONGU:

ADCIN 5 ,Sonuc
Lcdout $FE,1
LCDOUT  DEC Sonuc
LCDOUT $FE, $C0, DEC Ters
PAUSE 100
GOTO DONGU

END
 
Bir de şu şekilde deneyin:

Kod:
trise = 255
trisa = 255
adcon1 = 0
sonuc var byte
ters var byte

DEFINE  ADC_BITS  8
DEFINE ADC_CLOCK  3
DEFINE  ADC_SAMPLEUS  50

DEFINE LCD_DREG     PORTB 
DEFINE LCD_DBIT      0
DEFINE LCD_RSREG   PORTB
DEFINE LCD_RSBIT    4
DEFINE LCD_EREG     PORTB
DEFINE LCD_EBIT      5
DEFINE LCD_BITS      4
DEFINE LCD_LINES     2
     pause 500
     lcdout $fe,1
     pause 100


dongu:
     adcin 5, sonuc
     ters =  sonuc^^255
     lcdout $fe,2, dec3 sonuc
     pause 1
     lcdout $fe,$c0, dec3 ters
     pause 100
     goto dongu
end
 
Uygulamadada simülasyondada denedim, sadece Sonuc'un 0 oldugunda Ters 255 oluyor diger Sonuc durumlarında Ters her zaman 0 oluyor.
 
Bilemiyorum, mantıken bu şekilde çalışması gerekir, makinemde pbp olmadığından deneyemiyorum, basic'ci arkadaşlar umarım yardımcı olurlar.

bu arada bir de şunu deneyin, bakalım ne olacak:

ters = 255-sonuc
 
Tamam çözdüm tyildizak yardımların için teşekkürler.

ters = 255-sonuc olmadı. ters = %11111111 - sonuc yazınca oldu, ama ters = sonuc^^ %11111111 yazınca olmadı. Mantıgını anlamadım ama calıştı :)
 
Us işaretini "^" 2 defa kullanmışsınız. 1 defa kullanmalısınız. Bu çıkarma işleminden daha kolay ve kullanışlıdır.
 
@Katana hocam, pbp help'te xor işleci olarak bu gösterilmiş, oradan aktardım, bunun yerine "xor" olarak da kullanılabiliyormuş.
ANSI C'nin gözünü seveyim...
 
PBP uzun zamandır kullanmadığım bir dil. Unutmuşum bazı şeyleri.

4.17.14. Bitwise Operators
Bitwise operators act on each bit of a value in boolean fashion. They can be used to isolate bits or add bits into a value.
B0 = B0 & %00000001 ' Isolate bit 0 of B0
B0 = B0 | %00000001 ' Set bit 0 of B0
B0 = B0 ^ %00000001 ' Reverse state of bit 0 of B0

4.19. Logical Operators
Logical operators differ from bitwise operations. They yield a true/false result from their operation. Values of 0 are treated as false. Any other value is treated as true. They are mostly used in conjunction with the comparison operators in an IF..THEN statement. The operators supported are:
Logical Operator Description
AND or && Logical AND
OR or || Logical OR
XOR or ^^ Logical Exclusive OR
 
Son düzenleme:

Forum istatistikleri

Konular
128,191
Mesajlar
915,731
Kullanıcılar
449,965
Son üye
Pentium55

Yeni konular

Geri
Üst