Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: yolcu27 - 13 Temmuz 2016, 21:27:24

Başlık: for next döngüsünden çıkınca port sıfırlanması
Gönderen: yolcu27 - 13 Temmuz 2016, 21:27:24
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
   
   
   
Başlık: Ynt: for next döngüsünden çıkınca port sıfırlanması
Gönderen: bayelektronik - 14 Temmuz 2016, 08:17:19
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
   
   
Başlık: Ynt: for next döngüsünden çıkınca port sıfırlanması
Gönderen: yolcu27 - 14 Temmuz 2016, 12:32:50
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.