Pic te çarpma ? ( yardım )

Başlatan sir_hawk, 20 Nisan 2006, 18:43:45

sir_hawk

Sewgili hocalarım;
benim nasıl içinden çıkacağımı bilmediğim bir sorunum var,şöle ;

-İşlemler P16F877 ile yapılmakta.

* PortA dan girilen sayı ile Port B den girilen sayı çarpılıp sonuç PortC ve PortD den okunacak.

Çarpma işlemini yaptığımızda karşımıza ( PortA=6 , Portb=8 pin ) 14 haneli bi sayı çıkıyor ve çarpma işleminde bildiğiniz gibi her basamak çarpımından sonra bir basamak kaydırılıyor,şöle yani ;


---------******
-------------***
--------*______
---------******    ( 1. bit çarpımı )
--------******     ( 2. bit çarpımı )
-------******      ( 3. bit çarpımı )
-----+________
------*********

(tireleri yok sayınız,işlemi gösterebilmek için kullandım malum sitemiz başta boşluklara izin wermiyor :)  )
(İşlem sonucunda elde oluşursa PortE de gösterilecek )


Sorun bitleri çarpmakta değil onu yapabiliyorum ama örneğin A4 ile PortB yi çarptığımda başta 5 tane 0 sonra 8 bit çarpmanıın değeri geliyor yani toplam 13 bit oluyor.Gel görün ki Pic in registerları 8 bitten oluşuyor.

Şimdi hocalarım ve arkadaşlarım ben bu sorunu nasıl hallederim ? Yardımcı olusanız çok sevinirim,saygılarımla...

bsivgin

aradığın burda;

http://ww1.microchip.com/downloads/en/AppNotes/00526e.pdf
http://ww1.microchip.com/downloads/en/AppNotes/00544d.pdf

"SINGLE PRECISION UNSIGNED
MULTIPLICATION (8 x 8)
This routine computes the product of two unsigned 8-bit
numbers and produces a 16-bit result. Two routines are
provided: one routine is optimized for speed (a straight
line code) and the other one has been optimized for
code size (a looped code version). These subroutines
are located in ARITH.ASM and printed in the listing file
ARITH.LST. The performance specs are shown in
Table 1."

bu dökümandaki iki adet 8 bitlik sayıyı çarpıp sonucu 2 adet 8bitlik registerde saklıyor. Tam senin istediğin gibi.

Ya da aşağıda verdiğim örnektende çarpma konusunda fikir çıkarabilirsin;

http://www.diyot.com/Kolaycarpma.html

Saygılarımla
Bülent ŞIVGIN
www.diyot.com

sir_hawk

hocam tşkler yalnız ben kendim bişeyler yazdım.Gel görün ki ;

programı derlemede herhangi bir sorun yok yalnız proteusta devresini çizdiğim zaman sonuçlar herzaman 1 çıkıyor.Rica etsem inceleyebilirmisiniz ?


( dosyada bütün herşey mevcuttur )




DOSYAYI  YENİDEN YÜKLEYECEĞİM

bsivgin

programını satır satır inceleyemedim çünkü hiç bir açıklama koymamışsın,  ama genel olarak göz gezdirdiğimde aşağıdaki komut yazımlarının hatalı olduğunu gördüm


YANLIŞ KULLANIM:........DOĞRU KULLANIM

MOVF  PORTB................MOVF PORTB,0

ANDWF H'FF',A2L...........MOVLW h'FF'
...................................ANDWF A2L


Ayrıca portların TRIS registerlerini bile ayarlamamışsın... Bence sen otur PIC lerin yapısını ve nasıl kullanılacağını bir incele.....

Saygılarımla

bsivgin

Aşağıda örnek bir 8 bit 8 bit çarpma yapıp 16 bit sonuç veren bir uygulama var...Benden bu kadar gerisini sen hallet

mulcnd equ h'20' ; 8 bit çarpılan
mulplr equ h'21' ; 8 bit çarpan
H_byte equ h'22' ; 16 bitlik sonucun yüksek 8 biti
L_byte equ h'23' ; 16 bitlik sonucun alçak 8 biti
count equ h'24' ; loop sayaç

; ***************************** Çarpma rutini
CARP MAcro  A1,A2
movlw A1
movwf mulcnd
movlw A2
movwf mulplr
clrf H_byte
clrf L_byte
movlw 8
movwf count
movf mulcnd,W
bcf STATUS,C
loop
rrf mulplr, F
btfsc STATUS,C
addwf H_byte,1
rrf H_byte,1
rrf L_byte,1
decfsz count, F
goto loop
 endm
;*****************************************************************
; Test Program
;*********************************************************************
main
nop
nop
nop
CARP h'A4',h'A5'
goto $

Saygılarımla
Bülent ŞIVGIN
www.diyot.com

sir_hawk

hocam söylediğiniz hataları bende gördüm zaten kalkınca ilk işim programı incelemek oldu.Herhangi bi inceleme yapmadan paylaşıma açmakla sanırım hatalı davrandım ama naparsın tekrar başa dönüp incelmek biraz zoruma gitti açıkcası  :oops:  :D  :D  tekrar düzenleyip paylaşıma sunacağım,saygılarımla....