Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Örnek Program

Başlatan Mehemet, 20 Ekim 2008, 16:39:03

Mehemet

Bir firma için tasarladığım ilk programım. Belki program yazarken ufakta olsa size katkı sağlayabilir.

'****************************************************************
'*  Name    : Mehemet.BAS                                *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 16.07.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   : revize edilmedi                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE PIC16F877A
@ DEVICE PIC16F877A, WDT_on
@ DEVICE PIC16F877A, PWRT_ON
@ DEVICE PIC16F877A, PROTECT_OFF
@ DEVICE PIC16F877A, XT_OSC

TRISA = 255 '{PORTA input}'
TRISB = 0
TRISC = %11111110
TRISD = 0
TRISE = %011
PORTC = 0
PORTA = %00000
PORTD = 0
PORTB = 0
PORTE = %000
DEFINE OSC 4
DEFINE LCD_DREG	PORTB	
DEFINE LCD_DBIT		4		
DEFINE LCD_EREG	PORTB	
DEFINE LCD_EBIT		3		
define LCD RWREG         PORTB   	
define LCD_RWBIT      2       	
DEFINE LCD_RSREG	PORTB	
DEFINE LCD_RSBIT	1		
DEFINE LCD_BITS		4		
DEFINE LCD_LINES	2		

pause 500
DEFINE	ADC_BITS	10	
DEFINE	ADC_CLOCK	3	
DEFINE	ADC_SAMPLEUS 100  
DEFINE BUTTON_PAUSE 50	
  		
ADCON1 = %10001001 '{ 6/0 PA0-3,PA5,PE0} 
  '{Part of Variable }

  
'___________________________________________________________________  
Blg1 VAR WORD
Blg2 VAR WORD
Blg3 VAR WORD
Blg4 VAR WORD
Blg5 VAR WORD
Blg6 VAR WORD
'___________________________________________________________________
SET1 VAR BYTE
SET2 VAR BYTE
SET3 VAR BYTE
SET4 VAR BYTE
SET5 VAR BYTE
SET6 VAR BYTE
SET VAR BYTE
'___________________________________________________________________
V1 VAR WORD
V2 VAR WORD
V3 VAR WORD
V4 VAR WORD
V5 VAR WORD
V6 VAR WORD
'___________________________________________________________________
MOD30 VAR WORD
MOD30A VAR WORD
'___________________________________________________________________
ADRS VAR BYTE  ' KAYIT ADRESI DEGIŞKENI
ADRS1 VAR BYTE
ADRS2 VAR BYTE  'BOLGE BULUCU
ADRSDOWN  VAR BYTE   'METAL SAYICISI
'___________________________________________________________________
X1 var byte
bolgeadi var byte
'----------------------------------------------------------
MEM VAR BYTE
SAYI VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
SN VAR BYTE
DK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
AY VAR BYTE
YIL VAR BYTE
HAFTA VAR BYTE
RTCKONTROL VAR BYTE
'----------------------------------------------------------
RESET_TUSU VAR PORTC.1            'RESET PINI
'-----------------------------------------------------------
GENEL_ARIZA VAR PORTC.0
RUN VAR PORTD.0
BOLGE1_LED VAR PORTD.1
BOLGE2_LED VAR PORTD.2        'LED PINLERI
BOLGE3_LED VAR PORTD.3
BOLGE4_LED VAR PORTD.4
BOLGE5_LED VAR PORTD.5
BOLGE6_LED VAR PORTD.6
'----------------------------------------------------------

SCLK VAR PORTD.7
IO VAR PORTE.2                 'RTC PİNLERİ
CE VAR PORTB.0

'----------------------------------------------------------
UP VAR PORTC.5
DOWN VAR PORTC.4
ENTER VAR PORTC.6
RIGHT VAR PORTC.3             ' TUŞ PINLERI
LEFT VAR PORTC.2
MENU VAR PORTE.1
ESCAPE VAR PORTC.7
'----------------------------------------------------------
 X VAR BYTE
CNTR2 VAR BYTE
CNTR VAR BYTE
ZMN VAR BYTE
KONTROL VAR BYTE
SIFRE VAR BYTE
SIFRE2 VAR WORD
SIFRE3 VAR BYTE
SIFRE4 VAR WORD
SIFRE5 VAR WORD
SIFRE6 VAR WORD 
'----------------------------------------------------------
'WRITE 0,255
'WRITE 1,255
SCLK = 0
Low CE
ADRS = 7
SIFRE3 = 4
SIFRE2 = 0
SIFRE = 0
PORTB.2 = 0               '{ RW bacağını ekrana yazmak}
PAUSE 1000 
LCDOUT $FE,1 
'GENEL_ARIZA = 1                
'goto start1
'********************************************************    
' **************** OKUMA ALANI **************************
'******************************************************** 

KALIBRASYON :

  FOR ZMN = 1  TO 25 
  LCDOUT $FE,1,"KALIBRASYON..."
   BOLGE1_LED = 1
   BOLGE2_LED = 1
    BOLGE3_LED = 1
     BOLGE4_LED = 1
      BOLGE5_LED = 1
       BOLGE6_LED = 1
       RUN = 1
       PAUSE 500
  LCDOUT $FE,1
         BOLGE1_LED = 0
   BOLGE2_LED = 0
    BOLGE3_LED = 0
     BOLGE4_LED = 0
      BOLGE5_LED = 0
       BOLGE6_LED = 0
       RUN = 0
       PAUSE 500
  NEXT     

'********************************************************    
' **************** OKUMA ALANI **************************
'********************************************************    
START1 :
ADRS = 7
  READ 2,ADRSDOWN 
  IF ADRSDOWN = 255 THEN
     ADRSDOWN = 0
    ENDIF 
READ 3,SET1 

    IF SET1 = 255 THEN
     SET1 = 20
    ENDIF 
READ 4,SET2

    IF SET2 = 255 THEN
     SET2 = 20
    ENDIF
READ 5,SET3

    IF SET3 = 255 THEN
     SET3 = 20
    ENDIF 

READ 6,SET4

    IF SET4 = 255 THEN
     SET4 = 20
    ENDIF 
READ 7,SET5

    IF SET5 = 255 THEN
     SET5 = 20
    ENDIF 
READ 8,SET6

    IF SET6 = 255 THEN
     SET6 = 20
    ENDIF
'********************************************************    
' **************** ANA PROGRAM BLOĞU ********************
'******************************************************** 
    
START : 
'LCDOUT $FE,1
    LCdout $FE,1,"MODEL"'        RUN" 
    LCDOUT $FE,$8C,"RUN"
    LCDOUT $FE,$C0,"FIRMA ISMI."

'____________________________________________________________________  

STARTa :
'___________________________________________________________________
RESET_TUSU = 0   
GENEL_ARIZA = 0
RUN = 1

'___________________________________________________________________    
  
    IF MENU = 1 THEN
        GENEL_ARIZA = 1
        RUN = 0
        SIFRE = 0                 'MENUYE GIRIŞ
        SIFRE2 = 0
        LCDOUT $FE,1
        GOTO SIFRE_ALANI1
'        GOTO MENUGIRIS
    ENDIF 
'___________________________________________________________________    
    ADCiN 0,Blg1
V1 = 4 * ((blg1*25) / (1023))
    IF V1 >= SET1 THEN
      BOLGE1_LED = 1
        ADRS2 = 1
        GOTO HATAOKU      
    ENDIF
'___________________________________________________________________    
    ADCIN 1,Blg2

V2 = 4 * ((blg2*25) / (1023))
    IF V2 >= SET2 THEN
         HIGH BOLGE2_LED
        ADRS2 = 2
         GOTO HATAOKU
    ENDIF
'___________________________________________________________________    
    ADCIN 2,Blg3
   
V3 = 4 * ((blg3*25) / (1023))
    IF V3 >= SET3 THEN
        BOLGE3_LED = 1
        ADRS2 = 3
         GOTO HATAOKU
    ENDIF
'___________________________________________________________________    
    ADCIN 3,Blg4
   
V4 = 4 * ((blg4*25) / (1023))
    IF V4 >= SET4 THEN
        ADRS2 = 4
        BOLGE4_LED = 1
         GOTO HATAOKU
    ENDIF
'___________________________________________________________________    
    ADCIN 4,Blg5
    
V5 = 4 * ((blg5*25) / (1023))
    IF V5 >= SET5 THEN 
    BOLGE5_LED = 1
    ADRS2 = 5
     GOTO HATAOKU
    ENDIF
'___________________________________________________________________    
    ADCIN 5,Blg6
   
V6 = 4 * ((blg6*25) / (1023))
    IF V6 >= SET6 THEN 
        ADRS2 = 6
        BOLGE6_LED = 1
        GOTO HATAOKU
    ENDIF
 '___________________________________________________________________   
    GOTO STARTa
   
   
'********************************************************    
' **************** HATA OKUMA ALANI *********************
'********************************************************    
HATAOKU :
   GENEL_ARIZA = 1
   RUN = 0
 '--------------------------------------------------------    
  IF ADRS2 = 1 THEN SET = SET1
  IF ADRS2 = 2 THEN SET = SET2
  IF ADRS2 = 3 THEN SET = SET3
  IF ADRS2 = 4 THEN SET = SET4
  IF ADRS2 = 5 THEN SET = SET5
  IF ADRS2 = 6 THEN SET = SET6
 '-------------------------------------------------------- 
HATAOKU1 :
 GOSUB OKUMA
 GOSUB MATCH 
  BLG2 = 4 * (( BLG1 * 25 ) / (1023))    
  IF SET > BLG2 THEN
   GOTO HATAEKRANI
  ENDIF     
 
 GOTO HATAOKU1
'--------------------------------------------------------    
 OKUMA :
  ADCIN (ADRS2 - 1),BLG1
  'PAUSEUS 1
  RETURN
'--------------------------------------------------------     
 MATCH :
'--------------------------------------------------------    
    IF BLG1 > BLG3 THEN 
    BLG3 = BLG1
    ENDIF
    RETURN
'--------------------------------------------------------       
HATAEKRANI :
    IF ADRSDOWN = 121 THEN
        LCDOUT $FE,1
        FOR X = 9 TO  218
        WRITE X,255
        LCDOUT $FE,2,"KAYITLAR SILINDI"        '60 KAYIT SONRASINI SİL
        NEXT
        PAUSE 300
        ADRSDOWN = 0
    ENDIF 

'--------------------------------------------------------   
     BLG2 = 4 * (( BLG3 * 25 ) / (1023))
     IF BLG2 < SET THEN BLG2 = SET
    LCDOUT $FE,1,#ADRS2,".BLG METAL VAR"
    LCDOUT $FE,$C0,"MTL=",#BLG2," SET=",#SET
    ADRSDOWN = ADRSDOWN + 1 
    MOD30 = ADRSDOWN
    GOSUB METAL_SAYICI_DUZENLEME
    ADRS = ( ( MOD30 ) * 7 ) + 7  
    WRITE ( ADRS - 5 ),ADRS2
    WRITE ( ADRS - 4 ),BLG2
 '--------------------------------------------------------  

 
    GOsub RTC_OKU :    ' RTCDEN   ZAMAN OKUMA   
  '--------------------------------------------------------     
    WRITE ( ADRS - 3 ),DK
    WRITE ( ADRS - 2 ),SAAT
    WRITE ( ADRS - 1 ),GUN
    WRITE ADRS,AY
    WRITE ( ADRS + 1 ),YIL
    GOTO SON
 '--------------------------------------------------------      
SON:
    

   WRITE 2,ADRSDOWN      
    IF PORTC.1 = 1 THEN
     WHILE PORTC.1 = 1
     WEND

       BOLGE1_LED = 0
       BOLGE2_LED = 0
       BOLGE3_LED = 0
       BOLGE4_LED = 0
       BOLGE5_LED = 0
       BOLGE6_LED = 0
        GOTO START
    ENDIF
  ___________________________________________________________________  
 
  '___________________________________________________________________  
    GOTO SON
'--------------------------------------------------------
'********************************************************    
' **************** ŞİFRE ALANII  ************************
'********************************************************
SIFRE_ALANI1 : 
'___________________________________________________________________ 
    READ 0,SIFRE6.LOWBYTE 
    READ 1,SIFRE6.HIGHBYTE        ' ŞİFREYİ OKU
'___________________________________________________________________
    IF SIFRE6 = 65535 THEN
        SIFRE6 = 1956              ' YENI PROGRAMLANMIŞSA 1956 ŞİFRE KABUL ET
    ENDIF                    

SIFRE_ALANI :

    LCDOUT $FE,$C0,#SIFRE   
    LCDOUT $FE,2,"SIFRE:"
    IF ESCAPE = 1 THEN
        GOTO START
    ENDIF  
    IF UP = 1 THEN 
            WHILE UP = 1 : WEND
            SIFRE = SIFRE + 1
            IF SIFRE = 10 THEN 
                    SIFRE = 0  
            ENDIF
    ENDIF 
  IF DOWN = 1 THEN 
       WHILE DOWN = 1 : WEND
       SIFRE = SIFRE - 1
       IF SIFRE = 255 THEN 
            SIFRE = 9 
       ENDIF
 ENDIF 
 IF ENTER = 1 THEN 
     WHILE ENTER= 1 : WEND
     SIFRE3 = SIFRE3 - 1
     LCDOUT $FE,1
     
     IF SIFRE3 = 0 THEN 
        GOSUB BIRLER_ALANI
        IF SIFRE2 = SIFRE6  THEN 
            LCDOUT $FE,1
 '___________________________________________________________________   
 DONGU :
            SIFRE2 = 0
            LCDOUT $FE,2,"MENU"
            LCDOUT $FE,$C0,"YENI SIFRE"
            lcDOUT $FE,$CB,"(ENT)"
            lcDOUT $FE,$8A,"(MENU)"
            IF MENU = 1 THEN MENUGIRIS
                IF ENTER  = 1  THEN
                    WHILE ENTER = 1 :WEND 
                    GOTO SIFRE_DEGISTIR1 
                ENDIF
                GOTO DONGU
 '___________________________________________________________________   
    
        ELSE 
            LCDOUT $FE,1,"HATALI GIRIS"
            PAUSE 1500
            LCDOUT $FE,1
        ENDIF     
     ENDIF 
     IF SIFRE3 = 1 THEN GOSUB ONLAR_ALANI
     IF SIFRE3 = 2 THEN GOSUB YUZLER_ALANI
     IF SIFRE3 = 3 THEN GOSUB BINLER_ALANI
 ENDIF    

  
 

'LCDOUT $FE,2,"SIFRE :",DEC4 SIFRE2

 IF SIFRE3 = 0 THEN
  SIFRE2 = 0
  SIFRE3 = 4
  ENDIF
  
    GOTO SIFRE_ALANI  
 '___________________________________________________________________  
BIRLER_ALANI :
    LCDOUT $FE,$86,"****"
    SIFRE2 = SIFRE2 + SIFRE
    SIFRE = 0
    RETURN
 '___________________________________________________________________  
ONLAR_ALANI :
    LCDOUT $FE,$86,"***"
    SIFRE2 = SIFRE2 + ( 10 * SIFRE)
    SIFRE = 0
    RETURN
 '___________________________________________________________________  
YUZLER_ALANI :
    LCDOUT $FE,$86,"**"
    SIFRE2 = SIFRE2 + ( 100 * SIFRE)
    SIFRE = 0
    RETURN
  '___________________________________________________________________  
BINLER_ALANI  : 
    LCDOUT $FE,$86,"*"        
    SIFRE2 = SIFRE2 + ( 1000 * SIFRE)
    SIFRE = 0
    RETURN
 '___________________________________________________________________  
SIFRE_DEGISTIR1 :
    LCDOUT $FE,1
    SIFRE3 = 4
    SIFRE2 = 0 
    X = 1
 '___________________________________________________________________      
SIFRE_DEGISTIR :
    LCDOUT $FE,$8B,"(",#X,")"
    LCDOUT $FE,2,"SIFRE:"
    LCDOUT $FE,$C0,#SIFRE
 '___________________________________________________________________      
    IF UP = 1 THEN 
        WHILE UP = 1 : WEND
        SIFRE = SIFRE + 1
        IF SIFRE = 10 THEN 
              SIFRE = 0 
        ENDIF
    ENDIF
  '___________________________________________________________________  
  IF DOWN = 1 THEN 
       WHILE DOWN = 1 : WEND
       SIFRE = SIFRE - 1
       IF SIFRE = 255 THEN 
            SIFRE = 9 
       ENDIF
   ENDIF
 '___________________________________________________________________     
   IF ESCAPE = 1 THEN START 
 '___________________________________________________________________       
   IF ENTER = 1 THEN 
        WHILE ENTER= 1 : WEND
        SIFRE3 = SIFRE3 - 1
        LCDOUT $FE,1   
        'BRANCHL SIFRE3 , [MOD_BIRLER , MOD_ONLAR, MOD_YUZLER,MOD_BINLER]
        IF SIFRE3 = 0 THEN 
                  GOSUB BIRLER_ALANI
                  X = X + 1 ' 2 KEZ DOĞRULATMA SAYACI
                  IF X = 2 THEN
                        SIFRE4 = SIFRE2
                  ENDIF     
          IF X >= 3 THEN
             X = 1
            SIFRE5 = SIFRE2
            IF SIFRE4 = SIFRE5 THEN 
               WRITE 0, SIFRE5.LOWBYTE
                WRITE 1, SIFRE5.HighBYTE
               LCDOUT $FE,1,"SIFRE KAYIT OK"
               PAUSE 1000
               GOTO MENUGIRIS
            ELSE 
              LCDOUT $FE,1,"HATALI GIRIS"
              PAUSE 1000
              
           ENDIF
           LCDOUT $FE,1
        ENDIF   
        SIFRE2 = 0 
      ENDIF
 '___________________________________________________________________        
     IF SIFRE3 = 1 THEN GOSUB ONLAR_ALANI
     IF SIFRE3 = 2 THEN GOSUB YUZLER_ALANI
     IF SIFRE3 = 3 THEN GOSUB BINLER_ALANI
   ENDIF  
  '___________________________________________________________________  
  IF SIFRE3 = 0 THEN
  SIFRE2 = 0
  SIFRE3 = 4
  ENDIF
 '___________________________________________________________________    
 GOTO SIFRE_DEGISTIR    
    
'********************************************************    
'***************** menü BOLGE AYARLARI ******************
'********************************************************
MENUGIRIS :

MENUSECIM1a :
LCDOUT $FE,1

MENUSECIM1 :
    LCDOUT $FE,2,"BOLGE HASSASIYET"
    LCDOUT $FE,$C0,"AYARLARI"
    lcDOUT $FE,$CB,"(ENT)"   
 '___________________________________________________________________     
    IF ENTER = 1 THEN
        WHILE ENTER = 1
        WEND    
        bolgeadi = 1
        GOTO  SETMENUBLG
    ENDIF
 '___________________________________________________________________              
    IF ESCAPE = 1 THEN START
 '___________________________________________________________________  
    IF RIGHT = 1 THEN 
         WHILE RIGHT = 1
        WEND
        GOTO  MENUSECIM2a
    ENDIF
 '___________________________________________________________________      
    IF LEFT = 1 THEN
         WHILE LEFT = 1
        WEND
        GOTO MENUSECIM4a
    ENDIF
 '___________________________________________________________________        
    GOTO MENUSECIM1
'********************************************************   
' *************** menü ZAMAN AYARLARI *******************
'******************************************************** 
MENUSECIM2a :
LCDOUT $FE,1 
  
MENUSECIM2 : 
    LCDOUT $FE,2,"ZAMAN AYARLARI"   
    lcDOUT $FE,$CB,"(ENT)"  
 '___________________________________________________________________      
    IF ESCAPE = 1 THEN START
 '___________________________________________________________________      
    IF ENTER = 1 THEN
    WHILE ENTER = 1
        WEND
        GOTO TIME 
    ENDIF
 '___________________________________________________________________     
    IF RIGHT = 1 THEN 
          WHILE RIGHT = 1
        WEND  
         GOTO MENUSECIM3a
    ENDIF 
 '___________________________________________________________________         
    IF LEFT = 1 THEN
       WHILE LEFT = 1
        WEND
        GOTO MENUSECIM1a
    ENDIF 
 '___________________________________________________________________           
    GOTO MENUSECIM2
'********************************************************    
'***************** menü fabrıka ayarları  *******************
'********************************************************
MENUSECIM3a :
LCDOUT $FE,1

MENUSECIM3 :
    LCDOUT $FE,2,"FABRIKA AYARLARI"
    lcDOUT $FE,$CB,"(ENT)"
 '___________________________________________________________________  
    IF ENTER = 1 THEN
       WHILE ENTER = 1
        WEND   
        LCDOUT $FE,1
        GOTO  SETFABRIKA
    ENDIF
 '___________________________________________________________________               
    IF ESCAPE = 1 THEN START
 '___________________________________________________________________  
    IF RIGHT = 1 THEN 
         WHILE RIGHT = 1
        WEND
        GOTO  MENUSECIM4a
    ENDIF
  '___________________________________________________________________     
    IF LEFT = 1 THEN
        WHILE LEFT = 1
        WEND
        GOTO MENUSECIM2a
    ENDIF  
  '___________________________________________________________________      
    GOTO MENUSECIM3
    
 '********************************************************   
 '********************** menü  hafıza ******************* 
 '******************************************************** 
MENUSECIM4a :
  LCDOUT $FE,1
 
MENUSECIM4 :
    LCDOUT $FE,2,"KAYITLAR"
    LCDOUT $FE,$C0,"MTL.AD.:",#ADRSDOWN
    LCDOUT $FE,$CB,"(ENT)" 
 '___________________________________________________________________  
    IF ENTER = 1 THEN
    WHILE ENTER = 1
    WEND
        GOTO HATAGORUNTULEME
    ENDIF
 '___________________________________________________________________      
    IF RIGHT = 1 THEN
        WHILE RIGHT = 1
        WEND  
        GOTO MENUSECIM1a
    ENDIF
 '___________________________________________________________________      
    IF LEFT = 1 THEN
        WHILE LEFT = 1
        WEND
        GOTO MENUSECIM3a
    ENDIF 
 '___________________________________________________________________       
    IF ESCAPE = 1 THEN START
 '___________________________________________________________________        
    CNTR = 0    ' 
    GOTO MENUSECIM4


'*************************************************************      
'*************  SET AYARLAMA BÖLÜMÜ **************************  
'*************************************************************       
                       'BİRLEŞTİRİLİDİ
'*************************************************************      
'*************  SET BÖLGE DEĞİŞİM BÖLÜMÜ *********************  
'*************************************************************     
SETMENUBLG :
        LCDOUT $FE,1
        IF bolgeadi = 1 then CNTR = SET1
        IF bolgeadi = 2 then CNTR = SET2
        IF bolgeadi = 3 then CNTR = SET3
        IF bolgeadi = 4 then CNTR = SET4
        IF bolgeadi = 5 then CNTR = SET5
        IF bolgeadi = 6 then CNTR = SET6
        
SETMENUBLGA :
 '___________________________________________________________________  
    IF ENTER = 1 THEN
       WHILE ENTER = 1
        WEND
      GOTO SETKAYIT
    ENDIF
 '___________________________________________________________________       
    LCDOUT $FE,$80,"BOLGE:",#bolgeadi',"   (ENT)"
    LCDOUT $FE,$8B,"(<->)" 
    LCDOUT $FE,$C0,"SET  :",#CNTR',"   (ENT)"
    LCDOUT $FE,$CB,"(Y-A)" 
 '___________________________________________________________________      
    PAUSE 200
 '___________________________________________________________________      
    IF RIGHT = 1 THEN BlgdgstrARTAN           'bölge değiştirme şartı
 '___________________________________________________________________     
    IF LEFT = 1 THEN BlgdgtrAZAL  
 '___________________________________________________________________       
    IF UP = 1 THEN  
        GOSUB UPER
    ENDIF
'___________________________________________________________________      
    IF DOWN = 1 THEN 
        GOSUB DOWNER
    ENDIF 
'___________________________________________________________________    
    IF MENU = 1 OR ESCAPE = 1 THEN
     WHILE ESCAPE = 1 : WEND 
        GOTO MENUGIRIS
    ENDIF 
'___________________________________________________________________      
    GOTO SETMENUBLGA
'*************************************************************      
'*************  SET BÖLGE ARTIRMA BÖLÜMÜ *********************  
'*************************************************************     
BlgdgstrARTAN :
    bolgeadi = bolgeadi + 1
'___________________________________________________________________      
    if bolgeadi > 6 then 
           bolgeadi = 1
    endif
'___________________________________________________________________       
    GOTO SETMENUBLG
'*************************************************************      
'*************  SET BÖLGE AZALTMA BÖLÜMÜ *********************  
'*************************************************************     
BlgdgtrAZAL :
    bolgeadi = bolgeadi - 1
 '___________________________________________________________________     
    IF bolgeadi = 0  then 
           bolgeadi = 6
    endif
'___________________________________________________________________      
    goto SETMENUBLG
    
'*************************************************************      
'*************  SET AYARLAMA BÖLÜMÜ **************************  
'*************************************************************               
                        
UPER :
    IF CNTR >= 100 THEN 
           CNTR = 1
    ENDIF
    CNTR = CNTR + 1              
    PAUSE 200
    RETURN
'___________________________________________________________________      
DOWNER :
    IF CNTR = 0 THEN
           CNTR = 101
    ENDIF
    CNTR = CNTR - 1
    PAUSE 200
    RETURN
    
'*************************************************************      
'*************  SET KAYIT BÖLÜMÜ *****************************  
'*************************************************************    

SETKAYIT :
    BRANCHl ( bolgeadi - 1 ),[ST1,ST2,ST3,ST4,ST5,ST6]
'___________________________________________________________________      
ST1 :
    SET1 = CNTR
    write 3,SET1                               'K
    GOTO KAYIT_LCD                             'A
'______________________________________________'Y_____________________      
ST2 :                                          'I
    SET2 = CNTR                                'T
    write 4,SET2  
    GOTO KAYIT_LCD                             'B
'______________________________________________'Ö_____________________      
ST3 :                                          'L
    SET3 = CNTR                                'Ü
    write 5,SET3                               'M
   GOTO KAYIT_LCD                              'Ü
'___________________________________________________________________     
ST4 :
    SET4 = CNTR
    write 6,SET4  
   GOTO KAYIT_LCD
'___________________________________________________________________      
ST5 :
    SET5 = CNTR 
    write 7,SET5 
    GOTO KAYIT_LCD
'___________________________________________________________________      
ST6 :
    SET6 = CNTR 
    write 8,SET6 
'___________________________________________________________________  
    
KAYIT_LCD:
    LCDOUT $FE,1,#bolgeadi,".BOLGE KAYIT OK"
    LCDOUT $FE,$C0,"SET:",#CNTR
    pause 2000
    GOTO SETMENUBLG
        
'*************************************************************      
'*************  HAFIZA  BÖLÜMÜ *******************************  
'*************************************************************
       
HATAGORUNTULEME :
 LCDOUT $FE,1
 
HATAGORUNTULEME1 :
    LCDOUT $FE,2,"KAYIT OKU"
    lcDOUT $FE,$8B,"(ENT)"
    LCDOUT $FE,$c0,"KAYIT SIL"
    lcDOUT $FE,$CC,"(<>)"
'___________________________________________________________________  
    IF ENTER = 1 THEN
      WHILE ENTER = 1
      WEND
         CNTR = 1
         ADRS = 14
        GOTO HAFIZABLM2
    ENDIF 
'___________________________________________________________________  
    IF LEFT = 1 OR RIGHT = 1 THEN
         WHILE LEFT = 1
         WEND
         LCDOUT $FE,1
         FOR X = 9 TO  217 ' 217 ADRES ALANI SIL
            WRITE X,255
         NEXT
         ADRS = 7 
         ADRSDOWN = 0    
        GOTO MENUSECIM4
       ENDIF 
'___________________________________________________________________        
       IF ESCAPE = 1 THEN
        WHILE ESCAPE = 1 : WEND
        GOTO MENUSECIM4a
        ENDIF
'___________________________________________________________________      
       IF MENU = 1  THEN  MENUGIRIS 
     
  GOTO HATAGORUNTULEME1


'----------------------------------------------------------       
HAFIZABLM2 :  
    IF ADRSDOWN = 0 THEN
       LCDOUT $FE,1,"KAYIT BULUNAMADI"
       PAUSE 2000
       GOTO MENUSECIM4a
    ENDIF
'___________________________________________________________________   
    IF MENU = 1 THEN 
        V1 = 0
        V2 = 0
        MOD30 = ADRSDOWN
        GOSUB METAL_SAYICI_DUZENLEME
       ADRS = (( MOD30 * 7 ) + ( 7 ))
        GOTO MENUGIRIS
    ENDIF 
   '______________________________________  
    IF ESCAPE = 1 THEN
    WHILE ESCAPE = 1 : WEND
        V1 = 0
        V2 = 0
        MOD30 = ADRSDOWN
        GOSUB METAL_SAYICI_DUZENLEME
        ADRS = (( MOD30* 7 ) + ( 7 ))         
        GOTO HATAGORUNTULEME
    ENDIF
   '______________________________________   
    IF UP = 1 THEN 
     WHILE UP = 1 : WEND               
          CNTR = CNTR + 1
          ADRS = ADRS + 7        '2
    ENDIF 
'___________________________________________________________________  
    IF DOWN = 1 THEN 
     WHILE DOWN = 1 : WEND
              CNTR = CNTR - 1
              ADRS = ADRS - 7 
        
    ENDIF 
'___________________________________________________________________   
    IF  CNTR > ADRSDOWN THEN
            ADRS = 14
            CNTR = 1
    ENDIF
    
'___________________________________________________________________  
    IF ADRSDOWN > 30 THEN
                 MOD30 = CNTR : GOSUB METAL_SAYICI_DUZENLEME
                 MOD30A = MOD30
                 MOD30 = ADRSDOWN : GOSUB METAL_SAYICI_DUZENLEME 
                 
              IF MOD30A = MOD30  THEN
                 ADRS = ( 1 + MOD30 )*7
                 CNTR = ADRSDOWN   
                ENDIF 
 '_________________________________                 
               IF CNTR < ADRSDOWN - 30 + 1 THEN 
                 CNTR = ADRSDOWN - 29
'                 MOD30 = CNTR : GOSUB METAL_SAYICI_DUZENLEME
'                 ADRS = ( 1 + MOD30 )*7
               ENDIF 
               
               MOD30 = CNTR : GOSUB METAL_SAYICI_DUZENLEME
               ADRS = (( 1 + MOD30 ) * (7))
'____________________________________                
'                MOD30 = CNTR 
'                GOSUB METAL_SAYICI_DUZENLEME
'               IF MOD30 = 1  THEN
'                 ADRS = 14
'               ENDIF 
 '______________________________________              
'               IF MOD30 = 30 THEN
'                 ADRS = 31*7
'               ENDIF  
                 
    ENDIF 
'___________________________________________________________________    
    GOSUB KYTOKU
    GOTO HAFIZABLM2
    
KYTOKU :     
    IF CNTR = 0 THEN
       CNTR = ADRSDOWN
       MOD30 = ADRSDOWN
       GOSUB METAL_SAYICI_DUZENLEME
       ADRS = (( MOD30 * 7 ) + ( 7 ))     
    ENDIF 
 '___________________________________________________________________   
            
    READ ( ADRS - 5),SET
    READ ( ADRS - 4),SIFRE2
    READ ( ADRS - 3),X1
    READ ( ADRS - 2),ADRS1
    READ ( ADRS - 1),bolgeadi
    READ ( ADRS ),V1
    READ ( ADRS + 1),V2
'___________________________________________________________________  

    LCDOUT $FE,1,DEC3 CNTR,")","BL:",#SET," ","MB:",DEC3 SIFRE2
    LCDOUT $FE,$C0,DEC2 bolgeadi,"/",DEC2 V1,"/",DEC2 V2," ",DEC2 ADRS1,":",DEC2 X1
    PAUSE 300
    RETURN
    
'___________________________________________________________________
  
METAL_SAYICI_DUZENLEME :
     IF MOD30 >= 120 THEN MOD30 = MOD30 - 90
     IF MOD30 >= 90 THEN MOD30 = MOD30 - 60
     IF MOD30 >= 60 THEN MOD30 = MOD30 - 30
     IF  MOD30 > 30 THEN
     MOD30 = MOD30 // 30
     ENDIF
    RETURN
 
'*************************************************************      
'*************  DİĞER BÖLÜMLER *******************************  
'*************************************************************      
TIME :
LCDOUT $FE,1

TIME1 :
    GOsub RTC_OKU  
'___________________________________________________________________      
    LCDOUT $FE,2,"SAAT AYARI"
    LCDOUT $FE,$C0,"TARIH AYARI"
    lcDOUT $FE,$CC,"(<>)"    
    lcDOUT $FE,$8B,"(ENT)"
    PAUSE 10
'___________________________________________________________________      
    IF RIGHT = 1 THEN 
   WHILE RIGHT = 1 : WEND
        GOTO SETDATE 
    ENDIF
'___________________________________________________________________      
    IF LEFT = 1 THEN
        WHILE LEFT = 1 : WEND
        GOTO SETDATE
    ENDIF
'___________________________________________________________________       
    IF ENTER = 1 THEN
        WHILE ENTER = 1
        WEND
        GOTO SETSAAT
     ENDIF
'___________________________________________________________________       
    IF ESCAPE = 1 THEN
        WHILE ESCAPE = 1 : WEND      
        GOTO MENUSECIM2a
    ENDIF
'___________________________________________________________________      
    IF MENU = 1 THEN MENUGIRIS
 '___________________________________________________________________  
GOTO TIME1    
DATE1 :


SETSAAT :
    LCDOUT $FE,1

SETSAAT1 :
    Gosub RTC_OKU
    lcdOUT $FE,$C7,"--"
    LCDOUT $FE,2,"SAAT : ",DEC2 SAAT,":",DEC2 DK,":",DEC2 SN

 '___________________________________________________________________     
   IF ENTER = 1 THEN
        WHILE ENTER = 1
        WEND
        LCDOUT $FE,1 
       GOTO SETDAK
    ENDIF
'___________________________________________________________________   
   IF MENU = 1 THEN MENUGIRIS
'___________________________________________________________________  
   IF UP = 1 THEN 
        SAAT = SAAT + 1
        IF  SAAT > 23  THEN
        SAAT = 00
        ENDIF 
       GOSUB RTC
   ENDIF 
'___________________________________________________________________     
   IF DOWN = 1 THEN
     SAAT = SAAT - 1
     IF  SAAT = 255  THEN
         SAAT = 23
     ENDIF 
     GOSUB RTC
   ENDIF
'___________________________________________________________________     
   IF ESCAPE = 1 THEN
        WHILE ESCAPE = 1
        WEND
        GOTO TIME
   ENDIF
'___________________________________________________________________          
 GOTO SETSAAT1 
  
SETDAK:   
SETDAK1 : 
   IF ENTER = 1 THEN
        WHILE ENTER = 1
        WEND
        LCDOUT $FE,1
       GOTO SETSN
    ENDIF
'___________________________________________________________________     
    IF ESCAPE = 1 THEN
        WHILE ESCAPE = 1
        WEND
        GOTO TIME
    ENDIF
'___________________________________________________________________
   IF UP = 1 THEN 
     DK = DK + 1
     IF  DK > 59  THEN
        DK = 00
     ENDIF
     GOSUB RTC
   ENDIF 
'___________________________________________________________________   
   IF DOWN = 1 THEN
      DK = DK - 1
        IF DK = 255  THEN
           DK = 59
        ENDIF
   GOSUB RTC
   ENDIF
'___________________________________________________________________   
 GOsub RTC_OKU 
 lcdOUT $FE,$CA,"--" 
 LCDOUT $FE,2,"SAAT : ",DEC2 SAAT,":",DEC2 DK,":",DEC2 SN

 GOTO SETDAK1 
  
 SETSN:
SETSN1 : 
   IF ENTER = 1 THEN
        WHILE ENTER = 1
        WEND
       GOTO SETSAAT
    ENDIF
'___________________________________________________________________    
   IF ESCAPE = 1 THEN
        WHILE ESCAPE = 1
        WEND
        GOTO TIME
    ENDIF
 '___________________________________________________________________
   IF UP = 1 THEN 
     SN = SN + 1
     IF  SN > 59  THEN
         SN = 00
     ENDIF
   GOSUB RTC
   ENDIF 
'___________________________________________________________________   
   IF DOWN = 1 THEN
     SN = SN - 1
     IF SN = 255  THEN
        SN = 59
     ENDIF 
     GOSUB RTC
   ENDIF
'___________________________________________________________________  
  
 GOSUB RTC_OKU  
  lcdOUT $FE,$CD,"--" 
 LCDOUT $FE,2,"SAAT : ",DEC2 SAAT,":",DEC2 DK,":",DEC2 SN

GOTO SETSN1  

'----------------------- Time Commands Subroutines --------------------------

RTC_OKU :
HIGH CE
 SHIFTOUT IO,SCLK,0,[$BF]
 SHIFTIN IO,SCLK,1,[SN,DK,SAAT,GUN,AY,HAFTA,YIL,RTCKONTROL]
        MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DK:GOSUB CEVIR:DK=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
LOW CE

 RETURN
'___________________________________________________________________ 
RTC_YAZ :
HIGH CE
SHIFTOUT IO,SCLK,0,[$8E,0] 'YAZMA ACILDI
LOW CE
PAUSEUS 10
HIGH CE
SHIFTOUT IO,SCLK,0,[$BE,SN,DK,SAAT,GUN,AY,HAFTA,YIL,RTCKONTROL]
LOW CE
PAUSEUS 10
RETURN 
'___________________________________________________________________
RTC :
   GOSUB YAZIM_CEVIR
   GOSUB RTC_YAZ
   PAUSE 300
   RETURN
YAZIM_CEVIR :
         MEM=SN:GOSUB TERSCEVIR:SN=SAYI
         MEM=DK:GOSUB TERSCEVIR:DK=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
         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    

SETDATE :

       LCDOUT $FE,1

GUNAL: 
     Gosub RTC_OKU
    lcdOUT $FE,$C7,"--"  
    LCDOUT $FE,2,"TARIH :",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL

 '___________________________________________________________________    
        IF ENTER = 1 THEN
            WHILE ENTER = 1:WEND
            LCDOUT $FE,1
           GOTO AYAL
      ENDIF
'___________________________________________________________________
    IF MENU = 1 THEN MENUGIRIS
 '___________________________________________________________________ 
    IF ESCAPE = 1 THEN 
    WHILE ESCAPE = 1 :WEND
        GOTO TIME
       ENDIF
'___________________________________________________________________
       IF UP = 1 THEN
          GUN = GUN + 1
          IF GUN = 32 THEN 
             GUN = 1 
          ENDIF
          GOSUB RTC      
       ENDIF
'___________________________________________________________________          
        IF DOWN = 1 THEN
           GUN = GUN -1
           IF GUN = 255 THEN 
              GUN = 1
           ENDIF
          GOSUB RTC
        ENDIF   
        GOTO GUNAL
'___________________________________________________________________        
AYBIR: 
        
     
        
AYAL:
     GOSUB RTC_OKU  
     lcdOUT $FE,$CA,"--" 
    LCDOUT $FE,2,"TARIH :",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
'___________________________________________________________________
    IF ESCAPE = 1 THEN 
        WHILE ESCAPE = 1 :WEND
        GOTO TIME
        ENDIF
'___________________________________________________________________        
    IF ENTER = 1 THEN
          WHILE ENTER = 1:WEND
          LCDOUT $FE,1
          GOTO YILAL
    ENDIF
'___________________________________________________________________
    IF UP = 1 THEN
        AY = AY + 1
        IF AY = 13 THEN 
           AY = 1
        ENDIF
        GOSUB RTC
        ENDIF
'___________________________________________________________________        
        IF DOWN = 1 THEN
           AY = AY - 1
           IF AY = 255 THEN
              AY = 12
           ENDIF
           GOSUB RTC
        ENDIF
'___________________________________________________________________        
        GOTO AYAL
YILBIR:
       

YILAL:
 GOSUB RTC_OKU 
    lcdOUT $FE,$CD,"--" 
LCDOUT $FE,2,"TARIH :",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
'___________________________________________________________________
     IF ESCAPE = 1 THEN 
        WHILE ESCAPE = 1 :WEND
        GOTO TIME
     ENDIF
'___________________________________________________________________       
      IF ENTER = 1 THEN
        WHILE ENTER = 1:WEND
        LCDOUT $FE,1
       GOTO GUNAL
     ENDIF
'___________________________________________________________________
        IF UP = 1 THEN
           YIL = YIL + 1
           IF YIL = 100 THEN 
              YIL = 0
           ENDIF
           GOSUB RTC
        ENDIF
        IF DOWN = 1 THEN
           YIL = YIL - 1
           IF YIL = 255 THEN 
              YIL = 99
           ENDIF 
           GOSUB RTC             
        ENDIF
        GOTO YILAL 

SETFABRIKA : 
   FOR KONTROL = 2 TO 217
     WRITE KONTROL,255
   PAUSE 10
   NEXT
   ADRS = 7
   GOTO START1  
END
Elektrik Müh.

wsxwsx

Açkıklamamışsın ama her halde çok yararlı bir programdır.. hemen kullanalım. ne işe yaradığı önemli değil.

Mehemet

içinde rtc den tarih saat ayarlamaya menüye girmede şifrelemeye analog okuma  kayıt tutma  ve bir çok işlem var inşallah size yardımcı olur  isteyene  isisinide atabilirim.  Ete Bey e  teşkkürlerimi sunmayıda borç bilirim
Elektrik Müh.

ete

@Mehemet,
Tebrik ederim. İyi ve uzun bir program. Ne işe yaradığında yazsa idin ilgili arkadaşlar için daha uygun olurdu. Öğrenmek isteyenler genelde amaca göre mukayese yaparlar ve bilgi sahibi olurlar.

Bu arada bir iki konuda kusur gördüm ve onlarıda düzelteyim istedim.

Birincisi eeproma bilgi yazarken her yazma işleminden sonra 10 ms lik bir gecikme koyulması gerekir. Yazma İşlemi yaklaşık bu kadar süre tutar ve ardından hemen ikinci yaz emrini verirseniz muhtemelen ikinci emir tam olarak yerine getirilmeyecektir. Bu her zaman olmayabilir ama olma ihtimali yüksektir.
Bu nedenle her write komutundan sonra 10 ms lik bir gecikme koymanızı öneriyorum.

Diğer bir düzeltmeyide ADC okumasından sonra uyguladığınız formül üzerinde yapmak isterim. Biliyorsunuz pic aksine bir komut vermediğiniz taktirde 8 bitlik (veya değişkenler 16 bit ise 16 bitlik) işlemler yapar . Dolayısıyla sizin verdiğiniz formüllerden birini ele alırsak;
BLG2 = 4 * (( BLG3 * 25 ) / (1023))

işleminde BLG3 ADC den okunan ve 0-1023 arasında değeri Yüzde olarak yada 0-100 arasında bir değer olarak göstermek istiyorsunuz. Yani bu formül maksimum ADC değeri olan 1023 de size 100 değerini vermeli ve teorik olarak 1024/2=511 ADC değerine karşılık da 50 değerini vermelidir.
Ancak formülü 512 (yada 511) değeri ile denerseniz size 48 değerini vereceğini göreceksiniz. Bunun sebebi formüldeki işlemin 16 bitlik matematik hesabına göre yapılıp küsuratların atılması sonucunda 48 değerinin elde edilmesidir.  İşlemi sırası ile yaparsak konu daha iyi anlaşılacaktır.
512 x 25= 12800
12800 / 1023 =12,5 ancak bu 12 olarak alıncaktır dolayısıyla sonuç 12 olacaktır.
12 x 4= 48 olarak sonuç bulunacaktır.
Bu işemi 32 bit matematiği ile yaparsanız formülünüz şöyle olmalıdır,

BLG2 =(BLG3+1) */ 25

Bu formül ile 512 değerine karşılık elde edeceğiniz sonuç 50 çıkacaktır.
Deneyerek görebilirsiniz.
Formülün açılımı ise şöyledir.
(BLG3+1) önce 25 ile çarpılıp 256 ya bölünecektir.  Sizin formülde 4/1023 değerlerini 4 ile sadeleştirirseniz 1/256 değerini bulacaksınız zaten. Tek fark 1023 yerine ben 1024 değerini kullanıyorum. ADC değerleri hesaplanır iken 0-1023 arası kademe sayısı 1024 olarak bulunur. Siz 100 değeri için 1024 kademeli bir okuma yapacaksanız her bir okuma karşılığı bulunacak değer 100/1024 işleminden bulunur. Sonuç 0,09765625 olarak çıkar. 32 bitlik işlem sonucunda biz 256 ya bölünmüş neticeyi aldığımız için bu sayıyı birde 256 ile çarparsam bana 25 sayısını verecektir. İşte kullanacağım formüldeki 25 rakamı buradan gelmektedir.

Biraz detaylı açıklama verdim bilmeyenler öğrensin diye. Sen zaten biliyorsan aldırma.

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

hayati

ısıs dosyasını yayınlayabilirmisiniz teşekkürler

Mehemet

http://rapidshare.com/files/156042641/By_Mehemet.rar

isisi

haklısınız hocam adc işlemin o nokta gözümden kacmış. onu düzeltmek lazım.

Bu programın isisi üzerinde çalışınca ne oldugu anlaşılıyor. Kısacası  6 analog girişinden gelen sinyallerin set değerinden büyükse zaman büyüklük ve hangi girişinden hata sinyali geldiğini hafızasında  tutuyor ve istenildiğinde menüden okunabiliyor ayrıca set değiştirilebiliyor. menüye girmek içinde şifre istiyor.

Ne kadar iyi bir program  bilmiyorum ama yaptığım ilk büyük çaplı program belki üzerinde çalışılıp dahada kısaltılabilir ama  o an için elimden geleni bu kadardı.

Şimdi bu programım biraz daha üstün halini yaptım. otolearn kullandım.

Yakında onuda sizlerle paylaşırım.

iyi çalışmalar
Elektrik Müh.