Assembly Başlangıç Kodları

Başlatan designer.21, 04 Mart 2023, 21:59:34

designer.21

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

sigmoid