yazım şekilleri için yardım ?

Başlatan kaypic38, 12 Ocak 2012, 11:46:47

kaypic38

Açtığım bir konuda bir sayıyı kaydırma şeklinde yazmayı sormuştum (b'00010000' 1<<4 gibi) bu gibi değişik kullanım şekillerine internetten araştırdığım programlarda çok rastlıyorum ve anlayamıyorum çalıştığım kitap inş sorun olmaz kitabın ismini vermem "Altaş yayıncılık pıc16f628a mikrodenetleyicler ve PIC programlama Orhan ALTINBAŞAK" bu kitapta tek tip yazım şekli verilmiş yani dediğim gibi b'00001000' sayıcı 1<<3 şeklindede yazılır şeklinde ibareler yok bu tür değişik kullanımları nasıl veya nerden öğrenebilirim önerebileceğiniz bir kaynak varmı ?
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

-Hasan-

ASM ' de bu iş RLF, RRF komutları ile yapılır. O şekilde olmaz. Sizin gördüğünüz C veya Basic yazılımı olmasın?

z

Diyelimki n. bit pozisyonuna 1 yuklemek istiyorsun.

En sagdaki bit pozisyonu 0 olmak uzere 1<<n dersen amacin gerceklesir.

Ornegin 4 sayisi 00000100 demektir.

1<<1 demek 1.biti 1 yap demek yani 2 (en dusuk bite sifirinci bit dedik kafan karismasin)
1<<2 demek 2.biti 1 yap demek yani 4

Mesela 5 yazmak icin (1<<2) +1 yada  (1<<2) or 1 diyebiliriz.

Mesela 10000010 iki sayisinda 7. ve 1. bitler 1 imis

Bu sayiyi (1<<7) + (1<<1) seklinde yazabilirsin.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: kaypic38 - 12 Ocak 2012, 11:46:47
Açtığım bir konuda bir sayıyı kaydırma şeklinde yazmayı sormuştum (b'00010000' 1<<4 gibi) bu gibi değişik kullanım şekillerine internetten araştırdığım programlarda çok rastlıyorum ve anlayamıyorum çalıştığım kitap inş sorun olmaz kitabın ismini vermem "Altaş yayıncılık pıc16f628a mikrodenetleyicler ve PIC programlama Orhan ALTINBAŞAK" bu kitapta tek tip yazım şekli verilmiş yani dediğim gibi b'00001000' sayıcı 1<<3 şeklindede yazılır şeklinde ibareler yok bu tür değişik kullanımları nasıl veya nerden öğrenebilirim önerebileceğiniz bir kaynak varmı ?

Onlar derleyicinin özelliğidir, normalde asm'de öyle özellikler yoktur. MPASM(asm derleyicisi) help dosyalarını incelersen çok faydalı bilgiler öğrenirsin. Mesela makrolarla asm'yi C'ye benzeterek kullanabilirsin.

2004'te yazdığım bir programdan birkaç örnek vereyim, incelersin artık.

MOVFF		MACRO	REG1,REG2			; Register1'i register2'ye kopyalayan macro
	MOVF		REG1,W
	MOVWF		REG2
	ENDM
	
	MOVLF		MACRO	L,F					; Literali file'a taşı
	MOVLW		L
	MOVWF		F
	ENDM

	BANK0 		MACRO						; Bank0'a geç
	BCF			STATUS,RP0
	ENDM
	
	BANK1		MACRO						; Bank1'e geç
	BSF			STATUS,RP0
	ENDM

	DLY_MS		MACRO	MS					; 1-255 msn arasında delay sağlar(20Mhz'de)
	MOVLW		MS
	CALL		X_MSN
	ENDM

	DLY_10US	MACRO US					; US'ye verilecek değer 1 - 255 ile 10usn ile 2550usn(2,5msn) delay sağlanır
	MOVLW		US
	MOVWF		COUNT1
	CALL		X_ON_USN
	ENDM

	RS485_RD	MACRO
	BCF			RS485_SLCT				; Data alınır
	ENDM
	
	RS485_WR	MACRO
	BSF			RS485_SLCT				; Data gönderilir
	ENDM

	TMR1		MACRO	BITS
	IF   		0==BITS							; CLR
	BCF			PIR1,TMR1IF					;Tmr1 overflow flag clear edilir	
	ENDIF
	IF   		1==BITS							; ON
	BSF			T1CON,TMR1ON				; Tmr1 On yapılır
	ENDIF
	IF		2==BITS							; OFF
	BCF			T1CON,TMR1ON				; Tmr1 OFF yapılır
	ENDIF
	ENDM

; LCD karekter adresleri için macro : 
; LCD_ADRES	1,1  için						; 1 .satır 1.adrese gider
; LCD_ADRES	1,3  için						; 1 .satır 3.adrese gider
; LCD_ADRES	2,1  için						; 2 .satır 1.adrese gider
	LCD_ADRES	MACRO	SATIR,ADRES		; 
	IF	SATIR==1
		MOVLW		7FH						; 7F+1=80H 1. satır adres başlangıcı
	ELSE
		MOVLW		0BFH					; 0BF+1=0C0H 2. satır adres başlangıcı
	ENDIF
	ADDLW		ADRES						;80H  veya 0C0H ile ADRES değerini toplar
	CALL		LCD_KOMUT_YAZ
	ENDM

; YAZI : Ekrana yazdılacak yazı etiketi
; SATIR : LCD'nin satırı (1 veya 2)
; ADRES : LCD'nin adresi ( 1......16 ya kadar)
	LCD_YAZI	MACRO	YAZI,SATIR,ADRES	;
	LCD_ADRES	SATIR,ADRES				; LCD'de ilgili satıra gitmesini sağlar
	LCD_STRING YAZI
	ENDM

	LCD_STRING MACRO	STRING
	CLRF		TABLE_REG
	MOVF		TABLE_REG,W
	CALL		STRING
	CALL		LCD_STR					; bu altprogram, 
	BTFSS		ZERO_FLAG					; table'dan 0 geldiyse çık
	GOTO		$-4							; Call ile table'dan karekter alır.
	ENDM

	BLINK		MACRO	ONOFF
	IF			ONOFF==1
	CALL		BLINK_ON					; 
	ELSE
	CALL		BLINK_OFF
	ENDIF
	ENDM

	DEBOUNCE 	MACRO		TUS				; Buradaki işlemler key-debounce içindir. (tuş sıçramaları için) 
		DLY_MS		.5						
	IF		0==TUS
		BTFSC		MODE
		ENDIF
	IF		1==TUS
		BTFSC		UP
		ENDIF
	IF		2==TUS
		BTFSC		DOWN
		ENDIF
		GOTO		MAIN_LOOP
		DLY_MS		.5
		IF		0==TUS
		BTFSC		MODE
		ENDIF
	IF		1==TUS
		BTFSC		UP
		ENDIF
	IF		2==TUS
		BTFSC		DOWN
		ENDIF
		GOTO		MAIN_LOOP
	ENDM

; RS485 için
#DEFINE		TX_EN			1
#DEFINE		RX_EN			0

	RS485	MACRO	ENB								; RS485 send/receive enable
	IF(ENB==0)
	BCF			RS485_SLCT						; RX_EN (OKUMA)
	ELSE
	BSF			RS485_SLCT						; TX_EN (YAZMA)
	ENDIF
	ENDM


	PUSH		MACRO								; interruptta working ve status bilgilerini yedekle
	MOVWF  	W_1            							; workingi yedekle
	MOVF		STATUS,W        						; status'u yedekle
	MOVWF		STATUS_1       						; 
	ENDM

	POP		MACRO
	MOVF    		STATUS_1,W   						; önce interrupt öncesi banka geç
	MOVWF		STATUS         					   	; status'a kopyala
	SWAPF   	W_1,F
	SWAPF  	W_1,W          							;  present working interrupt öncesi working olmalı
	ENDM


Knowledge and Experience are Power

kaypic38

#4
tabi önce asm'i çok iyi bilmem gerekiyor ve tabi C bilmem gerekiyor asm bilgim var size göre azda olsa ama C bilmediğim için anlayamadım verdiğiniz program örneğini hocam yalnız benim demek istediğim o değildi orda çalıştığım kitabı yazdım ve herhangi bir devre için o kitaptan öğrendiğim bilgilerle bir program yazıyorum (tabi devreyi internetten buluyorum PCB vs) sonra o devrenin asm dosyasını indirip inceliyorum çince okumaya çalışmak gibi geliyor %20 sini anlarsam kar sayıyorum aynı işlemi hiç görmediğim bir komutla yapmış (güya 35 asm komutu var...) yani komut belki aynı ama sizin verdiğiniz örnekteki gibi anlayamıyorum.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

CLR

Anladım, haklısın, Burada çok güzel örnekler var ama ingilizce, yavaş yavaş bakarsın anlamadıklarını sorarsın
http://www.gooligum.com.au/tutorials/baseline/PIC_Base_A_6.pdf
Knowledge and Experience are Power

kaypic38

hımm teşekkürler hocam dediğiniz gibi anlamadığım yerler var gibi ben detaylıca bakıp tekrar yardımınızı isterim.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...