Haberler:

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

Ana Menü

Kod Derleme Hatası

Başlatan oongit, 26 Mart 2013, 15:46:13

oongit

Merhaba Arkadaşlar...
Seri iletişimle ilgili bir devre yapmaya çalışıyorum. Devre şu:
http://c1303.hizliresim.com/17/u/lgtyb.png

Bu da programın kodları:
INCLUDE "MODEDEFS.BAS"
@ DEVICE pic16F877A, 
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, XT_OSC
@ DEVICE pic16F877A, BOD_OFF
@ DEVICE pic16F877A, LVP_OFF
@ DEVICE pic16F877A, CPD_OFF

ADCON1 = 7

TRISA = %000000
TRISB = %11111111
TRISC = %11111100
TRISD = %11111111
TRISE = %000

CIKIS   VAR PORTA.0
VER     VAR BYTE
VER = 0

BASLA:
    IF PORTC.3 = 0 THEN POT1_ARTTIR
    IF PORTD.0 = 0 THEN POT1_ORTALA
    IF PORTD.1 = 0 THEN POT1_AZALT
    
    IF PORTD.2 = 0 THEN POT2_ARTTIR
    IF PORTD.3 = 0 THEN POT2_ORTALA
    IF PORTC.4 = 0 THEN POT2_AZALT
    
    IF PORTC.5 = 0 THEN POT3_ARTTIR
    IF PORTC.6 = 0 THEN POT3_ORTALA
    IF PORTC.7 = 0 THEN POT3_AZALT
    
    IF PORTD.4 = 0 THEN POT4_ARTTIR
    IF PORTD.5 = 0 THEN POT4_ORTALA
    IF PORTD.6 = 0 THEN POT4_AZALT
    
    IF PORTD.7 = 0 THEN POT5_ARTTIR
    IF PORTB.0 = 0 THEN POT5_ORTALA
    IF PORTB.1 = 0 THEN POT5_AZALT
    
    IF PORTB.2 = 0 THEN POT6_ARTTIR
    IF PORTB.3 = 0 THEN POT6_ORTALA
    IF PORTB.4 = 0 THEN POT6_AZALT
    
    IF PORTB.5 = 0 THEN POT7_ARTTIR
    IF PORTB.6 = 0 THEN POT7_ORTALA
    IF PORTB.7 = 0 THEN POT7_AZALT
    
    IF PORTC.2 = 0 THEN LCD_BL
    GOTO BASLA
'==================================
POT1_ARTTIR:
    VER = 10 : GOTO EXIT
    
POT1_ORTALA:
    VER = 11 : GOTO EXIT
    
POT1_AZALT:
    VER = 12 : GOTO EXIT
'==================================
POT2_ARTTIR:
    VER = 20 : GOTO EXIT
    
POT2_ORTALA:
    VER = 21 : GOTO EXIT
    
POT2_AZALT:
    VER = 22 : GOTO EXIT
'==================================    
POT3_ARTTIR:
    VER = 30 : GOTO EXIT
    
POT3_ORTALA:
    VER = 31 : GOTO EXIT
    
POT3_AZALT:
    VER = 32 : GOTO EXIT
'==================================
POT4_ARTTIR:
    VER = 40 : GOTO EXIT
    
POT4_ORTALA:
    VER = 41 : GOTO EXIT
    
POT4_AZALT:
    VER = 42 : GOTO EXIT
'==================================
POT5_ARTTIR:
    VER = 50 : GOTO EXIT
    
POT5_ORTALA:
    VER = 51 : GOTO EXIT
    
POT5_AZALT:
    VER = 52 : GOTO EXIT
'==================================
POT6_ARTTIR:
    VER = 60 : GOTO EXIT
    
POT6_ORTALA:
    VER = 61 : GOTO EXIT
    
POT6_AZALT:
    VER = 62 : GOTO EXIT
'==================================
POT7_ARTTIR:
    VER = 70 : GOTO EXIT
    
POT7_ORTALA:
    VER = 71 : GOTO EXIT
    
POT7_AZALT:
    VER = 72 : GOTO EXIT
'==================================
LCD_BL:
    VER = 80 : GOTO EXIT
'==================================
EXIT:
    SEROUT CIKIS,N2400,[("A"),VER,13,10]
    GOTO BASLA
    END


Programı derlemeye kalktığımda, "numeric constant or symbol name expected" hatasını veriyor. Sorunun nereden kaynaklandığını anlayamadım. Yardımcı olabilir misiniz?

Devrenin orjinalinin bulunduğu link budur:
https://320volt.com/picbasic-dersleri-pic-basic-pro-ile-pic-programlama-7/

Wadek

SEROUT CIKIS,N2400,[("A"),VER,13,10] kısmını SEROUT CIKIS,N2400,["A",VER,13,10] şeklinde dener misiniz?


Maxim

EXIT diye etiket ismi olmaz
hepsini EXIT1 yapın

birde bu hatalı
CIKIS   VAR PORTA.0
dogrusu
Symbol CIKIS =PORTA.0

OG

CIKIS   VAR PORTA.0

Sanıyorum program bu tip syntax da kabul ediyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

oongit

#4
Alıntı yapılan: Wadek - 26 Mart 2013, 16:49:00
SEROUT CIKIS,N2400,[("A"),VER,13,10] kısmını SEROUT CIKIS,N2400,["A",VER,13,10] şeklinde dener misiniz?
Geç yanıtladığım için üzgünüm. Denedim, ancak aynı uyarıyı veriyor.

mesaj birleştirme:: 28 Mart 2013, 21:16:11

Alıntı yapılan: Maxim - 26 Mart 2013, 17:42:11
EXIT diye etiket ismi olmaz
hepsini EXIT1 yapın

birde bu hatalı
CIKIS   VAR PORTA.0
dogrusu
Symbol CIKIS =PORTA.0
EXIT etiketini EXIT1 olarak değiştirip denedim olmadı. Diğer dediğinizi de değiştirdim. Ancak sonuç yine aynı. Bu hatanın kaynağı ne olabilir başka?

Maxim

yeni fark ettim biraz geç olacak

bu kod aynen bu şekilde derlenmektedir.
sadece config satırlarını kaldırdım orada bir sıkıntı var, nedenini bilmiyorum.

INCLUDE "MODEDEFS.BAS"
'@ DEVICE pic16F877A, 
'@ DEVICE pic16F877A, WDT_OFF
'@ DEVICE pic16F877A, PWRT_ON
'@ DEVICE pic16F877A, PROTECT_OFF
'@ DEVICE pic16F877A, XT_OSC
'@ DEVICE pic16F877A, BOD_OFF
'@ DEVICE pic16F877A, LVP_OFF
'@ DEVICE pic16F877A, CPD_OFF

ADCON1 = 7

TRISA = %000000
TRISB = %11111111
TRISC = %11111100
TRISD = %11111111
TRISE = %000

'CIKIS VAR PORTA.0
Symbol CIKIS =PORTA.0
VER VAR BYTE
VER = 0

BASLA:
    IF PORTC.3 = 0 THEN POT1_ARTTIR
    IF PORTD.0 = 0 THEN POT1_ORTALA
    IF PORTD.1 = 0 THEN POT1_AZALT
    
    IF PORTD.2 = 0 THEN POT2_ARTTIR
    IF PORTD.3 = 0 THEN POT2_ORTALA
    IF PORTC.4 = 0 THEN POT2_AZALT
    
    IF PORTC.5 = 0 THEN POT3_ARTTIR
    IF PORTC.6 = 0 THEN POT3_ORTALA
    IF PORTC.7 = 0 THEN POT3_AZALT
    
    IF PORTD.4 = 0 THEN POT4_ARTTIR
    IF PORTD.5 = 0 THEN POT4_ORTALA
    IF PORTD.6 = 0 THEN POT4_AZALT
    
    IF PORTD.7 = 0 THEN POT5_ARTTIR
    IF PORTB.0 = 0 THEN POT5_ORTALA
    IF PORTB.1 = 0 THEN POT5_AZALT
    
    IF PORTB.2 = 0 THEN POT6_ARTTIR
    IF PORTB.3 = 0 THEN POT6_ORTALA
    IF PORTB.4 = 0 THEN POT6_AZALT
    
    IF PORTB.5 = 0 THEN POT7_ARTTIR
    IF PORTB.6 = 0 THEN POT7_ORTALA
    IF PORTB.7 = 0 THEN POT7_AZALT
    
    IF PORTC.2 = 0 THEN LCD_BL
    GOTO BASLA
'==================================
POT1_ARTTIR:
    VER = 10 : GOTO EXIT1
    
POT1_ORTALA:
    VER = 11 : GOTO EXIT1
    
POT1_AZALT:
    VER = 12 : GOTO EXIT1
'==================================
POT2_ARTTIR:
    VER = 20 : GOTO EXIT1
    
POT2_ORTALA:
    VER = 21 : GOTO EXIT1
    
POT2_AZALT:
    VER = 22 : GOTO EXIT1
'==================================    
POT3_ARTTIR:
    VER = 30 : GOTO EXIT1
    
POT3_ORTALA:
    VER = 31 : GOTO EXIT1
    
POT3_AZALT:
    VER = 32 : GOTO EXIT1
'==================================
POT4_ARTTIR:
    VER = 40 : GOTO EXIT1
    
POT4_ORTALA:
    VER = 41 : GOTO EXIT1
    
POT4_AZALT:
    VER = 42 : GOTO EXIT1
'==================================
POT5_ARTTIR:
    VER = 50 : GOTO EXIT1
    
POT5_ORTALA:
    VER = 51 : GOTO EXIT1
    
POT5_AZALT:
    VER = 52 : GOTO EXIT1
'==================================
POT6_ARTTIR:
    VER = 60 : GOTO EXIT1
    
POT6_ORTALA:
    VER = 61 : GOTO EXIT1
    
POT6_AZALT:
    VER = 62 : GOTO EXIT1
'==================================
POT7_ARTTIR:
    VER = 70 : GOTO EXIT1
    
POT7_ORTALA:
    VER = 71 : GOTO EXIT1
    
POT7_AZALT:
    VER = 72 : GOTO EXIT1
'==================================
LCD_BL:
    VER = 80 : GOTO EXIT1
'==================================
EXIT1:
    SEROUT CIKIS,N2400,[("A"),VER,13,10]
    GOTO BASLA
    END

ekrem12

Alıntı yapılan: Maxim - 16 Nisan 2013, 08:50:01
yeni fark ettim biraz geç olacak

bu kod aynen bu şekilde derlenmektedir.
sadece config satırlarını kaldırdım orada bir sıkıntı var, nedenini bilmiyorum.

INCLUDE "MODEDEFS.BAS"
'@ DEVICE pic16F877A, 
'@ DEVICE pic16F877A, WDT_OFF
'@ DEVICE pic16F877A, PWRT_ON
'@ DEVICE pic16F877A, PROTECT_OFF
'@ DEVICE pic16F877A, XT_OSC
'@ DEVICE pic16F877A, BOD_OFF
'@ DEVICE pic16F877A, LVP_OFF
'@ DEVICE pic16F877A, CPD_OFF

ADCON1 = 7

TRISA = %000000
TRISB = %11111111
TRISC = %11111100
TRISD = %11111111
TRISE = %000

'CIKIS VAR PORTA.0
Symbol CIKIS =PORTA.0
VER VAR BYTE
VER = 0

BASLA:
    IF PORTC.3 = 0 THEN POT1_ARTTIR
    IF PORTD.0 = 0 THEN POT1_ORTALA
    IF PORTD.1 = 0 THEN POT1_AZALT
    
    IF PORTD.2 = 0 THEN POT2_ARTTIR
    IF PORTD.3 = 0 THEN POT2_ORTALA
    IF PORTC.4 = 0 THEN POT2_AZALT
    
    IF PORTC.5 = 0 THEN POT3_ARTTIR
    IF PORTC.6 = 0 THEN POT3_ORTALA
    IF PORTC.7 = 0 THEN POT3_AZALT
    
    IF PORTD.4 = 0 THEN POT4_ARTTIR
    IF PORTD.5 = 0 THEN POT4_ORTALA
    IF PORTD.6 = 0 THEN POT4_AZALT
    
    IF PORTD.7 = 0 THEN POT5_ARTTIR
    IF PORTB.0 = 0 THEN POT5_ORTALA
    IF PORTB.1 = 0 THEN POT5_AZALT
    
    IF PORTB.2 = 0 THEN POT6_ARTTIR
    IF PORTB.3 = 0 THEN POT6_ORTALA
    IF PORTB.4 = 0 THEN POT6_AZALT
    
    IF PORTB.5 = 0 THEN POT7_ARTTIR
    IF PORTB.6 = 0 THEN POT7_ORTALA
    IF PORTB.7 = 0 THEN POT7_AZALT
    
    IF PORTC.2 = 0 THEN LCD_BL
    GOTO BASLA
'==================================
POT1_ARTTIR:
    VER = 10 : GOTO EXIT1
    
POT1_ORTALA:
    VER = 11 : GOTO EXIT1
    
POT1_AZALT:
    VER = 12 : GOTO EXIT1
'==================================
POT2_ARTTIR:
    VER = 20 : GOTO EXIT1
    
POT2_ORTALA:
    VER = 21 : GOTO EXIT1
    
POT2_AZALT:
    VER = 22 : GOTO EXIT1
'==================================    
POT3_ARTTIR:
    VER = 30 : GOTO EXIT1
    
POT3_ORTALA:
    VER = 31 : GOTO EXIT1
    
POT3_AZALT:
    VER = 32 : GOTO EXIT1
'==================================
POT4_ARTTIR:
    VER = 40 : GOTO EXIT1
    
POT4_ORTALA:
    VER = 41 : GOTO EXIT1
    
POT4_AZALT:
    VER = 42 : GOTO EXIT1
'==================================
POT5_ARTTIR:
    VER = 50 : GOTO EXIT1
    
POT5_ORTALA:
    VER = 51 : GOTO EXIT1
    
POT5_AZALT:
    VER = 52 : GOTO EXIT1
'==================================
POT6_ARTTIR:
    VER = 60 : GOTO EXIT1
    
POT6_ORTALA:
    VER = 61 : GOTO EXIT1
    
POT6_AZALT:
    VER = 62 : GOTO EXIT1
'==================================
POT7_ARTTIR:
    VER = 70 : GOTO EXIT1
    
POT7_ORTALA:
    VER = 71 : GOTO EXIT1
    
POT7_AZALT:
    VER = 72 : GOTO EXIT1
'==================================
LCD_BL:
    VER = 80 : GOTO EXIT1
'==================================
EXIT1:
    SEROUT CIKIS,N2400,[("A"),VER,13,10]
    GOTO BASLA
    END


@maxim usta, bu cevaba binayen bende bu konuda sürekli problem yaşıyorum. MPLAB'da kodları yazarken alışkanlıktan dolayı kodların başına işlemci ile ilgili config ayarlarını yazıyorum fakat derlenirken sorun oluyor ve bende sizin yaptığınız gibi config satırlarını kaldırıyorum ve o şekilde sıkıntı olmadan derleniyor. anladığım kadarıyla MPLAB 'da işlemciyi seçerken programın kendisi config ayarlarını kendi giriyor. hatta menüsünde config ayarları var fakat o menüden değiştiremiyorum. config ayarlarını nasıl değiştirebileceğim konusunda tavsiyeniz nedir? teşekkürler...

Maxim

konu ile ilgili ete ustanin detayli cevaplarini gordum son gunlerde.
onlara bakmani oneriyorum.
ben normalde picbasic kullanmiyorun

ete

#8
Önce sorunun kaynağını söyleyeyim.
@ DEVICE pic16F877A,
şeklinde yazılmış sigorta satırında dikkat ederseniz en sonda bir virgül koyulmuş. Virgül sonrasında bir başka komut yada parametre gelecek anlamına gelir. Halbuki o satırın bir parametresi yoktur. O halde virgül fazladan koyulmuş olup hata budur.
Kaldırın ,derleyin düzelir.

Bir derleme işleminde derleyici yardımcı bazı ek programlar yada ilaveler kullanır. Bunlardan birisi işlemciye ait INC uzantılı dosyadır. Burada 16F877A.INC dosyası kullanılmaktadır. Derleme işlemini MPASM ile yaparsanız hem bu 16F877A.INC dosyası hemde MPASM klasörü içinde yer alan P16F877A.INC dosyası derleme işleminde kullanılır. Her iki INC dosyasında da sigorta satırları bulunmaktadır. Bir derleme işleminde sgorta satırları yalnızca bir kere işlenmelidir. İkinci defa derleyici bu satırlara rast gelirse hemen hata mesajını basar. Bu nedenle MPASM ile derleme yapacak iseniz yapmanız gereke iki şey var;
- birincisi PBP klasörü içinde yer alan işlemciye ait INC dosyası içinde alt satırlarda yer alan ve derlemenin MPASM ile yapılması durumunda işleme konulan sigorta satırlarının baş kısımlarına birer ; işareti koyarak o satırları kapatmanız yada tamamen silmeniz gerekir. Aksi halde hatadan kurtulamazsınız. Hiç sigorta satırı kullanmazsanız elbette derleme hatasız olur ama sigorta ayarlarınıda programa sokmamış olursunuzki buda yanlış olur bence.
- İkincisi sigorta ayarlarını MPASM formatında vermeniz gerekir. Formatın şeklini ise o kapattığınız satırlardan görebilirsiniz. Muhtemelen bütün sigorta değerleri o satıra verilmemiş olabilir. Aralarına birer  " & " koyarak diğer sigorta ayarlarını peş peşe ekleyebilirsiniz. Formata dikkat. Boşlukların bile önemi vardır. 

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