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
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
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...
by