Assembly-AND komutu kullanımına örnek varmı bu kod gibi

Başlatan recebcolak, 27 Mayıs 2008, 23:54:28

recebcolak

s.a.
arkadaşlar öncelikle konuyu araştırdım forumda belirteyim Assembly--bölümünü inceledim ama sadece asm de butonların farklı kullanımı diye bir başlık vardı ordada malesef bir sonuç yoktu.
kızmazsanız sorumu sorayım

PICBASIC de and komutu kullanılarak asagıdaki koddaki gibi işlemler yapılıyor bunu benden çok iyi biliyorsunuz ustalar bunu asmde nasıl yaparız ufak bir örnek bırakabilirmisiniz. 16f877 ye uygun teşekkürler.
[code]

TRISA=%00000000
TRISB=0
TRISC=%00001111
TRISD=0
'-------------------------------------------------------------------------------

DEFINE OSC 4

SYMBOL M0=PORTC.0
SYMBOL M1=PORTC.1
SYMBOL M2=PORTC.2
SYMBOL M3=PORTC.3
'---------------------------------------------------------------------------
BASLA :
IF M0=0 AND  M1=0 AND  M2=0 AND  M3=0 THEN PORTB=%00111111;0
IF M0=0 AND  M1=0 AND  M2=0 AND  M3=1 THEN PORTB=%00000110;1
IF M0=0 AND  M1=0 AND  M2=1 AND  M3=0 THEN PORTB=%01011011;2
IF M0=0 AND  M1=0 AND  M2=1 AND  M3=1 THEN PORTB=%01001111;3

IF M0=0 AND  M1=1 AND  M2=0 AND  M3=0 THEN PORTB=%01100110;4
IF M0=0 AND  M1=1 AND  M2=0 AND  M3=1 THEN PORTB=%01101101;5
IF M0=0 AND  M1=1 AND  M2=1 AND  M3=0 THEN PORTB=%01111101;6
IF M0=0 AND  M1=1 AND  M2=1 AND  M3=1 THEN PORTB=%00000111;7
IF M0=1 AND  M1=0 AND  M2=0 AND  M3=0 THEN PORTB=%01111111;8
IF M0=1 AND  M1=0 AND  M2=0 AND  M3=1 THEN PORTB=%01101111;9
IF M0=1 AND  M1=0 AND  M2=1 AND  M3=0 THEN PORTB=%01110111;A

IF M0=1 AND  M1=0 AND  M2=1 AND  M3=1 THEN PORTB=%01111100'b
IF M0=1 AND  M1=1 AND  M2=0 AND  M3=0 THEN PORTB=%00111001'C
IF M0=1 AND  M1=1 AND  M2=0 AND  M3=1 THEN PORTB=%01011110'd
IF M0=1 AND  M1=1 AND  M2=1 AND  M3=0 THEN PORTB=%01111001'E
IF M0=1 AND  M1=1 AND  M2=1 AND  M3=1 THEN PORTB=%01111000't
GOTO BASLA
END
ben herkesi sevdim bilmiyorum sevildimmi?

elmaalma

#include "p16f877A.inc"
	__CONFIG 	0x3E71

	#DEFINE	M0	PORTC,0	;
	#DEFINE	M1	PORTC,1	;
	#DEFINE	M2	PORTC,2	;
	#DEFINE	M3	PORTC,3	;

	org		0X000			;

	bsf		STATUS,RP0		;
	movlw		b'00000110'		;PORTLARIN TÜMÜ DIGITAL
	movwf		ADCON1		; 
	movlw		b'000000000'		;
	movwf		TRISA			;
	movlw		b'00000000'		;
	movwf		TRISB			;
	movlw		b'00001111'		;
	movwf		TRISC			;
	movlw		b'00000000'		;
	movwf		TRISD			;
	movlw		b'00000000'		;
	movwf		TRISE			;
	bcf		STATUS,RP0		;
	clrf		PORTA			;
	clrf		PORTB			;
	clrf		PORTC			;
	clrf		PORTD			;
	clrf		PORTE			;
BASLA
	call		TABLO_KULLANIRIM	;
	movwf		PORTB			;
	goto		BASLA 			;
TABLO_KULLANIRIM
	movlw		0X0F			;
	andwf		PORTC,W		;
	addwf		PCL,F			;
	retlw		b'00111111'		;0
	retlw		b'00000110'		;1
	retlw		b'01011011'		;2
	retlw		b'01001111'		;3
	retlw		b'01100110'		;4
	retlw		b'01101101'		;5
	retlw		b'01111101'		;6
	retlw		b'00000111'		;7
	retlw		b'01111111'		;8
	retlw		b'01101111'		;9
	retlw		b'01110111'		;A
	retlw		b'01111100'		;B
	retlw		b'00111001'		;C
	retlw		b'01011110'		;D
	retlw		b'01111001'		;E
	retlw		b'01111000'		;F
	end

bigbey

Burada PIC basic te kullanılan AND kelimesi birden fazla koşulun oluşmasını anlamak için kullanılıyor. O nedenle ASM de kullanılan logic and operandı ile değerlendirilemez.
1. 2. VE 3. satırdaki koşul söz dizimi yerine ASM'de şu yazılabilir.
IF M0=0 AND M1=0 AND M2=0 AND M3=0 THEN PORTB=%00111111;0 
IF M0=0 AND M1=0 AND M2=0 AND M3=1 THEN PORTB=%00000110;1 
IF M0=0 AND M1=0 AND M2=1 AND M3=0 THEN PORTB=%01011011;2 
IF M0=0 AND M1=0 AND M2=1 AND M3=1 THEN PORTB=%01001111;3 

IF M0=0 AND M1=1 AND M2=0 AND M3=0 THEN PORTB=%01100110;4 
IF M0=0 AND M1=1 AND M2=0 AND M3=1 THEN PORTB=%01101101;5 
IF M0=0 AND M1=1 AND M2=1 AND M3=0 THEN PORTB=%01111101;6 
IF M0=0 AND M1=1 AND M2=1 AND M3=1 THEN PORTB=%00000111;7 
IF M0=1 AND M1=0 AND M2=0 AND M3=0 THEN PORTB=%01111111;8 
IF M0=1 AND M1=0 AND M2=0 AND M3=1 THEN PORTB=%01101111;9 
IF M0=1 AND M1=0 AND M2=1 AND M3=0 THEN PORTB=%01110111;A 

IF M0=1 AND M1=0 AND M2=1 AND M3=1 THEN PORTB=%01111100'b 
IF M0=1 AND M1=1 AND M2=0 AND M3=0 THEN PORTB=%00111001'C 
IF M0=1 AND M1=1 AND M2=0 AND M3=1 THEN PORTB=%01011110'd 
IF M0=1 AND M1=1 AND M2=1 AND M3=0 THEN PORTB=%01111001'E 
IF M0=1 AND M1=1 AND M2=1 AND M3=1 THEN PORTB=%01111000't 


yerine;
KOSUL0
	MOVFW	M0
	BTFSC	STATUS,Z
	GOTO	KOŞUL1
	MOVFW	M1
	BTFSC	STATUS,Z
	GOTO	KOŞUL1
	MOVFW	M2
	BTFSC	STATUS,Z
	GOTO	KOŞUL1
	MOVFW	M3
	BTFSC	STATUS,Z
	GOTO	KOŞUL1
	MOVLW	B'00111111'
	MOVWF	PORTB
KOSUL1
	MOVFW	M0
	BTFSC	STATUS,Z
	GOTO	KOŞUL2
	MOVFW	M1
	BTFSC	STATUS,Z
	GOTO	KOŞUL2
	MOVFW	M2
	BTFSC	STATUS,Z
	GOTO	KOŞUL2
	MOVFW	M3
	SUBWF	.1		
	BTFSC	STATUS,Z
	GOTO	KOŞUL2
	MOVLW	B'00000110'
	MOVWF	PORTB
KOSUL2
	MOVFW	M0
	BTFSC	STATUS,Z
	GOTO	KOŞUL3
	MOVFW	M1
	BTFSC	STATUS,Z
	GOTO	KOŞUL3
	MOVFW	M2
	SUBWF	.1
	BTFSC	STATUS,Z
	GOTO	KOŞUL3
	MOVFW	M3
	BTFSC	STATUS,Z
	GOTO	KOŞUL3
	MOVLW	B'01011011'
	MOVWF	PORTB
KOSUL3
DİĞER KOŞULLARI DA AYNI MANTIK İLE SIRALAYABİLİRSİN

Benim de size bir sorum var. Bu denetim işlevini asansör yazılımında mı kullanacaksın.? (grey Code)
TA6R

recebcolak

elmaalma verdigin kodlar için teşekkürler.
bigbey mo,m1,m2,m3  fark ettiysen gray kod değil binari ama dedigin gibi asansör kartı değilde flex kaplodan tasarruf için  ufak bir kod çözüçü yapım kendi yaptıgım asansörlerde kullanmayı düşünüyorum.panodan displeylere normalde 7dijital kaplo çekiyoruz bu sistemle 8 katlı yerlere kadar 3 kaployla işi bitirmeyi hedefliyorum.16f877 kullanaçagım açil aydınlatma siren vs olaçak dedigim gibi sadece kendi yaptıgım asansörlerde yardımların için teşekkürler.
ben herkesi sevdim bilmiyorum sevildimmi?

ouka1984

şimdi benim anlamadığm flexble kablo yerine mi 3 kablo kullanacaksın yoksa sadece dijitaller için mi?