PİC BASİCDE WORD DEĞİŞKENİNİN YETMEDİĞİ YERDE NE KULLANABİLİRİZ?

Başlatan sozkarabacak, 26 Mart 2010, 11:05:56

sozkarabacak

Elimde bulunan bir yazılımda WORD hesaplamada yeterli gelmemekte ve işlemin sonucu yanlış çıkmakta. Protonda bu durumu DWORD komutuyla halletmişler. Acaba picbasic içinde böyle bir komut bilen var mı?

YAPACAĞIMIZ İŞLEM :

6384 SAYISINI 25 İLE ÇARPMAK

6384*25=

Bu işlemi word gerçekleştiremiyor. Protonda DWORD ile işlem halledilmiş.
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

ete

PBP da 32 bit çarpma yapmak mümkün ancak herhangi bir değişkene eşitleyemezsiniz sonucu.
Sonuç ara hafızada tutulur ve onunla bir ikinci işlem yapma zorunluluğunuz vardır.

Bu durumda önemli olan husus çarpmayı yaptıktan sonra ne yapacağınızdır.
Şayet bir yerde kullanmayıp yalnızca sonucu saklamak durumunda iseniz PBP buna müsaade etmez.
Ama sonucu 10'a bölüp saklayabilirsiniz. Evet dediğim gibi çarpma işleminden sonra ne yapacağın önemli olduğu için onu açıklamanızda yarar vardır.

A=6384 * 25
B= DIV32 10

şeklinde bir komut dizisi kullanırsanız sonucun 10'a bölünmüş hali B değişkeni içine yerleşmiş olacaktır.

Ete


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

sozkarabacak

Bu değeri aşağıdaki yazılımda hesap yapıp LCD ekranda görüntüleyeceğim.

'---------------------------PIC Ayarları------------------------ '
@ DEVICE pic16F628A                                                    
@ DEVICE pic16F628A, WDT_OFF              
@ DEVICE pic16F628A, PWRT_ON 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT              
@ DEVICE pic16F628A, PROTECT_ON                                 '
'---------------------------LCD Ayarları------------------------'
DEFINE LCD_DREG		PORTB	'LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT			4	'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG		PORTB	'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT			3	'LCD Enable Bacağı 3. bite bağlı	
DEFINE LCD_RWREG    PORTB	'LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT     	2	'LCD RW Bacağı  2. bite bağlı
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT		1	'LCD RS bacağı 1. Bite bağlı		
DEFINE LCD_BITS			4	'LCD 4 bit  olarak bağlı
DEFINE LCD_LINES		2	'LCD 2 sıra olarak çalışıyor.
                                     '                                          '
'------------------Değişken Ve Sembol Tanımlamaları-----------'
KONTROL  VAR Byte                                             '
A        VAR Byte                                             '
K        VAR Bit                                              '
SAYI     VAR Byte                                             '
BEKLE    VAR Byte
YOL      VAR BYTE                                             '                                            '
FREKANS  VAR Word                                             '
TAM      VAR Word                                             '
ONDA     VAR Word                                             '
KONTROL2 VAR Word                                             '
HESAP    VAR Word                                             '
                                                                 '
Symbol ALT      = FREKANS.LowByte                                '
Symbol UST      = FREKANS.HighByte                               '
Symbol ASAGI    = PORTA.1                                        '
Symbol TAMAM    = PORTA.2                                        '
Symbol YUKARI   = PORTA.3                                        '
Symbol SDA      = PORTA.2                                        '
Symbol SCL      = PORTA.3                                        '
                                                                 '
'--------------------------PORT AYALARI--------------------------'
PORTA=0 : PORTB=0                                                '
TRISA=%10000111 :TRISB=%00000000                                    '
CMCON=7                
OPTION_REG.7=0                                                   '
'--------------------------BASLANGIC-----------------------------'
PAUSE 300    : Cls  : FREKANS=5332                               '
YOL=$C2  : K=0
LCDOUT $FE,$48,14,17,14,4 ,28,4,28,0                             '
LCDOUT $FE,$40,1 ,3 ,29,21,29,3, 1,0                             '
GoSub GOSTER                                                     '
GoSub GONDER                                                     '
'-------------------------ANA PROGRAM----------------------------'
ANA:                                                             '
KONTROL=FREKANS                                                  '
If YUKARI=0 Then                                                 '
BEKLE=80 :SAYI=1 : A=0                                           '
      While YUKARI=0                                             '
        A=A+1:If A=0 Then A=255                                  '
       If A>3 Then BEKLE=40                                      '
       If A>20 Then BEKLE=1 :SAYI=4                              '
       FREKANS=FREKANS+SAYI                                      '
      GoSub GOSTER                                               '
      GoSub GONDER                                               '
      PAUSE BEKLE                                                '
      Wend                                                       '
EndIf                                                            '
                                                                 '
                                                                 '
                                                                 '
If ASAGI =0 Then                                                 '
BEKLE=80 : SAYI=1 : A=0                                          '
      While ASAGI=0                                              '
        A=A+1:If A=0 Then A=255                                  '
       If A>3 Then BEKLE=40                                      '
       If A>20 Then BEKLE=1 :SAYI=4                              '
       FREKANS=FREKANS-SAYI                                      '
                                                                 '
      GoSub GOSTER                                               '
      GoSub GONDER                                               '
      PAUSE BEKLE                                                '
      Wend                                                       '
EndIf                                                            '
                                                                 '
If TAMAM=0 Then                                                  '
FREKANS=FREKANS+10                                               '
GoSub GOSTER                                                     '
GoSub GONDER                                                     '
EndIf                                                            '
If K=0 Then GoSub OKU                                            '
                                                                 '
GoTo ANA                                                         '
'---------------------------GOSTER-------------------------------'
GOSTER:                                                          '
HESAP=FREKANS*25                                                 '
HESAP=HESAP+10700                                                '
TAM =HESAP/ 1000                                                 '
ONDA=HESAP//1000                                                 '
                                                                 '
LCDOUT $FE,$80,"33ELEKTRONIK",$FE,$8C,0,")))"                    '
LCDOUT $FE,$C0,"Fr:",DEC3 TAM,".",DEC3 ONDA," MHz"               '
Return                                                           '
                                                                 '
'--------------------GONDERME VE OKUMA --------------------------'                                                                
GONDER:                                                          '
If FREKANS=KONTROL Then                                          '
Else                                                             '
I2CWRITE SDA,SCL,YOL,[UST,ALT,$8E,$00]                         '
PAUSE 100                                                        '
OKU:                                                             '
I2CREAD  SDA,SCL,YOL, [KONTROL]                                '
If KONTROL.6=1 Then                                              '
KONTROL=0 : LCDOUT $FE,$CF,1                                     '
K=1                                                              '
Else                                                             '
K=0                                                              '
KONTROL=0 : LCDOUT $FE,$CF,"X"                                    
EndIf                                                            '
EndIf                                                            '
Return                                                           '
'****************************************************************'
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

ete

Yapman gereken hesap şunlar;
HESAP=FREKANS*25                                                 '
HESAP=HESAP+10700                                                '
TAM =HESAP/ 1000                                                 '
ONDA=HESAP//1000


Akıllıca bir yöntemle sorunu şöyle halledebilirsin.
HESAP=FREKANS*25                                 
HESAP=DIV32 100                '
HESAP=HESAP+107
 ONDA=HESAP//10                                               '
TAM =HESAP/ 10   
                                             '

Ete

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

sozkarabacak

Teşekkür ederim verdiğiniz bilgi çok faydalı oldu. Bu bilgiyi bilmediğim için 1 günüm boşa gitmiş oldu:) çok uç şeyler denedim. Ama en son mutlu son oldu.
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]