16 bit BINARY sayıyı DECIMAL'e çevirme...

Başlatan elektromer, 19 Eylül 2008, 21:37:22

elektromer

Merhaba Arkadaşlar....

Size küçük bir program modülü veriyorum. Bu modül ile 16 bit (2 Byte) veriyi Ondalık sayıya çavirebilirsiniz. İhtiyaç duyduğunuz değişiklikleri yaparak dilediğiniz programınızda kullanabilirsiniz..

;***********************************************************; 
; PROGRAM ADI      :   16 Bitlik Binary'i decimale Çevirme 
; DOSYA ADI      :   B2DEC16.ASM 
; YAZAN         :    
; TARİH         :     
; İŞLEMCİ      :   PIC 16F84 
; SAAT HIZI (XTAL) :   4.000 MHz 
;***********************************************************; 
 
   LIST   P=16F84,   R=HEX,   C=80 
   ERRORLEVEL   -302 
   #INCLUDE   "16f84.inc" 
   LIST 
 
   __CONFIG _CP_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC 
 
 
;***********************************************************; 
;   RAM tanımlamaları 
;***********************************************************; 
   CBLOCK   0x0C 
   sayici 
   gecici0 
   gecici1 
   gecici3 
   gecici 
   Alt_Byte 
   Ust_Byte 
   ENDC 
 
;***********************************************************; 
;   Ust_Byte'ı   ; ADC'nin Ust byte olarak kabul et. 
;   Alt_Byte'ı da   ; ADC'nin Alt byte olarak kabul et. 
; 
;   Sonuçları gecici0, gecici1, gecici3 içinde oluşturacak 
; 
;   örnek1 : 
;   Ust_Byte = 0x03 
;   Alt_Byte = 0xFF   olarak kabul edersek, 
;   Sonuç ; gecici0=00, gecici1=10, gecici3=23   olur. 
;   Yani  ;   H'03FF'=D'1023' tür. 
; 
; 
;   örnek2 : 
;   Ust_Byte = 0xFF 
;   Alt_Byte = 0xFF   olarak kabul edersek, 
;   Sonuç ; gecici0=06, gecici1=55, gecici3=35   olur. 
;   Yani  ;   H'FFFF'=D'65535' tür. 
;***********************************************************; 
   org   0x00 
   movlw   0xFF 
   movwf   Alt_Byte    
   movlw   0xFF 
   movwf   Ust_Byte    
 
;***********************************************************; 
B16_BCD   bcf   status,c 
   movlw   0x10 
   movwf   sayici 
   clrf   gecici0 
   clrf   gecici1 
   clrf   gecici3 
 
B16_BC1   rlf   Alt_Byte,f 
   rlf   Ust_Byte,f 
   rlf   gecici0,f 
   rlf   gecici1,f 
   rlf   gecici3,f 
 
   decfsz   sayici 
   goto   DEC_AYR 
   goto   $ 
 
;***********************************************************; 
DEC_AYR   movlw   gecici3 
   movwf   FSR 
   call   BCD_AYR 
 
   movlw   gecici1 
   movwf   FSR 
   call   BCD_AYR 
 
   movlw   gecici0 
   movwf   FSR 
   call   BCD_AYR 
 
   goto   B16_BC1 
 
;***********************************************************; 
BCD_AYR   movlw   0x03 
   addwf   indf,W 
   movwf   gecici 
   btfsc   gecici,3 
   movwf   0x00 
   movlw   0x30 
   addwf   indf,W 
   movwf   gecici 
   btfsc   gecici,7 
   movwf   indf 
   return 
 
;***********************************************************; 
   end
Her şey gönlünüzce olsun..

mustafaaxu

hocam ben 16f84 ile bir dosya icindeki sayıyı incf komutu ile arttırıyorum
termometre yapmak istiyorum kondansatorun dolumunda gecen sureyı dosya icinde saydırıyorum bu sayıyı ondalıga cevirip displey de göstermek istiyorum yardımını beklıyorum teşekkurler
mustafaaxu@mynet.com

elektromer

Alıntı yapılan: "mustafaaxu"hocam ben 16f84 ile bir dosya icindeki sayıyı incf komutu ile arttırıyorum
termometre yapmak istiyorum kondansatorun dolumunda gecen sureyı dosya icinde saydırıyorum bu sayıyı ondalıga cevirip displey de göstermek istiyorum yardımını beklıyorum teşekkurler
mustafaaxu@mynet.com

Merhaba,
yukarıda verdiğim örnekte herşey açık ve net..
INCF ile arttırdığın kaydediciyi ister Alt_Byte içine aktar, istersen Alt_Byte adını kendi kullandığın kaydedici adıyla değiştir.

Ust_Byte içeriğini 0x00 verirsen, senin kaydedicinde bulunan değer yukarıda bulunan modül yazılım tarafından ONDALIK şekle çevrilir.

Kaydedicinde elde edeceğin değer (1 Byte ise) maksimum 255 (0xFF) olacaktır.

;   örnek : 
;   Ust_Byte = 0x00 
;   Alt_Byte = 0xFF   olarak kabul edersek, 
;   Sonuç ; gecici0=00, gecici1=02, gecici3=55   olur. 
;   Yani  ;   H'00FF'=D'255' tir.


Bundan sonra gecici1 ve gecici2 de bulunan değerleri 4'er bit olarak ayırarak bir tablo aracılığı ile 7 segment veya başka bir ekran tipine gönderebilirsin.

Saygılarımla...
Her şey gönlünüzce olsun..

mustafaaxu