If else komutu

Başlatan vurkacoglu, 06 Eylül 2004, 04:11:02

vurkacoglu

herkese selam. assembly da kullanılan If else komutuyla başım belada.
örnek olarak şu kodu yazacak olursak;

;***********IF DENEMESİ*****************

	LIST P=16F84A
	INCLUDE "P16F84A.INC"
	__CONFIG _WDT_OFF &_PWRTE_OFF &_XT_OSC &_CP_OFF
aaa EQU h'0C'


	MOVLW	.100
	MOVWF	aaa

MAIN
	IF 	aaa<=.9
	MOVLW	b'00000001'
	MOVWF	aaa
	ELSE	
	INCF	aaa
	ENDIF
DONGU
	GOTO DONGU

END
burada ben 100 le 9 un karşılaştırılmasını istiyorum ama. mplab bunun yerine aaa nın ilk olarak atanmış adres değeriyle karşılaştırma yapıyo.
yani 100 le değilde h'0C' ile karşılaştırma yapıyo. bense adres bilgisiyle değilde içeriğindeki bilgiyle karşılaştırma yapmak istiyom.
umarım sorunumu anlamışsızındır. ne yapcaz bunun için.

birde şu PCL olayını anladığımı söylesem yalan olacak nedir bu?

peko

Assembly ilemi yazmak istiyorsun :?:  Picbasic'lemi  :?:
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

vurkacoglu

assembly da.
ne yani kimse assembly da bu komutu kullanmıyo mu? hiç kimse bişi bilmiyomu yaf?

acemintel

IF ZAMAN =.50            ;ZAMAN REGİSTERİNDEKİ SAYI 50 YE EŞİTMİ
GOTO ZAMAN_END      ;EVET EŞİT GİT ZAMAN_END E
ELSE                           ; EŞİT DEGİL
GOTO ZAMAN_DEVAM   ;ZAMAN_DEVAM A GİT
ENDIF                          ; ELSE KOMUT BLOGUNUN SONU OLDUGUNU


DERLEYİCİN MPLAB İSE DERLEYİCİYE ÖZEL BU IF ELSE TALİMATINI TANIR BUNU ASSEMBLY DERLEYİCİN DEGİL KULLANACAGIN MPLAB SON VERSİYON DA DENENMİŞTİR. YANİ BLOK OLARAK DERLEYİCİ COMPİLER
EDER BU TALİMATLARI
SANA KOLAY GELSİN ÇALIŞMANDA BAŞARILAR

vurkacoglu

teşekkürler. bi deneyelim bakalım. bu arada başka bi sorum daha olacak.

Şu PCL olayında aşşağıdaki komutu yazıyorum ama PCL in o anki değeri 250 civarında olduğu için ADDWF pcl,f dediğimde abuk sabuk bi yere dallanıyo. örnek...

movf abc,w
addwf pcl,f
goto x1
goto x2
.
.
.
goto x9

geçici bi çözüm olarak yukarıdaki kodu sayfanın yukarısına falan taşıyorum. mesela kodu işlediği anda pcl in 30-40 falan olduğu bi yere.
ama herseferinde bu şekilde davranmak zor oluyo mesela abc nin değerinin 255 den fazla olduğu durumda ne yapcaz?

acemintel

kullandıgın entegreyi ve kaç K' lık bir program yazdıgını söyleyebilirmisin
biliyosun ki pcl düşük bayttı kontrol eder. program counter da atlama yapacaksan düşük ve yüksek baytlarını da kontrol edip indirek adresleme yapmanı öneririm
kolay gelsin.
saygılar

vurkacoglu

Alıntı yapılan: "acemintel"kullandıgın entegreyi ve kaç K' lık bir program yazdıgını söyleyebilirmisin
biliyosun ki pcl düşük bayttı kontrol eder. program counter da atlama yapacaksan düşük ve yüksek baytlarını da kontrol edip indirek adresleme yapmanı öneririm
kolay gelsin.
saygılar

16f84 ve program yaklaşık 1K anca sığdırabildim.

es-es

PCL ile program memorynin ilk 255 satırına ulaşabilirsin. Yani tablonu program kodunun en başına yazman şart. Eğer tablo 255 den büyükse, 16f84 de PCL için yapacak bişey yok artık başka yöntemler geliştirmek gerekecek. 16f877 de 255*4=1024 lük bir tablo yapabilirsin, ama her page'in başına tablonun 255 satırını yamak kaydıyla.