Assembly Dili ile PIC16F877A Uygulamaları

Başlatan nuhaltinkaynak, 07 Ekim 2018, 17:10:23

nuhaltinkaynak

Assembly kodlamaya yeni başlayanlar için pekiştirme mahiyetinde led, 7 seven segment display vs üzerinde çalışmalar yapmaya olanak sağlayan örnekleri bu başlık altında paylaşabiliriz. Yararı olur umarım.
İlk örneğimiz çarpma işleminin sonucunu PORTB'ye bağlı ledlerde göstermek
Deger1(4) sayısı ile Deger(3) sayısını çarpıp sonucu B portunda gösteren uygulama;
#include <P16F877A.INC>
Deger1 EQU 0X21   ;Değişkenlerimizi hexa 20. adresten itibirane yazıyoruz.
Deger2 EQU 0X22
   ORG 0x00
SETUP 
   BSF STATUS, RP0     ;BANK1'e geçildi. Aynı işlemi BANKSEL TRISB komutuyla da yapılabilir.
   CLRF TRISB              ;TRISB nin tüm uçları 0 yapıldı. Yani PORTB çıkış olarak ayarlandı.
   BCF STATUS, RP0    ;BANK0'a geçildi. BANKSEL PORTB ile de yapılabilir.
   CLRF PORTB
   MOVLW 0x04         ;W kaydedicisine 4 sayısını atıldı.
   MOVWF Deger1     ;W'deki sayı Deger1'e atıldı.
   MOVLW 0x03
   MOVWF Deger2
   CLRW             ;W'yi sıfırlıyoruz çünkü sonucu W'de saklayacaz ve lede yansıtacaz.
MAIN
   ADDWF Deger1,W  ;W ile Deger1'i topla sonucu W'ye yaz.
   DECFSZ Deger2,F   ;Deger2'yi bir azaltır, 0 ise bir satırı işlemeden geçer, değilse devam eder.
   GOTO MAIN
   MOVWF PORTB
END

nuhaltinkaynak

#1
Karaşimşek uygulaması(Yanan ışığın sol köşeye gidip geri gelmesi ve bunu sonsuz kere tekrarlaması)

#include <P16F877A.INC>
Sayac1 EQU 0X21
Sayac2 EQU 0X22
   ORG 0x00
SETUP
   BANKSEL TRISB
   MOVLW B'00000000'
   MOVWF TRISB
   BANKSEL PORTB
   CLRF PORTB
   MOVLW 0x01
   MOVWF PORTB
SOLA
   CALL GECIKME
   RLF PORTB
   BTFSS PORTB,7
   GOTO SOLA
   GOTO SAGA
SAGA
   CALL GECIKME
   RRF PORTB
   BTFSS PORTB,0
   GOTO SAGA
   GOTO SOLA
GECIKME
   MOVLW 0X80
   MOVLW Sayac1
TEKRAR1
   MOVLW 0XFF
   MOVWF Sayac2
TEKRAR2
   DECFSZ Sayac2
   GOTO TEKRAR2
   DECFSZ Sayac1
   GOTO TEKRAR1
   RETURN
END