Netindir

Net-İndir

Güncel Oyun & Program & Resim & Msn Forumu


Pic Programlama Ders - 10

Elektronik Bölümü icinde Pic Programlama Ders - 10 konusu , DERS - 10 STATUS REGISTER: Bank 0 ve Bank 1 de 03H ve 83H adreslerinde bulunan 8 bit bir register olan STATUS register bulunur. Status register , aritmetik logic ünitin ...

Geri git   Netindir >
..:: Eğitim & Kültür & Güncel Köşe ::..
> Elektrik-Elektronik > Elektronik Bölümü

Anlık İletiler Kayıt ol Yardım Üye Listesi Ajanda Arama Bugünki Mesajlar Forumları Okundu Kabul Et

Cevapla

 

LinkBack Seçenekler Stil
  #1 (permalink)  
Alt 05-30-2007
.... --- --. --. . -

Arrow Pic Programlama Ders - 10

DERS - 10
STATUS REGISTER:
Bank 0 ve Bank 1 de 03H ve 83H adreslerinde bulunan 8 bit bir register olan STATUS register bulunur. Status register , aritmetik logic ünitin durumunu,reset halini ve bank seçimini belirleyen bitler içerir.Status register bir komut hedefi oldugunda Z,DC,C bitleri etkilenebilir ve daha sonra bu bitlere tekrar yazilmaz.Bu bitler duruma göre 0 veya 1 olurlar.TO ve PD bitleri yazilamaz bitlerdir.
CLRF STATUS komutu ile ilk 3 bit 0 olur TO ve PD degismez,Z 1 olur sonuç ‘ 000DD1DD’ olur,burada D =degismez anlamindadir.Durum degisikligi olmasin istendiginde ; BCF,BSF,SWAPF,MOVWF komutlari kullanilabilir,bu komutlarla STATUS register bitleri etkilenmez.

Status registerin icerigini daha ayrintili gormek icin Tiklayin

SUBWF : File register ve Destination ile ( F,D ) kullanilir File Registerden ,write registeri çikarir ve sonucu file veya write registere yazar.
SUBWF = FILE REGISTER – WRITE REGISTER W veya F'e yazilir.
Sonuca göre Status register içinde bulunan Z ve C flaglarinin durumu degisir.

Sonuç
Z Flag
C Flag
Pozitif
0
1
0
1
1
Negatif
0
0


SUBLW : Bir sabit ile kullanilan komuttur. Bir sabitten write register içerigini çikarir ve sonucu WRITE registere yazar.
SUBLW = SABIT – WRITE REGISTER W registere yazilir
Bu sabit binary, hexadecimal veya decimal olabilir,sabitten daha evvel write registere yazilan degeri çikardigimizda,çikan sonuca göre Z ve C flag durumu degisir
Sonuç
Z Flag
C Flag
Pozitif
0
1
0
1
1
Negatif
0
0
Bu komutlarin kullanilmasi ile flag durum degisikligini kontrol ederek,programda kullaniriz.
……………………………
……………………………
CLRF SAYAC1 ;sayac1 sifirla
_X
INCF SAYAC1,F ;sayac1 1 arttir ve file registere yaz
MOVLW D’200’ ;write registere 200 yaz
SUBWF SAYAC1,W ;file registerdan, write registeri çikar
BTFSS STATUS,2 ;z flag kontrol et
GOTO _X ;_X git
MOVLW B’11100111’ ;write register a bu binary degeri gir
MOVWF PORTB ;port b ye bu binary degeri ata
END
Bu programda 200 ‘ e kadar sayildiktan sonra port b de ki ledler yanar,fakat bu yine de çok kisa bir süre oldugu için göz bunu farkedemez,bu nedenle bu bir baska döngü ile kullanilabilir.Burada bu program kismi teorik bilgi için verilmistir.
Keza buna benzer olarak SUBLW de kullanilabilir.
……………………………
……………………………
CLRF SAYAC1 ; sayac1 sifirla
_X
INCF SAYAC1,W ;sayac1 1 arttir ve file registere yaz
SUBLW D’255’ ;sabitten write registeri çikar
BTFSC STATUS,0 ;C flag kontrol et
GOTO _X ;_X git
MOVLW B’11100111’ ;write register a bu binary degeri gir
MOVWF PORTB ;port b ye bu binary degeri ata
END
Burada Write register 256 oldugunda sonuç negatif olur ve C flag 0 olur BTFSC komutu ile bu durum tespit edilir ve program devam eder.
.
.
.
Pratikte yazdigimiz programlarin gözle görülebilmesi için zaman geciktirme islemini ögrenip bunu kullanmamiz gerekir.Bu nedenle döngü islemlerini ögrenmeye baslayalim.
Zaman geciktirme isleri ya donanim gecikmeleri olarak TMR0 ve WDT ile veya simdi yapacagimiz gibi yazilim döngüleri olarak yapilabilir.
16F84 de dahili komut saykili 1 Mhz dir ve bunun karsiligi 1 mikrosaniyedir.Her komutun ne kadar komut zamani kullandigi liste ile belirlenmistir.Komut seti listesinde bu zamanlar bellidir.
Bir döngü ile maksimum 766 mikrosaniye gecikme elde edilir,bu da göz ile takip için yeterli degildir.
MOVLW D’255’ ;write registere 255 yükle
MOVWF SAYAC1 ;sayac1 registerine 255 i aktar
DONGU
DECFSZ SAYAC1,F ;file register de ki 255 sayisini bir azalt
GOTO DONGU ;dongu etiketine git
…………………………..
Burada ilk iki komut 1 mikrosaniye ,DECFSC komutu ilk uygulamada bir eksittigi için 255-1 =254 defa 1 mikrosaniye yani 254 mikrosaniye ,komut gerçeklestiginde yani 0 oldugunda ise 2 mikrosaniye (iki komut zamani kulalnir).GOTO komutu da 254 kez 2 mikrosaniye kullandigi için,sonuçta:
1+1+254+2+ (2X254) = 766 mikrosaniye olur.Bu kadar gecikme led ile çalisilan durumlarda yeterli degildir.göz 100 msn nin üstünü algilayabildigi için ,böyle bir döngüyü ikinci bir sayaç tan geçirip 250
kez daha tekrarlarsak yaklasik 200 msn elde ederiz,100 degil de 200 olmasi nedeni dir döngünün 2 saykillik 2 komuttan olusmasi nedeni iledir.
Program içinde döngü kullanmak pek pratik olmadigi için CALL RETURN ikilisi ile alt programlar yazilir. CALL komutu ile geçikme yapilan satira yollanir ve RETURN ile kaldigi yerden devam için geri dönülür.
CALL komutu ile program yön degistirdiginde ,geri dönülecek adresin yazilmasi ve saklanmasi gerekir bu saklama islemi STACK registerdir bu is otomatik olarak yapilir.

;döngü ile ilgili bir program denemesi
;karasimsek
;PortB ye bagli ledler saga sola yanar
list p=16f84
include "16f84a.inc"
CLRF PORTB
BCF STATUS,0
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
MOVLW B'00000001'
MOVWF PORTB ;port b nin ilk bitini yak
SOL
CALL GECIKME ;gecikme döngüsüne gir
RLF PORTB,F ;port b yi sola kaydir
BTFSS PORTB,7 ;7. bit 1 ise atla
GOTO SOL
SAG
CALL GECIKME
RRF PORTB,F ;portb ye atanan degeri saga kaydir
BTFSS PORTB,0 ;0 . bit 1 ise bir komut atla
GOTO SAG ;0. bit 1 degilse sag etikete git
GOTO SOL
GECIKME
MOVLW D'25'
MOVWF SAYAC1
DON1
MOVLW D'25'
MOVWF SAYAC2
DON2
MOVLW D'250'
MOVWF SAYAC3
DON3
DECFSZ SAYAC3,F
GOTO DON3
DECFSZ SAYAC2,F
GOTO DON2
DECFSZ SAYAC1,F
GOTO DON1
RETURN
END
Bu programda SAYAC registerleri 16f84a inc. file içindedir.Daha evvel de söyledigimiz gibi bu file editorda açilip istenen ilaveler yapilir.Tekrar hatirlatmakta yarar olan sey ise sudur:
INC. FILE IÇINDE YAZILAR BÜYÜK HARF ISE PROGRAMDA DA BÜYÜK,KÜÇÜK ISE KÜÇÜK OLMALIDIR.MPLAB IÇINDEKI INC FILE IÇINDE BÜYÜK HARF KULLANILDIGINDAN PROGRAM YAZIMINDA INC.FILE KULLANIYORSANIZ BÜYÜK HARF ILE PROGRAM YAZINIZ.
Burada kullanilan ve bizim bahsetmedigimiz iki komut vardir bunlar RRF ve RLF komutlaridir.Her iki komut da F,D ile kullanilir.
RLF : Bir file register içindeki bitleri bir sola kaydirir,en soldaki bit ne olur o da gider STATUS,0 ‘a yazilir,yani CARRY FLAG ‘e gider.CARRY FLAG içindeki de en sag bite gider.

CARRY 7 6 5 4 3 2 1 0 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1
RRF : Bir file register içindeki bitlerin pozisyonunu her defasinda bir saga kaydirir.Bu kez de en sag bit,yani bit 0 yerinden atilir ve gider CARRY FLAG ‘e yazilir.CARRY FLAG içerigi ise en sol bite yazilir.
7 6 5 4 3 2 1 0 CARRY 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0
COMF : F,D ile kullanilan bir komuttur,bir register içindeki bitleri ters çevirir,yani 0 lar 1 olur 1 ler ise 0 olur.
7 6 5 4 3 2 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1
SWAPF : F,D ile kullanilir bir file register içindeki bitlerin ilk ve son dört bitinin yerini degistirir.
7 6 5 4 3 2 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0
;TA2FR
;BIR RPOGRAM DENEMESI
;INCF,SUBWF,CALL,RETURN KULLANILMASI
;ADIM ADIM PIC DENEME 3
;RB0 RB1 VE RB2 LED YANMASI

LIST P=16F84 INCLUDE "16F84A.INC" CLRF PORTB BCF STATUS,0 BSF STATUS,5 CLRF TRISB BCF STATUS,5 BAS CLRF SAYAC1 _X INCF SAYAC1,F MOVLW D'250' SUBWF SAYAC1,W BTFSS STATUS,2 GOTO _X CALL GECIKME MOVLW B'00000111' MOVWF PORTB CALL GECIKME CALL GECIKME MOVLW B'00000000' MOVWF PORTB GOTO BAS GECIKME MOVLW D'250' MOVWF SAYAC2 DON1 MOVLW D'250' MOVWF SAYAC3 DON2 DECFSZ SAYAC3,F GOTO DON2 DECFSZ SAYAC2,F GOTO DON1 RETURN END

;TA2FR
;BIR RPOGRAM DENEMESI
;INCF,SUBWF,CALL,RETURN KULLANILMASI
;ADIM ADIM PIC DENEME 5
;RB0-RB1-RB2 DE LED YANMASI
LIST P=16F84 INCLUDE "16F84A.INC" CLRF PORTB BCF STATUS,0 BSF STATUS,5 CLRF TRISB BCF STATUS,5 BAS CLRF SAYAC1 _X INCF SAYAC1,F MOVLW D'250' SUBWF SAYAC1,W SUBWF SAYAC1,W BTFSS STATUS,2 BTFSS STATUS,2 GOTO _X CALL GECIKME CALL GECIKME CALL GECIKME CALL GECIKME MOVLW B'00000111' MOVWF PORTB CALL GECIKME CALL GECIKME CALL GECIKME CALL GECIKME MOVLW B'00000000' MOVWF PORTB GOTO BAS GECIKME MOVLW D'250' MOVWF SAYAC2 DON1 MOVLW D'250' MOVWF SAYAC3 DON2 DECFSZ SAYAC3,F GOTO DON2 DECFSZ SAYAC2,F GOTO DON1 RETURN END

Alıntı ile Cevapla

Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0 ©2009, Crawlability, Inc.
Güncel Forum, Güncel Net, Güncel Mekan, Net-indir.com | Bedava program, oyun, msn, resim indirme sitesi, BestForumTR.net, MsnTR.Org, Güncel Forum Sitesi
Gizlilik Bildirimi