sayıcı problemi

Başlatan turkbowling, 07 Mayıs 2006, 18:17:45

turkbowling

0 dan saydırmaya başladıgımızda herhangi bir sayıda durduk diyelim
sonra geri geri saydırıp sıfıra geldigimizde -1,,-2 diye saymaya devam etmesini
istiyorum aynı şekilde diyelimki -35'e kadar saydı ters yönde saymaya devam ettigimde
-35,-34,......-3,-2,-1,0,1,2,3......şeklinde devam edecek

aşagıda yapmaya çalıştım ama sıfırdan sonra 255 den saymaya başlıyor yardımcı olursanız
memnun olurum.

amacı:salıncak gibi ortada sallanan bir malzemenin sağa ve sola ne kadar sallandıgını
bulmak istiyorum

saygılarımla


kod:...................................................................
DEVICE 16F84 ;ENTEGRE TANIMLAMA
XTAL 4 ;KRISTAL FREKANSI BELİRLEME

'................................................................................................
DEFINE LCD_DREG      PORTB       'LCD data bacaklari hangi porta bagli? portb
DEFINE LCD_DBIT      PORTB.4      'LCD data bacaklari hangi bitten basliyor? portb.4 den itibaren
DECLARE LCD_ENPIN   PORTB.1     'LCD "E" pin portb nin hangi bitine baglidir.
DECLARE LCD_RSPIN   PORTB.0     'LCD "RS" pin portb nin hangi bitine baglidir.
DEFINE LCD_BITS         4      'LCD 4 bit  olarak bağlı

'..................................................................................................
OPTION_REG.7=0                      

TRISB=0                    
PORTB=0                            

BSol VAR PORTA.0                    
BSag VAR PORTA.1  
BSay VAR PORTA.2

SAY VAR BYTE


'.....................................................................
basla:

if BSol=1 then goto sol

if BSag=1 then goto sag

goto basla
'.....................................................................................................
sol:
                                 
IF Bsay=0 THEN SAYMA_GIT
GOTO sol

SAYMA_GIT:
IF Bsay=0 THEN SAYMA_GIT                

SAY=SAY+1                                  
                           
'................................................................................................................
CURSOR 1,1                                          
LCDOUT DEC SAY,"-","SOL"                                  

                   
GOTO basla                                        

sag:

IF Bsay=0 THEN SAYMA_GIT1
GOTO sag

SAYMA_GIT1:
IF Bsay=0 THEN SAYMA_GIT1                  
SAY=SAY-1                                

CURSOR 1,1                                            
LCDOUT DEC SAY,"-","SAG"  
if say=0 then
goto basla

ete

Öncelikle kullandığın Basic i anlayamadım. Yarısı Pic Basic Pro yarısı Proton basic ile yazılmış Bu kod nasıl çalışır anlamıyorum. Her neyse,
Başlığı Pic Basic Pro da açtığın için kodu PBP da yazdım.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [E.T.E]                                           *
'*  Notice  : Copyright (c) 2006 [Ete]                          *
'*          : All Rights Reserved                               *
'*  Date    : 07.05.2006                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_off
@ DEVICE pic16F628, PWRT_On
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_off
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
'@ DEVICE pic16F628, XT_OSC
DEFINE  LCD_DREG     PORTB
DEFINE  LCD_DBIT     4
DEFINE  LCD_EREG     PORTB
DEFINE  LCD_EBIT     3
define  LCD_RWREG    PORTB
DEFINE  LCD_RWBIT    2 
DEFINE  LCD_RSREG    PORTB
DEFINE  LCD_RSBIT    1
DEFINE  LCD_BITS     4
DEFINE  LCD_LINES    2

CMCON=7
TRISA=%00000111
TRISB=0					'				TUS KODLARI:
DEFINE OSC 4

BSol VAR PORTA.0 'yukarı
BSag VAR PORTA.1 'aşağı
BSay VAR PORTA.2
Poz  var bit
SAY VAR BYTE
Sign var BYTE
tus  var byte

Sign="+"
SAY=0
Poz=0
Basla:

      if Bsol=1 then
         lcdout $fe,2,"  TUS= SOL "
         if poz=0 then 
           SAY=SAY+1
           IF SAY=0 then SAY=255 'say 255'i geçer ise 255 de kalsın
         endif
          
         if poz=1 then
            SAY=SAY-1
            IF SAY=255 then
            poz=0:say=1:sign="+"
         endif
       endif
      endif 
        
      If Bsag=1 then
         lcdout $fe,2,"  TUS= SAG "
         if poz=0 then SAY=SAY-1
         
         IF SAY=255 then
            poz=1
            Sign="-"
            SAY=0
          endif  
         if poz=1 then 
            SAY=SAY+1
            if SAY=0 then say=255 'say -255'e ulaşınca orada kalsın
         endif
       endif  
       
Ekran:
         
         lcdout $fe,$c0,sign,dec say,"   "
'         while porta>224 :wend
         pause 100
         goto basla


Ekranı gerekirse düzeltirsiniz. Üstte basılan tuşun sağ mı sol mu olduğu altta ise sayım sonucunu artı veya eksi işaretli olarak gösteriyor.
Şayet artı değerler için + işaretini kullanmayalım derseniz, program içinde gördüğünüz Sign="+" ifadesi yerine Sign=" " ifadesini yazınız (çift tırnak bir boşluk ve tekrar çifttırnak).

İsisde denedim güzel çalışıyor.
Programın sonlarında;
while porta>224:wend
şeklinde bir satır var ve şu anda aktif değil. Bu satırı aktif yaparsanız (başındaki tek tırnağı silerseniz aktif olur) elinizi tuşdan bırakmadan ikinci sayıyı saymaz. Bu durumda tuşa basıp bırakmanız gerekir.
Bu hali ile elinizi tuşdan çekmediğiniz taktirde sürekli sayı sayar.

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

turkbowling

proton basic ayrı bir dil galiba öylemi ?
biraz aydınlatırmısınız

ben protonu asm editör ve hex convert yapıcı olarak biliyorum

saygılarımla

OG

Proton (Proton+) basic tabanlıdır fakat PBP dan daha gelişmiştir. PBP yu biliyorsanız Proton+ ı öğrenmeniz çok kolay olacaktır. Proton+ için geliştirme çabaları bir hayli fazla ancak PBP için okadar görünmüyor. Fakat ben kendi işlerim için Proton+ a henüz ihtiyaç duymadım.

Proton için http://www.picbasic.org/proton_compiler.php
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.