BSF bit kurma?

Başlatan ido2323, 16 Ekim 2014, 06:29:47

ido2323

Herkese iyi günler " 'b.' Bit 1'e kurulur." bunu anlamadım. Acaba ne demek istiyor.


Örnek: BSF TEST, 7
Komuttan önce
TEST = h'0A' olsun.
Komuttan sonra
h'0A'=b' 0000 1010'

1 olur ve; TEST = h'1A' =b'0001 1010'olur. (işte bu nasıl oldu.)

RaMu

#1
Ya komut yanlış yazılmış yada sen yanlış aktarıyorsun,
uygulanan şu
BSF TEST,4
Bu komutun karşısına (sendeki mcu için) 8 bitlik yani 1 byte lık bir sayı yazılır
TEST dediğimiz işte bu sayı,
TEST ya bir port, özel yazmaç yada ramdeki bir register olabilir,
h'0A'=b' 0000 1010' dir,
şimdi en sağdaki bit bit0, en soldaki bit bit7 dir,
eğer BSF TEST,4 dersek sağdan sola doğru (0,1,2,3,)4. biti set et yani 1 yap demiş oluruz,
o zaman TEST artık b' 0001 1010' yani h'1A' olur.

Yani bu komut karşısına yazdığın registerın istediğin nolu bitini set 1 yapar.
BCF de clear 0 yapar.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ido2323

#2
Doğru söyluyorsunuz sayın Ramu komut yanlış, bi sorum daha olacak;

CLRF PORTB   -----------port b çıkış
BSF STATUS,5
TRISB--------------------trisb 'yi 11111111 çıkış yap
MOVLW h'FF'                     w kaydedicisine kaydet
MOVWF TRISA-----------------trisa 'ya w değerini ata
BCF STATUS,5

işte şu kahrolası  BSF STATUS,5 komutu status kayıtçısının 5. bitini 1 yapıyor ve kayıtçı bankını(80h - FFH) seçiyor. BCF STATUS,5 de biti sıfırlayıp  (00H - 7FH) bu bankı seçiyor. Peki neden bank seçiyoruz? seçmeden koda devam etsek yada rastgele bi bank atasak olmaz mı?

RaMu

"kahrolası" derken, dublajlı amerikan filmleri geldi aklıma,
Cem Yılmaz ın dediği gibi "alyazıda kahretsin yazıyor bizde sineye çekiyoruz" durumu olmasın.

Microchip tasarımı o şekilde yapmış,
yani fabrikadan öyle geliyor,
programın yazıldığı bellek banklara bölünmüş,
eğer kullanacağın register hangi bankda ise o bankı seçmek zorundasın,
programı yazarkende programı şuanda hangi banka yazıyorsan o banka geçmek zorundasın.

Genellikle kısa programlar ilk banka sığar,
yani BCF STATUS,5 diyerek geçtiğin banka sığar,
bu durumda şöyle birşey yapabilirsin, işleri kolaylaştırır;

BANKSEL geçmek_istediğin_bank
yani senin programın şöyle olur

CLRF PORTB   -----------port b yi temizle
banksel TRISB
TRISB--------------------trisb 'yi 11111111 çıkış yap
MOVLW h'FF'                     w kaydedicisine kaydet
MOVWF TRISA-----------------trisa 'ya w değerini ata  //trisa trisb aynı bankda
banksel PORTB

Kullandığın denetleyicinin datasheetini açtığında bankları görebilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

Bank olayının sebebi şu: İşlemci komutları 14 bit. Ama mimari tasarım gereği bunun sadece 7 biti adres olabiliyor. Yani en fazla 128 register olabilir (idi, eğer bank kavramı olmasaydı). Bu sebeple ayrı bir yerde de bank seçmek gerekiyor.

Şöyle düşün: Bir sokakta en fazla 128 apartman (kapı numarası) olabiliyor. Ama senin mahallede 512 apartman var (4 sokak). Adresi verirken "2. sokak no:45" gibi vermen gerekir.
Gökçe Tağlıoğlu

ido2323

o zaman bunun yarısı ram de yarısı veri belleğinde mi?

kudretuzuner

Merhaba,
Bank seçimini tam kavrayamadıysanız asm ile kod yazmanız çok zor olur.Çok çok basit ve de ucuz olan bu kitaptaki bilgiler size ileride kapsamlı asm kodları yazmanıza yardımcı olacaktır.Kolay gelsin.
http://www.idefix.com/kitap/pic-programlama-nursel-ak/tanim.asp?sid=ENHBFLW3HI7PNIE7B2XX
https://www.dropbox.com/s/j8jaiwgqniono93/ANTRAK1_ASM_BASLANGC.rar?dl=0
https://www.dropbox.com/s/pu51gzg5vpf3g6f/ANTRAK2_ASM_BASLANGC.rar?dl=0
Amatör

ido2323