PIC 16f877 hafıza sorunu

Başlatan şef112, 26 Temmuz 2011, 13:29:43

şef112

arkadaşlar! elimde bir yazılım var ve ben bu yazılımı hex koduna çevirmeye çalıştım ama hafıza dolduğu için en ufak nokta koyamıyorum. şu mesajı veriyor "out of memory". programdan bazı şeyleri çıkarttım fakat yine hafıza yetersiz hatası veriyor. yardımcı olursanız sevinirim. derleyicilerim pic basic ve mplab. iki gündür uğraşıom olmyor.



PROGRAM BU;

'******************************************
'*  Name    : KULUÇKA.BAS                                       *
'*  Author  : [select VIEW...EDITOR OPTIONS]        *
'*  Notice  : Copyright (c) 2011 [Desıgn by M.ALi] *   
'*          : All Rights Reserved                                    *
'*  Date    : 21.07.2011                                            *
'*  Version : 1.0                                                         *                               
'*****************************************
DEFINE OSC 4
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG      PORTB   
DEFINE LCD_DBIT      4      
DEFINE LCD_RSREG   PORTB   
DEFINE LCD_RSBIT   2   
DEFINE LCD_EREG      PORTB   
DEFINE LCD_EBIT      3      
DEFINE LCD_BITS      4   
DEFINE LCD_LINES   4
ADCON1 = 7     
'---------------------------değişkenler-----------------------------------------
    A        VAR    BYTE
    D        VAR    BYTE
    E        var    byte
    SYC      VAR    BYTE
    AY       var    byte
    YIL      var    byte
    SN       VAR    BYTE
    DAK      VAR    BYTE
    SAAT     VAR    BYTE
    HAFTA    VAR    BYTE
    GUN      VAR    BYTE
    MEM      var    byte
    ONLAR    VAR    BYTE
    BIRLER   VAR    BYTE
    GN       VAR    BYTE
    ZAMAN    VAR    BYTE
    Y        VAR    BIT
    UPC      VAR    BIT
    AYR      VAR    BIT
    SAYI     VAR    BYTE
    SAYAC    VAR    BYTE
    AYAR     VAR    BYTE
    TERM     VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    VAR    BYTE
    CNY      VAR    BYTE      
    ISI1     VAR    BYTE       
    ISI2     VAR    BYTE       
    U1       VAR    BYTE         
    U2       VAR    BYTE
    C0       VAR    BYTE
    Z        VAR    BYTE
    K        VAR    BYTE
    SAY      VAR    BYTE
    ZAM      VAR    BYTE
    DX       VAR    BYTE
    H0       VAR    HAMISI.BYTE0
    H1       VAR    HAMISI.BYTE1
    HAMISI    VAR    WORD
    RAW      var    word
    ISISHT   VAR    WORD
    RUT      VAR    WORD
    P1       VAR    WORD
    P2       VAR    WORD
    P3       VAR    WORD             
    C        VAR    WORD
    B        VAR    WORD
    W        VAR    WORD
    ORTAISI  VAR    WORD
    FARK     VAR    WORD
    DUR      VAR    BYTE
    CLK     VAR     PORTA.5
    DTA     VAR     PORTA.3 
    ISARETSHT  VAR     BIT   'sensor değeri 0 ise artı, 1 ise eksi
    SIGN    VAR     BIT      'ısı isareti 0 ise artı 1 ise eksi
    HATA    var     BIT
    MENU    VAR     PORTA.0
    YUKARI  VAR     PORTA.1
    ASAGI   VAR     PORTA.2
   
        'ISI
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 BYTE       ' Div32 bit hesap için geçici değişken
SYMBOL COMM_PIN=PORTB.1   ' One-wire Data-Pin "DQ" PortB.0 da

   
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL ROLE4=PORTC.3
    SYMBOL BUZER=PORTE.0
   
    RTC_RST     var PORTC.5
    RTC_CLK     var PORTC.6
    RTC_DTA     var PORTC.4
'-----------------------------B A Ş L A N G I Ç ------------------------------   
          LOW ROLE1
          LOW ROLE2
          LOW ROLE3
          LOW ROLE4
        PAUSE 20
    '   CLEAR: 'TRISA=%00111111:TRISB=0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
         PAUSE 500:ISARET=0
        LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları   
        LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0
        LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ
        LCDOUT $FE,$58,16,8,4,2,4,8,16,0     'LCD 3. KARAKTER HAFIZASI YON İŞARETİ   
GIRIS:
         LCDOUT $FE,$82,"OTOMATIK KULUCKA"               
         lcdout $FE,$C5,"MAKINESI"
         lcdout $FE,$95,"TASARIM ve YAZILIM"
         lcdout $FE,$D9,"M.ALi"
         PAUSE 2000
         LCDOUT $FE,1
         
'-------------------------------------------------------------------------------
BASLANGIC:
SYC=0
AYAR=1
READ $07,GN:IF GN=255 THEN GN=1
READ $01,TERM:IF TERM=255 THEN TERM=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $09,DUR:IF DUR=255 THEN DUR=0
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
READ $06,UPC
READ $13,AYR
gosub ZAMAN_OKU
                   
BASLA: 
              KONTROL=%00000011:HAMISI=0   'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
        Gosub ISIHESAP
              KONTROL=%00000101:HAMISI=0   'RUTUBET ÖLÇME
        GOSUB OLCUMAL
        GOSUB RUTHESAP:GOSUB SENSOROKU
        GOSUB ORTISI
        GOSUB ZAMAN_OKU
        GOSUB GUNEBAK
        GOSUB EKRAN1
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF AYR=0 THEN
        GOSUB HAVAKONTROL
        ELSE
        LOW ROLE4
        ENDIF
        IF UPC=1 THEN
        GOSUB DONUSEBAK
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU

goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------   
EKRAN1:   
        lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,",",DEC1 CNY,0,"C NEM%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
            IF SN=DUR THEN LOW ROLE3
        IF SAAT=0 AND DAK=0 AND SN=0 THEN
               GN=GN+1
            IF GN=31 THEN GN=1
            WRITE $07,GN
         ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''
DONUSEBAK:
'HER SAAT BAŞI ÇEVİR
                 IF ZAM=1 AND DAK=0 AND SN=0 THEN
                 HIGH ROLE3
                 ENDIF

        IF ZAM=2 THEN 'İKİ SAATTE BİR ÇEVİR
                 
             
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=2 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=8 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=10 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=14 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF           

                 IF SAAT=16 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=18 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF             

                 IF SAAT=20 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=22 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
        ENDIF
       
        IF ZAM=3 THEN  '3 SAATTE BİR ÇEVİR
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=3 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=9 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 
                 
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
                   
                 IF SAAT=15 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=18 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=21 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
        ENDIF
                           
        IF ZAM=4 THEN '4 SAATTE BİR ÇEVİR
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=8 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 
                 
                 IF SAAT=16 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
                 
                 IF SAAT=20 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF           
        ENDIF
   
RETURN           

GUNEBAK:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN
 
SENSOROKU:
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
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.
           GOSUB   Hesapla
           RETURN
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       ham=~ham+2
    endif
    float = (HAM*10)/16        '
    ISI=FLOAT/10 
    RETURN 
'------------------------------- İŞLEM START -----------------------------------
T_START:
      OUTPUT DTA:OUTPUT CLK
        HIGH DTA
         LOW CLK
       PAUSE 1
        HIGH CLK
         LOW DTA
       PAUSE 1
         LOW CLK
       PAUSE 1
        HIGH CLK
       PAUSE 1
        HIGH DTA
         LOW CLK
RETURN
'-----------------------SENSORE KOMUT GÖNDER -----------------------------------
OLCUMAL:
           GOSUB T_Start
        SHIFTOUT DTA,CLK,1,[KONTROL]
           INPUT DTA
         PULSOUT CLK,10
                 HATA=0
             FOR W=0 to 65500
              IF DTA=0 then GIT
            NEXT W
                 HATA=1
GIT:         
              IF HATA=1 then
           endif
         SHIFTIN DTA,CLK,0,[H1]
          OUTPUT DTA
             LOW DTA
         PULSOUT CLK,10
           INPUT DTA
         SHIFTIN DTA,CLK,0,[H0]
         PULSOUT CLK,10
RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------     
ISIHESAP: 
           If HAMISI<4000 then
              ISARETSHT=1 'sıcaklık eksi değerde demek
              ISI1=(4000-HAMISI)/100
              ISI2=((4000-HAMISI)//100)/10   
         goto ISISON
        endif
              ISI1=(HAMISI-4000)/100
              ISI2=((HAMISI-4000)//100)/10
ISISON:   
           
           ISI1=(HAMISI-4000)/100
           ISI2=((HAMISI-4000)//100)/10
RETURN       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP:
              'ISI=ISI1*10+ISI2
              p1=(26542-(54722**HAMISI+hamISI))**HAMISI-25     
              P2=655+(HAMISI*5)+(HAMISI**15917)        
              P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1   
              U1=p3/10:U2=p3//10
           IF HAMISI>3710 THEN
              U1=0:U2=0
        ENDIF 
return

ORTISI:
ORTAISI=((ISI1*10+ISI2)+FLOAT)/20
CNY=((ISI1*10+ISI2)+FLOAT)/2
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:

         if TERM<ORTAISI-0 then   
          LOW Role1
        ENDIF
        if ORTAISI+0<TERM+0 then         
         HIGH ROLE1               
       Endif
      IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK
IF FARK>1 then
   ROLE4=1
ELSE
   ROLE4=0
ENDIF
RETURN
BIP:
    HIGH buzer   
pause 50
     LOW buzer 
  RETURN
BIPBIP:
     HIGH buzer   
    PAUSE 50
      LOW buzer
    PAUSE 100
     HIGH BUZER
    PAUSE 50
      LOW BUZER
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=8 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=7
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 theN
GOSUB BIP
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      "
LCDOUT $FE,$94,"                    "     
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"SICAKLIK DENGELEYiCi"
LCDOUT $FE,$94,"     FAN AYARI      "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF
CASE 7
lcdout $fe,$c0,"    MENUDEN CIKIS   "
LCDOUT $FE,$94,"                    "   
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE
MANU:
lcdout $fe,$80,"MOTORU CALISTIRMAK "
LCDOUT $FE,$C0,"iCiN YUKLARIYA     "
LCDOUT $FE,$94,"BASINIZ...          "
       IF MENU=1 then
      GOTO AYAR_MENUSU 
       ENDIF         
       
        IF YUKARI=1 THEN
         lcdout $fe,$D4,"MOTOR CALISIYOR  "
        HIGH ROLE3
        ELSE
        lcdout $fe,$D4,"MOTOR KAPALI    "
        LOW ROLE3
        ENDIF
       
GOTO MANU

GUNAYARI:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
       READ $07,GN
GUNA:     
     LCDOUT $FE,$80,"GUNU AYARLA" 
     lcdout $FE,$C0,"GUN:",DEC2 GN
     IF MENU=1 THEN
      WRITE $07,GN:PAUSE 2
      GOTO AYAR_MENUSU
      ENDIF
     
        IF YUKARI=1 THEN
        GN=GN+1
        IF GN=31 THEN GN=1
        WHILE YUKARI=1:WEND
        ENDIF
       
        IF ASAGI=1 THEN
        GN=GN-1
        IF GN=0 THEN GN=30
        WHILE ASAGI=1:WEND
        ENDIF
             
     GOTO GUNA
     
FANKONTROL:
GOSUB TEMIZLE:
FANKONT:
       lcdout $fe,$80,"FAN DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
       IF MENU=1 THEN
           WRITE $13,AYR:PAUSE 2
           GOTO AYAR_MENUSU
       ENDIF
           IF YUKARI=1 THEN AYR=1
           IF ASAGI=1 THEN AYR=0
           
           SELECT CASE AYR
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
       END SELECT   
GOTO FANKONT
     
             
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        WHILE MENU=1:WEND
        GOSUB TEMIZLE
        READ $06,UPC
MOTOR_AYAR:
       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
           IF MENU=1 THEN
           WRITE $06,UPC:PAUSE 2
           GOTO M_ZAMANI
           ENDIF
           IF YUKARI=1 THEN UPC=1
           IF ASAGI=1 THEN UPC=0
           
           SELECT CASE UPC
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
           END SELECT         
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
           IF MENU=1 THEN
           WRITE $09,DUR:PAUSE 2
           GOTO AYAR_MENUSU 
           ENDIF
       lcdout $fe,$C0,"MOTOR CALISMA SURESi "
       lcdout $FE,$94,"SURE :",DEC2 DUR," SANIYE"
       
           IF YUKARI=1 THEN
           DUR=DUR+1
           WHILE YUKARI=1:WEND
           ENDIF   
           IF DUR=60 THEN DUR=0
           IF ASAGI=1 THEN
           DUR=DUR-1
           WHILE ASAGI=1:WEND
           ENDIF
           IF DUR=255 THEN DUR=59
         GOTO MOTO_CALISMA                         
M_ZAMANI:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $10,ZAM
MOTO_ZAMANI:
        IF ZAM=255 THEN ZAM=1
        IF YUKARI=1 THEN
        ZAM=ZAM+1
        WHILE YUKARI=1:WEND
        ENDIF
        IF ZAM=5 THEN ZAM=4
        IF ASAGI=1 THEN
        ZAM=ZAM-1
        WHILE ASAGI=1:WEND
        ENDIF
        IF ZAM=0 THEN ZAM=1       
        IF MENU=1 THEN
        WRITE $10,ZAM:PAUSE 2
        GOTO M_CALISMA
        ENDIF

        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE BiR"
        lcdout $FE,$94,"CEVRiLSiN.."
GOTO MOTO_ZAMANI
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
       
        GOSUB TEMIZLE
        goto BASLANGIC       
TEMIZLE:
        lcdout $fe,1
RETURN       
'-------------------------------------------------------------------------------
TERM_KONTROL:
       GOSUB TEMIZLE
       READ $01,TERM:READ $11,A       
SET_AYAR: 
LCDOUT $FE,$C0,"ISI LiMiTiNi SECIN"
LCDOUT $FE,$94,"AYAR:",DEC2 TERM,",",DEC1 A         
           IF YUKARI=1 then
              A=A+1
                IF A=10 THEN
                A=0:TERM=TERM+1
                ENDIF
              IF TERM=100 THEN TERM=0
              PAUSE 150
           ENDIF
           IF ASAGI=1 then
              A=A-1
                IF A=255 then
                A=9:TERM=TERM-1
                ENDIF
              IF TERM=255 THEN TERM=99
              PAUSE 150
           ENDIF
               
         IF MENU=1 THEN
         WRITE $01,TERM:PAUSE 2
         WRITE $11,A:PAUSE 2
         GOTO AYAR_MENUSU
         ENDIF
                     
GOTO SET_AYAR     
'-------------------------------------------------------------------------------
NEM_KONTROL:
       GOSUB TEMIZLE
       READ $02,NEM
NEM_KONT: 
       lcdout $fe,$C0,"NEM LiMiT"
       lcdout $FE,$94,"AYARI: %",DEC2 NEM
       
           IF YUKARI=1 then NEM=NEM+1
        WHILE YUKARI=1:WEND
           IF NEM=01 then NEM=121
           
           IF ASAGI=1 then NEM=NEM-1
        WHILE ASAGI=1:WEND
           IF NEM=121 then NEM=01       
            IF MENU=1 THEN
            WRITE $02,NEM:PAUSE 2
            GOTO AYAR_MENUSU 
            ENDIF                 
         GOTO NEM_KONT    
       RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
ZAMANAYARI:
WHILE MENU=1:WEND
GOSUB TEMIZLE
AYAR=1
ZAMANAYAR:
IF MENU=1 THEN
AYAR=AYAR+1
WHILE MENU=1:WEND
ENDIF
GOSUB BUTONOKU
        LCDOUT $FE,$80,"    ZAMAN AYARI     "       
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
GOSUB GUNYAZ
IF AYAR=7 THEN ZAMAN_B
GOTO ZAMANAYAR

GUNYAZ:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN

BUTONOKU:
SELECT CASE AYAR
CASE 1
LCDOUT $FE,$C0,"SAAT    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
SAAT=SAAT+1
IF SAAT=24 THEN SAAT=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
SAAT=SAAT-1
IF SAAT=255 THEN SAAT=23
ENDIF

CASE 2
LCDOUT $FE,$C0,"DAKIKA"
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
DAK=DAK+1
IF DAK=60 THEN DAK=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
DAK=DAK-1
IF DAK=255 THEN DAK=59
ENDIF

CASE 3
LCDOUT $FE,$C0,"GUN    "   
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
GUN=GUN+1
IF GUN=31 THEN GUN=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
GUN=GUN-1
IF GUN=0 THEN GUN=30
ENDIF

CASE 4
LCDOUT $FE,$C0,"AY    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
AY=AY+1
IF AY=13 THEN AY=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
AY=AY-1
IF AY=0 THEN AY=12
ENDIF

CASE 5
LCDOUT $FE,$C0,"YIL      "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
YIL=YIL+1
IF YIL=51 THEN YIL=5
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
YIL=YIL-1
IF YIL=4 THEN YIL=50
ENDIF

CASE 6
LCDOUT $FE,$C0,"HAFTA     "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
HAFTA=HAFTA+1
IF HAFTA=8 THEN HAFTA=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
HAFTA=HAFTA-1
IF HAFTA=0 THEN HAFTA=7
ENDIF
END SELECT
RETURN


ZAMAN_B:
        IF MENU=1 then ZAMAN_B
        gosub ZAMAN_YAZ
goto AYAR_MENUSU       
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ZAMAN_OKU:
    high RTC_RST:OUTPUT RTC_DTA
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HAFTA, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB CEVIR:HAFTA=SAYI
     low RTC_RST
  return

ZAMAN_YAZ:
         MEM=sn:gosub TERSCEVIR:sn=SAYI
         MEM=DAK:gosub TERSCEVIR:DAK=SAYI
         MEM=SAAT:gosub TERSCEVIR:SAAT=SAYI
         MEM=GUN:gosub TERSCEVIR:GUN=SAYI
         MEM=AY:gosub TERSCEVIR:AY=SAYI
         MEM=YIL:gosub TERSCEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB TERSCEVIR:HAFTA=SAYI

    high  RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'WRT Protek açıldı
     low RTC_RST:PAUSEUS 10
    high RTC_RST         
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, HAFTA, YIL, 128]  'YAZ
     low RTC_RST
PAUSEUS 10
  return

CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
  return

TERSCEVIR:
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
  return
 

END
   
     




ELEKTRONİK CİDDİ BİR İŞTİR,HOBİ OLAMAZ

Tagli

Program hafızası büyük oranda LCD yazıları sebebiyle doluyor. Aynı yazı birden fazla yerde geçiyorsa bunun kodunu bir defa yazıp CALL ile çağırmak lazım (programı ayrıntılı olarak incelemedim).

Eğer yukarıda bahsettiğim yöntemi uygulamak mümkün değil ise, ya bazı mesajları LCD ile değil LED'lerle vermelisin, ya da daha yüksek hafızalı bir PIC kullanmalısın.
Gökçe Tağlıoğlu

My75

#2
 IF SAAT=10 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=14 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF       


Yerine böyle düzelt..Tamamını incelemiyorum vaktim yok ama iyi bir algoritma ile bu kod yükü %50 düşer.Her defasında lcd komutu yerine string tarzı bir şey kullanıp (şuan hatırlamıyorum) bir defada yazdırmak daha mantıklı..
'********************************

BASLA:

IF DAK=0 AND sn=0 THEN SAAT_BAK

GOTO BASLA

SAAT_BAK:
SELECT CASE SAAT
CASE 1
HIGH ROLE1
CASE 2
HIGH ROLE2
CASE 3
HIGH ROLE3
CASE .....

END SELECT

GOTO BASLA
'***********************
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

şef112

Alıntı yapılan: Tagli - 26 Temmuz 2011, 13:40:32
IF SAAT=10 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=14 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF       


Yerine böyle düzelt..Tamamını incelemiyorum vaktim yok ama iyi bir algoritma ile bu kod yükü %50 düşer.Her defasında lcd komutu yerine string tarzı bir şey kullanıp (şuan hatırlamıyorum) bir defada yazdırmak daha mantıklı..
'********************************

BASLA:

IF DAK=0 AND sn=0 THEN SAAT_BAK

GOTO BASLA

SAAT_BAK:
SELECT CASE SAAT
CASE 1
HIGH ROLE1
CASE 2
HIGH ROLE2
CASE 3
HIGH ROLE3
CASE .....

END SELECT

GOTO BASLA
'***********************


vala abim ben uğraştım yine, olmuyor. bana bu programın hex kodunu çevirip yollayabilirmisin. tez ödevim abi naptıysam olmadı, vermem gerekiyo. yardımınıza teşekkür ederim.
ELEKTRONİK CİDDİ BİR İŞTİR,HOBİ OLAMAZ

subram

hocam bu kadar kodu kısaltmak biraz zor gibi. en iyisi 877 kılıfında daha fazla hafızası olan bir pic bulmak. 18f serilerine bakmanızı öneririm.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

omereliusuk

bu kodlar mucit23 isimli arkadaşın düzenlediği kodlar onunla iletişime geçerseniz daha rahat çözüme ulaşabilirsiniz. ayrıca bu kodları çok daha küçük hale getirebilirsiniz. bilginiz olsun. 16f877 nin hafızası bu sistemi 2 defa kaldırır.

dombilik

Programı çok iyi incelemedim.Ama ilk etapta
dikkatimi çeken LCD ye gönderilen text'lerin uzunluğu.
Bu açıklama yada durum stringlerini kısaltırsanız
programınız büyük ölçüde kısalır.
Örneğin;
lcdout $fe,$80,"MOTORU CALISTIRMAK "
 LCDOUT $FE,$C0,"iCiN YUKLARIYA     " 
 LCDOUT $FE,$94,"BASINIZ...          "

gibi bir stringi kısaltabilir ve hatta "saniye" ibaresini bile "sn" olarak değiştirebilirsiniz.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

ete

#7
Bu program bu hali ile bile derlenebilir. Ancak program içinde lüzümsuz pek çok satır bulunmaktadır.
En büyük kısaltmayı saat bazında  motorun çevrilmesini sağlayan satırlarda yapmak mümkün.

Diyelimki 2 saatte bir çevirm kontrolü yapılacak;
        IF ZAM=2 THEN 'İKİ SAATTE BİR ÇEVİR                 
                 IF dak=0 and SN=0 THEN                   
                   IF SAAT//2=0 THEN HIGH ROLE3
                 endif
        ENDIF
şeklinde bir kaç satır yazmak yerine her bir saat için (0-2-4-6-8-10-12-14-16-18-20-22) bir kontrol satırı yazmak elbette programı uzatmaktadır. Aynı mantığı 3 - 4 saatte bir motoru çevirmeye yarıyan kontrol satırlarına da uygulamak mümkün.
Bu şekilde programı kısaltınca kullanılan word sayısı 7176 ya düşüyor ve sorunsuz derleniyor.
Program ve derlenmiş hali aşağıdaki linktedir.

http://dl.dropbox.com/u/25364674/KULUCKA.rar

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

şef112

  teşekkür ederim ete hocam eline koluna sağlık sayende tez ödevimi tamamladım.
ELEKTRONİK CİDDİ BİR İŞTİR,HOBİ OLAMAZ