Yazdıgım komutlar işlenmiyor ! ! !

Başlatan samadraaa, 26 Mayıs 2015, 17:31:57

samadraaa

Merhaba arkadaşlar pic basic pro da yazdıgım komutlar derlense de pic'e yazdıktan sonra  devrede komutlar çalışmıyor.

Aşağı daki kodu yazdıktan sonra d0 buttonuna basınca c2 deki ledin belirli süreler arasında yanıp sönmesini istiyorum fakat hiç bir şey olmuyor .
yardımlarınızı bekliyorum teşekkür ederim =)

TRISD.0=1
TRISC.2=0
PORTC.2=0

SAY VAR BYTE
SAY=0

IF PORTD.0=1 THEN

PORTC.2=1
PAUSE 500
PORTC.2=0

WHILE SAY<81
PAUSE 1000
SAY=SAY+1
WEND

PORTC.2=1
PAUSE 1300
PORTC.2=0
pause 7902
PORTC.2=1
PAUSE 8940

ENDIF

END

ete

Hiç bir şey olmaması doğal. Kod kimin için yazılmış belli değil. Sigorta ayarı diye bir şey yok.
Üstelik şemada koymamışsın elemanlar doğrumu bağlı bilemiyorum.

Ete


samadraaa

#2
Devreyi daha önce çalıştırıyordum . Sadece yeni yazdıgım yazılımlarda bir sıkıntı oldu Microcode studio kullanıyorum önceden de böyle yapıyordum çalışıyordu fakat şuan çalışmıyor

ete

Kodun orjinal hali böyle olmamalı. Zira bu kodu ilk defa çalıştırdığında sen daha tuşa basmadan o end satırına kadar gelir ve orada bekler. Böylece kod da çalışmamış olur.
IF PORTD.0=1 THEN   satırından evvel,
BASLA: yazman ve en altta END satırından bir öncesinde GOTO BASLA yazarsan bu kod bir nebze olsun çalışır.

Ete

İlyas KAYA

ortada döngü de yok butona basılıp basılmadığını nasıl anlayacaksın ? elektrik vermeden önce D0 'ın 1 olmuş olması gerekiyor.
Öyle bile olsa start anında Power on reset yapılana kadar port rastgele değer alabilir yada sürekli sıfır konumunda kalabilir.

Şartlar karşılanmıyor ise program direk END yapıp duruyor.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

samadraaa

#5

Bu şekilde yeni bir yazılım yazdım dediklerinizi dikkata alarak

TRISD=%00000001
TRISC=%00000000
PORTC=%00000000
SAY VAR BYTE
SAY=0

BASLA :
IF PORTD.0=1 THEN
PORTC.2=1
PAUSE 500
PORTC.2=0
WHILE SAY<10
PORTC.2=0
PAUSE 1000
SAY=SAY+1
WEND
WHILE  SAY=10
PORTC.2=1
PAUSE 500
PORTC.2=0
PAUSE 500
WEND
ENDIF

GOTO BASLA
END

ete

#6
Birde deneyip sonucu söyleseydin iyi olacaktı ama kendine sakladın galiba.
Zaten eksik yazmışsın bu şekilde derlenirken hata verecektir. Değişken tanımlamalarını eklememişsin. Onlarıda ekle sonra derle.
Bir şey daha dikkatimi çekiyor;
WHILE SAY<10 diye başlayan bir satır var.  Bu satırdan evvel SAY=0 deyip SAY değerini sıfırlaman gerekir.
Yoksa SAY While wend döngüsü içinde 10 değerine ulaşır ve hep öyle kalır.

Ayrıca yine altta

WHILE  SAY=10
PORTC.2=1
PAUSE 500
PORTC.2=0
PAUSE 500
WEND
şeklinde satırların var. SAY=10 olarak bir önceki döngüden çıkılıp bu döngüye girecek program ve SAY değeri hiç değişemeyeceği için orada kilitlenip kalacaktır. Hiç bir zaman program oradan çıkamayacaktır. Bu yüzden sen istersen yine programın ilk haline dön bence. Yada Pause 500 ile WEND arasına SAY=0 yaz olsun bitsin. Gerçi buda mantıksız olur. O zaman While - wend komutlarına gerek kalmaz. Amacınınne olduğunu bilemediğimden başka öneride bulunamıyorum.

Ete


samadraaa

#7
DENEDİĞİMDE SAY=10 DA TAKILI KALDI DEDIGINIZ GIBI HOCAM PROGRAM DAHA YENI DENEME SANSIM OLDU O YÜZDEN BİRAZ GEÇ  CEVAP VERDİM SÖYLEDİKLERİNİZ DOĞRU BUNA GÖRE PROGRAMI DÜZELTTİM BU SEFER BAŞA ALABİLDİM ŞUAN BU PROGRAMDA 1.35DK DA YAN 500MS SONRA SÖN TARZI ŞEYLER EKLEMEK İSTEDİĞİMDE  DE PROGRAM ILK BASTA  YANIP 500MS SONRA SÖNÜYOR VE BİR DAHA HİÇ YANMIYOR..

'****************************************************************
TRISD=%00000001
TRISC=%00000000
PORTC=%00000000
SAY VAR BYTE
SAY=0
PAUSE 200

BASLA :
IF PORTD.0=1 THEN
PORTC.2=1
PAUSE 500
PORTC.2=0
SAY=0
WHILE SAY<811
PORTC.2=0
PAUSE 1000
SAY=SAY+1
WEND
PORTC.2=1
PAUSE 500
PORTC.2=0
PAUSE 500
ENDIF

GOTO BASLA
END

ete

Kodları düzelttim. Oradan alıp yeniden dene.

Ete

samadraaa

#9
tam anlayamadım da neredeki kodları düzelttiniz

bu şekilde yaptığımda 1.21 dk da yanıyor daha önce ki denemelerimde de sürekli 1.21 veya  1.20 de yanıyordu 1.35 olmuyor yapamıyorum

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 26.05.2015                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISD=%00000001
TRISC=%00000000
PORTC=%00000000
SAY VAR BYTE
SAY=0
BASLA :
IF PORTD.0=1 THEN
PORTC.2=1
PAUSE 500
PORTC.2=0
WHILE SAY<81
PORTC.2=0
PAUSE 1000
SAY=SAY+1
WEND
WHILE SAY=81
PORTC.2=1
PAUSE 500
PORTC.2=0
PAUSE 500
SAY=0
WEND
ENDIF

GOTO BASLA
END

ete

senin mesajına eklediğin kodu düzelttim dikkat et altında ete düzeltmesi ikazı mevcut.
Ete

samadraaa

Hocam 811 yerine 81 yazınca 1.35 dk olması gerekiyor bende 811 yerine 81 yazdım ve ışık 1.21 dakika sonra yandı yani bir türlü 1.35 dakika sonra ışıgın  yanmasını ayarlayamıyorum
T1CON=%00110001
TMR1H=$0B:TMR1L=$DC:PIR1.0=0
kullanarak  bir döngü yapmayı da bilmiyorum yardımcı olurmusunuz



ete

Ne yapmak istediğini daha düzgün anlatsan fena olmaz zira verdiğin bu kesik kesik açıklamalardan hiç bir şey anlaşılmıyor.
Ne yapacak bu kod parçası yada sen ne yapmak istiyorsun. Tuşa basmaktan başlasan iyi edersin.
1 dakika 35 sn nin ne kadar ms ettiğini birlikte hesaplayalım istersen.
1 dak=60 sn dir. 60+35=95 sn toplam süremiz var. bunu 1000 ile çarparsak 95.000 ms edecektir. Sen 1 sn lik (1000 ms) gecikme ile döngü çalıştırdığın için orada 81 yerine 95 yazman gerekirdi

İşi timer1 ile yapmak istersen şöyle olmalı
KES var BYTE 
şeklinde bir KES değişkeni tanımla.

Sonra,
basla:
IF PORTD.0=1 THEN
GOSUB UZUNSURE '1,35 DAK GEÇİRİP GERİ DÖNECEK
PORTC.2=1      'SONRA LEDİ YAKACAK
PAUSE 500      '500 MS YANIK KALACAK
PORTC.2=0      'SONRA LEDİ SÖNDÜRECEK
SAY=0
ENDIF
GOTO basla
UZUNSURE:
T1CON=%00110001:KES=0
UZUNBIR:
TMR1H=$0B:TMR1L=$DC:PIR1.0=0
WHILE PIR1.0=0:WEND
KES=KES+1
IF KES <190 THEN UZUNBIR  '(95*2=190 EDER)
RETURN


Bu işi yapmanın diğer bir yolu da şöyle olabilir. Bu daha basi bir yöntem.

IF PORTD.0=1 THEN
pause 47500
pause 47500
PORTC.2=1      'SONRA LEDİ YAKACAK
PAUSE 500      '500 MS YANIK KALACAK
PORTC.2=0      'SONRA LEDİ SÖNDÜRECEK
ENDIF
goto basla


Ete

Powered by EzPortal