SUBWF komutu hakkinda yardim...

Başlatan mabool, 18 Aralık 2010, 23:29:21

mabool

Aslinda ne oldgunu gayet iyi anladim ve nasil calistigini yalniz asagida kitaptaki ornek programda ne amacla kullanildigini anlayamadim...


LIST         P=16F628A
INCLUDE         "P16F628A.INC"
__CONFIG _RC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
   
SAYICI   EQU      H'20'
   BANKSEL      TRISB
   CLRF      TRISB
   BANKSEL      PORTB
   CLRF      PORTB
BASLA
   CLRF      PORTB
   CLRF      SAYICI
TEKRAR
   MOVF      SAYICI,W            sayaci w ye yukluyoruz
   MOVWF      PORTB                 sayaci portb de gosteriyoruz
   INCF      SAYICI,F                      sayaci herdongude bir arttiriyoruz sayac=sayac+1
   MOVLW      H'F5'                     w ye 245 sayisini yukluyoruz
   SUBWF      SAYICI,W             sayactan w sayisini yani hf5 cikariyoruz w ye yaziyoruz SORUN burada mantik yurutemedim neden boyle yapiyoruz
   BTFSS      STATUS,2             statusun 2. bitini kontrol ediyoruz 1 se ledlerde binary 245 sayisini goruyoruz değilse dongu devam
   GOTO      TEKRAR
DONGU
   GOTO      DONGU
   END            
diger bir sorumda sayacla mi desem yoksa subwf sublw incf mi tam bilemiyorum statusla aralarinda ne gibi bir baglanti var onuda cozemedim

bigbey

Burada yapılan işlem matematiksel bir işlem bir sayıyı diğerinden çıkartma işlemi yapılıyor. SAYAC registeri eğer 245'e eşit olursa iki sayının farkı sıfır olur. Bu etkileşim STATUS registerinde ZERO bitini set eder (STATUS,Z) yani sayı 245' e ulaştımı diye bakma yöntemlerinden biri.
TA6R

Tagli

Alıntı yapılan: mabool - 18 Aralık 2010, 23:29:21diger bir sorumda sayacla mi desem yoksa subwf sublw incf mi tam bilemiyorum statusla aralarinda ne gibi bir baglanti var onuda cozemedim
Donanımsal bir bağlantı var desek uygun olur sanırım. Bazı komutlar status'un bazı bitlerini değiştirir, ki bu bitlerden en sık kullanacağın Z ve C'dir. Bu düzenek olmasaydı karşılaştırma işlemini yapamayacağımız gibi işlem sonucunda taşma olup olmadığını da anlayamazdık. Ayrıca C kaydırma işleminde de kullanılıyor. Bazı durumlarda C'yi 9. bit gibi düşünebilirsin.

Datasheet'te STATUS'u açıklayan bir bölüm var, bunu bir incele. Ayrıca komutlar tablosunda hangi komutların hangi bitleri etkiliyebildiğini de görebilirsin.
Gökçe Tağlıoğlu

betüll

Alıntı yapılan: mabool - 18 Aralık 2010, 23:29:21
Aslinda ne oldgunu gayet iyi anladim ve nasil calistigini yalniz asagida kitaptaki ornek programda ne amacla kullanildigini anlayamadim...


LIST         P=16F628A
INCLUDE         "P16F628A.INC"
__CONFIG _RC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
   
SAYICI   EQU      H'20'
   BANKSEL      TRISB
   CLRF      TRISB
   BANKSEL      PORTB
   CLRF      PORTB
BASLA
   CLRF      PORTB
   CLRF      SAYICI
TEKRAR
   MOVF      SAYICI,W            sayaci w ye yukluyoruz
   MOVWF      PORTB                 sayaci portb de gosteriyoruz
   INCF      SAYICI,F                      sayaci herdongude bir arttiriyoruz sayac=sayac+1
   MOVLW      H'F5'                     w ye 245 sayisini yukluyoruz
   SUBWF      SAYICI,W             sayactan w sayisini yani hf5 cikariyoruz w ye yaziyoruz SORUN burada mantik yurutemedim neden boyle yapiyoruz
   BTFSS      STATUS,2             statusun 2. bitini kontrol ediyoruz 1 se ledlerde binary 245 sayisini goruyoruz değilse dongu devam
   GOTO      TEKRAR
DONGU
   GOTO      DONGU
   END            
diger bir sorumda sayacla mi desem yoksa subwf sublw incf mi tam bilemiyorum statusla aralarinda ne gibi bir baglanti var onuda cozemedim
senin de bilidiğin üzere subwf komutu ki register i ki bunlardan biri w yazmacına atılarak gerceklestirilir .direkt olarak iki yazmacı birbirinden çıkaramıyruz, cıkartma işlemi yapar.sublw isw literal yani sabitt sayıdan w yazmacını çıkarmak için kullanılır..engenel anlamda bu komutları biz karsılastırma yaparken kullanırız.eğer 2sayı birbirine esitse status yazmacının zero flag bayrağı kalkar ve zero flag 1e esit olur.büyükük ve küçüklük durumlarını ise yine status yazmacının carry flag bayrağını test ederek anlarız.PIC cıkarma
işlemini tümleyen aritmetiğne göre yapmakta
bu bitlerin testi ise;
BTFSS 3,2(STATUSUN 2.BİTİ (ZERO FLAG) 1 Mİ?)
BTFSS 3,0(STATUSUN 0.BİTİ (CARRY FLAG) 1 Mİ?)
Umarım soruna cvp olmustur.....
ideallerim neredeyse ben oradayım..

mabool

#4
bo komutta h05 den h04 cikardigmizda neden portbnin isiklarinda d0 dan-d7 arasi 11011000 binary sayisini goruyoruz 1000000 gorememiz gerekmez mi yani h5 ten h 4 cikinca 1 desimal kaliyor. yoksa bu programlardaki amac sonucu binary olarak portb de gostermek degilde verisaklayici>w =w <w durumlarinimi gostermek bize?

LIST      P=P16F628A
INCLUDE      "P16F628A.INC"
__CONFIG _RC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

   BANKSEL      TRISB
   CLRF      TRISB
   BANKSEL      PORTB
   CLRF      PORTB
BASLA
   MOVLW      H'04'
   SUBLW      H'05'
   MOVF      STATUS,W
   MOVWF      PORTB
DONGU
   GOTO      DONGU
   END   

mabool

Alıntı yapılan: betüll - 19 Aralık 2010, 20:29:40
.direkt olarak iki yazmacı birbirinden çıkaramıyruz, cıkartma işlemi yapar.sublw isw literal yani sabitt sayıdan w yazmacını çıkarmak için kullanılır..engenel anlamda bu komutları biz karsılastırma yaparken kullanırız.eğer 2sayı birbirine esitse status yazmacının zero flag bayrağı kalkar ve zero flag 1e esit olur.

simdi gayet iyi anladim cok tesekuler kitapta bu bu sekilde anlatilmadigi icin farkli anlamisim yani iki yazmaci birbirinden cikarmak olarak anlamamam gerekiyor bunu daha ziyade karsilastirma olarak yani istedigimiz sayiya ulasinca saymannin bitmesi gibi. dogru mu anlamisim?