Picproje Elektronik Sitesi

DERLEYİCİLER => PIC Assembly => Konuyu başlatan: designer.21 - 04 Mart 2023, 21:59:34

Başlık: Assembly Başlangıç Kodları
Gönderen: designer.21 - 04 Mart 2023, 21:59:34
Merhabalar kolay gelsin herkese. son dönemde assembly dili üzerine kendimce eğitim alıyorum. diğer sitede paylaştığım başlangıç ile ilgili ders notlarımı burada da paylaşmak istiyorum.
benim gibi assembly'e yeni başlayan kişilere pratik yapma açısından faydalı olabilir.
Bu derslerde yeni olmam dolayısıyla, gereksiz, uzun, fazla kodlar falan da olacaktır : )  amacım sadece pratik yapmak

BUTONA 5 DEFA BASTIKTAN SONRA DEVREYE GİREN FLİP-FLOP PROGRAMI


LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT &_BODEN_OFF &_PWRTE_ON &_MCLRE_ON &_WDT_OFF &_LVP_OFF &_CP_OFF
 
DENE EQU 0X20
SAYAC1 EQU 0X21
SAYAC2 EQU 0X22
SAYAC3 EQU 0X23
SAYAC4 EQU 0X24
 
ORG 0X00 ;PROGRAM KODLARININ BAŞLANIÇ SATIRI
CLRF PORTB ;PORTB' Yİ SIFIRLA
BSF STATUS,5 ;BANK1'e GEÇ
CLRF TRISB ;PORTB'yi TEMİZLE
MOVLW 0XFF ;PORTA'ya 11111111 YÜKLEYEREK
MOVWF TRISA ;PORTA'yı GİRİŞ YAP
BCF STATUS,5 ;BANK0'a GEÇ
MOVLW 0X07 ;W SAKLAYICIYA B'00000111' YÜKLE
MOVWF CMCON ;PORTA GİRİŞLERİ DİJİTAL GİRİŞ ÇIKIŞ
MOVLW D'5' ;W SAKLAYICIYA 5 SAYISINI YÜKLE
MOVWF DENE ;DENE SAYACINA W'yi(5) YÜKLE
BASLA
BTFSC PORTA,0 ;PORTA'ya BASILDI MI
GOTO BASLA ;HAYIR - BASLA'ya GİT
CALL BUTON_GECIKME ;EVET - BUTON ARKLANMA ÖNLEME GECIKME SÜRESİNE GİT
DECFSZ DENE,F ;DENE SAYACINDA 1 EKSİLT DENE'ye YÜKLE. DENE=0 ise ALT SATIRI ATLA 
GOTO BASLA ;BASLA'ya GİT
DONGU
MOVLW 0XFF ;W SAKLAYICIYA FF YÜKLE
MOVWF PORTB ;W'yi PORTB'ye YÜKLE
CALL FLIPGECIKME ;FLIP FLOP GECIKMESİNE GİT
CLRF PORTB ;PORTB'yi SIFIRLA
CALL FLIPGECIKME ;FLIP FLOP GECIKMESİNE GİT
GOTO DONGU

BUTON_GECIKME ;BUTON ARKLANMA ÖNLEME GECİKMESİ
MOVLW 0XFF
MOVWF SAYAC1
BUTON_GECIKME1
MOVLW 0XFF
MOVWF SAYAC2
BUTON_GECIKME2
DECFSZ SAYAC2,F
GOTO BUTON_GECIKME2
DECFSZ SAYAC1,F
GOTO BUTON_GECIKME1
RETURN

FLIPGECIKME ;FLIP-FLOP YANMA SÜRESİ DÖNGÜSÜ
MOVLW 0XEE
MOVWF SAYAC3
FLIPGECIKME1
MOVLW 0XEE
MOVWF SAYAC4
FLIPGECIKME2
DECFSZ SAYAC4,F
GOTO FLIPGECIKME2
DECFSZ SAYAC3,F
GOTO FLIPGECIKME1
RETURN
END




RLF - RRF
Gerilim uygulandığında 6 defa sola kaydıktan sonra 6 defa sağa kayan ve bu şekilde sonsuz döngüye giren program.

LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT &_BODEN_OFF &_PWRTE_ON &_MCLRE_ON &_WDT_OFF &_LVP_OFF &_CP_OFF
SAYAC1 EQU 0X20
SAYAC2 EQU 0X21
SOL_SAYAC EQU 0X22
SAG_SAYAC EQU 0X23
 
    ORG 0X00                ;PROGRAM KODLARININ BAŞLANIÇ SATIRI
    CLRF PORTB                ;PORTB' Yİ SIFIRLA
    BSF STATUS,5            ;BANK1'e GEÇ
    CLRF TRISB                ;PORTB'yi TEMİZLE
    MOVLW 0XFF                ;PORTA'ya 11111111 YÜKLEYEREK
    MOVWF TRISA                ;PORTA'yı GİRİŞ YAP
    BCF STATUS,5            ;BANK0'a GEÇ
    MOVLW 0X07                ;W SAKLAYICIYA B'00000111' YÜKLE
    MOVWF CMCON                ;PORTA GİRİŞLERİ DİJİTAL GİRİŞ ÇIKIŞ
 
BASLA   
    MOVLW 0X01                ;W SAKLAYICIYA B'00000001' YÜKLE
    MOVWF PORTB                ;W'yi PORTB'ye YÜKLE
    MOVLW D'0'                ;W SAKLAYICIYA 0 SAYISI YÜKLE
    MOVWF SOL_SAYAC            ;0'ı SOL_SAYAC YÜKLE
    MOVLW D'0'                ;W SAKLAYICIYA 0 SAYISI YÜKLE
    MOVWF SAG_SAYAC            ;0'ı SAG_SAYAC YÜKLE
SOL                        ;SOLDAN SAĞA KAYMA
    RLF PORTB,F                ;PORTB'yi BİR SOLA KAYDIR DEĞERİ YİNE PORTB'ye YÜKLE
    CALL GECIKME1            ;LED YANMA SÜRESİ DÖNGÜSÜNE GİT
    BTFSS PORTB,7            ;PORTB,7 (EN SOLDAKİ LED) YANDI MI
    GOTO SOL                ;HAYIR - SOL'a GİT (KAYMA DEVAM ETSİN)
    GOTO SOL_DEVAM            ;EVET - SOL_DEVAM'a GİT (BU KAYMA İŞLEMİ 6 DEFA GERÇEKLEŞTİREN DÖNGÜ)
       
SOL_DEVAM                ;SOLDAN SAĞA 6 DEFA DEVAM ETTİREN DÖNGÜ
    MOVLW D'7'                ;W SAKLAYICIYA 7 SAYISI YÜKLE
    INCF SOL_SAYAC,F        ;SOL_SAYAC'ı 1 ARTTIR SOL_SAYAC'a KAYDET
    SUBWF SOL_SAYAC,W        ;SOL_SAYAC'tan W'yi ÇIKAR (F ve W eşit olana kadar "Z" 0'dır)
    BTFSS STATUS,Z            ;BU ÇIKARMA SONUCU 1 oldu mu (STATUS ZERO BİT 1 OLDU MU
    GOTO SOL                ;HAYIR - SOL'a GİT
    GOTO SAG                ;EVET - 6 DEFA KAYMA İŞLEMİ BİTTİ SAG'a GEÇ
   
SAG                        ;SAĞDAN SOLA KAYMA
    RRF PORTB,F                ;PORTB'yi BİR SAĞA KAYDIR DEĞERİ YİNE PORTB'ye YÜKLE
    CALL GECIKME1            ;LED YANMA SÜRESİ DÖNGÜSÜNE GİT
    BTFSS PORTB,0            ;PORTB,0 (EN SAĞDAKİ LED) YANDI MI
    GOTO SAG                ;HAYIR - SAG'a GİT (KAYMA DEVAM ETSİN)
    GOTO SAG_DEVAM            ;EVET - SAG_DEVAM'a GİT (BU KAYMA İŞLEMİ 6 DEFA GERÇEKLEŞTİREN DÖNGÜ)
   
SAG_DEVAM                ;SAĞDAN SOLA 6 DEFA DEVAM ETTİREN DÖNGÜ
   
    MOVLW D'7'                ;W SAKLAYICIYA 7 SAYISI YÜKLE
    INCF SAG_SAYAC,F        ;SAG_SAYAC'ı 1 ARTTIR SAG_SAYAC'a KAYDET
    SUBWF SAG_SAYAC,W        ;SAG_SAYAC'tan W'yi ÇIKAR (F ve W eşit olana kadar "Z" 0'dır)
    BTFSS STATUS,Z            ;BU ÇIKARMA SONUCU 1 oldu mu (STATUS ZERO BİT 1 OLDU MU
    GOTO SAG                ;HAYIR - SAG'a GİT
    GOTO BASLA                ;EVET - 6 DEFA KAYMA İŞLEMİ BİTTİ EN BAŞA DÖN
   
GECIKME1                    ;LED YANIK KALMA    SÜRESİ (YAKLAŞIK 196 ms)
    MOVLW 0XFF
    MOVWF SAYAC1
GECIKME2
    MOVLW 0XFF
    MOVWF SAYAC2
GECIKME3
    DECFSZ SAYAC2,F
    GOTO GECIKME3
    DECFSZ SAYAC1,F
    GOTO GECIKME2
    RETURN
    END


RLF
SOLA DOĞRU KAYAN LED
PORTA,0 İLE OLDUĞU YERDE DURAN
PORTA,1 İLE KALDIĞI YERDEN DEVAM EDEN
UYGULAMA

(bu programda LED'ler sola doğru kayarken ikisi beraber yanıyor nedenini anlamadım. nerde hata yaptığımı bulamadım.


LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT &_BODEN_OFF &_PWRTE_ON &_MCLRE_ON &_WDT_OFF &_LVP_OFF &_CP_OFF
SAYAC1 EQU 0X20
SAYAC2 EQU 0X21
 
    ORG 0X00
    CLRF PORTB
    BSF STATUS,5
    CLRF TRISB
    MOVLW 0XFF
    MOVWF TRISA
    BCF STATUS,5
    MOVLW 0X07
    MOVWF CMCON
 
BASLA
    MOVLW B'00000001'
    MOVWF PORTB   
SOL
    CALL GECIKME
    RLF PORTB,F   
BUTON
    BTFSC PORTA,0
    GOTO DEVAM
DONGU
    BTFSC PORTA,1
    GOTO DONGU
    GOTO DEVAM
                               
DEVAM
    BTFSS STATUS,C
    GOTO SOL
    GOTO BASLA   
   
GECIKME
    MOVLW 0XFF
    MOVWF SAYAC1
GECIKME1
    MOVLW 0XFF
    MOVWF SAYAC2
GECIKME3
    DECFSZ SAYAC2,F
    GOTO GECIKME3
    DECFSZ SAYAC1,F
    GOTO GECIKME1
    RETURN
    END

Başlık: Ynt: Assembly Başlangıç Kodları
Gönderen: sigmoid - 05 Mart 2023, 17:42:19
Bende gördüğüm bir İnternet sitesini paylaşayım. Birilerine faydası dokunur.

https://www.circuitbread.com/tutorials/how-to-use-a-simple-microcontroller-series-intro-pic10f200-part-1