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