24 bit hesaplama nasıl yapılır?

Başlatan crypto, 08 Şubat 2008, 17:17:32

crypto

Herkese selam.

Arkadaşlar PBP da 24 bitlik sayıların dörtişlemlerini (çarpma, bölme, çıkarma, toplama) nasıl yapabilirim?

Bu işlem 24 bitlik adc den okuyacağım değerler için gerekiyor.

crypto

Gerekli olan bölme işlemini aşağıdaki gibi yapıyorum. Ancak artan sayıyı bir türlü bulamıyorum. Artan sayıyı da 1000 ile çarpıp 2048 e bölerek virgülden sonraki 3 rakamı bulmam gerekiyor.



bolen var word
veri var word[2]
sonuc_tam var word
sonuc_virgul var word
artan var word
w0 var word    ;adc den okunan alt word
w1 var word    ;adc den okunan üst word

Asm
PutMulResult?D macro Din
    MOVE?BB   Din, R2
    MOVE?BB   Din + 1 , R2 + 1
    MOVE?BB   Din + 2, R0
    MOVE?BB   Din + 3, R0 + 1
    RST?RP
    endm
EndAsm
    .
    .
    .
    veri(1) = w1
    veri(0) = w0
@ PutMulResult?D  _veri ;makroyu çalıştır
    sonuc_tam = div32 2048  

crypto

Sorunu çözdüm. Gerekli kodlar aşağıda.
Bu kodlarla 32 bit bölme işlemi, virgülden sonraki 3 rakamda dahil yapılıyor.

veri var word[2]
artan var word[2]
Dummy var word
sonuc var word
virgul var word[2]


define LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50


Asm
PutMulResult?D macro Din
    MOVE?BB   Din, R2
    MOVE?BB   Din + 1 , R2 + 1
    MOVE?BB   Din + 2, R0
    MOVE?BB   Din + 3, R0 + 1
    RST?RP
  endm
EndAsm

ASM
GetMulResult macro Dword
    MOVE?WW    R2, Dword         ; Low Word
    MOVE?WW    R0, Dword + 2   ; High Word
    endm
ENDASM

    veri(1) = $20
    veri(0) = $DC86
@ PutMulResult?D  _veri 
    sonuc = div32 2048  
    
@ GetMulResult  _artan
    virgul = artan * 1000
;@ GetMulResult  _artan ;bu satır iptal edildi
;@ PutMulResult?D  _artan ;bu satır iptal edildi
    virgul = div32 2048
    

    LCDOUT $FE,$1, #sonuc,",", #virgul