DERS 7 PIC 16F84 PROGRAMLAMA
İÇERİK PIC 16F84 örnek programlar Dallanma komutları Sonsuz döngü
PROGRAM 1 RAM bellekte 0x0C ve 0x0D hücrelerinde tutulan iki 8-bit sayının toplamını hesaplayıp sonucu 0x0E hücresine kaydeden PIC16F84 işlemcisi assembler programını hazırlayalım: ???????????
PROGRAM 2 RAM bellekte 0x0C ve 0x0D hücrelerinde tutulan iki 8-bit sayının toplamını hesaplayıp sonucu 0x0E hücresine kaydeden PIC16F84 işlemcisi assembler programını hazırlayalım: ???????
PROGRAM 3 PIC16F84 işlemcisinin A portunun farklı bitlerini GİRİŞ veya ÇIKIŞ olarak programlayalım: BSF STATUS, 5 MOVLW b’00111100’ MOVWF TRISA
PROGRAM 4 PIC16F84 işlemcisinin GİRİŞ olarak programlanmış A portundan bilgi okuyup W register’ına yazalım: BSF STATUS, 5 MOVLW b’11111111’ MOVWF TRISA BCF STATUS, 5 MOVF PORTA, W
PROGRAM 5 PIC16F84 işlemcisinin ÇIKIŞ olarak programlanmış B portuna W register’ında tutulan bilgiyi yazalım: BSF STATUS, 5 BSF STATUS, 5 MOVLW b’00000000’ CLRF TRISB MOVWF TRISB BCF STATUS, 5 BCF STATUS, 5 MOWF PORTB MOWF PORTB
PROGRAM 6 PIC16F84 işlemcisinin A portundan okunan bilgiyi B portuna gönderelim.
PROGRAM 6 CLRF PORTB BSF STATUS, 5 CLRF TRISB MOVLW b’11111111’ MOVWF TRISA BCF STATUS, 5 MOVF PORTA, 0 MOVWF PORTB
KOMUTLAR Assembly programlarımızın işlem kapasitesini arttıralım: Yeni komutlar
KOMUTLAR Programlamada iki önemli kavramdan bir diğeri ise verilerin işlenmesini sağlayan komutlardır. Bunlar sınıflandırılacak olursa; Aritmetik ve Atama işlem komutları Yükleme İşlemi: Değişken (register) değerini belirleme (=) Aritmetik İşlem: Toplama, Çıkarma Mantıksal İşlem: AND, OR, XOR İçerik Değiştirme İşlemi: Değişken değerini değiştirme içerik temizle, arttır, azalt, eşlenik al Bit İşlemleri: Değişken bitini 0 veya 1 yap Kaydırma İşlemleri: Değişken bitlerini sağa veya sola kaydır Karar verme işlem komutları Koşullu Dallanma: Değişken sıfır–herhangi biti 0/1 ise dallan Diğer işlem komutları Program Akış Komutları: Dallanma Mikrodenetleyici Kontrol Komutları
KOMUTLAR Dersin bu bölümünde III. Diğer İşlem Komutlarının neler olduklarına bakalım…
KOMUTLAR (dallanma) GOTO : Program akışında bir etiket ile belirlenen komut satırına dallanma. komut N komut N GOTO SICRA GOTO SICRA komut M-1 komut M-1 SICRA komut M SICRA komut M komut M+1 komut M+1
KOMUTLAR (dallanma) GOTO k : programın işletilecek sıradaki komutu Program akışı bir etiket ile belirlenen bir komut satırına dallanır. GOTO k : programın işletilecek sıradaki komutu k etiketi ile işaretlenmiş komut satırı olarak yürütülür.
KOMUTLAR (dallanma) CALL: Program akışı bir etiket ile belirlenen bir alt_programa dallanır. komut N komut N CALL alt_prog CALL alt_prog komut M-1 komut M-1 alt_prog komut M alt_prog komut M komut M+1 komut M+1
KOMUTLAR (dallanma) CALL k : programın sıradaki komutu k etiketi Program akışı bir etiket ile belirlenen bir alt_programa dallanır. CALL k : programın sıradaki komutu k etiketi ile işaretlenmiş alt_program’ın başlangıç satırından itibaren yürütülür. CALL komutun GOTO komutundan farkı, dallanılan alt programdan ana programa geri dönmenin de mümkün olabilmesidir. Yani GOTO ile sadece bir başka program bölümüne dallanılırken CALL ile geri dönülmek üzere yine bir başka program bölümüne dallanılır.
KOMUTLAR (dallanma) RETURN: Alt_programın işletilmesi sona erdiğinde ana programda sıçramanın yapıldığı komut (CALL) sonrasına geri dönülür. CALL alt_prog CALL alt_prog komut M komut M alt_prog komut N alt_prog komut N RETURN RETURN komut K komut K
KOMUTLAR (dallanma) Alt_programın işletilmesi sona erdiğinde ana programda sıçramanın yapıldığı komut (CALL) sonrasına geri dönülür. RETURN : Alt programın işletilmesi sona erdiğinde CALL komutunun olduğu satır sonrasına geri dönmeyi mümkün kılar. Dolayısıyla CALL komutu ile kullanılır.
KOMUTLAR (dallanma) RETLW: Alt_programın işletilmesi sona erdiğinde yine ana programda sıçramanın yapıldığı komut (CALL) sonrasına geri dönülür. Ancak bu işlem yapılırken istenilen bir sabit değer W akümülatörü vasıtasıyla ana programa geri taşınır. RETLW k : k sabit değeri W akümülatörüne aktarılarak ana programa geri taşınır.
KOMUTLAR (dallanma) RETFIE: Interrupt alt_programı sona erdirilerek ana programa geri dönülür. RETFIE : Interrupt programını sona erdirip, ana programa kalınan yerden devam edilir.
PROGRAM 7 PIC16F84 işlemcisi ile sonsuz döngü oluşturalım: DONGU GOTO DONGU
PROGRAM 8 Program 6 ve Program 7’ yi birleştirelim: PIC16F84 işlemcisinin A portundan okunan bilgiyi B portuna gönderelim ve program sonunda işlemcinin duraklatma komutu olmadığı için bu işlevi yerine getirecek bir sonsuz döngü ekleyelim.
PROGRAM 8 CLRF PORTB BSF STATUS, 5 CLRF TRISB MOVLW b’11111111’ MOVWF TRISA BCF STATUS, 5 MOVF PORTA, W MOVWF PORTB DONGU GOTO DONGU END
PROGRAM 9 Bu program çalıştırıldığında A portundan okunan bilgiyi B portuna gönderilir. Ancak bu işlem yinelenmek istenirse işlemcinin resetlenmesi gerekir. Peki işlemcinin RESETLEMESİNE GEREK KALMAKSIZIN aynı işlem nasıl yapılır?
PROGRAM 9 CLRF PORTB BSF STATUS, 5 CLRF TRISB MOVLW b’11111111’ MOVWF TRISA BCF STATUS, 5 MOVF PORTA, W MOVWF PORTB ?????????
Program 9 ile kullanılabilecek deneme devresi, Mikrodenetleyiciler ve PIC Prog., sayfa 77
MİKROİŞLEMCİ PROGRAMLAMA DERS 7 MİKROİŞLEMCİ PROGRAMLAMA - SON - Kaynak: Mikrodenetleyiciler ve PIC Prog., Orhan ALTINBAŞAK, ISBN 975-883-409-6