MENU GEÇ GELME PROBLEMİ

Başlatan Makmuh, 29 Mart 2018, 15:46:57

Makmuh

İyi günler
8 tuşlu bir kumanda devresi yapıyorum. ilk sorunum şu bu tuşlara bastığımgım zaman bazen hemen fonksiyonu yerine getiriken bazende yerine getirmesi için uzun sure basmam gerekiyor. Bunun sebebi ne olabilir ve nasıl düzeltebilirim


'****************************************************************
'*  Name    : haftimer_03.BAS                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 12.05.2011                                        *
'*  Version : 1.5                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'16F877A işlemci
@ __config _BODEN_OFF  & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC


CMCON=7
'-------------------------------------------------------------------------------
DEFINE OSC 4

ADCON1=7
OPTION_REG.7=0
'***********Port Ayarları***********
TRISA=%00001100
TRISB=%11111111
TRISC=%10000000
TRISD=%00000000
TRISE=%10000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

'***********LCD Tanımlamaları***********

DEFINE LCD_DREG        PORTD    'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT        4        'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG        PORTC    'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT        7        'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTC   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    6       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG    PORTC    'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT    5        'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS     4        'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES    2        'LCD Kaç sıra yazabiliyor   

'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'İ Harfi
LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 'Ş Harfi


'****************SEMBOLLER*********************

SYMBOL ARTI  =PORTB.4
SYMBOL OK=PORTB.5
SYMBOL EKSI=PORTB.6
symbol FAN =PORTB.7
SYMBOL BEKLEME=PORTB.3
SYMBOL BESLEME=PORTB.2
SYMBOL REDUKTOROFF=PORTB.1
SYMBOL ELLE=PORTB.0
SYMBOL COMM_PIN =PORTC.0
SYMBOL FANROLE  =PORTC.1
SYMBOL POMPAROLE  =PORTC.2
SYMBOL REDUKTORROLE  =PORTC.3
SYMBOL ODATERMOSTAT  =PORTD.1
SYMBOL POMPALED=PORTA.0
SYMBOL FANLED=PORTA.2
SYMBOL REDLED=PORTA.1



'***********Sensör Tanımlamaları***********

Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR    WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI    CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için
DERECE      CON 223         ' ° işareti
ISARET      VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR word       ' Div32 bit hesap için geçici değişken

ALTSET      VAR WORD        ' ALT ISI DEĞERİ TANIMLANDI
FANSET     VAR WORD         ' FAN SET DEĞERİ 0-5 ARASI
SET         VAR WORD         ' SET DEGERI
SBESLE       VAR WORD
SBEKLE       VAR WORD
D            VAR BYTE
I            var byte

'***********LCD yi Kullanıma Hazır Hale Getir***********

LOW PORTC.6 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.



lcdout $FE,1
gosub sensoroku
PAUSE 200   ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre

LCDOUT $FE,$80,"ULKU MUHENDISLIK"                 
LCDOUT $FE,$C0, "*0332 447 3355*"
pause 550
lcdout $FE,1 
SET=40
SBEKLE=300
SBESLE=5
Gosub BEKLE


'***********Program Başlangıcı***********

BASLA:

GOSUB SENSOROKU
LCDOUT $fe,$80,"ISI=", dec ISI,",",dec1 float,"  "
'    LCDOUT $FE,$80,"KAZAN:",DEC ISI,"C SET:",#set,"C"
    LCDOUT $FE,$C0, #SBEKLE," BEKLE ",#SBESLE, " BESLE"
    'LCDOUT $FE,$C0, "BEKLE:",#SBEKLE, "BESLE:" ,#SBESLE
    for I=0 to 200
'****************SICAKLIK AYAR KISMI******
        IF ARTI=0 OR EKSI=0 THEN
        GOTO SETAYAR
        ELSE
        ALTSET=SET-4
        ENDIF
'***************FAN AYAR KISMI***********
         IF FAN=0 THEN
        GOSUB FANAYAR
        PAUSE 50
         ENDIF
'***************BEKLEME AYAR KISMI***********
         IF BEKLEME=0 THEN
        GOSUB BEKLEMEAYAR
        'PAUSE 50
         ENDIF
'***************BEKLEME AYAR KISMI***********
     IF BESLEME=0 THEN
    GOSUB BESLEMEAYAR
    'PAUSE 50
     ENDIF
'***************ELLE YUKLEME KISMI***********

    IF ELLE=0 THEN
    GOSUB ELLEYUKLE
    ' PAUSE 50
     ENDIF
'*************ISI KARSILASTIRMA KISMI***************
    if ISI=>SET then
    FANROLE=0
    ENDIF
    IF ISI<ALTSET THEN
    FANROLE=1
     ENDIF

     IF ISI>34 THEN
     POMPAROLE=1
     ELSE
     ENDIF
     IF ISI<29 THEN
     POMPAROLE=0
     ELSE
     ENDIF
     
     pause 4
   next
   gosub bekle 

GOTO BASLA


'************************ SENSOR OKU **************************
SENSOROKU:
    OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
    return

Bekle:
'           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
'           IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir   
Hesapla:                 ' Ham değerden Santigrat derece hesabı

    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       HAM=~HAM+2
    ENDIF
    ISI = ((HAM*10)/16)
    FLOAT = ISI//10
    ISI=ISI/10
    RETURN
'*************************** SICAKLIK AYARAYAR YAP************************
SETAYAR:
lcdout $FE,1     
LCDOUT $FE,$80,"SICAKLIK AYARLA"                 
LCDOUT $FE,$C0, "SET : ",#set,".0 C "       

pause 75
     
    if set=75 then
    else
        if ARTI=0 then 
        set=set+1
        pause 100
        endif
    endif
     
    if set=35 then
     else
         if EKSI=0 then
          set=set-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto SETAYAR   

'*************************** FAN AYARAYAR YAP************************
FANAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"FAN HIZ AYARLA"                 
LCDOUT $FE,$C0, "FAN: ",#FANSET,". KADEME"       

pause 75
     
    if FANSET=5 then
    else
        if ARTI=0 then 
        FANSET=FANSET+1
        pause 100
        endif
    endif
     
    if FANSET=0 then
     else
         if EKSI=0 then
          FANSET=FANSET-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto FANAYAR
'*************************** BEKLEME AYARAYAR YAP************************
BEKLEMEAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"BEKLEME SURE AYR"                 
LCDOUT $FE,$C0, "BEKLE: ",#SBEKLE," SANiYE"       

pause 75
     
    if SBEKLE=400 then
    else
        if ARTI=0 then 
        SBEKLE=SBEKLE+5
        pause 100
        endif
    endif
     
    if SBEKLE=60 then
     else
         if EKSI=0 then
          SBEKLE=SBEKLE-5
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto BEKLEMEAYAR
'*************************** BESLEME AYARAYAR YAP************************
BESLEMEAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"BESLEME SURE AYR"                 
LCDOUT $FE,$C0, "BESLE: ",#SBESLE," SANiYE"       

pause 75
     
    if SBESLE=20 then
    else
        if ARTI=0 then 
        SBESLE=SBESLE+1
        pause 100
        endif
    endif
     
    if SBESLE=1 then
     else
         if EKSI=0 then
          SBESLE=SBESLE-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
           
goto BESLEMEAYAR
'*************************** ELLE YUKLE************************
ELLEYUKLE:
IF ELLE=0 THEN
REDUKTORROLE=1
REDLED=1
ENDIF
IF ELLE=1 THEN
REDUKTORROLE=0

RETURN
ENDIF
GOTO ELLEYUKLE

END

ete

Programını olması gerektiği şekilde düzelttim yeniden üzerine yazdım. Bir çok kusur gördüm.
Bunlardan bazıları şöyle,
DEFINE OSC 8 demişsin ama sigorta ayarlarında XT_OSC seçili idi. XT seçimi 5 Mhz'e kadar çalışır üzerindeki frekanslar için XT yerine HS seçmen gerekir. Ama zaten simulasyondaki işlemci frekansı 4Mhz idi. Bu nedenle hepsini 4 Mhz yaptım.
Zaten sıcaklık okumasıda bu yüzden çalışmıyor idi. Düzeltmeyi yapınca oda düzeldi.
Programda gereksiz pause ler var. Hala daha var. Bu Pause komutunu ne çok seviyorsunuz yada neden bu kadar seviyorsunuz. Fayda dan çok zarar getiriyor genelde.

BU programda DS18B20 sensör kullanılıyor ve bu sensörün bir sıcaklık okuma çevrimi yaklaşık 750 ms sürer. Bu süre zarfında tedbir almaz isen programı bloke eder sensör okuması. Üstüne birde sen okumadan döndükten sonra Pause 500 yazmışsın oraya ki bu da butonlara ancak ve ancak 1250 ms sonra ulaşabileceğin anlamına geliyor.
Akıllıca bir sensör okuma algoritması şöyle olur.
- Sensöre okuma emrini ver ve geri dön (RETURN ile)
- Programdaki diğer işleri yap ve yaklaşık 750-800 ms vakit geçir. İşte bu sırada yüzlerce defa butonları kontrol edebilirsin.
- Sonra gidip sensörden okunan sıcaklığı al ve sıcaklığa çevirip geri dön.
Bu algoritmayı gerçekleştirmek amacı ile sensöre okuma emrini verdikten sonra 200 tane döngü kurdum. Butonları bu döngüde kontrol ettim ve araya pause 4 koyarak toplam süreyi yaklaşık 800 ms ye ye ayarladım. Döngü bitinci gidip sensörü okudum.
Hepsi bu.
Ete


Makmuh

Hocam teşekkür ederim.
DEFINE OSC 8 yapmaktaki amacım 8 mhz daha hızlı çalışır program su sıkıntı ortadan kalkar mı diye denemiştim. İşe yaramamımıştı onu orada unutmuşum. Ben bunu hiç öyle düşünmemiştim. 30 undan sonra program öğrenmeye çalışınca bi temelide olmayınca zorlanıyorum. Siz değerli hocalarımızda olmasa imkansız bir hale gelecek ama sağolun her zaman desteğiniz esirgemiyorsunuz. Allah razı olsun.

Makmuh

Hocam
Sizin derlediğiniz programa biraz komut felan ekledım  "crossing page boundary, ensure page bits are set"  bu hata pic hafızasının yeterlı olmadığı anlamına mı geliyor. programı kısaltmak yada baska bir pic mi geçmek gerektiğini söyluyor. Eğer öyleyse ne yapmak gerekir.




'****************************************************************
'*  Name    : ete.BAS                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 12.05.2011                                        *
'*  Version : 1.5                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'16F877A işlemci
@ __config _BODEN_OFF  & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC


CMCON=7
'-------------------------------------------------------------------------------
DEFINE OSC 4

ADCON1=7
OPTION_REG.7=0
'***********Port Ayarları***********
TRISA=%00001100
TRISB=%11111111
TRISC=%10000000
TRISD=%00000000
TRISE=%10000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

'***********LCD Tanımlamaları***********

DEFINE LCD_DREG        PORTD    'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT        4        'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG        PORTC    'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT        7        'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTC   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    6       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG    PORTC    'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT    5        'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS     4        'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES    2        'LCD Kaç sıra yazabiliyor   

'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'İ Harfi
LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 'Ş Harfi


'****************SEMBOLLER*********************

SYMBOL ARTI  =PORTB.4
SYMBOL OK=PORTB.5
SYMBOL EKSI=PORTB.6
symbol FAN =PORTB.7
SYMBOL BEKLEME=PORTB.3
SYMBOL BESLEME=PORTB.2
SYMBOL REDUKTOROFF=PORTB.1
SYMBOL ELLE=PORTB.0
SYMBOL COMM_PIN =PORTC.0
SYMBOL FANROLE  =PORTC.1
SYMBOL POMPAROLE  =PORTC.2
SYMBOL REDUKTORROLE  =PORTC.3
SYMBOL ODATERMOSTAT  =PORTD.1
SYMBOL POMPALED=PORTA.0
SYMBOL FANLED=PORTA.2
SYMBOL REDLED=PORTA.1
SYMBOL REDZROLE=PORTC.3
SYMBOL REDONOFF=PORTD.0



'***********Sensör Tanımlamaları***********

Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR    WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI    CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için
DERECE      CON 223         ' ° işareti
ISARET      VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR word       ' Div32 bit hesap için geçici değişken

ALTSET      VAR WORD        ' ALT ISI DEĞERİ TANIMLANDI
FANSET     VAR WORD         ' FAN SET DEĞERİ 0-5 ARASI
SET         VAR WORD         ' SET DEGERI
SBESLE       VAR WORD
SBEKLE       VAR WORD
D            VAR BYTE
I            var byte
ZBEKLE        VAR WORD
ZBESLE        VAR WORD
XT             var byte
YT             VAR BYTE
'***********LCD yi Kullanıma Hazır Hale Getir***********

LOW PORTC.6 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.



lcdout $FE,1
gosub sensoroku
PAUSE 200   ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre

LCDOUT $FE,$80,"ULKU MUHENDISLIK"                 
LCDOUT $FE,$C0, "*0332 447 3355*"
pause 550
lcdout $FE,1 
SET=40
SBEKLE=5
SBESLE=5
ZBEKLE=SBEKLE
ZBESLE=SBESLE
REDONOFF=1
XT=1
Gosub BEKLE


'***********Program Başlangıcı***********

BASLA:
IF XT=1 AND YT=1 THEN
GOSUB SAYAC
ENDIF

GOSUB SENSOROKU
'LCDOUT $fe,$80,"ISI=", dec ISI,",",dec1 float,"  "
    LCDOUT $FE,$80,"KAZAN:",DEC ISI,"C SET:",#set,"C"
    LCDOUT $FE,$C0, #ZBEKLE," BEKLE ",#ZBESLE, " BESLE"
    'LCDOUT $FE,$C0, "BEKLE:",#SBEKLE, "BESLE:" ,#SBESLE
    for I=0 to 200
'****************SICAKLIK AYAR KISMI******
        IF ARTI=0 OR EKSI=0 THEN
        GOTO SETAYAR
        ELSE
        ALTSET=SET-4
        ENDIF
'***************FAN AYAR KISMI***********
         IF FAN=0 THEN
        GOSUB FANAYAR
        PAUSE 50
         ENDIF
'***************BEKLEME AYAR KISMI***********
         IF BEKLEME=0 THEN
        GOSUB BEKLEMEAYAR
        'PAUSE 50
         ENDIF
'***************BEKLEME AYAR KISMI***********
     IF BESLEME=0 THEN
    GOSUB BESLEMEAYAR
    'PAUSE 50
     ENDIF
  '***************OTOMATİK ON OFF KISMI***********   
IF REDUKTOROFF=0 THEN
  GOSUB DE
ENDIF


 
 
 
'***************ELLE YUKLEME KISMI***********

    IF ELLE=0 THEN
    GOSUB ELLEYUKLE
    ' PAUSE 50
     ENDIF
'*************ISI KARSILASTIRMA KISMI***************
    if ISI=>SET then
    FANROLE=0
    ENDIF
    IF ISI<ALTSET THEN
    FANROLE=1
    YT=1
     ENDIF

     IF ISI>34 THEN
     POMPAROLE=1
     ELSE
     ENDIF
     IF ISI<29 THEN
     POMPAROLE=0
     YT=0
     ELSE
     ENDIF
     
     pause 4
   next
   gosub bekle 

GOTO BASLA


'************************ SENSOR OKU **************************
SENSOROKU:
    OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
    return

Bekle:
'           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
'           IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir   
Hesapla:                 ' Ham değerden Santigrat derece hesabı

    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       HAM=~HAM+2
    ENDIF
    ISI = ((HAM*10)/16)
    FLOAT = ISI//10
    ISI=ISI/10
    RETURN
'*************************** SICAKLIK AYARAYAR YAP************************
SETAYAR:
lcdout $FE,1     
LCDOUT $FE,$80,"SICAKLIK AYARLA"                 
LCDOUT $FE,$C0, "SET : ",#set,".0 C "       

pause 75
     
    if set=75 then
    else
        if ARTI=0 then 
        set=set+1
        pause 100
        endif
    endif
     
    if set=35 then
     else
         if EKSI=0 then
          set=set-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto SETAYAR   

'*************************** FAN AYARAYAR YAP************************
FANAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"FAN HIZ AYARLA"                 
LCDOUT $FE,$C0, "FAN: ",#FANSET,". KADEME"       

pause 75
     
    if FANSET=5 then
    else
        if ARTI=0 then 
        FANSET=FANSET+1
        pause 100
        endif
    endif
     
    if FANSET=0 then
     else
         if EKSI=0 then
          FANSET=FANSET-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto FANAYAR
'*************************** BEKLEME AYARAYAR YAP************************
BEKLEMEAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"BEKLEME SURE AYR"                 
LCDOUT $FE,$C0, "BEKLE: ",#SBEKLE," SANiYE"       

pause 75
     
    if SBEKLE=400 then
    else
        if ARTI=0 then 
        SBEKLE=SBEKLE+5
        pause 100
        endif
    endif
     
    if SBEKLE=60 then
     else
         if EKSI=0 then
          SBEKLE=SBEKLE-5
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
       
   
goto BEKLEMEAYAR
'*************************** BESLEME AYARAYAR YAP************************
BESLEMEAYAR:


lcdout $FE,1     
LCDOUT $FE,$80,"BESLEME SURE AYR"                 
LCDOUT $FE,$C0, "BESLE: ",#SBESLE," SANiYE"       

pause 75
     
    if SBESLE=20 then
    else
        if ARTI=0 then 
        SBESLE=SBESLE+1
        pause 100
        endif
    endif
     
    if SBESLE=1 then
     else
         if EKSI=0 then
          SBESLE=SBESLE-1
         pause 100
         endif
     endif
          if OK=0 then
         LCDOUT $FE,$80,"AYAR KAYDEDILDI "
     pause 1000
     goto basla
    endif
           
goto BESLEMEAYAR
'*************************** ELLE YUKLE************************
ELLEYUKLE:
IF ELLE=0 THEN
REDUKTORROLE=1
REDLED=1
ENDIF
IF ELLE=1 THEN
REDUKTORROLE=0

RETURN
ENDIF
GOTO ELLEYUKLE
  '*************DE DONGUSU*********
  DE:
  IF XT=0 THEN
  XT=1
  ENDIF
  IF XT=1 THEN
  XT=0
  ENDIF
  RETURN
  '**********SAYAC DONGUSU*****
  SAYAC:
  ZBEKLE=ZBEKLE-1
  IF ZBEKLE=0 THEN
  ZBEKLE=1
  REDUKTORROLE=1
  ZBESLE=ZBESLE-1
  IF ZBESLE=0 THEN
  ZBESLE=SBESLE
  ZBEKLE=ZBEKLE
  RETURN
  ENDIF
  ENDIF
  GOTO SAYAC
 

END

ete

Bu bir hata değil ikazdır. Bazı pic lerin hafızaları belirli ebatlardaki hafıza bloklarından oluşur. Bir blok bitip diğerine geçilince bu ikazı verir. Çünki Assembly kullanılıyor ise ikinci yada üçüncü bloklara ulaşmak için bazı regsiterlerin set edilmeleri gerekir. Basic bunu otomatik yapıyor zaten endişe edilecek bir şey yok. Bu arada Basic de de bir veya iki komut bundan etkilenebilir. Hatırladığım Branch komutları bundan etkilenebiliyor idi. Pek kullanmadığım için emin değilim.

Ete


Powered by EzPortal