asm hex çevirme hatası

Başlatan oilcf, 06 Mart 2011, 19:58:44

oilcf

Merhaba aşağıdaki asm kodlarını MPLAB ile hex olarak derlemeye çalıştığımda birçok hata veriyor nerede yanlış yapıyorum acaba
kodlar isis ile sorunsuz çalışıyor ama iş derlemeye gelince tıkanıp kaldım

asm kodum bu

LIST		P=P16F628A	
	#INCLUDE	P16F628A.INC	
	
	SAYAC1		EQU 0X20
	SAYAC2		EQU	0X21
	SAYAC3		EQU	0X22
	ORG		0X00
	GOTO 		BASLIYOR

BASLIYOR	
	CLRF		PORTB
	BSF		STATUS,5
	CLRF		TRISB
	BCF		STATUS,5


;TEK ARALIKLI FLAS YAK
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME	
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'01010101'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'10101010'
	MOVWF		PORTB
	CALL		GECIKME
	MOVLW		B'00000000'
	MOVWF		PORTB
	CALL		GECIKME
	CLRF		PORTB

;SOLDAN SAGA TEK TEK YAK SONDUR

	MOVLW		B'00000001';SAG 1 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00000010';SAG 2 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00000100';SAG 3 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00001000';SAG 4 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00010000';SAG 5 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00100000';SAG 6 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'01000000';SAG 7 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
 	MOVLW		B'10000000';SAG 8 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	
;SOLDAN SAGA SIRA ILE YAK
	
	MOVLW		B'00000001';SAG 1 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00000011';SAG 2 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00000111';SAG 3 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00001111';SAG 4 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00011111';SAG 5 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'00111111';SAG 6 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	MOVLW		B'01111111';SAG 7 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
 	MOVLW		B'11111111';SAG 8 LAMBA
	MOVWF		PORTB
	CALL		GECIKME1
	CLRF		PORTB
	
;TUM LAMBALARI FLAS YAK
	MOVLW		H'FF'
	MOVWF		PORTB
	CALL		GECIKME2
	CLRF		PORTB
	CALL		GECIKME2
	MOVLW		H'FF'
	MOVWF		PORTB
	CALL		GECIKME2
	CLRF		PORTB
	CALL		GECIKME2
	MOVLW		H'FF'
	MOVWF		PORTB
	CALL		GECIKME2
	CLRF		PORTB
	
	GOTO 		BASLIYOR
	
	GECIKME	
	MOVLW		D'30'
	MOVWF		SAYAC1
DON_C	MOVLW		D'30'
	MOVWF		SAYAC2
DON_B	MOVLW		D'30'
	MOVWF		SAYAC3
DON_A	DECFSZ		SAYAC3,F
	GOTO		DON_A
	DECFSZ		SAYAC2,F
	GOTO		DON_B
	DECFSZ		SAYAC1,F
	GOTO		DON_C
	RETURN

GECIKME1	
	MOVLW		D'30'
	MOVWF		SAYAC1
DON_3	MOVLW		D'30'
	MOVWF		SAYAC2
DON_2	MOVLW		D'30'
	MOVWF		SAYAC3
DON_1	DECFSZ		SAYAC3,F
	GOTO		DON_1
	DECFSZ		SAYAC2,F
	GOTO		DON_2
	DECFSZ		SAYAC1,F
	GOTO		DON_3
	RETURN
	
GECIKME2	
	MOVLW		D'40'
	MOVWF		SAYAC1
DON_6	MOVLW		D'40'
	MOVWF		SAYAC2
DON_5	MOVLW		D'40'
	MOVWF		SAYAC3
DON_4	DECFSZ		SAYAC3,F
	GOTO		DON_4
	DECFSZ		SAYAC2,F
	GOTO		DON_5
	DECFSZ		SAYAC1,F
	GOTO		DON_6
	RETURN		
END


buda MPLAB ile derlerken aldığım hata

Release build of project `C:\ASM\8KANAL.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Sun Mar 06 19:55:11 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F628A "8KANAL.ASM" /l"8KANAL.lst" /e"8KANAL.err"
Warning[215] C:\ASM\8KANAL.ASM 1 : Processor superseded by command line.  Verify processor symbol.
Warning[207] C:\ASM\8KANAL.ASM 4 : Found label after column 1. (SAYAC1)
Warning[207] C:\ASM\8KANAL.ASM 5 : Found label after column 1. (SAYAC2)
Warning[207] C:\ASM\8KANAL.ASM 6 : Found label after column 1. (SAYAC3)
Message[302] C:\ASM\8KANAL.ASM 13 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[207] C:\ASM\8KANAL.ASM 156 : Found label after column 1. (GECIKME)
Warning[205] C:\ASM\8KANAL.ASM 200 : Found directive in column 1. (END)
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F628A "8KANAL.o" /z__MPLAB_BUILD=1 /o"8KANAL.cof" /M"8KANAL.map" /W /x
MPLINK 4.38, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Errors    : 0

Loaded C:\ASM\8KANAL.cof.
----------------------------------------------------------------------
Release build of project `C:\ASM\8KANAL.disposable_mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Sun Mar 06 19:55:12 2011
----------------------------------------------------------------------
BUILD SUCCEEDED

Tagli

Hata vermemiş, uyarı vermiş. Zaten en sonda yazan "BUILD SUCCEEDED" ifadesi işlemin başarılı olduğu anlamına gelir. Proje klasörünü incelersen .hex dosyasının oluştuğunu görürsün.

Gelelim uyarılara... MPLAB etiketlerin (label) satırın hemen başında, diğer şeylerin, yani komutlar vs. ise daha ilerde bir yerde olmasını istiyor. Yani komut falan yazmadan önce satır başında boşluk bırakmanı istiyor. Buna uymazsan uyarı alırsın, ama ciddi bir sorun çıkacağını sanmıyorum.

Ayrıca bank 0'da olmayan tüm register'lar için komutlar uyarı verir. Bence son derece gereksiz olan bu uyarıyı programın başında yazacağın "errorlevel -302" ifadesi ile kapatabilirsin. Buradaki sayı hata kodunun türüdür, istemediğin uyarıları görmemeni sağlar. Ama bunları çok zorda kalmadıkça kapatma, çünkü mantık hatalarını belirlemeni kolaylaştırırlar.

Ayrıca program başında işlemciyi belirten ifadeyi yanlış yazmışsın, bir uyarı da o yüzden gelmiş. "list p=16f628a" şeklinde olmalı, sen fazladan bir adet "p" yazmışsın.

Bu arada, son 1 gün içinde ikinci kez "uyarıyı hata sanma" vakası görüyorum  :o
Gökçe Tağlıoğlu

mrtclk0891

hata yok gibi sadece uyarı var yebi mp lablarda build sadece

mrtclk0891

yanlış uyarı kırmızı olur bide yanlış anlamazsanız 8 bitlik bir led yakmak icin cok uzun kod yazmışın boşa yer kaplar kanatindeyim be

oilcf

bu kod simülatör ile sorunsuz çalıştığı halde derlenip pic e atınca hicbir hareket olmuyor animasyon kartında dahili osilatör kullanılmış sanırım programda onunla ilgili bi problem var

Tagli

Sigorta (config) ayarlarını kontrol ederek işe başla. Hazır bir donanım için mi kod yazmaya çalışıyorsun? Donanımın sağlamlığından emin misin? Daha önce çalışıyor muydu?
Gökçe Tağlıoğlu

oilcf

evet donanım çalışıyor kendi üzerindeki pic sorunsuz çalışıyor ama boş pic e bu programı attığımda led lerde hiçbir hareket olmuyor pic e başka bir hex dosyası attığımda kanal sıraları karışıkta olsa yanıyor yani donanımda ve pic de sorun yok bahsettiğiniz config ayarlarını bir örnek kodla açıklayabilirmisiniz

Tagli

Programının başında config ayarlarını göremedim. Bu ayarlar pek çok şeyi kontrol etmekle birlikte, temel bir projede en önemlileri herhalde clock kaynağının seçimi ve WDT, LVP gibi biz acemilerin genelde pek kullanmadığı özelliklerin kapatılmasıdır. Bilgisayarında MPASM'nin kurulduğu klasöre gidersen orada template dosyalarını görebilirsin. Bu dosyaların başında config ayarları ile ilgili örnekler var. Ama elbette bunları kullanmadan önce ne olduklarını da anlamalısın. Belirlemen gereken bir diğer özellik de devrede MCLR bacağının kullanılıp kullanılmadığı. Bu bacak giriş bacağı olarak kullanılmış olabilir, veya harici bir reset devresine bağlanmış olabilir. Doğrudan 5 V'a da bağlanmış olabilir.

Şu ayarları programının başına eklemeyi bir dene:
__CONFIG _CP_OFF & _WDT_OFF & _BOREN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF & _DATA_CP_OFF


Çalışmazsa bir de _MCLRE_ON yaparak dene (OFF yerine ON yaz yani).
Gökçe Tağlıoğlu

sydsengul

mrb ben çizgi izleyen robot projesi üzerinde uğraşıoyorum ve pic programlarken
şu kodu yazınca hata verio ;
__CONFIG _CP_OFF & _WDT_OFF & _BOREN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF & _DATA_CP_OFF
fakat sildiğim zaman ise hata vermio bu kodu yazıp yazmamam herhangi bir şeyi değiştirir mi?
yardımcı olursanız sevinirim...

Tagli

Hangi PIC'i hangi dilde programlıyorsun?

Config ayarları önemlidir ancak nasıl yapıldıkları dile ve PIC modeline göre değişir. Tabi bunları kullanabilmek için ne işe yaradıklarını da bilmek gerekli. Bunlar programda tanımlanmazsa rastgele değerler alabilirler ve bu durumda program çalışmayabilir. Kullanılan yazılıma göre, hex dosyasını PIC'e atarken de bunları ayarlamak mümkün olabilir ama tavsiye etmiyorum.
Gökçe Tağlıoğlu

sydsengul

3 sensörlü çizgi izleyen robot projesi üzerinde çalışmaktayım
mplab'ı kullanıyorum ve 16F628A yı programlamaya çalışıyorum
bu kodu yazdığımda hata vermiyor fakat config satırını yazdığımda hata oluşuyor

LIST P=16F628A
INCLUDE "P16F628A.INC"

MOVLW H'07'
MOVWF CMCON
CLRF PORTB
BANKSEL TRISA
MOVLW H'FF'
MOVWF TRISA
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
DONGU
BTFSS PORTA,1
GOTO DUZ
BTFSS PORTA,0

GOTO SOL
BTFSS PORTA,2
GOTO SAG
GOTO DONGU
DUZ
BSF PORTB,4
BSF PORTB,6
GOTO DONGU
SOL
BSF PORTB,4
BCF PORTB,6
GOTO DONGU
SAG
BCF PORTB,4
BSF PORTB,6
GOTO DONGU
END

Tagli

Yorum yapılabilmesi için aldığın hatanın tam metnini yazmalısın. Bu arada, yukarıda vermiş oluğum örnek config ayarı tek satırda olacak.
Gökçe Tağlıoğlu

ipek

__CONFIG _CP_OFF & _WDT_OFF & _BOREN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF & _DATA_CP_OFF
değilde
  __CONFIG _CP_OFF & _WDT_OFF & _BOREN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF & _DATA_CP_OFF
bu şekilde bir yada iki boşlukla dene
ayrıca vermio değil ,vermiyor olacaktı herhalde düzeltirsiniz...