PicBasic'te ARRAY Kullanımı

Başlatan aeronics, 30 Ocak 2012, 23:42:48

aeronics

Selam arkadaşlar
Yapmak istediğim birşey var ancak bir türlü beceremeyince sorayım dedim.
16F84A'nın porB sine 8 adet LED bağlıyorum. Amacım bunların sırayla yanması ve bunu yaparken array kullanmak.
Kodum şu şekilde
'--------------------
n var byte
n=-1
dongu:
n=n+1
high portb.(n)
pause 500
goto dongu
end
'--------------------

Programdan beklediğim "portb.(n)" tanımında "(n)" yerine sıra ile 0, 1, 2, 3, ....... koyarak
portb.0
portb.1
portb.2
portb.3

koyması ancak compile ettiğimde "high portb.(n)" satırında "bad expression" hatası veriyor.
Nerede hata yapıyorum acaba??

Mucit23

Array dediğiniz nedir tam olarak bilmiyorum ama bir değişkene negatif bir sayı yükleyemezsiniz. Orada bir yanlışlık var.
Yapmak istediğiniz şey ledleri sağa sola kaydırmak ise aşağıdaki gibi bir işlem yapabilirsiniz.
X VAR BYTE
PORTB=1
PAUSE 300
BASLA:
FOR X=0 TO 6
  PORTB=PORTB*2
  PAUSE 300
NEXT
FOR X=0 TO 6
  PORTB=PORTB/2
PAUSE 300
NEXT
GOTO BASLA
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

halilgaliç

bildiğim kadarıyla basıcde port numarası olarak değişken atayamıyorsun bundan dolayı hata veriyordur

ete

#3
Ne istediğini anladım sanırım.
Örnekle açıklıyorum.
For I=0 to 7
PORTB.0[I]=1
Pause 100
Next

Bu kısa döngü B portunun pinlerini sırası ile HIGH yapar. Burada temel kriter komutun kullanım şeklidir.
Her nedense böyle garip bir format bulmuşlar. Format PORTB.0 şeklinde önce sıfır nolu pini işaret ediyorsun sonra yanına köşeli parentez içinde index numarası yada değişkenini ekliyorsun. PORTB.0[I] şeklinde. Index değeri değiştikçe sınırlar içinde kalmak şartı ile ilgili port pini set edilmiş oluyor. Aynı format değişken (register) bitlerinin set yada reset edilmesinde de kullanılabilir.
SAYI.0[3]=1  şeklinde Sayı registerinin 3 nolu biti HIGH yapılabilir.

Umarım aradığın budur.

Ete

kotan04

Alıntı yapılan: ete - 31 Ocak 2012, 07:48:32
Ne istediğini anladım sanırım.
Örnekle açıklıyorum.
For I=0 to 7
PORTB.0[I]=1
Pause 100
Next

Bu kısa döngü B portunun pinlerini sırası ile HIGH yapar. Burada temel kriter komutun kullanım şeklidir.
Her nedense böyle garip bir format bulmuşlar. Format PORTB.0 şeklinde önce sıfır nolu pini işaret ediyorsun sonra yanına köşeli parentez içinde index numarası yada değişkenini ekliyorsun. PORTB.0[I] şeklinde. Index değeri değiştikçe sınırlar içinde kalmak şartı ile ilgili port pini set edilmiş oluyor. Aynı format değişken (register) bitlerinin set yada reset edilmesinde de kullanılabilir.
SAYI.0[3]=1  şeklinde Sayı registerinin 3 nolu biti HIGH yapılabilir.

Umarım aradığın budur.

Ete
vayyy çok güzel bir özellik bu benim işime çok yarayacak saygılar ete hocam

aeronics

ete Hocam çok sağolasın.
Köşeli parantez haricinde herşeyi denemiştim ama neden köşeli parantezi denemediğimi hala anlayabilmiş değilim.

ELZEMEFE

#6
arkdaşlar bu mantığa göre
bir  dizinini bitlerini portb.0 pininden gödermek istesek
x var byte [4]
d var byte
avar byte
t var byte


for d=0  to 4
t=x[d]
  for a=0 to 7
  portb.0=t.0[a]
  next
next 

yada


for d =0 to 4

  for a=0 to 7
  portb.0=x[d].0[a]
  next

next


hangisi doğru olur





ete

İki yöntemde teorik olarak doğru. Ancak birincisi çalışır ikincisi çalışmaz. Muhtemelen syntax hatası verecektir.

Ete

has_artvin_li

#8
Alıntı yapılan: ete - 31 Ocak 2012, 07:48:32
Ne istediğini anladım sanırım.
Örnekle açıklıyorum.
For I=0 to 7
PORTB.0[I]=1
Pause 100
Next

Bu kısa döngü B portunun pinlerini sırası ile HIGH yapar. Burada temel kriter komutun kullanım şeklidir.
Her nedense böyle garip bir format bulmuşlar. Format PORTB.0 şeklinde önce sıfır nolu pini işaret ediyorsun sonra yanına köşeli parentez içinde index numarası yada değişkenini ekliyorsun. PORTB.0[I] şeklinde. Index değeri değiştikçe sınırlar içinde kalmak şartı ile ilgili port pini set edilmiş oluyor. Aynı format değişken (register) bitlerinin set yada reset edilmesinde de kullanılabilir.
SAYI.0[3]=1  şeklinde Sayı registerinin 3 nolu biti HIGH yapılabilir.

Umarım aradığın budur.

Ete


Ya ETE hocam Allah sizden razı olsun. yani şu anda size söylemek istediğimi bir anlasanız varya daha başka bişiy söylememe gerek kalmaz ;) İşte olay budur ya Emeğinize yüreğinize sağlık...


Peki acaba ben aynı bu işlemi Micro C ile nasıl yapabilirim yani aslında köşeli parantez yerine farklı bir döngü ile içinden çıkılabilir ama bu defa zaman olayları sıkıntı çıkartabileceği için ve daha da önemlisi benim temeli öğrenmeden üzerine bina yapmaya karşı olmam yüzünden araştırmaya çalışıyorum da

mg1980

#9

  char t;
  for(t=0;t<7;t++){
  delay_ms(100);
  GPIOB_ODR<<=1;
  }

Powered by EzPortal