Assembly Buton Kontrol Hatası

Başlatan protech06, 30 Ağustos 2008, 15:30:53

protech06

Arkadaşlar Assembly de Bir butonun 0 yada 1 olup olmadıgını kontrol ederken
BTFSS		BUTON1
 GOTO		TEST1


VEYA

BTFSC		BUTON1
 GOTO		TEST2


Seklinde Kullanıyoruz Tek bir butonun Kontrolu bu sekilde oluyo Peki pic uclrından 2 tanesinin kontrolu nasıl yapılıyo ? mesela port.b0 ve portb1 de anahtar olsun  yapmak istedigim işlem

port.b0 ve port.b1   = 1 ise TEST1 adlı donguye
port.b0 ve port.b1   = 0 ise TEST2 adlı donguye
port.b0=1 port.b1   = 0 ise TEST3 adlı donguye
port.b0=0 port.b1   = 1 ise TEST4 adlı donguye  atlamak yani 2 anahtarın 4 ayrı kombinasyonunu kullanmak bunu assembly ile nasıl bir yol izleyerek yapabilirim ?

Daha once kullandıgım bir jal programından örnek vereyim
procedure Kontrol is
if pin_b0 == low & pin_b1 == low  then
TEST2
elsif pin_b0 == high & pin_b1 == high then
TEST1
elsif pin_b0 == low & pin_b1 == high  then
TEST4
elsif pin_b0 == high & pin_b1 == low then
TEST3
end if
end procedure

transistor

En kaba şekliyle aşağıdaki gibi olur.

BTFSC	PORTB,0  
	GOTO	BIR
	GOTO	SIFIR

BIR
	BTFSC	PORTB,1
	GOTO	TEST1		Portb0 = 1 Portb1 = 1
	GOTO	TEST3		Portb0 = 1 Portb1 = 0


SIFIR
	BTFSC	PORTB,1
	GOTO	TEST4		Portb0 = 0 Portb1 = 1
	GOTO	TEST2		Portb0 = 0 Portb1 = 0
Herşey Vatan İçin.

XX_CİHAN_XX

En kibar şekliylede aşağıdaki gibi olur :)

  PAGESELW  $ 
	MOVLW	B'00000011'
	ANDWF	PORTB,W
	ADDWF	PCL,F
	GOTO	TEST1        ;  0-0
	GOTO	TEST2        ;  0-1	
	GOTO	TEST3        ;  1-0
	GOTO	TEST4        ;  1-1


Varmı daha kısası :?:   8)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Elektron74

@XX_CİHAN_XX

PAGESELW  $
Bu komutun anlamını belirtirsen sevinirim.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

Tagli

Sanırım "Program hafızasında nerde isek PCLATH ona göre ayarlansın" demek. PC üzerinde oynama yapılırken GOTO ve CALL'un aksine PC'nin son 5 biti PCLATH'dan gelir, yani bunun sınırları 256 word'de bir olur. Haliyle kontrolü normalde alışık olduğumuz 2K word'lük page'lere göre daha zor olacağından bu tür bir ifade işimizi kolaylaştırır. Tabi burda GOTO ile gidilen yerlerin de aynı page'de olduklarını varsayıyoruz. Ayrıca bu kod parçası aynı 256'lık sınırın içinde olmalı, yani yazıldıkları alanların büyük 5 biti aynı olmalı.

@XX_CİHAN_XX; tebrikler! Gerçekten kısa ve öz güzel bir kod olmuş  :)
Gökçe Tağlıoğlu

XX_CİHAN_XX

@Tagli teşekkürler.
@Elektron74, arkadaş gereken açıklamayı yapmış.

Edit: Küçük bir ekleme,
PAGESELW $ bir asm komutu değildir. Mplab editörüne ait bir direktiftir.
Tıpkı PAGESEL, BANKSEL, $ vb. gibi.
(bknz. MPLAB Help)

Herkese kolay gelsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.