Basitmi??

Başlatan shark27, 14 Aralık 2010, 21:14:39

shark27

herkese merhabalar !!!
arkadaşlar pc den rs232 ile pic18f452'ye bilgi yolluyorum.
Örneğin 250 decimal sayısını gönderiyorum.
gönderdiğim bilgiyi herhangi bi portta görebiliyorum yani bilgi doğru geliyor.
benim asıl amacım pic ile seri oalrak bağlatı kurduğum serial servo sürücüye bağlı servoları hareket ettirmek.
servo sürücüyü çözdüm.mesela servonun birini en sol pozisyona getirmek için  (012A) bilgisini yolluyorum.bunu şu şekilde gönderiyorum
putc(0x2A)
putc(0x01)

en sağ pozisyon için (04E2) bilgisi gidiyor.

putc(0xE2)
putc(0x04)

sorun şurda

pc den gelen örneğin decimal 1250 decimal bilgisini(hexadecimale (04E2) ye dönüştürüp bu sayıyı 04 ve E2 oalrak 2 parçaya ayırmak ??
eğer yardımcı olursanız seviirim kolay gelsin...

Klein

Eğer (decimal)1250, (Hex)04E2 sayısını 0x00FF ile and işlemine tabi tutar iseniz  elinizde (hex) E2 olur.  Sayıyı 8 bit sağa kaydırırsanız elinizde (HEX) 04 sayısı olur.

shark27

decimal 1250 sayısını 00FF ile ve işleminemi tabi tutucam anlamadım ....bu decimal sayıyı hexadecimale çeviremiyorum çevirsek dedğiniz gibi olur teşekkrüler

RcALTIN

Alıntı yapılan: shark27 - 14 Aralık 2010, 21:58:47
decimal 1250 sayısını 00FF ile ve işleminemi tabi tutucam anlamadım ....bu decimal sayıyı hexadecimale çeviremiyorum çevirsek dedğiniz gibi olur teşekkrüler

bir değişkene,
a = 10
da deseniz, veya
a = 0x0A
da deseniz, veya
a = 0b1010
da deseniz değişen birşey olmaz, dolayısıyla derleyiciye tabanı belirttikten sonra(değer atanırken yazılan format ile) içindeki değeri birbirine çevirmeye gerek yok...

Klein'in dediği işlemler ise şöyle olur
b = a & 0x00FF; // b değişkenine a'nın 0x00FF ile and işleminden çıkan sonucu atanır
b = a >> 8; //burada da b değişkenine a değerinin 8 bit sağa kaydırılmış hali atanır

umarım yanlışım yoktur, bitsel işlemlerle pek uğraşmayı sevmem... :)
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

neural

Alıntı yapılan: shark27 - 14 Aralık 2010, 21:58:47
decimal 1250 sayısını 00FF ile ve işleminemi tabi tutucam anlamadım ....bu decimal sayıyı hexadecimale çeviremiyorum çevirsek dedğiniz gibi olur teşekkrüler

Çevirmeniz gerekmiyor, zaten mikrodenetleyicinin belleğinde 1250 sayısı 0x04E2 dir. Program yazarken sizin yorumunuza kalmış bir durumdur.
Siz 1250 & 0x00FF işlemi yaparsanız sonuç 226(0xE2) decimal olur.
1250 & 0xFF00 işlemi yapıp 8 defa sağa kaydırırsanız sonuç 4(0x04) olur.

Yani program yazarken sizin yorumlamınıza bağlı olarak kullanırsınız.

shark27

tşkr ederim yarın bi deniycem umarım olur:D

kudretuzuner

Amatör