kaydırma

Başlatan spear, 04 Haziran 2006, 18:25:00

spear

Merhaba Arkadaşlar,
Bir portun sadece 4 bitini kullanarak kaydırma yapmam mümkün mü?
Mesela porta nın 1 2 3 4 bitlerrini kullanalalım. RLF ve RRF kullanarak;
0001-0010-0100-1000 kaydırması yapabilir miyim? Nasıl yaparım

XX_CİHAN_XX

Mesela portd nın ılk 4 bıtını kaydıralım
;BU PROGRAM DEVAMLI OLARAK PORTD NIN ALT 4 BITINI KAYDIRIP BASA DONER
;ARALARDAKI ZAMAN ALT PROGRAMLARI KAYDIRMA HIZINA GORE KULLANICI TARAFINDAN AYARLANIR

SHIFT_NIBBLE
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	CLRF	KAY	    ;KAYDIRMA REGISTERI TEMIZLENDI	
	CALL	ZAMAN	    ;KAYMA ASAMALARI IZLENMESI ICIN GECIKME KOY
	BSF	STATUS,C    ;ILK KAYDIRMA ICIN CARRY FLAGINI HAZIRLA	
	RLF	KAY,F       ;KAYDIRMA YAPILDI    
	BTFSC	STATUS,DC   ;4. BİTE TASMA OLDUYSA 
	GOTO	SHIFT_NIBBLE;BASA DON (KISIR DONGU)
	MOVF	KAY,W       ;KAYDIRMA ASAMASINI YUKLE(PORTD YE) 
	IORWF	PORTD,F	    ;PORTD ALT NIBBLE DE KAYMA GERCEKLESTI
	CALL	ZAMAN	    ;KAYMA ASAMALARI IZLENMESI ICIN GECIKME KOY
	MOVLW	0xF0	    ;MASKELE	
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	GOTO	$-8	    ;BIR SONRA KI KAYMA ASAMASI ICIN BASA DON

;EGER KISIR DONGU DEGIL ALT PROGRAM OLARAK 4 DEFA KAYDIRIP CIKILMAK ISTENIYORSA
;BU SEKILDE KULLANILABILIR

SHIFT_NIBBLE
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	CLRF	KAY	    ;KAYDIRMA REGISTERI TEMIZLENDI	
	CALL	ZAMAN	    ;KAYMA ASAMALARI IZLENMESI ICIN GECIKME KOY
	BSF	STATUS,C    ;ILK KAYDIRMA ICIN CARRY FLAGINI HAZIRLA	
	RLF	KAY,F       ;KAYDIRMA YAPILDI    
	BTFSC	STATUS,DC   ;4. BİTE TASMA OLDUYSA 
	RETURN			;KAYMA BITTI
	MOVF	KAY,W       ;KAYDIRMA ASAMASINI YUKLE(PORTD YE) 
	IORWF	PORTD,F	    ;PORTD ALT NIBBLE DE KAYMA GERCEKLESTI
	CALL	ZAMAN	    ;KAYMA ASAMALARI IZLENMESI ICIN GECIKME KOY
	MOVLW	0xF0	    ;MASKELE	
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	GOTO	$-8	    ;BIR SONRA KI KAYMA ASAMASI ICIN BASA DON


;YADA DAHA AMATOR BIR YONTEM ILE OLSUN ISTIYORSAN
;BU SEKILDEDE KULLANABILIRSIN :D
SHIFT_NIBBLE
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	CALL	ZAMAN
	BSF	PORTD,0
	CALL	ZAMAN
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	BSF	PORTD,1
	CALL	ZAMAN
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	BSF	PORTD,2
	CALL	ZAMAN
	MOVLW	0xF0	    ;MASKELE
	ANDWF	PORTD,F	    ;PORTD NIN ALT 4 BITI TEMIZLENDI	
	BSF	PORTD,3
	RETURN
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.

spear

Mesela 7 bitlik bişey tanımladım kay diye. Carry flagle beraber 8 bit oluyor. Ve onu sürekli kaydırıp, Portanın içine atsam doğru çalışırmı? Porta nın 8. biti ilk durumunda mı kalır? Yazdığım kod yanlış mı?

kay    equ   b'0010001'
RRF		kay,1;
movlw	kay;
movwf       PORTA;

westcoast

en pratiğinden üst 4 biti maskeleme yapman yeterli bence

XX_CİHAN_XX

Alıntı yapılan: "spear"Mesela 7 bitlik bişey tanımladım kay diye. Carry flagle beraber 8 bit oluyor. Ve onu sürekli kaydırıp, Portanın içine atsam doğru çalışırmı? Porta nın 8. biti ilk durumunda mı kalır? Yazdığım kod yanlış mı?

kay    equ   b'0010001'
RRF		kay,1;
movlw	kay;
movwf       PORTA;
Yukarıda yazdıgın kod yanlıs
Tam olarak kaydırma ıle yapmak ıstedıgın sey nedır
Ogrenme amaclı mı yoksa baska bır sey mı anlamadım
Yukarıda 4 bıt kaydırma ıle ılgılı bırkac ornak yazdım.Boyle bır ıslem ıcın maskeleme yapmak zorundasın.
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.