Picproje Elektronik Sitesi

DERLEYİCİLER => PIC Assembly => Konuyu başlatan: elektromer - 19 Eylül 2008, 21:37:22

Başlık: 16 bit BINARY sayıyı DECIMAL'e çevirme...
Gönderen: elektromer - 19 Eylül 2008, 21:37:22
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
Başlık: binary den desimal
Gönderen: mustafaaxu - 23 Mart 2009, 16:02:41
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
Başlık: Re: binary den desimal
Gönderen: elektromer - 25 Mart 2009, 01:43:58
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...
Başlık: binary den desimal
Gönderen: mustafaaxu - 26 Mart 2009, 16:22:52
by