Assembly Başlangıç Dersleri

Başlatan designer.21, 02 Mart 2023, 23:02:42

designer.21

Herkese Merhabalar, daha önce de dediğim gibi assembly dili derslerine başlayıp bu dersi istikrarı bozmadan yavaş yavaş ama sindire sindire öğrenme faaliyetim devam ediyor.

bundan sonraki süreçte bu çalışma süresince, basit de olsa dersler sonunda kendim yaptığım programları paylaşıp benim gibi yeni başlayanlara ekstra bilgi olsun diye paylaşmak istiyorum.

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

designer.21

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
    



kudretuzuner

Merhaba,
Çalışmaları çok önemsediğim için her bir kodları derliyor hex kodlarını elde ediyorum. Ama ikinci kodları( RLF - RRF)
derleyemedim  maalesef

designer.21

Merhaba Hocam, şimdi ben de denedim, kodları seçerek kopyala dediğim zaman derlemiyor hatalar veriyor. fakat kod bölümünün içinde sağ üst tarafta beliren copy linkine tıklayarak aldığım zaman sorunsuz şekilde derleyip çalışıyor.

designer.21

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
Bu eki görüntüleyemezsiniz.

kudretuzuner

Çalışmaların Isıs dosyaları olsa daha kolay çözüm bulunur diye düşünüyorum.

kudretuzuner

Merhaba,
Çalışan projenin videosunu vereyim kodları da mevcut açıklama yapmıyorum biraz düşünürseniz çok rahatlıkla bulacaksınız.
https://www.youtube.com/watch?v=fQv-NLuitqI

kudretuzuner

 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 

;*****************************************
BCF PORTB,0;******************************
;*****************************************


BUTON    
BTFSC PORTA,0    
GOTO DEVAM

DONGU    
BTFSC PORTA,1    
GOTO DONGU    
GOTO DEVAM  
                              
DEVAM   

BTFSS STATUS,C 


GOTO SOL    


GOTO BASLA   


     
GECIKME    
MOVLW B'11111111';0XFF    
MOVWF SAYAC1
GECIKME1    
MOVLW 0XFF    
MOVWF SAYAC2
GECIKME3    
DECFSZ SAYAC2,F    
GOTO GECIKME3    
DECFSZ SAYAC1,F    
GOTO GECIKME1    
RETURN    
END

kudretuzuner

https://www.youtube.com/watch?v=0aHLYYMKZDo
 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'10000000'    
MOVWF PORTB  
  
SAG    
CALL GECIKME    
RRF PORTB,F 

;---------------CLRF PORTB
BCF PORTB,7

BUTON    
BTFSC PORTA,0    
GOTO DEVAM

DONGU    
BTFSC PORTA,1    
GOTO DONGU    
GOTO DEVAM  
                              
DEVAM   

BTFSS STATUS,C 


GOTO SAG    


GOTO BASLA   


     
GECIKME    
MOVLW B'11111111';0XFF    
MOVWF SAYAC1
GECIKME1    
MOVLW 0XFF    
MOVWF SAYAC2
GECIKME3    
DECFSZ SAYAC2,F    
GOTO GECIKME3    
DECFSZ SAYAC1,F    
GOTO GECIKME1    
RETURN    
END


designer.21

elinize sağlık hocam. farkı da görmüş olduk. teşekkür ederiz.

designer.21

#11
herkese merhabalar, eğitimime devam ederken, step motor ile ilgili merakımdan dolayı, iki adet UNIPOLAR (TEK KUTUPLU) step motoru kontrol edebilecek kendimce bir kod yazdım.
her bir step motor için 2 adet buton mevcut. bunlardan bir tanesi saat yönüne dönerken diğeri saat yönünün tersine dönmektedir. buton basılı olduğu sürece komut devam ediyor. buton bırakıldığında komut işlemi tamamlanıyor.

(Not: dediğim gibi assemblyde başlangıç aşamasındayım, mevcut öğrenmiş olduğum komutlar ile kendimce birşeyler karalamaya çalışıyorum. öğrendiklerimi pekiştirip konuya hakim olabilmek ve burada belki başkalarının işine yarar diye umuyorum. burada yaptığım paylaşımlar ise test edip çalıştığını teyit ettiğim programlardır.)


LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT &_BODEN_OFF &_PWRTE_ON &_MCLRE_OFF &_WDT_OFF &_LVP_OFF &_CP_OFF
CBLOCK 0X20
SAYI, SAYI2, SAYI3, SAYI4, TARET_SAYAC_SOL, TARET_SAYAC_SAG, OMUZ_SAYAC_SOL, OMUZ_SAYAC_SAG
SAYAC1, SAYAC2
ENDC
    ORG        0X00
    CLRF    PORTB
    BSF    STATUS,5
    CLRF    TRISB
    MOVLW    0XFF
    MOVWF    TRISA
    BCF        STATUS,5
    MOVLW    0X07
    MOVWF    CMCON
    
TARET_SOLA
    BTFSC      PORTA,0
    GOTO      TARET_SAGA
    GOTO      TARET_BASLA_SOL
TARET_BASLA_SOL
    MOVLW      D'0'
    MOVWF      SAYI
    MOVLW      D'4'
    MOVWF      TARET_SAYAC_SOL
TARET_DONGU
    MOVF      SAYI,W
    CALL      TARET_SOL_SEGMENT
    MOVWF      PORTB
    CALL      GECIKME1
    INCF      SAYI,F
TARET_BUTON_KONTROL_SOL
    BTFSS      PORTA,0
    GOTO      TARET_DEVAM
    CLRF      PORTB
    GOTO      TARET_SOLA
TARET_DEVAM
    DECFSZ    TARET_SAYAC_SOL
    GOTO      TARET_DONGU
    CLRF      PORTB
    GOTO      TARET_BASLA_SOL    
TARET_SOL_SEGMENT
    ADDWF PCL,F
    RETLW B'00001000
    RETLW B'00000100
    RETLW B'00000010
    RETLW B'00000001
    
TARET_SAGA
    BTFSC      PORTA,1
    GOTO      OMUZ_SOLA
    GOTO      TARET_BASLA_SAG
TARET_BASLA_SAG    
    MOVLW      D'0'
    MOVWF      SAYI2
    MOVLW      D'4'
    MOVWF      TARET_SAYAC_SAG
TARET_DONGU2
    MOVF      SAYI2,W
    CALL      TARET_SAG_SEGMENT
    MOVWF      PORTB
    CALL      GECIKME1
    INCF      SAYI2,F
TARET_BUTON_KONTROL_SAG
    BTFSS      PORTA,1
    GOTO      TARET_DEVAM2
    CLRF      PORTB
    GOTO      TARET_SAGA
TARET_DEVAM2        
    DECFSZ    TARET_SAYAC_SAG
    GOTO      TARET_DONGU2
    CLRF      PORTB
    GOTO      TARET_SAGA
TARET_SAG_SEGMENT
    ADDWF PCL,F
    RETLW B'00000001
    RETLW B'00000010
    RETLW B'00000100
    RETLW B'00001000
    
OMUZ_SOLA
    BTFSC      PORTA,2
    GOTO      OMUZ_SAGA
    GOTO      OMUZ_BASLA_SOL
OMUZ_BASLA_SOL
    MOVLW      D'0'
    MOVWF      SAYI3
    MOVLW      D'4'
    MOVWF      OMUZ_SAYAC_SOL
OMUZ_DONGU
    MOVF      SAYI3,W
    CALL      OMUZ_SOL_SEGMENT
    MOVWF      PORTB
    CALL      GECIKME1
    INCF      SAYI3,F
OMUZ_BUTON_KONTROL_SOL
    BTFSS      PORTA,2
    GOTO      OMUZ_DEVAM1
    CLRF      PORTB
    GOTO      OMUZ_SOLA
OMUZ_DEVAM1
    DECFSZ    OMUZ_SAYAC_SOL
    GOTO      OMUZ_DONGU
    CLRF      PORTB
    GOTO      OMUZ_SOLA
OMUZ_SOL_SEGMENT
    ADDWF PCL,F
    RETLW B'10000000'
    RETLW B'01000000'
    RETLW B'00100000'
    RETLW B'00010000'
    
OMUZ_SAGA
    BTFSC      PORTA,3
    GOTO      TARET_SOLA
    GOTO      OMUZ_BASLA_SAG
OMUZ_BASLA_SAG
    MOVLW      D'0'
    MOVWF      SAYI4
    MOVLW      D'4'
    MOVWF      OMUZ_SAYAC_SAG
OMUZ_DONGU1
    MOVF      SAYI4,W
    CALL      OMUZ_SAG_SEGMENT
    MOVWF      PORTB
    CALL      GECIKME1
    INCF      SAYI4,F
OMUZ_BUTON_KONTROL_SAG
    BTFSS      PORTA,3
    GOTO      OMUZ_DEVAM2
    CLRF      PORTB
    GOTO      OMUZ_SAGA
OMUZ_DEVAM2
    DECFSZ    OMUZ_SAYAC_SAG
    GOTO      OMUZ_DONGU1
    CLRF      PORTB
    GOTO      OMUZ_SAGA
OMUZ_SAG_SEGMENT
    ADDWF PCL,F
    RETLW B'00010000'
    RETLW B'00100000'
    RETLW B'01000000'
    RETLW B'10000000'
    
GECIKME1
    MOVLW      0XFF
    MOVWF      SAYAC1
GECIKME2
    MOVLW      0XFF
    MOVWF      SAYAC2
GECIKME3
    DECFSZ    SAYAC2,F
    GOTO      GECIKME3
    DECFSZ    SAYAC1,F
    GOTO      GECIKME2
    RETURN
    END[attach id=7744]STEP_MOTOR.rar[/attach] 

designer.21

şimdi bu step motor çalışma prensibine bakıyorum da tüm örneklerde ortak kutuplara (+) volt veriliyor. ben yukarıda bu ortak kutuplara (-) vererek çok rahat çalıştırabiliyorum. bu ortak kutuplara neden (-) verilerek çalıştırılması gerektiği hakkında bilgisi olan aydınlatırsa çok sevinirim.

Powered by EzPortal