select case kullanma

Başlatan dedim, 12 Temmuz 2015, 20:05:30

dedim

select case kullanarak program bologunu bu case lerin içinde calıstırmak mumkunmudur.case kullanma istegim bir buton ile degişik zamanlarda aynı programı calıstırmak olabilirmi.birinde 5 sanıye birinde 10 sanıye gibi yapılabilinirmi?

ete

Sorunun cevabı evet. Ancak koşullu evet. Amacını tam olarak gözümde canlandıramıyorum.
İşlemci imkanları dahilinde olan işler için olabilirmi diye soru sormamak lazım. Olabilir ancak yapmasını bilirsen.
Bilmediğini de spesifik olarak sormak lazım. Yani ilgili kod parçalarınıda ekleyip soruyu bunlar üzerinden sormak gerekir.
Çok fazla genel soru sorunca ucu açık oluyor ve net cevap vermek pek mümkün olamıyor maalesef.

Ete

dedim

ete usta  bu program da select case ile aynı program blogunu sadece zamanları degiştirerek adc ye baglı olan tus ile degiştirmek istedim ama basaramadım.kopyala yapıstırdan ılerı gidemedım.
Device = 16F88
Xtal 4
@ CONFIG_REQ
@__CONFIG _CONFIG1, HS_OSC & WDT_OFF & PWRTE_OFF & CP_OFF & CPD_OFF &  IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF

Declare Adin_Res 10
Declare Adin_Tad FRC     
Declare Adin_Stime 50

ANSEL=%00000001   'ra0 anolog giriş         
ADCON1.7=1
ADCON0=%01000000
CMCON=7

Symbol LED_0=PORTB.2          ; SİS RÖLESİNİ KONTROL
Symbol LED_1=PORTB.1          ; FAR RÖLESİNİ  KONTROL
Symbol LED_2=PORTB.4          ; İÇ AYDINLATMA RÖLESİ KONTROL
Symbol ALARM1=PORTB.5         ;TETİK 1 SİNYAL UCU 
Symbol SARJ=PORTB.7           ;ARAC ÇALIŞTI SİNYAL UCU
;SYMBOL TUS=PORTA.0

Output LED_0
Output LED_1
Output LED_2


;INPUT TUS
Input SARJ
Input ALARM1

Dim I As Byte
Dim  HAM  As  Word 
Dim VOLT  As  Word
Dim SIRA  As Byte

PORTA=0                                                   
PORTB=0                                                 
DelayMS 100
;-------------------------------------------------------------------------------
BASLA:
While HAM <100: ADCIN 0, HAM: Wend       'tusa basılıncaya kadar bekle
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
DelayMS 5
While HAM >800: ADCIN 0, HAM: Wend     'tus bırakılıncaya kadar bekle
DelayMS 5
   
BASLA_BIR:
GoTo TUSBAK
Select Case SIRA
Case 0
GoTo BIR
Case 1
GoTo IKI

Case Else
GoTo BASLA_BIR
End Select
GoTo BASLA_BIR

DelayMS 5
BIR:
While HAM <1000
ADCIN 0,HAM
HAM=ham+1                                                     
VOLT=(HAM */ 1250)/100
             If ALARM1=1 And HAM<9 Then
           While ALARM1 ==0 :Wend
         GoSub follow_ac1
       Else
     GoSub follow_kapa1
   EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM<9 Then             
DelayMS 500
   GoSub ROLE_AC
    Else
     DelayMS 1
   GoSub ROLE_KAPA
EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM>12 Then
  DelayMS 10                             
   GoSub ROLE_KAPA                     
  EndIf
GoTo BASLA_BIR
;-------------------------------------------------------------------------------
follow_ac1:
High LED_0                                 
High LED_2                                 
GoSub ZAMAN1                                 
Low LED_0                                               
Low LED_2                                   
Return
;-------------------------------------------------------------------------------
follow_kapa1:
Low LED_0                                               
Low LED_2                                     
Return
;-------------------------------------------------------------------------------
ROLE_AC:
High LED_1
GoSub ZAMAN2
GoTo BASLA_BIR                                 
Return
;-------------------------------------------------------------------------------
ROLE_KAPA:                                   
Low LED_1
Return
;-------------------------------------------------------------------------------
ZAMAN:
For I= 1 To 100   Step 1
If SARJ =1 Then GoTo BASLA_BIR     
     DelayMS 100
    Next
Return
;-------------------------------------------------------------------------------
ZAMAN1:
For I= 1 To 40  Step 1
DelayMS 100
Next
Return
;-----------------------------------------------------------------------------------
ZAMAN2:
For I= 1 To 100  Step 1
     DelayMS 100
    Next
Return
GoTo BIR

TUSBAK:
ADCIN 0, HAM             
       If HAM>835 Then
       SIRA=SIRA+1
       If SIRA>2 Then SIRA=0
       EndIf
       Wend
       GoTo BASLA_BIR
       
       
IKI:

While HAM <1000
ADCIN 0,HAM
HAM=ham+1                                                     
VOLT=(HAM */ 1250)/100
             If ALARM1=1 And HAM<9 Then
           While ALARM1 ==0 :Wend
         GoSub follow_ac1
       Else
     GoSub follow_kapa1
   EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM<9 Then             
DelayMS 500
   GoSub ROLE_AC
    Else
     DelayMS 1
   GoSub ROLE_KAPA
EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM>12 Then
  DelayMS 10                             
   GoSub ROLE_KAPA                     
  EndIf
GoTo BASLA_BIR
;-------------------------------------------------------------------------------
follow_ac11:
High LED_0                                 
High LED_2                                 
GoSub ZAMAN11                                 
Low LED_0                                               
Low LED_2                                   
Return
;-------------------------------------------------------------------------------
follow_kapa11:
Low LED_0                                               
Low LED_2                                     
Return
;-------------------------------------------------------------------------------
ROLE_AC1:
High LED_1
GoSub ZAMAN12
GoTo BASLA_BIR                                 
Return
;-------------------------------------------------------------------------------
ROLE_KAPA1:                                   
Low LED_1
Return
;-------------------------------------------------------------------------------
ZAMAN11:
For I= 1 To 400  Step 1
DelayMS 100
Next
Return
;-----------------------------------------------------------------------------------
ZAMAN12:
For I= 1 To 1000  Step 1
     DelayMS 100
    Next
Return
Wend         
GoTo BASLA_BIR

       
While HAM >835: ADCIN 0, HAM: Wend
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
GoTo BASLA
End       
     


semada rarda mevcutur.ete ustam rica etsem bakabilirmisin

ete

Kopyala yapıştır ile bir yere varılamayacağını daha önce öğrenmiş idin. Aynı yoldan devam ediyorsun.
Basic derslerine çalışıp programlama genel bilgini geliştirip kaabiliyetinide artırman gerekiyor.
Bu şekilde olmaz sürekli birirlerinden yardım almadan bir adım gidemezsin. Mantık geliştirmen gerekiyor.

Bak yaptığın hataya bunu ben bir bakışta görebiliyorum sen ise yazarken bile farkında olmuyorsun.
BASLA_BIR:
GoTo TUSBAK
Select Case SIRA
....

GoTo TUSBAK komutu programı TUSBAK isimli etikete gönerir. Oraya bakalım şimdide;
ADC kanalını okuyup en altta yer alan;
GoTo BASLA_BIR komutu ile tekrar BASLA_BIR etiketine gelir orada GOTO TUSBAK görür ve tekrar TUSBAK etiketine gider. Anlayacağın program sonsuz döngüye girer. Bu yüzden alt programlara GOSUB ile gidip oradan dönerken RETURN ile döneriz. Bu sayede program geri döndüğünde yer olarak GOSUB TUSBAK etiketinden bir sonraki satıra dönerek sonsuz döngü yaratmamış olur.
Bu olay sana şunu anlatmalı. Bir defa yazdığın kodları kafanda çalıştıracaksın. Program nereye gidiyor , nereye dönüyor bunları benim yaptığım gibi çözmen gerekiyor. Sadece yazmakla olmaz. aynı zamanda kafanda da çalıştıracaksın kodu.
Böylece ancak mantık hatalarını bulursun. Tecrüben artmış olur.
Bak daha asıl konuya bile geçemedik. Neden programın düzgün değil mantık hatası var. Düzelt bunları biraz daha çalış lütfen.

Ete



enginkanat

Hocam aslında bende de bu select case ile ilgili bir sıkıntı var.  anlayamadığım için programlarımda da kullanamadım.
mesela ben bir potansiyometre ile 10 farklı işlem yapmak istesem 1024 değerini 10'a böldüğümde 102,4 sayısını elde ederim
SELECT CASE menu diyerek başlasam
CASE 0-102
X etiketine git
CASE 102-204 arasında ise
Y etiketine git nasıl yaparım?

sonuçta
IF adc>0 AND adc<103 THEN X
IF adc>102 AND adc<205 THEN Y ...
şeklinde de kullabilirim ama SELECT CASE ile nasıl yapılır?

dedim

ete usta dedigin gibi goto komutundaki hatayı gosub olarak degiştirdim.yarım yamalakta olsa calısıyor.tusbak etiketine gittigi  zaman case leri şecerken devre kapatıyor acıyor sonra istedigim case den baslıyor.hatam bu sefer tusbak etıketınde bu yazılımda devreyı adc ye baglı tusla acıp kapatabiliyorum.ama select case komutunda program bunu kendı yapıyor.select case yı debugda takıp ettigim zaman basla komutunu icra edıp devre kendını acıyor sonra tusbak etıketıne gidip sıradakıne bakıyor hangi case secilirse onun içine gidicek ama en basa dönuyor sonra yıne acıyor devreyı ondan sonra case 0 ise BIR: etiketine gidiyor.buton ıle degıstırdıgım zaman tekrar en basa donuyor devre yine kendını acıyor ondan sonra case 1 ise IKI: etiketine gidiyor.

Device = 16F88
Xtal 4
@ CONFIG_REQ
@__CONFIG _CONFIG1, HS_OSC & WDT_OFF & PWRTE_OFF & CP_OFF & CPD_OFF &  IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF

Declare Adin_Res 10
Declare Adin_Tad FRC     
Declare Adin_Stime 50

ANSEL=%00000001   'ra0 anolog giriş         
ADCON1.7=1
ADCON0=%01000000
CMCON=7
TRISA=%00000001
TRISB=%00000000
Symbol LAMP=PORTB.0
Symbol LED=PORTB.6
Symbol LED_0=PORTB.2         
Symbol LED_1=PORTB.1         
Symbol LED_2=PORTB.4         
Symbol ALARM1=PORTB.5         
Symbol SARJ=PORTB.7         


Output LED_0
Output LED_1
Output LED_2
Output LED
Output LAMP

Input SARJ
Input ALARM1

Dim I As Word
Dim  HAM  As  Word 
Dim VOLT  As  Word
Dim SIRA  As Byte

PORTA=0                                                   
PORTB=0                                                 
DelayMS 100
;-------------------------------------------------------------------------------
BASLA:
While HAM <100: ADCIN 0, HAM: Wend       
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
DelayMS 5
While HAM >800: ADCIN 0, HAM: Wend     
DelayMS 5
   
BASLA_BIR:
GoSub TUSBAK
Select Case SIRA
Case 1
GoTo BIR
Case 2
GoTo IKI

Case Else
GoTo BASLA_BIR
End Select
GoTo BASLA_BIR


BIR:
High LAMP
DelayMS 500
Low LAMP
DelayMS 500
While HAM <1020
ADCIN 0,HAM
HAM=ham+1                                                     
VOLT=(HAM */ 1250)/100
             If ALARM1=1 And HAM<9 Then
           While ALARM1 ==0 :Wend
         GoSub follow_ac1
       Else
     GoSub follow_kapa1
   EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM<9 Then             
DelayMS 500
   GoSub ROLE_AC
    Else
     DelayMS 1
   GoSub ROLE_KAPA
EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM>12 Then
  DelayMS 10                             
   GoSub ROLE_KAPA                     
  EndIf
GoTo BASLA_BIR
;-------------------------------------------------------------------------------
follow_ac1:
High LED_0                                 
High LED_2                                 
GoSub ZAMAN1                                 
Low LED_0                                               
Low LED_2                                   
Return
;-------------------------------------------------------------------------------
follow_kapa1:
Low LED_0                                               
Low LED_2                                     
Return
;-------------------------------------------------------------------------------
ROLE_AC:
High LED_1
GoSub ZAMAN2
GoTo BIR                                 
Return
;-------------------------------------------------------------------------------
ROLE_KAPA:                                   
Low LED_1
Return
;-------------------------------------------------------------------------------
ZAMAN1:
For I= 1 To 400  Step 1
DelayMS 10
Next
Return
;-----------------------------------------------------------------------------------
ZAMAN2:
For I= 1 To 1000  Step 1
     DelayMS 10
    Next
Return
GoTo BIR
Wend

TUSBAK:
ADCIN 0, HAM             
       If HAM>835 Then
       SIRA=SIRA+1
       If SIRA>3 Then SIRA=0
       EndIf
     Return

IKI:
High LED
DelayMS 250
Low LED
DelayMS 250
While HAM <1000
ADCIN 0,HAM
HAM=ham+1                                                     
VOLT=(HAM */ 1250)/100
             If ALARM1=1 And HAM<9 Then
           While ALARM1 ==0 :Wend
         GoSub follow_ac11
       Else
     GoSub follow_kapa11
   EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM<9 Then             
DelayMS 500
   GoSub ROLE_AC1
    Else
     DelayMS 1
   GoSub ROLE_KAPA1
EndIf
;-------------------------------------------------------------------------------
If SARJ=1 And HAM>12 Then
  DelayMS 10                             
   GoSub ROLE_KAPA1                     
  EndIf
GoTo BASLA_BIR
;-------------------------------------------------------------------------------
follow_ac11:
High LED_0                                 
High LED_2                                 
GoSub ZAMAN11                                 
Low LED_0                                               
Low LED_2                                   
Return
;-------------------------------------------------------------------------------
follow_kapa11:
Low LED_0                                               
Low LED_2                                     
Return
;-------------------------------------------------------------------------------
ROLE_AC1:
High LED_1
GoSub ZAMAN12
GoTo IKI                                 
Return
;-------------------------------------------------------------------------------
ROLE_KAPA1:                                   
Low LED_1
Return
;-------------------------------------------------------------------------------
ZAMAN11:
For I= 1 To 800  Step 1
DelayMS 10
Next
Return
;-----------------------------------------------------------------------------------
ZAMAN12:
For I= 1 To 2000  Step 1
     DelayMS 100
    Next
Return
Wend         


       
While HAM >835: ADCIN 0, HAM: Wend
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
High LED_2
DelayMS 250
Low LED_2
DelayMS 250
GoTo BASLA

End       

         


BIR ve IKI etiketlerinde bulunan ledler hangi case secılı onu görebilmek için koydum.söyle yapmak ıstıyorum ama olmadı.
devreyi butona basarak actım.2 defa LED_2 yandı söndü devrenın acık oldugunu anlıyorum.ben tusa tekrar bastıgım zaman case 0 ise BIR etiketine gidip ordakı işlemlere yapmasını istemıstım.tekrar tusa bastıgım da da case 1 ise IKI etiketine gidip ordakı ıslemlerı yapmasını istemıstım.

MS_59

engin
select case ile istediğini yaptım aslında bende bilmiyordum ama buldum
SELECT CASE MENU
         CASE IS <102 :GOTO ETIKET
         CASE IS <204 :GOTO ETIKET
         CASE IS <306 :GOTO ETIKET
         CASE IS <408 :GOTO ETIKET
         CASE IS <510 :GOTO ETIKET
         CASE IS <612 :GOTO ETIKET
         CASE IS <714 :GOTO ETIKET
         CASE IS <816 :GOTO ETIKET
         CASE IS <918 :GOTO ETIKET
         CASE IS <1020:GOTO ETIKET
END SELECT
mehmet

enginkanat


Powered by EzPortal