for next döngüsünden çıkınca port sıfırlanması

Başlatan yolcu27, 13 Temmuz 2016, 21:27:24

yolcu27

arkadaşlar bir senaryo doğrultusunda böyle bir kod yazdım fakat bir sorunum var.

for next döngüsü içerisinde 30sn sürecek şekilde ayarladım ve burada sorun yok istediklerimi yapıyorum ki kodlardan istediğim az çok anlaşılmakta.

sorunum ise bu 30 sn sonra portb deki ledlerimin sıfırlanması . ben şunu istiyorum for next döngüsü içerisinde enson hangi ledler açıksa portb0 ve b1 hariç diğerleri olduğu gibi yanık kalsın taki kapatma butonuna basılıncaya kadar yanmaları gerekiyor. kapat ve aç butonları kodlarda etiketler içinde belirli. takıldım kaldım .


@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE Pic16F628A, BOD_OFF
@ DEVICE Pic16F628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_off
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
define osc4
cmcon=7
trisa=%00011111
trisb=%00000000
x var word
porta=0
portb=0

basla:
    
    if porta.0=1 then
    goto bcON
    endif
    
    goto basla
    
bcON:
     portb=%00000011
     
    for x=1 to 14500
    pause 2
    if porta.1=1 then      
    gosub ac1
    
    endif
    if porta.2=1 then      
    gosub kapat1
   
    endif
    
    if porta.3=1 then      
    gosub ac2
  
    endif
    
    if porta.4=1 then      
    gosub kapat2

    endif
    next

    
         
    
    
ac1:
    PORTB=(PORTB & %11100011)+%00011100 
    return   
    
kapat1:
      PORTB=(PORTB & %11100011)+%00000000
      return
    
ac2:    
       PORTB=(PORTB & %00011111)+%11100000
       return
kapat2:
        PORTB=(PORTB & %00011111)+%00000000
        return
    
    
   

bayelektronik

#1
takip edebildiğim kadarıyla program kapalı döngü içerisinde değil. program sürekli başa döndüğü için otomatik olarak sıfırlanmış oluyor. basicte nasıl kullanılır tam emin değilim fakat programı

while(1)

{


}

mesaj birleştirme:: 15 Temmuz 2016, 08:17:57

şeklinde yaptır.

mesaj birleştirme:: 14 Temmuz 2016, 08:21:37

şimdi hatırladım goto komutuyla programın sonundan başına dallanma yap. alt programların sonundan değil ama nomal programın sonundan



Kod: [Seç]

@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE Pic16F628A, BOD_OFF
@ DEVICE Pic16F628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_off
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
define osc4
cmcon=7
trisa=%00011111
trisb=%00000000
x var word
porta=0
portb=0

basla2:  // buraya
basla:
   
    if porta.0=1 then
    goto bcON
    endif
   
    goto basla
   
bcON:
     portb=%00000011
     
    for x=1 to 14500
    pause 2
    if porta.1=1 then     
    gosub ac1
   
    endif
    if porta.2=1 then     
    gosub kapat1
   
    endif
   
    if porta.3=1 then     
    gosub ac2
 
    endif
   
    if porta.4=1 then     
    gosub kapat2

    endif
    next

    goto basla2     // burdan
         
   
   
ac1:
    PORTB=(PORTB & %11100011)+%00011100
    return   
   
kapat1:
      PORTB=(PORTB & %11100011)+%00000000
      return
   
ac2:   
       PORTB=(PORTB & %00011111)+%11100000
       return
kapat2:
        PORTB=(PORTB & %00011111)+%00000000
        return
   
   

yolcu27

Döngü sonuna
  PORTB=PORTB & %11111100

Ekledim ilk iki bit sınırlandı diğerlerinin kaydı kaldığı için açıksa açık kapaliysa kapalı kaldılar.bundan sonra sonsuz bod döngü ile kapatma ve başa sarma için butonları kontrol ettim istediğim oldu.