MPLAB ile su asagidaki kodu bir türlü derleyemiyorum.Hep "Source file path may not exced 62 charecters"
Acaba sorunu nasil asabilirim?
list p=16f84
#include "P16F84.INC" ; Include header file
#define bank0 bcf STATUS, RP0
#define bank1 bsf STATUS, RP0
#define ileri 0x05 ; 00000101
#define geri 0x0A ; 00001010
#define saga 0x06 ; 00000110
#define sola 0x09 ; 00001001
#define dur 0x00 ; 00000000
sayac1 EQU H'000c'
sayac2 EQU H'000d'
sessur EQU H'000e'
depo EQU H'000f'
pbmask equ h'0010'
ledsay equ h'0011'
eepsay equ h'0012'
eskib equ h'0013'
flag equ h'0014'
sesfrek equ h'0015'
ldrval equ h'0016'
sagval equ h'0017'
solval equ h'0018'
timer equ h'0019'
flag2 equ h'0020'
timsay equ h'0021'
statemp equ h'0022'
wtemp equ h'0023'
org 0
start clrf INTCON
goto main
nop
nop
intvec movwf wtemp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf statemp ; save off contents of STATUS register
btfss INTCON,T0IF ; Timer0 interrupt?
goto pop
bcf INTCON,T0IF ; Clear the Timer0 interrupt flag
banksel PORTB
incf timsay
btfsc STATUS,Z
incf timer
pop
movf statemp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf wtemp,f
swapf wtemp,w ; restore pre-isr W register contents
retfie
main
banksel TRISB
movlw b'11111110' ; PORTB giriþ, -- 7. biti çýkýþ (ses için)
movwf TRISB
movlw b'00000000' ; PORTA çýkýþ
movwf TRISA
call init
banksel PORTB
clrf PORTB
bcf OPTION_REG,7 ; Enable portb pullups
clrf flag
;****************************
;****************************
basadon
aprog
isikara
sagsol call carptimi
movlw saga
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call ldrbak
movwf sagval
call carptimi
movlw sola
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call carptimi
movlw sola
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call ldrbak
movwf solval
call carptimi
movlw saga
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call carptimi
movfw sagval
subwf solval,0
btfss STATUS,C
goto salak
solak btfsc flag,1
call gitgit
sol1 bsf flag,2
bcf flag,1
movlw sola
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call carptimi
call snd
call snd
goto sagsol
salak btfsc flag,2
call gitgit
sag1 bsf flag,1
bcf flag,2
movlw saga
movwf PORTA
call azbekle
movlw dur
movwf PORTA
call azbekle
call carptimi
call snd
goto sagsol
gitgit movlw ileri
movwf PORTA
call bekle
call bekle
movlw dur
movwf PORTA
call bekle
return
;****************************
init movlw 0x8F ; Set the timer prescaler.
banksel OPTION_REG
movwf OPTION_REG
banksel TMR0
movlw 0x00
movwf TMR0
bsf INTCON,T0IE ; Enable the timer interrupt.
bsf INTCON,GIE ; Enable global interrupts.
return
;****************************
bibibip call snd
call bekle
call snd
call bekle
call snd
call bekle
return
;****************************
carptimi
btfss PORTB,2
call sagcarp
btfss PORTB,1
call solcarp
return
;****************************
ldrbak
banksel TRISA
bcf TRISA,4 ; RA4 output
banksel PORTA
bcf PORTA,4 ; discharge capacitor
nop
nop
banksel TRISA
bsf TRISA,4 ; RA4 input
banksel PORTA
movlw 0
movwf ldrval
testet
movfw ldrval
sublw d'255'
btfss STATUS,2
incf ldrval,1
btfsc PORTA,4
goto birdir
goto testet
birdir bcf STATUS,0
rrf ldrval,1
bcf STATUS,0
rrf ldrval,1
bcf STATUS,0
rrf ldrval,1
movfw ldrval
sublw d'255'
andlw b'00011111'
movwf ldrval
return
;-----------------------------------------
sagcarp movlw d'100'
call efekt
movlw geri
movwf PORTA
call bekle
call bekle
movlw sola
movwf PORTA
call bekle
call bekle
return
;-----------------------------------------
solcarp movlw d'100'
call efekt
movlw geri
movwf PORTA
call bekle
call bekle
movlw saga
movwf PORTA
call bekle
call bekle
return
;-----------------------------------------
;-----------------------------------------
efekt
movwf sessur
efktlop
movfw sessur
movwf sesfrek
bsf PORTB,0
slop1 incfsz sesfrek
goto slop1
bcf PORTB,0
slop2 incfsz sesfrek
goto slop2
decfsz sessur
goto efktlop
return
;-----------------------------------------
snd movlw 0ffh
movwf sessur
sndlop bsf PORTB,0
call lbek
bcf PORTB,0
call lbek
decfsz sessur
goto sndlop
return
lbek movlw 0xf1
movwf sesfrek
lbek2 nop
nop
nop
incfsz sesfrek
goto lbek2
return
azbekle movlw d'70'
movwf sayac2
movlw d'255'
movwf sayac1
azbek1 decfsz sayac1
goto azbek1
decfsz sayac2
goto azbek1
return
bekle bsf PORTA,4
clrf sayac1
loop1 clrf sayac2
loop incf sayac2
nop
nop
nop
btfss sayac2,7
goto loop
nop
nop
nop
incf sayac1
btfss sayac1,7
goto loop1
bcf PORTA,4
return
end
Hata mesajı söylüyor zaten sorunu.
Sözkonusu kodu C:\ Derle gibi klasöre koyarsan derlemesi lazım.
selam kullandigin mplab version install language tool dan
mpasmwin yanlis bir diektoryden cagiriyorsun
dosyayi derledim kusursuz kolay gelsin
Alıntı yapılan: "bunalmis"Hata mesajı söylüyor zaten sorunu.
Sözkonusu kodu C:\ Derle gibi klasöre koyarsan derlemesi lazım.
Bunalmis hocam sizce MPLAB'i yazan arkadaşlar dosya'nin bulunduğu yer bilgisine 62 karakter sinirlaması koyup, böyle de bir uyarı eklerken sebep ne olabilir? Yani sinir koymak ve uyarı vermek için extradan kod yazmişlar, bunlar boşbeleş adamlar olamaz. Ama benim aklıma geçerli bir sebep de gelmedi. Bir fikriniz yada bilginiz varsa rica edeyim...
Tamam hallettim sorunu sağol(http://img151.imageshack.us/img151/9500/dilimdilim2ge7ak5.jpg) (http://imageshack.us) un arkadaslar.
Kullandığım pek çok programda benzer sorun var. Sağolsun windowsun bazı klasörlerin de öyle bir ismi varki içine bir klasörde sen koydunmu programda öngörülen string limiti aşılıveriyor.
Neden sorusunun cevabını bilmiyorum.
Cut-copy ile eski programları revizyondan geçirmişlerdir ne bileyim.
Dos zamanından kalmadır. :D
Uzun string kabul edecek tipte program yazılsa bile giren bilginin boyunu ölçüp karşılaştırmak ve hata vermek her zaman iyidir.
Mazallah kodların içine dalıverirler.
Benim anladığım sanırım bunalmis hocam'ın da demek istedigi;
Dosyanın bulunduğu klasör bilgisi 62'den fazla karakter içeriyormuş
Ör: C:\Program Files\IAR Systems\Embedded Workbench Evaluation 4.0\m16c\tutor\Release\Exe\tutor.mot
Şekindeki gibi derleyeceğin kodun olduğu dosya bilgisindeki toplam harf sayisi 62'yi geçmeyecekmiş.
Cevap için teşekkürler, ancak;
Alıntı yapılan: "bunalmis"Uzun string kabul edecek tipte program yazılsa bile giren bilginin boyunu ölçüp karşılaştırmak ve hata vermek her zaman iyidir.
Mazallah kodların içine dalıverirler.
Buna katilmiyorum. Bir örnekle sebebini izah edeyim;
Yahoo messenger da böyle birşey vardi. Her yazdiğiniz mesaj için 256 karakter sinirlama getirmişler. Siz 256'yi geçerseniz mesajın devamını yazılım otomatik olarak kesip karşı tarafa sadece ilk 256'lik kısmını yolluyordu. Lakin web adresleri bir bütündü kesilemez bölünemez biçilemezdi, bir karakter dahi eksik olsa bütünü anlamsız hale geleceği için kesinti yapılamazdı diye düşündüm. Sonra denedim bir arkadaşa "www.fdfdfddfd(256'yi aşan sayida karakter)ssds.com" şeklinde adres gönderdim. Sonuç karşı taraftaki messenger çöktü. Sonraları ben bunla fazla oynayınca yahoo farkedip (sanirim kendi serverlarina da etki ediyordu ki farkettiler) açığını yamadı. Şimdi de gerçekten 256 karakterden uzun ismi olan bir web sitesi varsa yahoo messenger ile bunu karşı tarafa iletmeniz mümkün değil. Yazilim geliştirme esnasında bir çözüm getirirken bunun ileride daha büyük sorunlara dönüşmemesi için çok düşünmek lazim kanısındayım. Dolayısıyla her zaman iyidir diyemiycem. En azından henüz ikna olmadım :D
Bir de nedir bu kodların içine dalıvermek? String ile kod'un içine nasıl dalınıyor? Şimdi bu da takılır benim aklıma :?: Rica etsem detaylarına girermisiniz? Hatta gerekiyorsa yeni bir başlık açın, burda konunun çok dışına çıkıcak gibi :D
asm dosyasının adını kısalt. kodda sorun yok.