pic ile iki sayıyı nasıl çarparım lütfen yardım

theademix

Üye
Katılım
16 Şub 2007
Mesajlar
9
Puanları
1
Yaş
40
arkadaşlar, pic ile iki sayıyı nasıl çarparım, bir bilen varsa ve yardımcı olursanız sevinirim, aldığım projede bir butona basılacak, ve kaç kere basıldıysa bu sayıyı sabit bir sayı ile çarpıp ekranda yazdırabileceğim bir program yazıyorum ama decimal olarak nasıl çarpma yapacağım konusunda çıkmaza girdim, bir ışık tutsanız...
mesela 21,7*10=0217 işleminin sonucunu '0217' sayısını ekranda göstereceğim, herşey tamam ancak 21,7 ile 10 u veya herhangi iki sayıyı nasıl çarpacağım, arkadaşlar lütfen yardım,
şimdiden çok teşekkürler....
 
Öncelikle ondalık sayıların çarpımı ve hesabı bildiğim kadarıyla picte yok ancak örneğimizi 21.7 alırsak öncelikle sayı girişi olcaksa bu sayıyı girişte ondalıksız olarak yani 217 olarak alacak çarpılması gerekn sayıyla çarpacak ve sonucu 10 a boleceksiniz. Misal

unsigned integer a,b,c;
...
a=217;//değeri okursun alırsın vs.
b= 10;
c= (a*b)/10; Yanılmıyorsam ben bu şekilde hesaplıyordum.
 
pic basic pro kullanırsan hazır komut var.
asm ile yapacaksan çarpma işlemi arka arkaya toplama işlemidir.örnek,
3*4=12 3 tane 4 ü toplamaktır.
 
ondalıklı sayıyı float olarak tanımlaman lazım.. ondan sonra istedigin sayıyı yukleyebilisin.. ama seni ugraştıracak olan 0217 sayısını ekranda göstermek olcaktır lcd ye 0 ayrı 2 ayrı 1 ayrı 7 ayrı göndermen lazım yani basamaklarına ayırıp yollaman lazım...
 
Arkadaşlar bu konu güncelliğini devam ettiriyormu.
Soruyu soran arkadaşımız, işlemi ondalıkmı yapman gerekli yoksa binary yapıp ondalığa mı çevirmen gerekli bilgilendirirsen yardımcı olurum. Assembly olarak.
 
arkadaşlar asm de yazdığım 4 işlem 16bitlik yazılımı aşağıda veriyorum .
kolay gelsin. yapılan işlem sonucu; SONUCH = üstbyte SONUCL = altbyte

include "p16f877.inc"
__config(_CP_OFF & _PWRTE_OFF & _XT_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF)



CBLOCK H'20'

REG20
REG21
REG22
REG23
REG24
REG25
REG26
REG27
REG28
BOLUMH
BOLUML
BOLENH
BOLENL
SONUCH
SONUCL
CARPIH
CARPIL
CARPANH
CARPANL
TOPL1H
TOPL1L
TOPL2H
TOPL2L
CIKARH
CIKARL
CIKH
CIKL
ENDC

ORG 0X000
GOTO MAIN
ORG 0X004
CLRF INTCON
RETFIE
MAIN
CLRF SONUCH
CLRF SONUCL
GOTO SMN
;------------------------------------ 03E8/0022=1D
MOVLW H'03'
MOVWF BOLUMH ;bölünecek sayı high byte
MOVLW H'E8'
MOVWF BOLUML ;bölünecek sayı low byte
MOVLW H'22'
MOVWF BOLENL ;bölecek sayı high byte
MOVLW H'00'
MOVWF BOLENH ;bölecek sayı high byte
;------------------------------------ 03E8*0022=
MOVLW H'03'
MOVWF CARPIH ;çarpılacak sayı high byte
MOVLW H'E8'
MOVWF CARPIL ;çarpılacak sayı low byte
MOVLW H'00'
MOVWF CARPANH ;çarpacak sayı high byte
MOVLW H'22'
MOVWF CARPANL ;çarpacak sayı high byte
;------------------------------------
MOVLW H'3'
MOVWF TOPL1H ;toplanacak A sayısı high byte
MOVLW H'E8'
MOVWF TOPL1L ;toplanacak A sayısı low byte
MOVLW H'3'
MOVWF TOPL2H ;toplanacak B sayısı high byte
MOVLW H'E8'
MOVWF TOPL2L ;toplanacak B sayısı low byte
;------------------------------------
SMN
MOVLW H'3'
MOVWF CIKARH ;çıkarılacak sayı high byte
MOVLW H'E8'
MOVWF CIKARL ;çıkarılacak sayı low byte
MOVLW H'04'
MOVWF CIKH ;çıkacak sayı high byte
MOVLW H'EE'
MOVWF CIKL ;çıkacak sayı low byte
;------------------------------------

; CALL BOLMEK ;hangi işlemi yapacaksan onu aktif et.
; CALL CARPMAK
CALL CIKARMAK
; CALL TOPLAMAK

DUR
GOTO DUR ;İŞLEM SONUNDA BURADA BEKLİYOR

;------------------------------------ ÇARPMA İŞLEMİ
CARPMAK
MOVF CARPIL,W
MOVWF REG26
MOVF CARPIH,W
MOVWF REG27
MOVF CARPANH,W
MOVWF REG23
MOVF CARPANL,W
MOVWF REG22
CALL CARPISLEM
MOVWF SONUCL
MOVF REG25,W
MOVWF SONUCH
RETURN
CARPISLEM
MOVLW 0X10
MOVWF REG28
CLRF REG21
CLRF REG20
CAR0
RRF REG27,F
RRF REG26,F
BTFSS STATUS,0
GOTO CAR1
MOVF REG22,W
ADDWF REG20,F
MOVF REG23,W
BTFSC STATUS,0
INCFSZ REG23,W
ADDWF REG21,F
CAR1
RRF REG21,F
RRF REG20,F
RRF REG25,F
RRF REG24,F
DECFSZ REG28,F
GOTO CAR0
MOVF REG24,W
BCF STATUS,7
BCF STATUS,6
BCF STATUS,5
RETURN
;------------------------------------ ÇIKARMA İŞLEMİ
CIKARMAK
MOVF CIKL,W
SUBWF CIKARL,W
MOVWF SONUCL
MOVF CIKH,W
BTFSS STATUS,0
ADDLW .1
SUBWF CIKARH,W
MOVWF SONUCH
RETURN
;------------------------------------ TOPLAMA İŞLEMİ
TOPLAMAK
MOVF TOPL1L,W
ADDWF TOPL2L,W
MOVWF SONUCL
MOVF TOPL1H,W
BTFSC STATUS,0
ADDLW .1
ADDWF TOPL2H,W
MOVWF SONUCH
RETURN
;------------------------------------ BÖLME İŞLEMİ
BOLMEK
MOVF BOLUML,W
MOVWF REG20
MOVF BOLUMH,W
MOVWF REG21
MOVF BOLENL,W
MOVWF REG22
MOVF BOLENH,W
MOVWF REG23
CLRF PCLATH
CALL BOLISLEM
MOVWF SONUCL
MOVF REG21,W
MOVWF SONUCH
RETURN
BOLISLEM
CLRF REG25
CLRF REG24
MOVLW 0X10
MOVWF REG26
IS0
RLF REG21,W
RLF REG24,F
RLF REG25,F
MOVF REG22,W
SUBWF REG24,F
MOVF REG23,W
BTFSS STATUS,0
INCFSZ REG23,W
SUBWF REG25,F
BTFSC STATUS,0
GOTO IS1
MOVF REG22,W
ADDWF REG24,F
MOVF REG23,W
BTFSC STATUS,0
INCFSZ REG23,W
ADDWF REG25,F
BCF STATUS,0
IS1
RLF REG20,F
RLF REG21,F
DECFSZ REG26,F
GOTO IS0
MOVF REG20,W
GOTO IS2
IS2 BCF STATUS,7
BCF STATUS,6
BCF STATUS,5
RETURN
END
 
TEŞEKKÜRLER BİGBeY DENİYORUM BAKALIM ÇALIŞACAK MI? SORUN ÇIKMAZ GİBİ GÖRÜNÜYOR
 
arkadaşlar pic pro basic'de iki sayının çarpımını örnek bir kısa programla anlatabilirmisiniz.örneğin 5x7=35 işlemini nasıl yaparım şimdiden teşekkürler.
 
Arkadaşlar, ben pic basicte virgülden sonraki ondalık değer için başka bir değişken tanımlıyorum.

a var byte ______ bu ana sayımız
b var byte_______bu da ondalık sayımız


ornek:
if b>=10 then
b=0
a=a+1
endif
gibi...
 

Forum istatistikleri

Konular
130,069
Mesajlar
932,772
Kullanıcılar
453,065
Son üye
jros

Yeni konular

Geri
Üst