Assembly Bekletme

36
PIC ASSEMBLY DÖNGÜ DÜZENLEMEK: 1. SAYAÇ KULLANARAK DÖNGÜ DÜZENLEMEK (DECFSZ(Decrement File Register Skip if Zero) KOMUTU) Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekir. Belirlenen sayaç değeri (yani tekrar sayısı) bir register’a aktarılır ve her döngüde registerin (yani sayacın) içi 1 azaltılır (DECFSZ komutu ile). Sayaç=0 olunca döngü biter.

Transcript of Assembly Bekletme

Page 1: Assembly Bekletme

PIC ASSEMBLY

DÖNGÜ DÜZENLEMEK:

1. SAYAÇ KULLANARAK DÖNGÜ DÜZENLEMEK (DECFSZ(Decrement File RegisterSkip if Zero) KOMUTU)

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekir. Belirlenen sayaç değeri(yani tekrar sayısı) bir register’a aktarılır ve her döngüde registerin (yani sayacın) içi 1azaltılır (DECFSZ komutu ile). Sayaç=0 olunca döngü biter.

Page 2: Assembly Bekletme

PIC ASSEMBLY

• Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekebilir. Budurumda programcı tarafından belirlenen bir kayıtçı sayaç olarakkullanabilir. Sayaç şu şekilde hazırlanır:

Önce sayaç içerisine tekrar sayısını belirleyen sayı yüklenir. Her işlem tekrarında sayaç 1 azaltılır. (DECFSZ komutu kullanılır.) Sayaç 0 olduğunda program ya bitirilir ya da başka bir yere dallandırılır.

Page 3: Assembly Bekletme

PIC ASSEMBLY

2. KARŞILAŞTIRMA YAPARAK DÖNGÜ DÜZENLEMEK (SUBLW , SUBWF , INCF , DECFKOMUTLARI)

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekir. Bir register sayaçolarak belirlenir. Her dönüşte sayaç bir arttırılır. Arttırma işlemi INCF komutuylayapılır. Sayaç değerine ulaşınca döngüden çıkılır. Döngünün tekrar sayısı registeriçerisine yüklenen sayı ile belirlenir. Sayaç değişkeni içerisindeki sayı döngününher tekrarında bir arttırılır ve SUBLW komutuyla sayaçtan W’ nin içeriği çıkarılır.Çıkarma işlemi neticesinde STATUS registerinin 0. ve 2. bitleri etkilenir. Bu bitlerBTFSC komutu ile test edilir. Test sonucunda istenilen değere ulaşınca döngüyeson verilir.

Page 4: Assembly Bekletme

PIC ASSEMBLY

SUBWF Komutu: Çıkarma yapan komuttur.Çıkarma işlemi sonucunda etkilenen C ve Z bitleri içerisindeki değer, W

ve F registerlerinin büyüklüğüne bağlıdır.F>W Z= 0 ve C= 1 ; F=WZ= 1 ve C= 1 ; F<W Z= 0 ve C= 0SUBLW Sbt durumunda iseSbt >W Z= 0 ve C= 1 ; Sbt =WZ= 1 ve C= 1 ; Sbt <WZ= 0 ve C= 0

Page 5: Assembly Bekletme

PIC ASSEMBLY

SUBWF Komutu: Çıkarma yapan komuttur.Çıkarma işlemi sonucunda etkilenen C ve Z bitleri içerisindeki değer, W

ve F registerlerinin büyüklüğüne bağlıdır.F>W Z= 0 ve C= 1 ;F=W Z= 1 ve C= 1 ; F<W Z= 0 ve C= 0

SUBLW Sbt durumunda iseSbt >W Z= 0 ve C= 1 ; Sbt =WZ= 1 ve C= 1 ; Sbt <WZ= 0 ve C= 0

Page 6: Assembly Bekletme

PIC ASSEMBLY

Örnek:A port unun 1. bitine bağlı butona 10 defa bastıktan sonra B port unun 0. bitine bağlı LED’i yakan programı yazınız.

Page 7: Assembly Bekletme

PIC ASSEMBLY

LIST P=16F84AINCLUDE “PIC16F84.INC”

SAYAC EQU h’0C’CLRF PORTBBSF STATUS,5CLRF TRISBMOVLW H’FF’MOVWF TRISABCF STATUS,5

BASLAMOVLW d’10’ ;W’ya 10 değeri yüklenirMOVWF SAYAC SAYAC reg. Na W nun içeriği yüklenir

TESTBTFSC PORTA,1 ;PORTA’nın 1.biti o mı?(yani butona basıldımı)GOTO TEST Hayır ise TEST etiketine git.Evetse bir sonraki komuttan devam et

NOP

;15 adet NOP komutu koymamızın sebebi PIC’e kısa bir süre gecikme sağlayarak butona basılma işleminin algılatılmasıdır. Sizin bir kere butona basmanız PIC için birden fazla basmanız anlamına gelebilir. Bu yüzden 1 defa basılması için kısa bir gecikme sağladık

NOPNOP....NOPDECFSZ SAYAC, F ;Sayac’ın değerini 1 azalt sonucu sayaca yazGOTO TEST ;Eğer sayac=0 değilse TEST etiketine git. Eğer sayac=0 ise bir sonraki

komuttan devam et.BSF PORTB, 0 PORTB’nin 0. bitini 1 yap (yani LED’i yak)END ;Son

Page 8: Assembly Bekletme

PIC ASSEMBLY

ZAMAN GEÇİKTİRME

Bazı işlemlerin yapılması esnasında belirli bir zaman hiçbir şey yapılmadan beklenmesi gerekir.

PIC16F84’e uygulanan 4 Mhz’lik osilatör sinyalinin 1 komutu icrası için 4 palsıgerekir. Dolayısıyla PIC’in 1 komutu icra etmek için kullandığı frekans, dışarıdanuygulanan sinyalin ¼ üne düşer ve 1 Mhz olur. İşte Fosc/4 değerindeki budeğere dâhilî komut saykılı denir. 1Mhz’lik sinyalin dâhilî komut peryotu da 1μSolacaktır. Bazı komutların icrası ise 2 komut saykıllık zaman alır.

1MHz ‘lik dahili frekans ın bir saykılı (peryodu);

Page 9: Assembly Bekletme

PIC ASSEMBLY

CLRF PORTB 0,4 µsnBSF STATUS,5 0,4 µsn olarak bulunur.

Page 10: Assembly Bekletme

PIC ASSEMBLY

Page 11: Assembly Bekletme

PIC ASSEMBLY

Tek Döngü ile Minimum Zaman Geciktirme

Bir geciktirme döngüsü hazırlanırken sayaç olarak kullanılacak bir file registertanımlanır. Bu registerin içerisine döngünün tekrar sayısı yüklendikten sonraDECFSZ komutu ile tekrar sayısından her defasında 1 çıkartılır. Çıkarma sonucu 0olunca döngü sona erdirilir.

KOMUT KOMUT SAYKILI

MOVLW H’01’ 1

MOVWF SAYAC 1

DONGU

DECFSZ SAYAC,F 1*0 +2

GOTO DONGU 2*0

TOPLAM 4 saykıl

Page 12: Assembly Bekletme

PIC ASSEMBLY

Tek Döngü ile Maksimum Zaman Geciktirme

Sayaç içerisine yüklediğiniz sayıyı H’FF’ (desimal 255) yaparsanız yukarıda verilen gecikme döngüsünden maksimum gecikmeyi elde ederiz.

KOMUT KOMUT SAYKIL

MOVLW H’FF’ 1

MOVWF SAYAC 1

DONGU

DECFSZ SAYAC,F 1*254 +2

GOTO DONGU 2*254

TOPLAM 766 saykıl

Page 13: Assembly Bekletme

PIC ASSEMBLY

KOMUT SAYKIL SAYISININ BULUNMASI

Döngüdeki saykıl sayısı programın başında sayaç adlı registere atanan sayıya (N) bağlıolduğu görülmektedir. Öyleyse bir döngünün kaç saykıllık gecikme oluşturacağınıbulan bir formül oluşturacak olursak

KOMUT KOMUT SAYKIL

MOVLW H’N’ 1

MOVWF SAYAC 1

DONGU

DECFSZ SAYAC,F 1*(N-1) +2

GOTO DONGU 2*(N-1)

TOPLAM 1+1+N-1+2+2N-2=3N+1

KSS =3N+1N çok büyükse KSS=3N diyebiliriz.

Page 14: Assembly Bekletme

PIC ASSEMBLY

KOMUT SAYKIL SAYISININ BULUNMASI

Page 15: Assembly Bekletme

PIC ASSEMBLY

ÇİFT DÖNGÜLÜ ZAMAN GECİKTİRME

Tek döngülü gecikme programıyla oluşan maksimum gecikme (766 çevrimlik süre)bazı uygulamalar için az gelebilir. Bu durumda iç içe iki veya daha fazla döngükullanılabilir.

Page 16: Assembly Bekletme

PIC ASSEMBLY

Yaklaşık olarak KSS KSS=3XMXN İle hesaplanabilir.

TSS=3x255x255+5x255+4=196.354

Page 17: Assembly Bekletme

PIC ASSEMBLY

3 döngülü bir gecikme altprogramı yazalım. Fosc=4 Mhz için toplam50.070.529 mikrosaniye ve yaklaşık 50 saniye eder

Page 18: Assembly Bekletme

PIC ASSEMBLY

ÖRNEK: Çift döngülü bir zaman geciktirme programında 12 ms lik bir gecikme isteniyorsa M ve N sayıları ne olmalıdır. (PIC’e 4MHz lik bir frekans uygulanmaktadır).

12ms=12000µsn eder. Dahili clock frekansı 1MHz olduğundan 12000 komut saykılıgerekir. 12000=3*M*N dir.M=N olarak düşünülürse12000=30M2

M2=4000M=63,2 dir. Yaklaşık 63 desimal dir. Yani H’3F’

M=H’3F’N=H’3F’

Page 19: Assembly Bekletme

PIC ASSEMBLY

ALT PROGRAMLAR

Program içerisinde defalarca tekrar edilmesi gereken komut dizilerini sürekli yazmakyerine, bu komut dizilerini altprogramlar şeklinde yazarak hem bellek alanındantasarruf edilmiş olur, hem de program sadelik kazanır. Altprogramlar ana programdanCALL komutu ile çağrılır ve altprogramın çalışması bittikten sonra ana programaRETURN komutu ile dönüş sağlanır.

Page 20: Assembly Bekletme

PIC ASSEMBLY

Page 21: Assembly Bekletme

PIC ASSEMBLY

Page 22: Assembly Bekletme

PIC ASSEMBLY

Örnek: Port B ye bağlı olan tüm ledleri belirli zaman aralıklarında yakıp söndüren program.

Page 23: Assembly Bekletme

• LIST P=16F84 • INCLUDE "P16F84.INC"• SAYAC1 EQU H'20'• SYACA2 EQU H'21'• CLRF PORTB • BANKSEL TRISB• CLRF TRISB • BANKSEL PORTB TEKRAR • MOVLW h'00'• MOVWF PORTB • CALL GECIKME • MOVLW h'FF' • MOVWF PORTB • CALL GECIKME • GOTO TEKRAR GECIKME • MOVLW h'FF'• MOVWF SAYAC1DONGU1• MOVLW h'FF'• MOVWF SAYAC2DONGU2• DECFSZ SAYAC2,F• GOTO DONGU2• DECFSZ SAYAC1,F • GOTO DONGU1• RETURN • END •

Page 24: Assembly Bekletme

Örnek

• RA0 ucuna bağlı butona basınca PortB saklayacısındaki sayıyı 1 artıran RA7 ucundaki butona basınca 1 azaltan program Program ilk çalıştığındaki Portb deki ledler yanmayacaktır.

Page 25: Assembly Bekletme
Page 26: Assembly Bekletme

Bit Kaydırma

• SOLA KAYDIRMA : RLF komutu, belirlenen bir saklayıcı içerisindeki bit lerinpozisyonunu defasında bir sola kaydırmak için kullanılır. Saklayıcı içerisindeki bitl’ersola kaydığında MSB bit ‘i , STATUS saklayıcıda bulunan cary (taşıma ) bayrağıiçerisine yazılır. Cary bayrağı içeriği ise saklayıcının LSB bit ine yazılır.

• MSB (Most Significant Bit – en soldaki bit )• LSB( Least Signicificant Bit - en sağdaki bit)

RLF Saklayıcı d

Hedef olarak W belirtilmişse kaydırma sonucu elde edilen bit paterni W saklayıcıya, F ise genel amaçlı saklayıcıya yazılır.

MOVLW h’86’ MOVWF MEMRLF MEM , F

Page 27: Assembly Bekletme

RlF

1 0 0 0 0 1 1 01

LSBMSBCARRY TAŞIMA

Page 28: Assembly Bekletme

ÖRNEK: • PortB , ye bağlı 8 LED üzerindeki bir LED ‘nin yanışını belirli aralıklarla kaydıran ve

kayan LED en sone geldiğinde tüm LED’ler sönük kalan programı yazınız.

SAYAC1 EQU H’20’

SAYAC2 EQU H’21’

CLRF PORTB

BCF STATUS,0

BAKSEL TRISB

CLRF TRISB

BAKSEL PORTB

MOVLW H’01’

MOVWF PORTB

TEKRAR

CALL GECİKME ; Gecikme Yao

RLF PORTB,F ; PortB deki sola kaydır

BTFSS STATUS,O ; Cary bayrağı 1 mi

GOTO TEKRAR ;Hayır

Page 29: Assembly Bekletme

DONGU

GOTO DONGU

GECİKME

MOVLW h’FF’

MOVWF SAYAC1

DONGU1

MOVLW h’FF’

SAYAC2

DONGU2

DECFSZ SAYAC2,F

GOTO DONGU2

DECFSZ SAYAC1,F

GOTO DONGU1

RETURN

END

Page 30: Assembly Bekletme

Bit Kaydırma

• SAĞA KAYDIRMA : RRF komutu, belirlenen bir saklayıcı içerisindeki bit lerinpozisyonunu defasında birsağakaydırmak için kullanılır. Saklayıcı içerisindeki bitl’ersağa kaydığında LSB bit ‘i , STATUS saklayıcıda bulunan cary (taşıma ) bayrağıiçerisine yazılır. Cary bayrağı içeriği ise saklayıcının MSB bit ine yazılır.

• MSB (Most Significant Bit – en soldaki bit )• LSB( Least Signicificant Bit - en sağdaki bit)

Page 31: Assembly Bekletme

PIC ASSEMBLY

Page 32: Assembly Bekletme

PIC ASSEMBLY

Page 33: Assembly Bekletme

PIC ASSEMBLY

Page 34: Assembly Bekletme

PIC ASSEMBLY

RETLW : Altprogramndan W ‘ye bir sayı / sabit yükle ve geri dön

CALL : Alt programı çağırır.

PCL (Program Counter Low Byte): bir sonra çalıştırılacak komutun program belleğindeki adresini tutar.

ADDWF : W ve f kayıtçılarını topla.

Page 35: Assembly Bekletme

PIC ASSEMBLY

Page 36: Assembly Bekletme

PIC ASSEMBLY

A port un 0.nci bitine bağlı butona 10 defa bastıktan sonra B portunun 0.nci bitine bağlı led i yakan programı yazınız.