Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

div32 komutu

Başlatan taxin, 25 Kasım 2005, 19:29:23

taxin

iki sayıyı çarptık ve 32 bitlik bir sayı elde ettik
picbasicte 32bitlik bir sayıyı kullanabilmenin tek yolu çıkan 32 bitlik sonucu
div32 komutu ile 16 bit olacak şekilde bir sayıya bölmek
bu sayıyı div32 komutuyla başka bir sayıya böldük
sonuç olarak tam sayı alıyoruz
benim sorum
mesela bölme işleminde kalan için sayıyı //  şeklinde bölerek kalanını alabiliyoruz ama div32 ile böyle bir şey mümkün mü

yardımlarınız için şimdiden teşekkürler

ete

DIV32 komutuna göre uyarlamış bir MOD alma usulü yok. Ancak rakamların boyutu kurtarıyor ise ufak bir hile ile bunu yapabilirsin.
Örnekle açıklarsam daha iyi anlarsın. belkide biliyorsundur. Ama bilmeyenlerin anlaması için açıklıyorum.
A=128
B=28560
formülümüz
C=(A x B) /1200
önce A ile B yi çarpalım
TEMP=A * B
C=DIV32 120  (c nin 10 ile çarpılmış halini elde etmek için 120 ye böldük)
KALAN=C//10
C=C/10
Bu hesabı yapabilmek için C nin ilk değerinin 16 bitlik sınırlar içinde kaldığına dikkat edilmesi gerekir.
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

taxin

yardımların için teşekkürler Ete , yalnız ben bunu ne için kullanacağımı yazsam daha açıklayıcı olacak galıba
ben bu işlemi enkoderle mesfe ölçümü için kullanıyorum dolayısıyla kullandıgım sayılar oldukça büyük enkoder dişlisi ile palsler arasındakı formulden uzunlugu buluyorum enkoder palslerini hctl2016 isimli bir entegre yardımı ile alabiliyorum

LCDOUT $FE,$80," UZUNLUK:"
HCTLL:
LCDOUT $FE,$89,#TOPLAM,".",#KALAN
LCDOUT,"   "
LOW PORTD.3                   'OE=0 TAMPONA BILGI GECISINI ENGELLE
LOW PORTD.1                    'UST BYTE OKUNACAK-SEL=0 UST BYTE I OKU
UST=PORTC                       'PORT C YE ENKODER PALSININ UST BYTE
HIGH PORTD.1                  'ALT BYTE OKUNACAK-SEL=1 ALT BYTE I OKU
ALT=PORTC                  'PORT C YE ENKODER PALSI ALT BYTE
UZUNLUK=((UST*256+ALT)+DUZELTME)*HATVE 'DUZELTME MAKINe AÇILDIGINDA EEPROMDAN OKUNAN PALS
UZUNLUK=DIV32 ENKODER
TOPLAM=UZUNLUK/10
KALAN=UZUNLUK//10
HIGH PORTD.3    'YENI DEGER TAMPONA YAZILACAK

şeklinde, istedigim uzunlugu ülçüp cihazı istedigim uzunluga götürüyorum
burada hatve(enkoder diş çapı) sabit bir sayı ama elle girmek gerekiyor yapılan makineye göre degişebiliyor 10000-15000 arasında olabiliyor
fakat her üretilen makine standart mekanik özelliklere sahip olmadıgı için her cihazda bunu deneme yanılma ile elle yazmak gerekiyor
benim istegim şunu yapmaktı
makineyi 500 mm ye manuel götürüp pals degerini sıfır alıp sonra 3000mm ye götürüp aradaki palsi almak ve hatveyi otomatik hesaplatmak bu da şöyle oluyor
hatve=uzunluk*pals/enkoder
hatve=3000*42453/20000 fakat
basic bu işi yapmadı

hadi 3000 i 3 olarak aldık diyelim
sonradan çarparız diye sonraki işlemlerdede virgülden sonra 3 rakamı da kulanmam gerekiyor fakat // ile sadece 1 rakam alabiliyorum

galiba farklı bir derleyiciye geçsem daha iyi olacak
zaman ayırdıgın için teşekkürler
iyi çalışmalar

ete

@Taksin,
Bu işlemi şöyle yapabilirsin.

TEMP= 3000/200
TEMP= TEMP * 42453
HATVE=DIV32 100
Tabiiki işi formulize etmek için
önce ;
carpımA=encoder/100
CarpımB=encoder/200
temp=uzunluk/carpımA
Temp= temp * pals
Hatve=Div32 carpımB

şeklinde bir düzenleme yapman gerekebilir. Dene istersen . Ben denedim netice doğru çıkıyor.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

taxin

yardımların için teşekkürler . sorun çözüldü.  lise de matematigim çok kötüydü ama lazım olunca insan mecburen ögreniyor. iyi çalışmalar