Hex değerleri txt dosyasına yazdırma

Başlatan levo_levent, 16 Nisan 2015, 01:16:35

levo_levent

Herkeze selamlar

hserın den gelen hex datayı bir txt dosyasına yazdırmak istiyorum.

hserın den gelen datayı okuyabiliyorum.
18f2550 ilede usb klavyede yaptım, usb klavye kodlarıyla istediğim karakteri txt dosyasına  yazabiliyorum.

benim yapmak istediğim örneğin hex olan  FF  direk olarak txt dosyasına FF olarak yazdırmak,
bunun için  ilk 4 biti bir sayıya  sonraki dört bitini bir sayıya nasıl dönüştürebilirm.

örneğin hex FF ise usb klavyeyle 09 , 09 gönderilmesi grekiyor.



yardımlar için şimdiden teşekkür ederim.

ete

Normal şartlarda bütün dillerde sayının istemilen formatta yazdırılması mümkündür. Sistem binary çalışmakla birlikte ekran vs görüntülemede sayı formatı kullanılır.
Basic de dec format bileşeni sayıyı desimal gösterir, hex format bileşini aynı sayıyı hx formatında gösterir . İllaki kendim hesaplayıp yazdırayım diyorsan aşağıdaki mantığı kullan,
Sayı=233
sol4bit=Sayı/16
Sag4bit=sayı-sol4bit*16
If so4bit>9 then
  Fark=15-sol4bit
Sag4bit=64+fark
Aynı işlemi solbit içinde yapman gerekir. Bu işlem de hex sayı formatında 9 dan büyük sayıların, A, B, C, D, E, F şeklinde gösterilmesini sağlamak içindir.

Ete

levo_levent

ETE hocam ilginiz için teşekkür ederim.
isteğimi yapabildim şuan oldu çalışıyor, programım budur.

bu programı yazarken aklıma bir fikir geldi heserin den gelen datayı kesme olmadan hep açık tutarak datayı gelen datayı işleyerek göndermek istedim datanın uzunluğu değişebilir hatta 1 dakika boyunca kesilmeden gelebilir işlemcinin hızı buna yetebilirmi
gelen ilk hexi  alıp  işlem yapıp usbden  gönderebilirmi peşinden gelen diğer datayı kaçımadan?

işlemci 18f2550
kıristal 20mhz
baund 115200


'--------------------------------PROGRAM BAŞLIYOR---------------------------------------------------------
START:

HANE1.0=XYF.0
HANE1.1=XYF.1
HANE1.2=XYF.2
HANE1.3=XYF.3
HANE2.0=XYF.4
HANE2.1=XYF.5
HANE2.2=XYF.6
HANE2.3=XYF.7

HANE3.0=XYG.0
HANE3.1=XYG.1
HANE3.2=XYG.2
HANE3.3=XYG.3
HANE4.0=XYG.4                                           
HANE4.1=XYG.5
HANE4.2=XYG.6
HANE4.3=XYG.7


IF XYF > 0 AND DUZ=1 THEN

GEL1=HANE2:GOSUB HANEPROG:TUS=YAZ:GOSUB USB
GOSUB BOS
GEL1=HANE1:GOSUB HANEPROG:TUS=YAZ:GOSUB USB

GOSUB BOSLUK

GEL1=HANE4:GOSUB HANEPROG:TUS=YAZ:GOSUB USB
GOSUB BOS 
GEL1=HANE3:GOSUB HANEPROG:TUS=YAZ:GOSUB USB

GOSUB ENTER
DUZ=0 
ELSE
GOSUB BOS
ENDIF



GOTO START

HANEPROG:               
   IF GEL1=$0 THEN
       YAZ=$27:RETURN             
    ENDIF                                                                                                                 
   IF GEL1=$1  THEN           
       YAZ=$1E:RETURN
    ENDIF   
   IF GEL1=$2  THEN
       YAZ=$1F:RETURN
    ENDIF
   IF GEL1=$3  THEN
       YAZ=$20:RETURN
    ENDIF
   IF GEL1=$4  THEN
       YAZ=$21:RETURN
    ENDIF   
   IF GEL1=$5  THEN
       YAZ=$22:RETURN
    ENDIF   
   IF GEL1=$6  THEN
       YAZ=$23:RETURN
    ENDIF   
   IF GEL1=$7  THEN
       YAZ=$24:RETURN
    ENDIF
   IF GEL1=$8  THEN           
       YAZ=$25:RETURN
    ENDIF
   IF GEL1=$9  THEN
       YAZ=$26:RETURN
    ENDIF     
   IF GEL1=$A  THEN
       YAZ=$04:RETURN
    ENDIF   
   IF GEL1=$B  THEN
       YAZ=$05:RETURN
    ENDIF   
   IF GEL1=$C  THEN
       YAZ=$06:RETURN
    ENDIF   
   IF GEL1=$D  THEN
       YAZ=$07:RETURN
    ENDIF
   IF GEL1=$E  THEN
       YAZ=$08:RETURN
    ENDIF
   IF GEL1=$F  THEN 
       YAZ=$09:RETURN
    ENDIF
   
RETURN
   



   
'--------------------------------------USB GÖNDERME PROGRAMLARI-------------------------------------------------------

USB:   

    STR BUFFER = 0,0,TUS,0,0,0,0,0   'BUFFER DOLDUR
    REPEAT
    USBOUT 1, BUFFER, 8
    UNTIL CARRY_FLAG = 0
    REPEAT : UNTIL TRNIF = 1
                                                       
RETURN

BOS:   
    STR BUFFER = 0,0,0,0,0,0,0,0   'BUFFER BOŞALT
    REPEAT
    USBOUT 1, BUFFER, 8                                                 
    UNTIL CARRY_FLAG = 0             
    REPEAT : UNTIL TRNIF = 1                                                             
RETURN
                             
BOSLUK:   
    STR BUFFER = 0,0,$2C,0,0,0,0,0   'BOŞLUK
    REPEAT
    USBOUT 1, BUFFER, 8                                                 
    UNTIL CARRY_FLAG = 0             
    REPEAT : UNTIL TRNIF = 1                                                             
RETURN

ENTER:
    STR BUFFER = 0,0,$28,0,0,0,0,0   'ENTER
    REPEAT
    USBOUT 1, BUFFER, 8                                                 
    UNTIL CARRY_FLAG = 0             
    REPEAT : UNTIL TRNIF = 1
RETURN   
'---------------------------------HSER IN PROGRAMI-------------------------
RFAL:
     DISABLE   
     HSERIN 1,ATLA,[WAIT ($FE),XX1,XX2,XX3,XY1,XY2,XY3,XY4,XY5,XY6,XY7,XY8,XY9,XYA,XYB,XYC,XYD,XYE,XYF,XYG,XYH,XYI,XYJ,XYK,XYL]  'RF DEN GELEN DATA
     DUZ=1
     ATLA:
     TEMP=RCREG
     GIE=1                                                                           
     RESUME
     ENABLE
RETURN


END

ete

Öncelikle bazı işlemleridaha basit ve tek komutla halledebilirsin.
HANE1.0=XYF.0
HANE1.1=XYF.1
HANE1.2=XYF.2
HANE1.3=XYF.3

satırları yerine
HANE1=XYF & %00001111 komut satırıda aynı işi tek satır olarak yapar.

HANE2.0=XYF.4
HANE2.1=XYF.5
HANE2.2=XYF.6
HANE2.3=XYF.7

satırları yerine tek satır olarak, HANE2=(XYF & %11110000)>>4 de aynı işi yapar.
Diğerlerinide buna benzeterek kısaltabilirsin.
Yapacağınişle ilgili olarak işlemci hızı yetermi bilemem. Denemek gerekir. Ama pek yeteceğini sanmıyorum. Senkron kaçırma ihtimalin yüksek bence.

Ete

Powered by EzPortal