Basic te derlenip çalışan program protonda derlediğimde hata veriyor

Başlatan bederik, 08 Ekim 2016, 01:19:34

bederik

Sevgili arkadaşlar;
16f887 ile yaptığım devrede iki adet analog girişi okuyup karşılaştırma yapıyorum. Sorun basic'te derlediğimde sorunsuz bir şekilde program çalışıyor fakat komutları uyarlayıp protonda derlediğimde 2 nolu analog giriş tanımlanmamış hatası veriyor. Proton 16f887 de aynı anda iki adet analog girişi okuyup karşılaştırma yapabilen var mı? ADCON0 registerinde analog giriş kanal  seçimi olarak 5. ve 2. bitler arası belirtilmiş fakat herseferinde sadece bir adet giriş aktif edilebiliniyor. Çözüm yolu var mıdır?
Basic hali :
@ DEVICE pic16F887
@ DEVICE pic16F887, WDT_ON
@ DEVICE pic16F887, PWRT_OFF
@ DEVICE pic16F887, PROTECT_OFF
OSCCON = %01110001 
define OSC 8
include "modedefs.bas"
OSCCON = %01100111
DEFINE SER2_BITS 9
OPTION_REG=7
DEFINE	ADC_BITS	10	    'A/D çevirim sonucu kaç bit olacak
DEFINE	ADC_CLOCK	2	    'Clock kaynağı (3=rc)
DEFINE	ADC_SAMPLEUS 150	'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------
ADCON0 = %11000000     ' Set ADC_CLOCK to RC (DEFINE ACD_CLOCK inoperative on the 16F88x)
ADCON1 = %10000000 
ANSEL = %00000011   
ANSELH = %00000000 
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
PAUSE 200
TRISA=%11000111
TRISB=%11110000
TRISD=%11110000
TRISC=%10000001
TRISE=%1100
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 3
define LCD RWREG PORTC   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS	 250
INTCON=$88

symbol AC=PORTA.4      
Symbol KAPA=PORTA.3
Symbol ALED=PORTB.0
Symbol KLED=PORTB.2   
Symbol ARIZALED=PORTB.1                                      
SYMBOL LOCAC=PORTC.0
SYMBOL LOCKAPA=PORTA.6
SYMBOL LOCSTOP=PORTA.7
SYMBOL KTORK=PORTB.4
SYMBOL KLIM=PORTB.5
SYMBOL ALIM=PORTB.6
SYMBOL ATORK=PORTB.7
SYMBOL LOCAL=PORTE.2
symbol TERM=PORTA.2
SYMBOL YUKARI=PORTC.7
SYMBOL MENUGIR=PORTD.4
SYMBOL SAG=PORTD.5
SYMBOL ASAGI=PORTD.6
SYMBOL SOL=PORTD.7
SYMBOL ARIZA=PORTB.3
E1 VAR WORD
E2 VAR WORD
ORTE1 VAR WORD
ORTE2 VAR WORD
E1VOLT VAR WORD
'E1MVOLT VAR BYTE
E2VOLT VAR WORD
'E2MVOLT VAR BYTE
A VAR BYTE                    
B VAR BYTE      
C VAR BYTE
CG VAR BYTE
DG VAR BYTE      
D VAR BYTE      
E VAR BYTE     
F VAR BYTE     
G VAR byte      
H VAR BYTE      
I VAR BYTE     
J var byte
K VAR BYTE
L VAR BYTE
M VAR BYTE
N VAR BYTE
O VAR BYTE
P VAR BYTE
R VAR BYTE
S VAR BYTE
Y var byte
KK VAR BYTE
LL VAR BYTE
MM VAR BYTE
MINMA VAR WORD
ZM VAR BYTE
DCG VAR WORD
DDG VAR WORD
S=1
C=0
P=1
READ 5,MINMA.LOWBYTE
PAUSE 10
READ 6,MINMA.HIGHBYTE
PAUSE 10
READ 1,A
PAUSE 10
READ 2,B
PAUSE 10
READ 10,P
PAUSE 10
READ 3,CG
PAUSE 10
READ 4,DG
PAUSE 10
ORTE1=0
ORTE2=0
IF MINMA>10000 THEN MINMA=400
FOR Y=0 TO 4 STEP 1                                                                                      
TOGGLE ALED
PAUSE 100
TOGGLE ARIZALED
PAUSE 100
TOGGLE KLED
PAUSE 100
NEXT Y
LOW ALED:LOW KLED:LOW ARIZALED:HIGH ARIZA

BIR:
LCDOUT $FE,$1,"AUMA"
LCDOUT $FE,$C0,"YEDEK KART"
PAUSE 2000


BASLA:
IF MENUGIR=0 THEN
LCDOUT $FE,$1
WHILE MENUGIR=0
WEND
GOSUB DUR
GOSUB MENU
ENDIF
DCG=CG*100
DDG=DG*100
'IF YUKARI=0 OR ASAGI=0 OR SAG=0 OR SOL=0THEN GOSUB YONGOS
FOR F=1 TO 20 STEP 1
ADCIN 0,E1                    'E1 ANALOG DEĞERİNİ OKU
ADCIN 1,E2                    'E2 ANALOG DEĞERİNİ OKU
'DC den okuyacağın değer (tam 50V da) 1023 dür. Sıfır dahil bu 1024 kademe demektir.
'O halde 500/1024=0,48828125 gibi bir değer hesaplanır. Hesaplamada */ işlemini 
'kullanınca sonuç otomatikman 256 ya bölünmüş olarak geleceği için bu değeri önceden 
'256 ile çarpmak gerekir.0,48828125 * 256= 125 olarak bulunur. Bu senin sabit çarpan 
'değerindir. O halde formülün;                                                           
'Ham_Volt=(ADCDeger+1)*/125  şeklinde hesaplanır. Buradan
'Volt= Ham_Volt/10
'MVolt=Ham_Volt//10  
'şeklinde uygulanır.
E1=E1+1                       'E1 mA HESABI
    E1volt=(E1*/785)/1     'E1 mA HESABI
E2=E2+1                       'E2 mA HESABI
    E2volt=(E2*/785)/1     'E2 mA HESABI
ORTE1=ORTE1+E1VOLT
ORTE2=ORTE2+E2VOLT
NEXT F
E1VOLT=ORTE1/20
E2VOLT=ORTE2/20
ORTE1=0
ORTE2=0
IF TERM=1 THEN                 'TERMISTORDER SINYAL GELDIYSE
LCDOUT $FE,$2,"MOTOR ASIRI     "
LCDOUT $FE,$C0,"ISINDI          "
LOW KAPA:LOW AC:HIGH ARIZALED:LOW ARIZA   'KAPAMAYI İPTAL ET AÇMAYI İPTALET ARIZA LEDİNİ YAK ARIZA RÖLESİNİ ÇEKTİR
GOTO BASLA
ENDIF
J=E1VOLT DIG 1
K=E1VOLT DIG 2
L=E1VOLT DIG 3  
M=E2VOLT DIG 1
N=E2VOLT DIG 2
O=E2VOLT DIG 3  

IF ALIM=0 THEN LOW ALED
IF KLIM=0 THEN LOW KLED
IF LOCAL=1 THEN               'LOCALDE İSE
GOSUB LOC                     'LOCAL KOMUTLARINA GİT
GOTO BASLA                    'BAŞA DÖN
ENDIF
C=0                           'C'Yİ SIFIRLA

IF E1<50 THEN                    'E1 SİNYALİ 50DEN DÜŞÜKSE
LCDOUT $FE,$2,"E1 SINYAL YOK   "
low AC:LOW KAPA:LOW ARIZA:HIGH ARIZALED 'KAPAMAYI İPTAL ET AÇMAYI İPTALET ARIZA LEDİNİ YAK ARIZA RÖLESİNİ ÇEKTİR
GOTO BASLA
ENDIF

IF E2<50 THEN
LCDOUT $FE,$2,"E2 SINYAL YOK   "
LOW AC:LOW KAPA:LOW ARIZA:HIGH ARIZALED
GOTO BASLA
ENDIF 

LCDOUT $FE,$2,"E1:",#L,#K,",",#J," E2:",#O,#N,",",#M," "
'LCDOUT $FE,$2,"E1:",DEC4 E1volt,"  ","E2:",DEC4 E2volt
'LCDOUT $FE,$C0,"MIN. AKIM:",DEC5 MINMA

IF ATORK=0 THEN               'EĞER AÇIK TORK GELMİYORSA
IF ALIM=0  THEN               'EĞER AÇIK LİMİT GELMİYORSA 
IF E1VOLT>(E2VOLT+A)AND E1VOLT>MINMA THEN     'EĞER E1 E2+A DAN BÜYÜKSE
GOSUB KONAC                   'ACMA VER
ELSE
IF E1VOLT<MINMA AND KLIM=0 AND KTORK=0 THEN GOSUB KONKAPA
ENDIF                         
ELSE
IF P=1 THEN
LOW AC                        'ACMAYI İPTAL ET
ELSE
LOW KAPA
ENDIF
ENDIF
ELSE 
IF P=1 THEN
LOW AC
ELSE 
LOW KAPA
ENDIF
ENDIF

IF KTORK=0 THEN               'EĞER KAPALI TORK GELMİYORSA
IF KLIM=0  THEN               'EĞER KAPALI LİMİT GELMİYORSA
IF E1VOLT<(E2VOLT-B) THEN             'EĞER E1 E2-B DEN KÜÇÜKSE 
GOSUB KONKAPA                 'KAPAMA VER
ENDIF
ELSE
IF P=1 THEN
LOW KAPA                      'KAPAMAYI İPTAL ET
ELSE
LOW AC
ENDIF
ENDIF
ELSE
IF P=1 THEN
LOW KAPA
ELSE
LOW AC
ENDIF
ENDIF


IF E1VOLT>MINMA AND E1VOLT<(E2VOLT+A) THEN
IF E1VOLT>MINMA AND E1VOLT>(E2VOLT-B) then                 
LOW AC:LOW KAPA
LCDOUT $FE,$C0,"KOMUT BEKLIYOR  "
ENDIF
ENDIF

IF ALIM=1 THEN    'EGER ACIK LİMİT GELİYORSA
GOSUB ALIMIT
ENDIF

IF KLIM=1 THEN
GOSUB KLIMIT
ENDIF

IF ATORK=1 THEN
GOSUB ACTORK
ENDIF

IF KTORK=1 THEN
GOSUB KAPATORK
ENDIF

GOTO BASLA

LOC:
LCDOUT $FE,$2,"E1:",#L,#K,",",#J," E2:",#O,#N,",",#M," "
'LCDOUT $FE,$2,"E1:",DEC4 E1volt,"  ","E2:",DEC4 E2volt
C=C+1
IF C=1 THEN
LOW AC:LOW KAPA:LOW ALED:LOW KLED
LCDOUT $FE,$1
ENDIF
IF C<2 THEN C=2
IF LOCSTOP=1 THEN             'EĞER LOCAL STOP KOMUTU VERİLDİYSE
GOSUB DUR                     'DUR'A GİT
LCDOUT $FE,$C0,"DUR'A BASILDI   "
ENDIF
IF ATORK=0 THEN               'EĞER AÇIK TORK GELMİYORSA
IF ALIM=0  THEN               'EĞER AÇIK LİMİT GELMİYORSA 
IF LOCAC=0 THEN               'EĞER LOCAL AÇMA VERİLDİYSE
GOSUB KONAC                   'VANA AÇA GİT
ENDIF
ELSE
GOSUB ALIMIT                  'EĞER AÇIK LİMİT GELİYORSA AÇIK LİMİTE GİT
ENDIF
ELSE
GOSUB ACTORK                  'EĞER AÇIK TORK GELİYORSA AÇIK TORKA GİT
ENDIF

IF KTORK=0 THEN               'EĞER AÇIK TORK GELMİYORSA
IF KLIM=0  THEN               'EĞER AÇIK LİMİT GELMİYORSA 
IF LOCKAPA=0 THEN               'EĞER LOCAL AÇMA VERİLDİYSE
GOSUB KONKAPA                   'VANA AÇA GİT
ENDIF
ELSE
GOSUB KLIMIT                  'EĞER AÇIK LİMİT GELİYORSA AÇIK LİMİTE GİT
ENDIF
ELSE
GOSUB KAPATORK                  'EĞER AÇIK TORK GELİYORSA AÇIK TORKA GİT
ENDIF
RETURN


ALIMIT:
HIGH ALED
IF P=1 THEN
LOW AC
ELSE 
LOW KAPA
ENDIF
LCDOUT $FE,$C0,"ACIK LIMIT      "
RETURN

KLIMIT:
HIGH KLED
IF P=1 THEN
LOW KAPA
ELSE
LOW AC
ENDIF
LCDOUT $FE,$C0,"KAPALI LIMIT    "
RETURN

ACTORK:
HIGH ARIZALED:LOW ARIZA
IF P=1 THEN
LOW AC
ELSE
LOW KAPA
ENDIF
LCDOUT $FE,$C0,"ACIK TORK       "
RETURN

KAPATORK:
HIGH ARIZALED:LOW ARIZA
IF P=1 THEN
LOW KAPA
ELSE
LOW AC
ENDIF
LCDOUT $FE,$C0,"KAPALI TORK     "
RETURN


KONAC:
IF P=1 THEN
LOW KAPA:PAUSE 300:PAUSE DCG:LOW KLED:HIGH AC:LOW ARIZALED:HIGH ARIZA    'KAPA SIFIR YAP AÇ KOMUTU VER
ELSE
LOW AC: PAUSE 300:PAUSE DCG:LOW KLED:HIGH KAPA:LOW ARIZALED:HIGH ARIZA
ENDIF
LCDOUT $FE,$C0,"VANA ACIYOR     "
HIGH ALED
RETURN

KONKAPA:
IF P=1 THEN
LOW AC:PAUSE 300:PAUSE DCG:LOW ALED:HIGH KAPA:LOW ARIZALED:HIGH ARIZA 'AÇ SIFIR YAP KAPA KOMUTU VER
ELSE
LOW KAPA:PAUSE 300:PAUSE DCG:LOW ALED:HIGH AC:LOW ARIZALED:HIGH ARIZA
ENDIF
LCDOUT $FE,$C0,"VANA KAPATIYOR  "
HIGH KLED
RETURN

DUR:
PAUSE DDG
LOW AC:LOW ALED:LOW KAPA:LOW KLED 
RETURN
END

MENU:
IF S=1 THEN
LCDOUT $FE,$1,"ACMA YONUNDE"
LCDOUT $FE,$C0,"OLU BAND AYARI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB OLAC
ENDIF
IF S=2 THEN
LCDOUT $FE,$1,"KAPAMA YONUNDE"
LCDOUT $FE,$C0,"OLU BAND AYARI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB OLKAPA
ENDIF
IF S=3 THEN
LCDOUT $FE,$1,"CALISMA GECIKME"
LCDOUT $FE,$C0,"ZAMANI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB CGZ
ENDIF
IF S=4 THEN
LCDOUT $FE,$1,"DURMA GECIKME"
LCDOUT $FE,$C0,"ZAMANI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB DGZ
ENDIF
IF S=5 THEN
LCDOUT $FE,$1,"MOTOR YONU"
LCDOUT $FE,$C0,"SECIMI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB CYS
ENDIF
IF S=6 THEN
LCDOUT $FE,$1,"MINIMUM AKIM"
LCDOUT $FE,$C0,"DEGERI"
IF YUKARI=0 OR ASAGI=0 THEN GOSUB MINAKIM
ENDIF
IF SAG=0 THEN
S=S+1
IF S=7 THEN S=1
ENDIF
WHILE SAG=0
WEND
IF SOL=0 THEN
S=S-1
IF S=0 then S=6
ENDIF
WHILE SOL=0
WEND
IF MENUGIR=0 THEN
LCDOUT $FE,$1
WHILE MENUGIR=0
WEND
RETURN
ENDIF
PAUSE 100
GOTO MENU

CYS:
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
RETURN
ENDIF
LCDOUT $FE,$2,"SAG DOGRU YON   "
LCDOUT $FE,$C0,"SOL TERS  YON   "
PAUSE 10
IF SOL=0 THEN 
LCDOUT $FE,$1,"TERS YON"
LCDOUT $FE,$C0,"SECILI"
P=1
WRITE 10,P
PAUSE 10
WHILE SOL=0:WEND
ENDIF
IF SAG=0 THEN 
LCDOUT $FE,$1,"DOGRU YON"
LCDOUT $FE,$C0,"SECILI"
P=2
WRITE 10,P
PAUSE 10
WHILE SAG=0:WEND
ENDIF
GOTO CYS

CGZ:
LCDOUT $FE,$2,"CALISMA  x100 mS"
LCDOUT $FE,$C0,"GECIKMESI ",DEC3 CG,"   "
IF SAG=0 THEN
CG=CG+1
ENDIF
IF SOL=0 THEN
CG=CG-1
ENDIF
PAUSE 100
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
WRITE 3,CG
PAUSE 10
RETURN
ENDIF
GOTO CGZ

DGZ:
LCDOUT $FE,$2,"DURMA    x100 mS"
LCDOUT $FE,$C0,"GECIKMESI ",DEC3 DG,"   "
IF SAG=0 THEN
DG=DG+1
ENDIF
IF SOL=0 THEN
DG=DG-1
ENDIF
PAUSE 100
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
WRITE 4,DG
PAUSE 10
RETURN
ENDIF
GOTO DGZ

OLAC:
LCDOUT $FE,$2,"ACMA YONUNDE    "
LCDOUT $FE,$C0,"OLU BAND= ",DEC3 A,"   "
IF SAG=0 THEN
A=A+1
ENDIF
IF SOL=0 THEN
A=A-1
ENDIF
PAUSE 100
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
WRITE 1,A
PAUSE 10
RETURN
ENDIF
GOTO OLAC

OLKAPA:
LCDOUT $FE,$2,"KAPAMA YONUNDE  "
LCDOUT $FE,$C0,"OLU BAND= ",DEC3 B,"   "
IF SAG=0 THEN
B=B+1
ENDIF
IF SOL=0 THEN
B=B-1
ENDIF
PAUSE 100
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
WRITE 2,B
PAUSE 10
RETURN
ENDIF
GOTO OLKAPA

MINAKIM:
KK=MINMA DIG 1
LL=MINMA DIG 2
MM=MINMA DIG 3
LCDOUT $FE,$2,"MINIMUM AKIM    "
LCDOUT $FE,$C0,"DEGERI=  ",#MM,#LL,",",#KK," mA"
IF SAG=0 THEN
MINMA=MINMA+10
ENDIF
IF SOL=0 THEN
MINMA=MINMA-10
ENDIF
PAUSE 100
IF MENUGIR=0 THEN 
WHILE MENUGIR=0
LCDOUT $FE,$1
WEND
WRITE 5,MINMA.LOWBYTE
PAUSE 10
WRITE 6,MINMA.HIGHBYTE
PAUSE 10
RETURN
ENDIF
GOTO MINAKIM
END

Proton hali :
Device 16F887
OSCCON = %01110001 
XTAL=8
Include "modedefs.bas"
OSCCON = %01100111
OPTION_REG=7
ADIN_RES 10         'ADC ÇÖZÜNÜRLÜĞÜ 10 BİT 0...1023 
ADIN_TAD FRC
ADIN_STIME 150       'ÖRNEKLEME ZAMANI 50 US
LCD_DTPORT = PORTD                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
LCD_DTPIN PORTD.0
LCD_RSPIN = PORTC.1                'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPIN = PORTC.3                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPIN = PORTC.2                'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_TYPE = ALPHA
INTERNAL_FONT = On
LCD_COMMANDUS 4000
LCD_DATAUS	 250
'-------------------------------------------------------------------------
ADCON0=%11000000     ' Set ADC_CLOCK to RC (DEFINE ACD_CLOCK inoperative on the 16F88x)
ADCON1 = %11000000 
ANSEL = %00000011   
ANSELH = %00000000 
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
DelayMS 200
TRISA=%11000111
TRISB=%11110000
TRISD=%11110000
TRISC=%10000001
TRISE=%1100
INTCON=$88

Symbol AC=PORTA.4      
Symbol KAPA=PORTA.3
Symbol ALED=PORTB.0
Symbol KLED=PORTB.2   
Symbol ARIZALED=PORTB.1                                      
Symbol LOCAC=PORTC.0
Symbol LOCKAPA=PORTA.6
Symbol LOCSTOP=PORTA.7
Symbol KTORK=PORTB.4
Symbol KLIM=PORTB.5
Symbol ALIM=PORTB.6
Symbol ATORK=PORTB.7
Symbol LCAL=PORTE.2
Symbol TERM=PORTA.2
Symbol YUKARI=PORTC.7
Symbol MENUGIR=PORTD.4
Symbol SAG=PORTD.5
Symbol ASAGI=PORTD.6
Symbol SOL=PORTD.7
Symbol ARIZA=PORTB.3
Dim E1 As Word
Dim E2 As Word
Dim ORTE1 As Word
Dim ORTE2 As Word
Dim E1VOLT As Word
Dim E2VOLT As Word
Dim A As Byte                    
Dim B As Byte      
Dim C As Byte
Dim CG As Byte
Dim DG As Byte      
Dim D As Byte      
Dim E As Byte     
Dim F As Byte     
Dim G As Byte      
Dim H As Byte      
Dim I As Byte     
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Byte
Dim N As Byte
Dim O As Byte
Dim P As Byte
Dim R As Byte
Dim S As Byte
Dim Y As Byte
Dim KK As Byte
Dim LL As Byte
Dim MM As Byte
Dim MINMA As Word
Dim ZM As Byte
Dim DCG As Word
Dim DDG As Word
S=1
C=0
P=1
MINMA.LowByte=ERead 5
DelayMS 10
MINMA.HighByte=ERead 6
DelayMS 10
A=ERead 1
DelayMS 10
B=ERead 2
DelayMS 10
P=ERead 10
DelayMS 10
CG=ERead 3
DelayMS 10
DG=ERead 4
DelayMS 10
ORTE1=0
ORTE2=0
If MINMA>10000 Then MINMA=400
For Y=0 To 4 Step 1                                                                                      
Toggle ALED
DelayMS 100
Toggle ARIZALED
DelayMS 100
Toggle KLED
DelayMS 100
Next Y
Low ALED:Low KLED:Low ARIZALED:High ARIZA

BIR:
Print $FE,$1,"AUMA"
Print $FE,$C0,"YEDEK KART"
DelayMS 2000


BASLA:
If MENUGIR=0 Then
Print $FE,$1
While MENUGIR=0
Wend
GoSub DUR
GoSub MENU
EndIf
DCG=CG*100
DDG=DG*100
For F=1 To 20 Step 1
ADIn 0,E1                    'E1 ANALOG DEĞERİNİ OKU
ADIn 1,E2                    'E2 ANALOG DEĞERİNİ OKU
'DC den okuyacağın değer (tam 50V da) 1023 dür. Sıfır dahil bu 1024 kademe demektir.
'O halde 500/1024=0,48828125 gibi bir değer hesaplanır. Hesaplamada */ işlemini 
'kullanınca sonuç otomatikman 256 ya bölünmüş olarak geleceği için bu değeri önceden 
'256 ile çarpmak gerekir.0,48828125 * 256= 125 olarak bulunur. Bu senin sabit çarpan 
'değerindir. O halde formülün;                                                           
'Ham_Volt=(ADCDeger+1)*/125  şeklinde hesaplanır. Buradan
'Volt= Ham_Volt/10
'MVolt=Ham_Volt//10  
'şeklinde uygulanır.
E1=E1+1                       'E1 mA HESABI
    E1VOLT=(E1*/785)/1     'E1 mA HESABI
E2=E2+1                       'E2 mA HESABI
    E2VOLT=(E2*/785)/1     'E2 mA HESABI
ORTE1=ORTE1+E1VOLT
ORTE2=ORTE2+E2VOLT
Next F
E1VOLT=ORTE1/20
E2VOLT=ORTE2/20
ORTE1=0
ORTE2=0
If TERM=1 Then                 'TERMISTORDER SINYAL GELDIYSE
Print $FE,$2,"MOTOR ASIRI     "
Print $FE,$C0,"ISINDI          "
Low KAPA:Low AC:High ARIZALED:Low ARIZA   'KAPAMAYI İPTAL ET AÇMAYI İPTALET ARIZA LEDİNİ YAK ARIZA RÖLESİNİ ÇEKTİR
GoTo BASLA
EndIf
J=E1VOLT Dig 1
K=E1VOLT Dig 2
L=E1VOLT Dig 3  
M=E2VOLT Dig 1
N=E2VOLT Dig 2
O=E2VOLT Dig 3  

If ALIM=0 Then Low ALED
If KLIM=0 Then Low KLED
If LCAL=1 Then               'LOCALDE İSE
GoSub LOC                     'LOCAL KOMUTLARINA GİT
GoTo BASLA                    'BAŞA DÖN
EndIf
C=0                           'C'Yİ SIFIRLA

If E1<50 Then                    'E1 SİNYALİ 50DEN DÜŞÜKSE
Print $FE,$2,"E1 SINYAL YOK   "
Low AC:Low KAPA:Low ARIZA:High ARIZALED 'KAPAMAYI İPTAL ET AÇMAYI İPTALET ARIZA LEDİNİ YAK ARIZA RÖLESİNİ ÇEKTİR
GoTo BASLA
EndIf

If E2<50 Then
Print $FE,$2,"E2 SINYAL YOK   "
Low AC:Low KAPA:Low ARIZA:High ARIZALED
GoTo BASLA
EndIf 

Print $FE,$2,"E1:",#L,#K,",",#J," E2:",#O,#N,",",#M," "

If ATORK=0 Then               'EĞER AÇIK TORK GELMİYORSA
If ALIM=0  Then               'EĞER AÇIK LİMİT GELMİYORSA 
If E1VOLT>(E2VOLT+A)And E1VOLT>MINMA Then     'EĞER E1 E2+A DAN BÜYÜKSE
GoSub KONAC                   'ACMA VER
Else
If E1VOLT<MINMA And KLIM=0 And KTORK=0 Then GoSub KONKAPA
EndIf                         
Else
If P=1 Then
Low AC                        'ACMAYI İPTAL ET
Else
Low KAPA
EndIf
EndIf
Else 
If P=1 Then
Low AC
Else 
Low KAPA
EndIf
EndIf

If KTORK=0 Then               'EĞER KAPALI TORK GELMİYORSA
If KLIM=0  Then               'EĞER KAPALI LİMİT GELMİYORSA
If E1VOLT<(E2VOLT-B) Then             'EĞER E1 E2-B DEN KÜÇÜKSE 
GoSub KONKAPA                 'KAPAMA VER
EndIf
Else
If P=1 Then
Low KAPA                      'KAPAMAYI İPTAL ET
Else
Low AC
EndIf
EndIf
Else
If P=1 Then
Low KAPA
Else
Low AC
EndIf
EndIf


If E1VOLT>MINMA And E1VOLT<(E2VOLT+A) Then
If E1VOLT>MINMA And E1VOLT>(E2VOLT-B) Then                 
Low AC:Low KAPA
Print $FE,$C0,"KOMUT BEKLIYOR  "
EndIf
EndIf

If ALIM=1 Then    'EGER ACIK LİMİT GELİYORSA
GoSub ALIMIT
EndIf

If KLIM=1 Then
GoSub KLIMIT
EndIf

If ATORK=1 Then
GoSub ACTORK
EndIf

If KTORK=1 Then
GoSub KAPATORK
EndIf

GoTo BASLA

LOC:
Print $FE,$2,"E1:",#L,#K,",",#J," E2:",#O,#N,",",#M," "
C=C+1
If C=1 Then
Low AC:Low KAPA:Low ALED:Low KLED
Print $FE,$1
EndIf
If C<2 Then C=2
If LOCSTOP=1 Then             'EĞER LOCAL STOP KOMUTU VERİLDİYSE
GoSub DUR                     'DUR'A GİT
Print $FE,$C0,"DUR'A BASILDI   "
EndIf
If ATORK=0 Then               'EĞER AÇIK TORK GELMİYORSA
If ALIM=0  Then               'EĞER AÇIK LİMİT GELMİYORSA 
If LOCAC=0 Then               'EĞER LOCAL AÇMA VERİLDİYSE
GoSub KONAC                   'VANA AÇA GİT
EndIf
Else
GoSub ALIMIT                  'EĞER AÇIK LİMİT GELİYORSA AÇIK LİMİTE GİT
EndIf
Else
GoSub ACTORK                  'EĞER AÇIK TORK GELİYORSA AÇIK TORKA GİT
EndIf

If KTORK=0 Then               'EĞER AÇIK TORK GELMİYORSA
If KLIM=0  Then               'EĞER AÇIK LİMİT GELMİYORSA 
If LOCKAPA=0 Then               'EĞER LOCAL AÇMA VERİLDİYSE
GoSub KONKAPA                   'VANA AÇA GİT
EndIf
Else
GoSub KLIMIT                  'EĞER AÇIK LİMİT GELİYORSA AÇIK LİMİTE GİT
EndIf
Else
GoSub KAPATORK                  'EĞER AÇIK TORK GELİYORSA AÇIK TORKA GİT
EndIf
Return


ALIMIT:
High ALED
If P=1 Then
Low AC
Else 
Low KAPA
EndIf
Print $FE,$C0,"ACIK LIMIT      "
Return

KLIMIT:
High KLED
If P=1 Then
Low KAPA
Else
Low AC
EndIf
Print $FE,$C0,"KAPALI LIMIT    "
Return

ACTORK:
High ARIZALED:Low ARIZA
If P=1 Then
Low AC
Else
Low KAPA
EndIf
Print $FE,$C0,"ACIK TORK       "
Return

KAPATORK:
High ARIZALED:Low ARIZA
If P=1 Then
Low KAPA
Else
Low AC
EndIf
Print $FE,$C0,"KAPALI TORK     "
Return


KONAC:
If P=1 Then
Low KAPA:DelayMS 300:DelayMS DCG:Low KLED:High AC:Low ARIZALED:High ARIZA    'KAPA SIFIR YAP AÇ KOMUTU VER
Else
Low AC:DelayMS 300:DelayMS DCG:Low KLED:High KAPA:Low ARIZALED:High ARIZA
EndIf
Print $FE,$C0,"VANA ACIYOR     "
High ALED
Return

KONKAPA:
If P=1 Then
Low AC:DelayMS 300:DelayMS DCG:Low ALED:High KAPA:Low ARIZALED:High ARIZA 'AÇ SIFIR YAP KAPA KOMUTU VER
Else
Low KAPA:DelayMS 300:DelayMS DCG:Low ALED:High AC:Low ARIZALED:High ARIZA
EndIf
Print $FE,$C0,"VANA KAPATIYOR  "
High KLED
Return

DUR:
DelayMS DDG
Low AC:Low ALED:Low KAPA:Low KLED 
Return
End

MENU:
If S=1 Then
Print $FE,$1,"ACMA YONUNDE"
Print $FE,$C0,"OLU BAND AYARI"
If YUKARI=0 Or ASAGI=0 Then GoSub OLAC
EndIf
If S=2 Then
Print $FE,$1,"KAPAMA YONUNDE"
Print $FE,$C0,"OLU BAND AYARI"
If YUKARI=0 Or ASAGI=0 Then GoSub OLKAPA
EndIf
If S=3 Then
Print $FE,$1,"CALISMA GECIKME"
Print $FE,$C0,"ZAMANI"
If YUKARI=0 Or ASAGI=0 Then GoSub CGZ
EndIf
If S=4 Then
Print $FE,$1,"DURMA GECIKME"
Print $FE,$C0,"ZAMANI"
If YUKARI=0 Or ASAGI=0 Then GoSub DGZ
EndIf
If S=5 Then
Print $FE,$1,"MOTOR YONU"
Print $FE,$C0,"SECIMI"
If YUKARI=0 Or ASAGI=0 Then GoSub CYS
EndIf
If S=6 Then
Print $FE,$1,"MINIMUM AKIM"
Print $FE,$C0,"DEGERI"
If YUKARI=0 Or ASAGI=0 Then GoSub MINAKIM
EndIf
If SAG=0 Then
S=S+1
If S=7 Then S=1
EndIf
While SAG=0
Wend
If SOL=0 Then
S=S-1
If S=0 Then S=6
EndIf
While SOL=0
Wend
If MENUGIR=0 Then
Print $FE,$1
While MENUGIR=0
Wend
Return
EndIf
DelayMS 100
GoTo MENU

CYS:
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
Return
EndIf
Print $FE,$2,"SAG DOGRU YON   "
Print $FE,$C0,"SOL TERS  YON   "
DelayMS 10
If SOL=0 Then 
Print $FE,$1,"TERS YON"
Print $FE,$C0,"SECILI"
P=1
EWrite 10,[P]
DelayMS 10
While SOL=0:Wend
EndIf
If SAG=0 Then 
Print $FE,$1,"DOGRU YON"
Print $FE,$C0,"SECILI"
P=2
EWrite 10,[P]
DelayMS 10
While SAG=0:Wend
EndIf
GoTo CYS

CGZ:
Print $FE,$2,"CALISMA  x100 mS"
Print $FE,$C0,"GECIKMESI ",DEC3 CG,"   "
If SAG=0 Then
CG=CG+1
EndIf
If SOL=0 Then
CG=CG-1
EndIf
DelayMS 100
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
EWrite 3,[CG]
DelayMS 10
Return
EndIf
GoTo CGZ

DGZ:
Print $FE,$2,"DURMA    x100 mS"
Print $FE,$C0,"GECIKMESI ",DEC3 DG,"   "
If SAG=0 Then
DG=DG+1
EndIf
If SOL=0 Then
DG=DG-1
EndIf
DelayMS 100
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
EWrite 4,[DG]
DelayMS 10
Return
EndIf
GoTo DGZ

OLAC:
Print $FE,$2,"ACMA YONUNDE    "
Print $FE,$C0,"OLU BAND= ",DEC3 A,"   "
If SAG=0 Then
A=A+1
EndIf
If SOL=0 Then
A=A-1
EndIf
DelayMS 100
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
EWrite 1,[A]
DelayMS 10
Return
EndIf
GoTo OLAC

OLKAPA:
Print $FE,$2,"KAPAMA YONUNDE  "
Print $FE,$C0,"OLU BAND= ",DEC3 B,"   "
If SAG=0 Then
B=B+1
EndIf
If SOL=0 Then
B=B-1
EndIf
DelayMS 100
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
EWrite 2,[B]
DelayMS 10
Return
EndIf
GoTo OLKAPA

MINAKIM:
KK=MINMA Dig 1
LL=MINMA Dig 2
MM=MINMA Dig 3
Print $FE,$2,"MINIMUM AKIM    "
Print $FE,$C0,"DEGERI=  ",#MM,#LL,",",#KK," mA"
If SAG=0 Then
MINMA=MINMA+10
EndIf
If SOL=0 Then
MINMA=MINMA-10
EndIf
DelayMS 100
If MENUGIR=0 Then 
While MENUGIR=0
Print $FE,$1
Wend
EWrite 5,[MINMA.LowByte]
DelayMS 10
EWrite 6,[MINMA.HighByte]
DelayMS 10
Return
EndIf
GoTo MINAKIM
End

papsukkal

Kodları incelemedim ama aklima gelen şu: her adc okuma öncesi ilgili adc portu aktif etmen gerekebilir. Basicde bir defa tanimlamak yeterli olmasina karşın bazı derleyicilerde önce tanımla sonra oku gerekebiliyor

GT-I9300 cihazımdan Tapatalk kullanılarak gönderildi


run

özgürlük için teknoloji

yolcu27

Proton için kurek varmı acaba arkadaşlar yeri değil ama acil lazımda

HUAWEI G7-L01 cihazımdan Tapatalk kullanılarak gönderildi


bederik

Alıntı yapılan: run - 10 Ekim 2016, 17:55:58
3.5.3.8 hatasız derledi
Sayın arkadaşım; doğru diyorsun hatasız derliyor fakat isis' te test ettiğimde porta.1 analog giriş olarak tanımlanmamış diyor. Asıl derdim birinci ve ikinci analog kanalı karşılaştırıp ona göre çıkış vermek. Basicte sorun çıkmıyor fakat isiste debug yapıp programda çıkabilecek sorunları kontrol edemiyorum, o sebeple kodları protona uyarladım fakat analog kanal sorunu ortaya çıktı.

Z80

Bu şekilde yanlış.
ADIn 0,E1                    'E1 ANALOG DEĞERİNİ OKU
ADIn 1,E2                    'E2 ANALOG DEĞERİNİ OKU

Doğrusu böyle olacak:

E1  = ADIn    0                    'E1 ANALOG DEĞERİNİ OKU
E2  = ADIn    1                   'E2 ANALOG DEĞERİNİ OKU