ascii to hex (biraz farklı)

Başlatan canbulut, 27 Haziran 2011, 14:45:11

canbulut

s.a arkadaslar,
elimde iki adet ascii karekter var ve bu karekterleri hex olarak kullanmam gerekiyor örnek vermem gerekirse;
"A" ve "F" gelmiş iki adet asciiyi bir değişken içinde hexe çevrilmiş şekilde kullanabilmem gerekiyor.$AF gibi kullanabilmem ve bir değişken içinde saklamam gerekiyor mümkünmüdür?

bymrz

maalesef mümkün olmaz.
Çünkü bir byte 8bittir ki sen yarısını; 4 bitini kullanacaksın. Bu da 16 farklı deger demektir. Lakin A'dan Z'ye 29 farklı harf var. Buyüzden iki ASCII karakteri bir byte' a yazamazsın...

canbulut

Alıntı yapılan: alone_lover - 27 Haziran 2011, 16:19:44
maalesef mümkün olmaz.
Çünkü bir byte 8bittir ki sen yarısını; 4 bitini kullanacaksın. Bu da 16 farklı deger demektir. Lakin A'dan Z'ye 29 farklı harf var. Buyüzden iki ASCII karakteri bir byte' a yazamazsın...

aslına bakarsanız hocam ben bu işi ''hex2 değişken'' deyip yapabiliyorum fakat gelen bilgi stringin içinde geldiği için hex dec gibi kontrol edemiyorum şimdilik...

-Hasan-

TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
@SWAPF TEMP,F ' $0A yı $A0 Yap (Bu Assembly Komutu Olduğu İçin Başına @ Konuldu)
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI OR TEMP 'SAYI=$AF


Şekildeki gibi olabilir ancak ASCII kod "A"-"F" arasında olmalıdır. En önemlisi de küçük harf olmaması gerekir, küçük harf olursa

TEMP=ASCII-87

olması gerekir.

Bunu referans alarak kendine göre düzenleyebilirsin.

canbulut

Alıntı yapılan: Hasan Oguz - 27 Haziran 2011, 17:03:54
TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
@SWAPF TEMP,F ' $0A yı $A0 Yap (Bu Assembly Komutu Olduğu İçin Başına @ Konuldu)
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI OR TEMP 'SAYI=$AF


Şekildeki gibi olabilir ancak ASCII kod "A"-"F" arasında olmalıdır. En önemlisi de küçük harf olmaması gerekir, küçük harf olursa

TEMP=ASCII-87

olması gerekir.

Bunu referans alarak kendine göre düzenleyebilirsin.


peki  bu komutlar 1 - 9 arası içinde geçerli mi?şimdi bende asciiden kontrol edcem.cevap için teşekkür

-Hasan-

1-9 arası için sayıdan 48 çıkarırsak olur. Ancak 1-9 ile A-F aynı programda kullanılamaz bunun için yeni bir program tasarlanıp ilk önce 1-9 arası mı A-F arası mı ona bakılması gerekir. Ondan sonra gerekli işlem yapılır.

Yukarıda yazdığım kodu denemedim onu bir dene ondan sonra istersen 1-9 A-F beraber çalışacak şekilde düzenleyebiliriz.

canbulut

Alıntı yapılan: Hasan Oguz - 27 Haziran 2011, 17:46:36
1-9 arası için sayıdan 48 çıkarırsak olur. Ancak 1-9 ile A-F aynı programda kullanılamaz bunun için yeni bir program tasarlanıp ilk önce 1-9 arası mı A-F arası mı ona bakılması gerekir. Ondan sonra gerekli işlem yapılır.

Yukarıda yazdığım kodu denemedim onu bir dene ondan sonra istersen 1-9 A-F beraber çalışacak şekilde düzenleyebiliriz.

denedim arkadasım ama asm kodda temp opcode hatası verdi...derleyemedim

-Hasan-

TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4 'TEMP i 4 Bit Sola Kaydır TEMP=$A0 Olsun ---------------------------
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI OR TEMP 'SAYI=$AF


O halde bu şekilde yapalım, orada ilk önce SWAPF komutu aklıma gelmişti, o yüzden onu yazmıştım, o zaman buradakini dene, buradaki 4 bit sola kaydırmada aynı işi yapar.

canbulut

Alıntı yapılan: Hasan Oguz - 27 Haziran 2011, 18:41:19
TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4 'TEMP i 4 Bit Sola Kaydır TEMP=$A0 Olsun ---------------------------
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI OR TEMP 'SAYI=$AF


O halde bu şekilde yapalım, orada ilk önce SWAPF komutu aklıma gelmişti, o yüzden onu yazmıştım, o zaman buradakini dene, buradaki 4 bit sola kaydırmada aynı işi yapar.

bu kodlara göre 1 adet asci gönderdiğimde $FC gönderiyor bir defaya mahsus sonra ne yazarsam yazayım.hiç bir şey almıyor sürekli $FC takılı kalıyor..

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4 'TEMP i 4 Bit Sola Kaydır
myarray[5]=TEMP 'SAYI=$A0
TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
myarray[5]=myarray[5] OR TEMP 'SAYI=$AF

SAYI=myarray[5]

-Hasan-

#9
Arkadaşım biraz önce bu kodların eş değerlerini assembly ile yazdım ve çalıştı, yani SAYI=$AF oldu. Ancak yukarıdaki kodları picbasicde denediğimde SAYI=$FF oldu.

-Hasan-

#10
TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4 'TEMP ' i 4 Bit Sola Kaydır
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI+TEMP 'SAYI=$AF '-------------------------------------------------------------


OR 'u + yapınca düzeldi, çalışıyor, bu koddan ben $AF ' yi aldım ve birkaç harfle daha denedim yine oldu, sende bir dene.

canbulut

Alıntı yapılan: Hasan Oguz - 27 Haziran 2011, 20:40:10
TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4 'TEMP ' i 4 Bit Sola Kaydır
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI+TEMP 'SAYI=$AF '-------------------------------------------------------------


OR 'u + yapınca düzeldi, çalışıyor, bu koddan ben $AF ' yi aldım ve birkaç harfle daha denedim yine oldu, sende bir dene.

hasan usta bu seferde sadece $AF geliyor diğer gönderilen bcdefyi hiç görmüyor.

-Hasan-

#12
@ DEVICE WDT_OFF

TEMP VAR BYTE 'Geçici değişken
SAYI VAR BYTE '$AF Olacak Sayı

TRISB=0
PORTB=0

TEMP=("A"-55) ' "A" dan 55 Çıkarılırsa $0A Bulunur
TEMP=TEMP<<4
SAYI=TEMP 'SAYI=$A0

TEMP=("F"-55) ' "F" dan 55 Çıkarılırsa $0F Bulunur
SAYI=SAYI+TEMP 'SAYI=$AF

PORTB=SAYI

SONSUZ:
GOTO SONSUZ

END


Arkadaşım ben bu programı derleyip, proteus ' ta denedim çalışıyor. Aynı zamanda giğer harfleri de denedim, oldu. Sende niye olmadı hala anlayamadım, ende bu programı derle ve bu sade haliyle bir deneme yap bakalım. Birde küçük harf mi kullanmışsın, ona da bir dikkat et.

canbulut

hasan arkadasım,büyük harfte denedim küçük harfte denedim maalesef olmadı.sayı yazdığınız yerlere byte cinsinden değişkeni myarray[5] şeklinde yazdım sadece $AF gönderdi programa ve öylece kalıyor.ne gönderirsem göndereyim $AFde kalıyor.tekrar başlatıyorum devreyi başka bir harf veya iki harf gönderiyorum yine sadece $AF alıyor.bunun neticesindede sanırım bufferımı değişik yollarla gönderip başka şekilde çözümlememiz gerekiyro.yakın ilginden dolayı çok teşekkür ederim.

-Hasan-

İstersen ASM sorununu çöz, bir de bu programın assembly kodunu göndereyim bir de onunla dene.