kesme (interrupt) ve write,read komutları

Başlatan tuncay37, 18 Mart 2013, 01:28:53

tuncay37

selamlar.

DISABLE
KESME:                                                                      'KESME RUTİNİ
   
    IF BUTON=0 THEN         
        a=0:b=0         
        WHILE BUTON=0
        WEND
        DAK1=DAK1+dak
        if dak1>500 then dak1=500
        write 5,dak1.highbyte:pause 10
        write 6,dak1.lowbyte :pause 10                   
        say1=say1+1
            if say1>9999 then
            say1=0
            say2=say2+1
                if say2>9999 then
                say1=0:say2=0
                endif
        endif
        WRITE 1,SAY1.highbyte:pause 10
        write 2,say1.lowbyte:pause 10
        WRITE 3,SAY2.highbyte:pause 10
        write 4,say2.lowbyte:pause 10                 
    ENDIF
   
geri_say:
          SAYAC=SAYAC+1     
          IF SAYAC=61 then     
             SAYAC=0                       
                 IF SN=0 THEN
                  SN=60
                  DAK1=DAK1-1
                    if dak1 dig 0=0 or dak1 dig 0=5 then
                    write 5,dak1.highbyte:pause 10
                    write 6,dak1.lowbyte :pause 10 
                    endif             
                  LCDOUT $FE,1               
               ENDIF
             SN=SN-1         
          ENDIF
         
          IF DAK1=0 AND SN=0 and sayac=60 THEN
            if b=1 then                        'shutdown yap
                b=0
                kapa=1:pause 10000:kapa=0
                endif
            if a=1 then                      'resetle
                a=0
                reset=1:pause 1000:reset=0
                b=1:dak1=10                  '10 dk sonra shutdown yapacak
                endif     
                   
            if ROLE1=1 then
            role1=0:role2=0:a=1:dak1=2       '2 dk sonra reset atacak
            endif
                INTCON.2=0
                LCDOUT $FE,1
                resume BASLA
                   
             ENDIF   
             INTCON.2=0                     'TMR0 Kesme bayrağı sıfırlanıyor
             RESUME
ENABLE


bu şekilde TMR0 kesmesinin içinde write ve read komutlarını kullandığımda programda arada bir sapıtma oluyor.
bir yerlerde okumuştum ama hatırlayamadım kesmenin içinde write kullanılmaz diye.
yazma ve okuma kısımlarını dışarıya nasıl taşıyabilirim.

ete

Sen bütün programı kesmenin içine yerleştirmişsin zaten. Mantığını çalıştır sanırım her 16 küsur ms de bir kesme oluşan bir programın içine bir sürü pause 10 yazarsan o kesme sistemi doğru çalışırmı? Çalışmaz elbette   O zaman ne yapacağım diye soracaksın sanırım. Cevabım şu , işaretçi kullanacaksın. Ancak programa bakınca orada bir sürü şart komutu yer aldığını görüyorum. Bunların hepsini bir işarete bağlamak zor olsabgerek. Bence yeniden bir program mantığı oluştursan iyi olur.
Teorik olarak kesme içinde zaman alan işlemlerden kaçınman gerekiyor. Her türlü pause komutu buna dahildir. Eproma yazma komutları da buna dahildir. Ayrıca resume basla şeklinde komut kullanmanda doğru değil. Stack taşması yaratır ve programı kitleyebilir yada yanlış çalışmasına sebep olabilir.

Ete

tuncay37

anladım hocam. bayağı uzun oldu. yalnız şunu öğrenmek istiyorum. yazma komutlarını kullanırken kesmeyi iptal etmek gerekiyor mu? Disable-enable bunun için yeterli mi?

tuncay37

pic basicin pdf sinde aşağıdaki notu buldum. RESUME komutuyla ilgili. buna göre RESUME den sonra etiket yazılabiliyor benim anladığıma göre.


See ON INTERRUPTf orm ore inform ation.
clockint: seconds = seconds + 1                ' Count time
RESUME                                                     ' Return to program after interrupt
error: High errorled                                   ' Turn on error LED
RESUME restart                                         ' Resume somewhere else



ete

Yazılmıyor demedim. Ancak yazarsan programında düzgün çalışmayacaktır. O komut yazıldığı gibi düzgün çalışmamaktadır. Basic de pek çok komut var. Bazıları kusurlu şekilde çalışıyor. Buda onlardan birisi.
Ete

torlaktr

o pauseler onda oldugu surece o kesme bitmez :)

Powered by EzPortal