assembly bekletme
TRANSCRIPT
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.
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.
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.
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
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
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.
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
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);
PIC ASSEMBLY
CLRF PORTB 0,4 µsnBSF STATUS,5 0,4 µsn olarak bulunur.
PIC ASSEMBLY
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
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
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.
PIC ASSEMBLY
KOMUT SAYKIL SAYISININ BULUNMASI
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.
PIC ASSEMBLY
Yaklaşık olarak KSS KSS=3XMXN İle hesaplanabilir.
TSS=3x255x255+5x255+4=196.354
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
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’
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.
PIC ASSEMBLY
PIC ASSEMBLY
PIC ASSEMBLY
Örnek: Port B ye bağlı olan tüm ledleri belirli zaman aralıklarında yakıp söndüren program.
• 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 •
Ö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.
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
RlF
1 0 0 0 0 1 1 01
LSBMSBCARRY TAŞIMA
Ö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
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
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)
PIC ASSEMBLY
PIC ASSEMBLY
PIC ASSEMBLY
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.
PIC ASSEMBLY
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.