PİC BASİC DE HAFIZA KULLANIMI YARDIM

Başlatan veli dayı, 02 Mayıs 2012, 09:47:27

veli dayı

@ DEVICE PIC16F84A
@ DEVICE PIC16F84A, WDT_OFF
@ DEVICE PIC16F84A, PWRT_ON
@ DEVICE pic16F84A, PROTECT_OFF 'Kod Koruma kapalı
@ DEVICE PIC16F84A, PROTECT_OFF
@ DEVICE PIC16F84A, XT_OSC
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.
  saat var byte 48
  AB var byte 50
   AC var byte 51
    AD var byte 52
    a var byte  53
    b var byte 54
    d var byte 55
    e var byte 56
    f var byte 57
    h var byte 58
    g var byte 59
   
      AB=0
      AC=0
      AD=0
     
     TOPLAM VAR WORD
TRISA=%11111
TRISB=%00000000
PORTA=0
PORTB=0
PAUSE 200  ' LCD nin kullanıma hazır hale  gelebilmesi için gerekli süre
LCDOUT $FE,1  ' Ekran silindi
CLEAR
BASLA:

FOR a=0 to 9
pause 1
saat=saat+1

SELECT CASE SAAT 'DEGISKENE GORE SECIM YAPAR
CASE 1'DEGISKENIN DEGERI BIR ISE ASAGIDAKI KOMUTLARI ISLE
AB=1
CASE 2
AC=2
CASE 3
AD=4
CASE 4
a=1
CASE 5
b=1
CASE  6
g=1
CASE   7
d=10
CASE    8
e=4
CASE     9
f=1


END SELECT 'KALIB

  next
  TOPLAM=AB+AC+AD+a+b+g+d+e+f
  LCDOUT $FE,1
  LCDOUT $FE,$84,DEC2 TOPLAM,":"
    SAAT=0

END

Böyle bir kod yazdım ve  derledim proteusta simüle ettiğim zaman  toplam sonucunu gerçek değerde alamıyorum.hep yanlış sonuç veriyor.sizce neden olabilir.

Mucit23

Ne yapmak istiyorsun ilk önce onu söyle...
Bu şekilde toplama işleminin sonucu olarak Toplam değişkeninin değeri sırası ile 1, 3, 7, 8, 9, 10, 20, 24, 25 dir.

Tabi gerçekte döngü arasına delay koymadığın için hep 25 değerini görürsün.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

veli dayı

evet dediğin gibi hep aynı rakamı görüyorum(34 sayısını).simüle temk amacıyla bu şeil bir program yazdım. gerçeğinde a=porta f=porta  şeyler olacak yani sayac her saydığında porta yı okuyup her birini farklı değişkenlere atacak ve bu değişkenlerin toplam değerini verecek. bunu yapmaya çalışıyorum ama toplam değeri doğru çıkmıyor bir türlü.bekleme süresini tam olarak nereye atayım.

veli dayı

programda a değişkenini hem for next döngüsünde hemde döngü içerisinde değişken ataması yaparken kullanmışım hata oradan kaynaklanmış şimdi canavar gibi çalışıyor.cevabın için yinede teşekkürler.

ete

#4
Programda bazı hatalar var.

Hata-1: Bir döngü değişkeni kullandığın zaman (a) onu döngü içinde başka işler için kullanamazsın. Ona döngü içinde değer vermezsin. Sen ne yapmışsın.? For a= şeklinde a değişkeni ile döngü kurmuşsun ama select case seçim kısmında ;
CASE 4
a=1

şeklinde döngü değişkenine yeniden değer vermişsin. Bu yanlış
Bir döngüyü sıfırdan başlatıp bir sayıya kadar getirmek demek sayı+1 defa döngüyü çalıştırmak demektir. Senin örneğinde
For a=0 to 9 demek o döngünün 10 defa çalışacağına işarettir. Halbuki sende select case kısmında yalnızca 9 seçeneğin var.
Halbuki döngü 0 dan başlamaktadır ve case seçeneğinde ise sıfır seçeneği bulunmamaktadır. Bu bilinçli yapılmış ise bir kusur değil ama sende a=4 olduğunda yeniden A=1 yapılarak döngü başa dönmektedir. Bu ise anlamsız saçma sonuşlar ortaya çıkartmaktadır.

a yerine birde I var byte şeklinde bir değişken tanımlayıp döngüyüde;
For I=0 to 9 şeklinde tanımlarsanız doğru sonucu görebilirsiniz.

Ete

veli dayı

çok sağolun döngüde sıfırı hiç hesaba katmamıştım.hemen onu da düzeltiyorum.teşekkürler

Powered by EzPortal