MSP430 ASM kodları ve örnek uygulamalar

Başlatan Mujdat117, 06 Ekim 2011, 12:41:08

Mujdat117

Merhaba arkadaşlar
               daha önce mcu-türkiye sayfasında yayınlanan ve asm komutlarını açıklamaları vede yaptığım örnek uygulamaları burdada yaynılamaya karar verdim. Orjinal yazıların linklerinide yazının başına ekliyorum uygulama videolarını izlemeniz açısından göz atmanızı tavsiye ediyorum.

ASM KOMUTLARI VE AÇIKLAMALARI
http://www.mcu-turkey.com/?p=16578

MERHABA ARKADAŞLAR



       bugunkü yazımnda LaunchPad msp430 mcu ları için kullanılan asm kodlarını açıklamaya çalışıcam. sitede C dili ile ilgili güzel örnek kodlar var fakat asm ile ilgili bir kaynak bulmak zor. Kaynak teşkil etmesi açısından kodları açıklamaya çalıştım ilerleyen bölümlerde kısa örnekler ile pekiştirmeye çalışıcam.


Regestiriler Ve Görevleri

SR (Status Regestirisi) : Durum Regestirisi artimatik, mantık ve karşılaştıma oparatörleri bu regestirinin bazı bitlerini etkiler. Bu bitlerin durumu kontrol edilerek programımızın ilgili yerlere dallanmasını sağlayabliriz. Bu regestirilerin nasıl kullanılacağı komutlarla birlikte açıklanacaktır.



SP (Stak Pointır) : 64K stal pointer mevcuttur. Bu regestiri kesme veya Call komutu ile kullanılır. Kesme/call komutu bulunduğu satırın adresini (PC Pogram sayıcıdaki adresi)

Stak pointerin en üst byte ne yerleştirir. Altprogramın işi bitince ret/reti komutlarından biriyle karşılaştığında kesme/call komutunu ilk karşılaşıldığı PC adresinin olduğu yerin bir altından kot çalışmaya devam eder.



Ör :

Satır     komut

15           Mov #ffh;r15

16           Dec   r15

17           Call   alt_program_1;alt programa dallan işin bitice bir alt satırdan devam et

18           mov  r15,&P1OUT

19        .............................

End

45        alt_program_1

46        clr        r15

47        ret

Yukarıdaki koddan da anlaşılacağı gibi program 17 satırda alt_program_1 etiketindeki programı çağırır. Call komutu  alt_program_1 programını çağırdığında satır(PC) daki 17 değerini SP adresinin en üst saklayıcısına kaydeder. Altp program ret komutuyla karşılaştığında SP regestirindeki En üst kaydedicisindeki adresi satır(PC) kaydedicisine bir artırarak geri yükler sonuç olarak ret komutundansonra program 18. satırdan devam eder.

SP regestirisinde adresler enalttan üste doğru sıralanır. Yani ilk gelen adres bilgis en alta enson gelen adres bilgisi en üste doğru sıralanır. Geri dönüşlerde ise bu ilem tersten işlem görmeye başlar yani en üstteki adres verisi PC kaydedicisine ilk olarak gönderilir. SP regestirisine ilk yüklene adres son olarak PC yüklenir.


PC (Program Cointer) : Program çalımaya başladığında 00 adresinden başlar ve her bir komut satır indeksi 1 artırılarak takip edilir PC programın hangi satırda oldğunu kontrol etmeye yarayan regestirisidir. Call komutu once bu regestirinin değerini SP regestirisine yerleştirir ve Ret komutuyla karşılaşıldığında SP regestirisini içeriği PC regestirisine geri yüklenir ve program kaldığı yerden devam etmesi sağlanır. Ayrıca atlam komutları ve interruplarda program adresini bu regestiriye yazarak istenilen satırlara kodların dallanması sağlanır.

************************************************************************

ADD         Ekle Kaynak(Src) ve Hedefi(Dst) Toplar (Worl Ve Pit)

Söz Dizimi  :           ADD{.W or .B} src,dst

Operation  src + dst −> dst

Açıklama  :            Kaynak (src) oparant ile Hedef(Dst) oparanta eklenir ve sonuç hedef oparanta kaydedilir. Kaynak ta herhangibi bir değişiklik olmaz

Status Bits  N: sonuç negative ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: aritmatik veya mantıksal işlemler sonucunda taşma varsa bu bitin değeri 1 olur değilse bitin değeri 0 olur

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     ADD #10,R5

JC TONI ; taşma meydana gelirse TONI etiketine dallanır. Değilse alt satırdan devam eder

************************************************************************

ADDC       Add komutuna benzer. Işleme Caryy Bitinide dikkate alır.

Söz Dizimi  :           ADDC{.W or .B} src,dst

Operation  src + dst + C −> dst

Açıklama  :            Kaynak işlenen ve taşıma bit (C), hedef işlenen eklenir.Kaynak işlenen Etkilenmez. Hedef önceki içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: aritmatik veya mantıksal işlemler sonucunda taşma varsa bu bitin değeri 1 olur değilse bitin değeri 0 olur

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     ADD.W @R13+,10(R13)       ; ADD LSDs

ADDC.W @R13+,10(R13)      ; ADD 2/carry

************************************************************************

AND         Kaynak ve hedefi And İşlemine tabi tutar.

Söz Dizimi  :           AND{.W or .B} src,dst

Operation  src .AND. dst −> dst

Açıklama  :            kaynak ve hedef oparantlarının bitlerini lojik and işlemine tabi tutar. Sonucu hedefe yazdırır.

Status Bits  N:sonuc 1(set) ise MSB bitleri 1 dir, değilse sıfır

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: sıfırdan farkı ise bitindurumu 1(set) dir, değilse sıfırdır.

V: Reset

Örnek  :     MOV #0AA55h,R5    ;

AND R5,TOM              ; r5 ile TOM değişkenini an işlemine tabi tut

JZ TONI                                   ; sonuç sıfırsa TONI etiketine dallan

************************************************************************

BIC           Biti temizle

Söz Dizimi  :           BIC{.W or .B} src,dst

Operation  .NOT.src .AND. dst −> dst

Açıklama  :            Hedef oparantın seçilen biti 0 yapılır.

Status Bits : Etkilenmez.

Örnek  :

BIC.W #0FC00h,LEO  ; (6 Msb Bitleri) yüksek öncelikli 6bit 0 a çekilir Clear)

BIC.B #0F8h,LEO        ; Clear 5 MSBs

************************************************************************

BIS            Hedef oparantın bitleri set (1) yapılır (BIC komutunun tersi)

Söz Dizimi  :           BIS{.W or .B} src,dst

Operation  src .OR. dst −> dst

Açıklama  :            Kaynak ve Hedef mantıksal OR işlemine tabi tutulur sonuç Hedefe Yazdırılır.

Status Bits :            Etkilenmez.

Örnek  :

BIS.W #003Fh,TOM    ; 6 LSB biti set edilir

BIS.B #0E0h,TOM       ; 3 MSB biti set edilir. Sonuç olarak TOM Değişkeninin içeriği #0FFh olur.

************************************************************************

BIT            Bit test eder

Söz Dizimi  :           BIT{.W or .B} src,dst

Operation  src .AND. dst

Açıklama  :            kaynak ve hedef işlenen mantıksal AND işlemine tabi tutulur..Sonuç olarak sadece (Status Regestirisi)durum bitlerini etkiler. Kaynak ve hedef işlenen Etkilenmez..

Status Bits  N:bit in değeri 1(set) ise MSB bitleri 1(set) durumunda demektir. Değilse Msb bitleri herhangibi biri 0 demektir.

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: sıfırdan farkı ise bitindurumu 1(set) dir, değilse sıfırdır.

V: Reset

Örnek  :     BIT #0200h,R8                       ;R8 Regestirisinin 9. biti set(1) mi?

JNZ TOM                     ; evet ise TOM Etiketinedalan

************************************************************************

CALL        Alt Program Çağrısı.

Söz Dizimi  :           CALL dst

Operation    :         dst −> tmp Adres bilgisi saklanır

SP − 2 −> SP

PC −> @SP PC updated to TOS ;PC SP nin en üst bitine yerleştirilir.

tmp −> PC dst saved to PC ;son olrak Saklanan dst değeri PC geri yüklenir.

Açıklama  :            alt prosödür çağırır ve dönüşte call komutunun altındaki satırdan çalışmaya devam eder.

Status Bits  Etkilenmez.

************************************************************************

CMP         Karşılaştırma Komutu

Söz Dizimi  :           CMP{.W or .B} src,dst

Operation  dst + .NOT.src + 1 or (dst − src)

Açıklama  :            kaynak ve hedef regestirlieri çıkarma işlemine tabi tutulur. Kaynak veya Hedef regestiriler etkilenmez. Sadece Status Regestirirni bitleri etkilenir.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: Set if carry from the MSB, else reset

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     CMP R5,R6                ; R5 = R6?

JEQ EQUAL                 ; evet, JUMP

************************************************************************

Jxx Atlama Komutu

Söz Dizimi  :           Jx label

Operation  Eğer Koşul Doğru ise: PC + 2 × offset −> PC

Açıklama  :            Eğer Koşul doğruysa,  LSB 10-bit lik adres verisi (PC) program counter 'e yazılır ve programın burden devam etmesi sağlanır. Koşul yanlışsa bir alttaki satırdan çalışmaya devam eder.

Status Bits  Durum bitleri  Etkilenmez.

Örnek  : JC, JHS               taşma biti set ise etikete dallanır . (C) = 1

JEQ, JZ             sıfır biti set(1) ise etikete dallanır.     (Z) = 1

JGE                               (N .xor. V) = 0  N ve V bitlerini xor işlemine tabi tutar ve sonuc Reset(0) ise etikete dallanır.

JL                                  (N .xor. V) = 0  N ve V bitlerini xor işlemine tabi tutar ve sonuc Set(1) ise etikete dallanır.

JMP                              koşula bağlı kalmaksızın etikete direk dallanır.

JN                                 sonuç negative ise dallanır. (N) = 1

JNC, JLO                      taşma biti Reset (0)  ise etikete dallanır . (C) = 0

JNE, JNZ                      sıfır biti Reset(0) ise etikete dallanır.     (Z) = 0

************************************************************************

MOV        Kaynak Oprarantı Hedef Oparanta Taşır.

Söz Dizimi  :           MOV{.W or .B} src,dst

Operation  src −> dst

Açıklama  :            Kaynak işlenen hedef taşınır.Kaynak işlenen etkilenmez. Hedef önceki içeriği kaybolur.

Status Bits  Status bitleri  Etkilenmez.

Örnek  :     MOV #EDE,R10                    ; EDE içerisindeki sayıyı r10 regestirisine taşır.

MOV #020h,R9                        ;  20h sayısını r9 regestirisine kopyalar.

************************************************************************

PUSH        Kayna oprarantı (SP) stak pointere Gönderir.

Söz Dizimi  :           PUSH{.W or .B} src

Operation  SP − 2 → SP

src → @SP

Açıklama  :            Yığın işaretçisi iki azaltılır,         sonar RAM daki Adres bilgisi  stack pointere taşınır.(TOS)

Status Bits  Status bits are Etkilenmez.

Örnek  :     PUSH R8        ; save R8

Note          Sistem yığın işaretçisini (SP) her zaman iki sayı eksiltir

************************************************************************

RRA          bit leri Sağa Kaydır

Söz Dizimi  :           RRA{.W or .B} dst

Operation  MSB ® MSB, MSB ® MSB−1, ... LSB+1 ®         LSB, LSB ® C

Açıklama  :            Hedef işlenen bir pozisyon sağa kaydırılır.  LSB nin ilk biti(0 biti) nin değeri  stak regestirisinin taşma  (C) bitinde gösterilir.( hedef regestirinin değerini 2 ye bölmekle aynı işlemi yapar)



Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: LSB nin 0 biti nin değeri gösterilir.

V: Reset

Örnek  :     RRA R5                      ; R5/2 −> R5

Mov          #2h,R7 ;r7 regestirisine "00000010"b değeri yüklendi.

Rra            r7         ;r7 yi bir bit sağa kaydır r7="00000001" C=0 Z=0

Rra            r7         ;r7 yi bir bit sağa kaydır r7="00000000" C=1 Z=1

************************************************************************

RRC          bit leri Sağa Kaydır

Söz Dizimi  :           RRC{.W or .B} dst

Operation  C ® MSB ® MSB−1 .... LSB+1 ® LSB ® C

Açıklama  :            Hedef işlenen bir pozisyon sağa kaydırılır.Taşıma bit (C) MSB içine kaydırılır, LSB taşıma bit (C) kaydırıldı. (C bitinin değeri Msb bitinin 15. bitine yerleştirilir. Lsb 0. biti ise C bitine kopyalanır. )


Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: Loaded from the LSB

V: Reset

Örnek  :     SETC              ; MSB bitini hazırla

RRC R5             ; R5/2 + 8000h −> R5

************************************************************************

SUB          hedef opranttan kaynak çıkarır.

Söz Dizimi  :           SUB{.W or .B} src,dst

Operation  dst + .NOT.src + 1 −> dst

Açıklama  :            kaynak oparantın içeriğin 1 artırarak hedeftan çıkarılır sonuç hedefe yazılır.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: aritmatik veya mantıksal işlemler sonucunda taşma varsa bu bitin değeri 1 olur değilse bitin değeri 0 olur

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

************************************************************************

SUBC       hedef oparantan kaynak çıkartılır C cary biti de kaynağa eklenir.

Söz Dizimi  :           SUBC{.W or .B} src,dst

Operation  dst + .NOT.src + C −> dst

Açıklama  :            kaynak oparanta (C Cary ) taşma biti eklenerek hedeften çıkartılır. Sonuç hedef oparanta yazılır. Kaynak etkilenmez.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: aritmatik veya mantıksal işlemler sonucunda taşma varsa bu bitin değeri 1 olur değilse bitin değeri 0 olur

Set to 1 if no borrow, reset if borrow.

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

************************************************************************

SWPB       Msb ve Lsb bitlerini yer değiştirir.

Söz Dizimi  :           SWPB dst

Operation  Bits 15 to 8 <−> bits 7 to 0

Açıklama  :            hedef oparant ın MSB (yüksek bitleri) ve LSB (düşük bitleri) yer değiştirir.

Status        Bits :Status bitleri  Etkilenmez.

Örnek  :     R5 değer 256 ile çarpılır.Sonuç, R5, R4 saklanır.

SWPB R5                     ; swap bytes r5

MOV R5,R4                 ; r4 kaydet

BIC #0FF00h,R5          ;sonuç doğru

BIC #00FFh,R4            ;sonuç doğru

************************************************************************

SXT          Bileri genişlet

Söz Dizimi  :           SXT dst

Operation  Bit 7 −> Bit 8 ......... Bit 15

Açıklama  :            hedefin içeriği 127 den büyük ise MSB bitlerini set(1) eder.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: sonuç sıfırdan farklıysa bitin değeri 1 olur, değilse 0

V: Reset

Örnek  :     MOV.B &P1IN,R7     ; port 1 oku

SXT R7                         ; bitleri genişlet 16


************************************************************************

XOR         kaynak ve hedefi özel OR işlemine tabi tutar.

Söz Dizimi  :           XOR{.W or .B} src,dst

Operation  src .XOR. dst −> dst

Açıklama  :            kaynak ve hedef I özel or (XOR) işlemine tabi tutar. Kaynak etkilenmez sonuç hedefe yarleştirilir.

Status Bits  N: MSB bileri set ise bu bitin değeri 1 dir,değilse 0

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: Bit Set(1) ise sonuç 0 dan farklıdır, Değilse Bit reset(0) dır.

V: her iki oparant da negative ise bitin değeri set(1) olur , değilse 0

Örnek  :     XOR R6,TONI           ; (Toggle)bit terseleme

Xor komutu bitin değerini terslemede(toggle işleminde)kullanılabilir.

Ör : XOR  #1h,&P1OUT ;port1 in 0. bitinin değerin tersler.

************************************************************************



ADC         (carry)taşma bitini hedefe ekler

Söz Dizimi  :           ADC{.W or .B} dst

Operation  dst + C −> dst

Benzer  :  : ADDC{.W or .B} #0,dst

Açıklama  :            Hedef işlenen taşıma bit (C) eklenir. Hedef önceki içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: Set if dst was incremented from 0xFFFF            to 0×0000, else reset

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :

ADD @R13,0(R12)      ;  LSD ye ekler

ADC 2(R12)                 ; carry bitini MSD ekler

************************************************************************

BR Hedefi (PC) program countere taşır.

Söz Dizimi  :           BR dst

Operation  dst −> PC

Benzer  :  : MOV.W dst,PC

Açıklama  :            koşulsuz dallanma sağlar. Etiket veya bir sayıyı program sayıcısına (PC) taşır

Status Bits  Etkilenmez.

BR #EXEC           ; etikete dallanır

; ie. MOV @PC+,PC

BR EXEC  ; EXEC yer alan adresi (PC) taşır

; ie. MOV X(PC),PC

BR &EXEC          ; EXEC bulunan adrese dallanır.

; ie. MOV X(0),PC

BR R5       ; R5 yer alan adres dallanır.

; ie. MOV R5,PC

BR @R5   ; Branch to the address pointed to by R5.

; ie. MOV @R5,PC

BR @R5+ ; R5 adresindeki sayı ile program counteri toplarve bu adresten çalışmaya devam eder.

; ie. MOV @R5+,PC

BR X(R5)  ; Branch to the address M(R5 + X)

; ie. MOV X(R5),PC

************************************************************************

CLR          hedefi temizler(tüm bitleri 0 yapar)

Söz Dizimi  :           CLR{.W or .B} dst

Operation  0 −> dst

Benzer  :  : MOV{.W or .B} #0,dst

Açıklama  :            Hedef içeriğini temizler.

Status Bits   Etkilenmez.

Örnek  :

CLR TONI        ; 0 −> TONI

CLR R5

CLR.B TONI    ; 0 −> TONI

************************************************************************

CLRC                   (C) Carry bitini temizler

Söz Dizimi  :           CLRC

Operation  0 −> C

Benzer  :  : BIC #1,SR

Açıklama  :            taşma bitini temizler.

Status Bits  N: Etkilenmez

Z: Etkilenmez

C: Sıfırlanır

V: Etkilenmez

Örnek  :     CLRC             ; taşma bitini temizle

RLC R5             ; sola kaydır  R5

************************************************************************

CLRN       negative bitini temizler

Söz Dizimi  :           CLRN

Operation  0 → N

Benzer  :  : BIC #4,SR

Açıklama  :            (SR) status regestirisinin Negativ biti Reset(0) lenir.

Status Bits  N: Reset (0)

Z: Etkilenmez

C: Etkilenmez

V: Etkilenmez

************************************************************************

CLRZ        zero bitinin içeriği sıfırlanır

Söz Dizimi  :           CLRZ

Operation  0 → Z

Benzer  :  : BIC #2,SR

Açıklama  :            (SR) status regestirisinin Zero biti Reset(0) lenir.

Status Bits  N: Etkilenmez

Z: Reset ( 0)

C: Etkilenmez

V: Etkilenmez

************************************************************************

DEC          Hedefin içeriini 1 azaltır.

Söz Dizimi  :           DEC{.W or .B} dst

Operation  dst − 1 −> dst

Benzer  :  : SUB{.W or .B} #1,dst

Açıklama  :            Hedef işlenen bir azaltılır.Orijinal içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: dst sıfır ise bitin değeri set(1),değilse bit 0 olur

C: hedef içeriği 0 ise bitin değeride 0 olur, hedef sıfırdan farklı ise bitin değeri 1 olur

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     DEC R10                    ; Decrement R10

************************************************************************

DECD       Hedefin içeriğini Çift eksiltir.

Söz Dizimi  :           DECD{.W or .B} dst

Operation  dst − 2 −> dst

Benzer  :  : SUB{.W or .B} #2,dst

Açıklama  :            Hedef in içeriği iki azaltılır.Orijinal içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: bit 1 ise sonuç sıfırdır,değilse bit 0 dır.

C: sıfırdan farklı ise (taşma varsa ) bitin değeri 1 olur, değilse bit0 dır.

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     DECD R10      ; Decrement R10 by 2

************************************************************************

DINT        tüm interputları(kesmeleri) kapatır

Söz Dizimi  :           DINT

Operation  0 → GIE or (0FFF7h .AND. SR → SR

Benzer  :  : BIC #8,SR

Açıklama  :            Tüm kesmeler devre dışı bırakılır(GIE bayrağını Resetler).  Sabit 08h sayı ile durum kaydedicisi (SR)  ters ve mantıksal AND işlemi uygulanır .Sonuç SR içine yerleştirilir.



Status Bits  Etkilenmez.

Note:         Herhangi bir kod dizisi kesintiye karşı korumalıdır gerekiyorsa, DINT kesintisiz dizisi başlamadan önce en az bir öğretim idam olmalı, ya da NOP komutu tarafından takip edilmelidir

************************************************************************

EINT         interput(kesmeleri) etkinleştirir.

Söz Dizimi  :           EINT

Operation  1 → GIE or (0008h .OR. SR −> SR)

Benzer  :  : BIS #8,SR

Açıklama  :            Tüm kesmeler etkindir(GIE Bayrağı Set 1 Yapılır).# 08h sabit ve durum kayıt SR mantıksal ORed.Sonuç SR içine yerleştirilir.

Status Bits  Status bits are Etkilenmez.

Note:         Kesmeler sağlar bekleyen bir kesme hizmet isteği olsa bile her zaman enable kesme komutu (EINT) şu talimatı yürütülür.

************************************************************************



INC           Hedefin içeriği Bir artırılır.

Söz Dizimi  :           INC dst or INC.W dst

Operation  dst + 1 −> dst

Benzer  :  : ADD #1,dst

Açıklama  :            Hedef işlenen bir artırılır.Orijinal içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: Set if dst contained 0FFFFh, else reset

C: Set if dst contained 0FFFFh, else reset

V: Set if dst contained 07FFFh, else reset

Örnek  :     INC.B STATUS

************************************************************************



INCD        Hedefi Çiftartırır.

Söz Dizimi  :           INCD{.W or .B} dst

Operation  dst + 2 −> dst

Benzer  :  : ADD{.W or .B} #2,dst

Açıklama  :            Hedef işlenen iki artırılır.Orijinal içeriği kaybolur.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: bit set(1) ise sonuç sıfır demektir, değilse bit 0 dır.

C: sonuç 0 dan farklı sie bit değeri set(1) olur.

V: Set if dst contained 07FFEh or 07FFFh,                                else reset

Örnek  :     INCD R5                    ; increment r5 by 2

************************************************************************



INV           Hedfin İçeriği Terslenir.

Söz Dizimi  :           INV{.W or .B} dst

Operation  .NOT.dst −> dst

Benzer  :  : XOR{.W or .B} #0FFFFh,dst

Açıklama  :            Hedef işlenen ters.Orijinal içerik kaybolacaktır.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: Set if dst contained 0FFFFh, else reset

Set if dst contained 0FFh, else reset

C: Bit Set(1) ise sonuç 0 dan farklıdır, Değilse Bit reset(0) dır.

V: Set if overflow, else reset

Örnek  :     INV R5           ; tersle R5, R5 = 0FF51h

************************************************************************



NOP         işlem yapmaz

Söz Dizimi  :           NOP

Operation  None

Benzer  :  : MOV #0, R3

Açıklama  :            denetleyicide herhangibi bir işlem olmaz regestiriler etkilenmez. 1 saykıllık boşta bekler sadece gecikme prosödürlerinde kullanılabilir.

Status Bits  Etkilenmez.

Örnek  :

MOV #0,R3      ; 1 cycle, 1 word

JMP $+2                       ; 2 cycles, 1 word

MOV #100,R3  ; 2 cycles, 2 words

************************************************************************





POP          SP Hedefe taşır.

Söz Dizimi  :           POP{.W or .B} dst

Operation  @SP −> temp

SP + 2 −> SP

temp −> dst

Benzer  :  : MOV{.W or .B} @SP+,dst

Açıklama  :            Yığın regestirisi (SP) (TOS) hedef taşınır. Yığın (SP) regestirisinin içeriği 2 artırılarak taşınır.

Status Bits  Status bits are Etkilenmez.

NoteSistem yığın işaretçisini (SP) her zaman iki bayt soneki bağımsız artırılır.

************************************************************************



RLA          Sola kaydır.

Söz Dizimi  :           RLA{.W or .B} dst

Operation  C ¬ MSB ¬ MSB−1 .... LSB+1 ¬ LSB ¬ 0

Benzer  :  : ADD{.W or .B} dst,dst

Açıklama  :            Hedef işlenen bir pozisyon sola kaydırılır.MSB taşıma bit (C) kaydırıldı ve LSB 0 ile doldurulur.


Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C:  MSB nin 15. biti bu regestiriye taşınır.

V: taşma olursa bitin değeri set(1) olur,değilse 0

Örnek:                   mov.w             #1000000000000010b,R15

Rla                        R15     ;R15 in içeriği sola kaydırılır. R15=#0000000000000100b olur. (C) Carry biti C=1 olur.

************************************************************************



RLC          Sola Kaydırır ve C biti LSB nin sonuna eklenir

Söz Dizimi  :           RLC{.W or .B} dst

Operation  C ¬ MSB ¬ MSB−1 .... LSB+1 ¬ LSB ¬ C

Benzer  :  : ADDC{.W or .B} dst,dst

Açıklama  :            Hedef işlenen bir pozisyon sola kaydırılır.Taşıma bit (C), LSB kaydırıldı ve MSB taşıma bit (C) kaydırıldı.

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: MSB nin 15. biti  C bitine taşınır.

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

************************************************************************



SBC          Hedef dan ödünç çıkarma (¬ taşıma)

Söz Dizimi  :           SBC{.W or .B} dst

Operation  dst + 0FFFFh + C −> dst

Benzer  :  : SUBC{.W or .B} #0,dst

Açıklama  :            carry biti (C) Hedefe Eklenir ve hedefin içeriği bir eksiltirli. Hedef önceki içeriği kaybolur .

Status Bits  N: sonuç negativ ise bitin değeri 1(set) olur, Değilse bir 0 olur

Z: sonuç sıfırsa bit 1(set) olur, değilse bit 0 değeri alır

C: aritmatik veya mantıksal işlemler sonucunda taşma varsa bu bitin değeri 1 olur değilse bitin değeri 0 olur

Set to 1 if no borrow, reset if borrow.

V: aritmatik işlemler sonucunda taşma olduğunda bu bitin değeri 1 olur. Değilse bitin değeri 0 dır.

Örnek  :     SUB @R13,0(R12)     ; LSD bitinden çıkar.

SBC 2(R12)                  ;  MSD den C Cerry bitini çıkar.

************************************************************************



SETC        carry bitini set(1) eder

Söz Dizimi  :           SETC

Operation  1 −> C

Benzer  :  : BIS #1,SR

Açıklama  :            SR Regestirisinin C Cerry bitini set (1) eder.

Status Bits  N: Etkilenmez

Z: Etkilenmez

C: Set

V: Etkilenmez

Örnek  :     SETC              ; set carry = 1

************************************************************************



SETN        negative biti set olur.

Söz Dizimi  :           SETN

Operation  1 −> N

Benzer  :  : BIS #4,SR

Açıklama  :            SR Regestirisinin N Negativ bitini set (1) eder.

Status Bits  N: Set

Z: Etkilenmez

C: Etkilenmez

V: Etkilenmez

Örnek  :     SETN

************************************************************************



SETZ         Status Regestirisinin Z(zero) bitini set (1) eder.

Söz Dizimi  :           SETZ

Operation  1 −> Z

Benzer  :  : BIS #2,SR

Açıklama  :            Status Regestirisinin Z(zero) bitini set (1) eder.

Status Bits  N: Etkilenmez

Z: Set edilir (1 yapılır)

C: Etkilenmez

V: Etkilenmez

Örnek  :     SETZ

************************************************************************



TST           Hedefi Test eder (Word veya Bit)

Söz Dizimi  :           TST{.W or .B} dst

Operation  dst + 0FFFFh + 1

Benzer  :  : CMP{.W or .B} #0,dst

Açıklama  :            Hedef operand sıfır ile karşılaştırılır.Durum bitleri sonuca göre ayarlanır.Hedef etkilemez.

Status Bits  N: biti 1(set) ise sayı negative, değil ise bit 0 olur

Z: biti 1(set) ise sayı 0 a eşit, bit 0ise eşit değil

C: Set

V: Reset

Örnek  :     TST R7                       ; Test R7









************************************************************************



RETI         Kesmeden(interrupt) geri döner.

Syntax       RETI

Operation  TOS → SR; SP + 2 → SP

TOS → PC; SP + 2 → SP

Açıklama :Kesme oluştuğunda Pc program sayıcısındaki değer SP stak pointerın sıradaki adresine yerleşir.  Kesme prosödürü bittiğinde (Reti komutu) SP stak pointer adresinin en üst adresindeki bilgi PC geri yüklenir. Reti komutundan sonar kesmenin oluştuğu andaki adres bilgisinin bir altındaki adresten komutlar işlemeye devam eder.


Status Bits  N, Z, C, V: restored from system stack

Mode Bits  OSCOFF, CPUOFF, and GIE are restored from        system stack.







RET           alt yordamdan geri döner.

Söz Dizimi  :           RET

Operation  @SP→ PC

SP + 2 → SP

Benzer  :  : MOV @SP+,PC

Açıklama  :            bu komut call komutundan sonar kullanılır. Call komutu bir alt programığı çağırır ve programcık işin bitirdiğinde (ret komutuyla karşılaştığında)  call komutunun bulunduğu satırın bir altındaki satırdan çalışmaya devam eder.

Status Bits  Etkilenmez.

*************************************************************************



ÖRNEK UGULAMA 1
http://www.mcu-turkey.com/?p=16362
MSP430′u ASM ile Programlama Uyg.1(Buton ile led kontrolü)
MERHABA ARKADAŞLAR
Bu gün sizlerle asm kodlarıyla MSP430 LaunhPad nasıl programlanıcağından bahsedicem. İlk uygulamamız p1 portunun 3. pinine bağlı buton yardımıyla LaunhPad üzernideki kırmızı ve yeşil ledleri sırayla yakıp söndüren(flip-flop) örnek asm uygulaması yapacağız.


Kodları açıklamaya başlamadan önce yeni proje dosyası nasıl oluşturulucağına dair kısa bilgi verim.



IAR Yeni Proje Oluşturmak
http://www.dailymotion.com/video/xkjzn7_yeni-proje-oluyturmak_tech?start=6#from=embed

#include "msp430g2231.h" ; #kullanıcamız entegreyi tanımlıyoruz
 
NAME Mainloop ; module name
 
PUBLIC Mainloop ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
 
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
 
init: MOV #SFE(CSTACK), SP ; set up stack
 
mov.w #WDTPW+WDTHOLD,&WDTCTL ; watchdog timer iptal
mov.b #01000001b,P1DIR ; P1 portunun 0 ve 6 bitleri çıkış gerisi giriş olarak ayarlandı
mov.b #00000001b,P1OUT ;P1.0 bitini set et
 
Mainloop bit.b #00001000b,&P1IN ; P1.3 P1 portunun 3. bitini değerini kontrol eder
jc Mainloop ;status reg. C biti değeri 1 ise etikete dallanırburda bu biti pinin surumunu kontrol etmek için kullanılmıştır.
;***************Bit terseleme prosödürü*************************
;P1 portuna bağlı ledleri her butona bastığınızda sırayla yakıp söndüren kod
bit_tersle bit.b #00001000b,&P1IN ; P1.3 pinin değerini kontrol eder
jnc bit_tersle ; jc komutuna benzer ama C biti 0 ise etikete dallanır (buton ark'ını önlemek için oluşturuldu)
mov.w #01000001b,r15 ; sabit değeri R15 regestirisine yükler
xor.b R15,&P1OUT ; R15 regestiriisinin içeriğini xor işlemine tabi tutAR ve P1 portuna yazdırır(P1 için değerlerini tersler)
jmp Mainloop
END

Kodun Yüklenmesi
http://www.dailymotion.com/video/xkjzo7_projenin-yuklenmesi_tech?start=0#from=embed
Kodun Denenmesi
http://www.dailymotion.com/video/xkjzkk_projenin-yuklenmesi-ve-deneme-new_tech#from=embed
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Mujdat117

#1
ÖRNEK UGULAMA 2
MSP430′u ASM ile Programlama Uyg.2(WDT Kesmesi)
http://www.mcu-turkey.com/?p=16674
MERHABA ARKADAŞLAR

bugunkü uygulamamız WDT kesmesini kullanarak msp430 p1.0 vep1.6 pinlerine bağlı bulunan kırmızı ve yeşil ledlerin 1000 ms aralıklarla yakıp söndürme uygulaması. Amacımız WDT kesmesi oluşturabilmek için gerekli regestirilerin kurulması ve kontrolünün asm komutlarıyla nasıl yapıldığını öğrenmek.

http://www.dailymotion.com/video/xkpxc3_25082011013_tech#from=embed
#include "msp430g2231.h"                     ; #kulanılan mcu yu tanımlıyoruz
 
        NAME    Mainloop                   ; module name
 
        PUBLIC  Mainloop                    ; ana program tanımlaması
        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; 'CODE' segment başlangıcı
 
init:   MOV    #SFE(CSTACK), SP        ; set up stack
;            MOV.W   #5A00H+0011000B,&WDTCTL  ; watchdog timer 1000ms ayarla
             MOV.W    #WDT_ADLY_1000,&WDTCTL;WDT Yİ KULLANARAK
;            1000MS GECİKME YARATIR
            BIS.B    #10001B,IE1           ;IE1 REGESTİRİSİ GENEL KESME
            ; KAYNAKLARINI KONTROL EDN REGESTİRİ
;            BURDAN NMIIE VE WDTIE BAYRAKLARINI KURUYORUZ WDT KESMESİ
; OLUŞMASI İÇİN
            mov.b   #01000001b,P1DIR        ; P1 portunun 0 ve 6 bitleri
            ;çıkış gerisi giriş olarak ayarlandı
            mov.b   #00000001b,P1OUT         ;P1.0 bitini set et
            EINT
 
Mainloop
        jmp      Mainloop                ;
WDT_KES     mov.w    #01000001b,r15     ; sabit değeri R15 regestirisine yükler
            xor.b     R15,&P1OUT        ; R15 regestiriisinin içeriğini xor
    ;işlemine tabi tutAR ve P1 portuna yazdırır(P1 için değerlerini tersler)
            BIC.B     #1H,IFG1         ;IFG1 REGESTİRİSİ OLUŞAN KESMENİNİ
            ;KAYNAĞINI GÖSTEREN EGESTİRİDİR.
;WDTIFG (0 BİTİ) WDT KESME KAYNAĞINI GÖSTERİR. KESME OLUŞTUĞUNDA BU BAYRAK 1
;OLUR YENİDEN WDT KURMAK İÇİN BU BAYRAĞIN SIFIRLANMASI GERKLİDİR.
            EINT              ; (GIE) GENEL KESME BAYRAĞINI AKTİFLEŞTİRİR
            RETI
 
            COMMON  INTVEC
            DINT              ;GIE KESME BAYRAĞINI TEMİZLE (0 YAPAR)
            ORG     WDT_VECTOR;0FFFEh WDT KESME VEKTÖRÜ
            DW      WDT_KES   ; KESME OLUŞUNCA BU ETİKETE DALLAN
            ORG     RESET_VECTOR;0FFFEh; İLK ENERCİ GELDİĞİNDE VEYA
            ;RESET EDİLDİĞİNDE BU ETİKETE DALLAN
            DC16    init
END

http://www.dailymotion.com/video/xkl82n_17082011009_tech#from=embed
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Mujdat117

ÖRNEK UYGULAMA 3
MSP430′u ASM ile Programlama Uyg.3(Buton ile Kesme oluşturma)
http://www.mcu-turkey.com/?p=16861

merhaba arkadaşlar

asm ile kod yazmaya devam ediyoruz. bu sefer buton ile kesme oluşturmaktan bahsedicem bu işlemi yapabilmek için bazı regestirilerin kurulması gerekli bunların nasıl yapılacağını anlatmaya çalışıcam.





           öncelikle bazı regestiriler ve ne işe yaradıklarını anlamaya çalışalım. ilgili regestirilerin önlerinde bulunan "x" işareti port numarası gelmelir. burda x port numarasını temsil eder örneğin mcu nun 1. portuna veri göndermek için P1OUT şeklinde yazılması gerekli.

PxDIR  :  port yönlendirme regestirisi. Bu regestirir sayesinde mcu nun istenen pinleri giriş veya çıkış olarak ayarlanır.  Hangi Pinin ne iş yapacağu bu regestiriden ayarlanır.  Bir pini giriş yamak için o pine karşılık gelen bitin değerini "0″ olarak ayarlamak gerekir Çıkış olarak ayarlamak istenitse ilgili bitin değeri "1″ olarak ayarlanmalıdır.

örneğin p1 portunun 0. ve 6. pinleri çıkı diğerleri giriş olarak ayarlamak için P1DIR  regestirisine #01000001b değerini atamak yeterlidir.

PxREN   :  Giriş olarak ayarlanan pinlerin bull-up dirençlerini devreye sokmaya yarar.
PxIFG     :Kesmenin hangi butondan kaynaklandığı bu regestiriden okunur. buton basıldığında bilgili pinin olduğu bit değeri set(1) olur. Kesmenin Hangi Butondan kaynaklandığı bu regestirinin bileri kontrol edilerek bulunabilir.
PxIE     : Kesmenin hangi pin/pinlerden oluşabileceği bu regestiri sayesinde ayarlanır Pic lerdeki GIO regestirisine benzer. Hangi butona basıldığında Kesme oluşşun isteniyorsa ilgili pinin bulunduğu bit 1Set olarak ayarlanmalıdır. 0 olarak ayarlanan pinlerde kesme oluşmaz.
PxIES         : Kesme nin düşenkenarmı yoksa yükselen kenar la tetikleneceğini belirler.
http://www.mcu-turkey.com/wp-content/uploads/2011/08/P1IES.png
P1SEL : P1 Portunun herhangi bir pinini birkaç amaç için kullanabileceğininden başta bahsetmiştik. P1SEL saklayıcısı seçtiğimiz pinin hangi amaç için kullanılacağını seçmemizi sağlar.
http://www.fatihinanc.com/wp-content/uploads/2010/09/P1SEL.png
Herhangi bir pine ait fonksiyonları belirlemek için P1SEL saklayıcısına yazılması gereken değerler

Burada PxSEL2 saklayıcısı şimdilik bizim işimize yaramayacak çünkü kullanacak çok fazla modül yok. Şimdilik g/ç veya diğer modüllere ait pinleri seçmek için P1SEL ve P1DIR saklayıcılarını yeterli.
#include "msp430g2231.h"                     ; #define controlled include file
 
        NAME    Mainloop                   ; module name
 
        PUBLIC  Mainloop                    ; make the main label vissible
        ORG     RESET_VECTOR;0FFFEh;
        DC16    init
        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; mcu kod segmentinden çalışmaya
        ;başlıyacağı bildirilir.
 
init:   MOV    #SFE(CSTACK), SP        ;stak regestirisinin adresini belirler.
            MOV.W    #WDTPW + WDTHOLD,&WDTCTL;WDT kesmesi oluşmasını engelle
 
            mov.b   #01000001b,P1DIR        ; P1 portunun 0 ve 6 bitleri
            ;çıkış gerisi giriş olarak ayarlandı
            mov.b   #00001000b,P1REN         ; PUL UP AKTİF
            mov.b   #00001000b,P1IFG       ;KESMENİN HANGİ BİTTE
            ;OLDUGU BU REGESTİRİDEN OKUNUR
            mov.b   #00001000b,P1IE         ;P1 PORTUNUN HANGİ PİNİNDEN KESME
            ;OLUŞACAĞINI BLİERLER
            mov.b   #00001000b,P1IES         ; KESMENİN DÜŞEN KENARMI YOKSA
            ;YÜKSELEN KENARMI OLDUGUNU BELİRLER.
            mov.b   #00000001b,P1OUT         ;P1.0 bitini set et
            EINT
 
Mainloop
        jmp      Mainloop                ;kesme oluşanakadar kısır döngüde kalır.
 
BTN_KESME   mov.w    #01000001b,r15         ; sabit(ledlerin adresleri)
;değeri R15 regestirisine yükler
            xor.b     R15,&P1OUT            ; R15 regestiriisinin içeriğini
 ;xor işlemine tabi tutAR ve P1 portuna yazdırır(P1 için değerlerini tersler)
            BIC.B      #00001000b,P1IFG
            EINT  ;GIE genel interput bitini etkinleştirir.
            RETI  ;kesmeden dönme komutu.
            ;program kesme olmadan önceki adresinden çalışmaya devam eder.
;***********************kesme vektörü tanımlama bölümü************************
            COMMON  INTVEC;herhangibi bir kesme olştuğunda program buraya dallanır.
 ; oluşan kesmenin bulunduğu vektörden kodları çalıştırırhttp://www.mcu-turkey.com/wp-admin/index.php.
            DINT  ;GIE genel kesme bayrağını pasif yapar.
 ;(aynı anda başka bir kesme olmasını engeller)
            ORG     PORT1_VECTOR;0xFFE4;buton kesmesinin bulunduğu vektör.
            ;buton kesmesi oluştuğunda mcu bu adrese dallanır.
            DW      BTN_KESME;
 
            END

http://www.dailymotion.com/video/xkpwg7_15082011005_tech#from=embed
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Mujdat117

#3
ÖRNEK UYGULAMA 4
MSP430′u ASM ile Programlama Uyg.4(Buton ve WDT Kesmeleri)
http://www.mcu-turkey.com/?p=16894
merhaba arkadaşlar

bu yazımda daha önce yaptığımız uygulamları birleştirerek aynı anda hem WDT kesmesi Hemde Buton kesmesini kullanarak LoanchPed üzerinde ledleri belirli sürelerle ve buton tetiklemesiyle sıryala yakıp söndürme konusunda örenekler yapıcaz.
#include "msp430g2231.h"                     ; #kulanılan mcu yu tanımlıyoruz
        NAME    Mainloop                   ; module name
        PUBLIC  Mainloop                    ; make the main label vissible
        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; place program in 'CODE' segment
 
init:   MOV    #SFE(CSTACK), SP        ; set up stack
;            MOV.W   #5A00H+0011000B,&WDTCTL  ; watchdog timer 1000ms ayarla
 
            MOV.W    #WDT_ADLY_1000,&WDTCTL;WDT Yİ KULLANARAK 1000MS GECİKME YARATIR
            BIS.B    #10001B,IE1           ;IE1 REGESTİRİSİ GENEL KESME KAYNAKLARINI KONTROL EDN REGESTİRİ
;            BURDAN NMIIE VE WDTIE BAYRAKLARINI KURUYORUZ WDT KESMESİ OLUŞMASI İÇİN
            mov.b   #01000001b,P1DIR        ; P1 portunun 0 ve 6 bitleri çıkış gerisi giriş olarak ayarlandı
            mov.b   #00001000b,P1IE         ;P1 PORTUNUN HANGİ PİNİNDEN KESME OLUŞACAĞINI BLİERLER
            mov.b   #00001000b,P1IES         ; KESMENİN DÜŞEN KENARMI YOKSA YÜKSELEN KENARMI OLDUGUNU BELİRLER.
            mov.b   #00000001b,P1OUT
            mov.b   #01000001b,P1DIR        ; P1 portunun 0 ve 6 bitleri çıkış gerisi giriş olarak ayarlandı
            mov.b   #00000000b,P1OUT         ;P1.0 bitini set et
            EINT
 
Mainloop
        jmp      Mainloop                ;
BTN_KESME   mov.b    #01000000b,r15         ; sabit değeri R15 regestirisine yükler
            xor.b     R15,&P1OUT            ; R15 regestiriisinin içeriğini xor işlemine tabi tutAR ve P1 portuna yazdırır(P1 için değerlerini tersler)
            BIC.B      #00001000b,P1IFG
            EINT
            RETI
WDT_KES     mov.b    #00000001b,r15         ; sabit değeri R15 regestirisine yükler
            xor.b     R15,&P1OUT            ; R15 regestiriisinin içeriğini xor işlemine tabi tutAR ve P1 portuna yazdırır(P1 için değerlerini tersler)
            BIC.B     #1H,IFG1              ;IFG1 REGESTİRİSİ OLUŞAN KESMENİNİ KAYNAĞINI GÖSTEREN EGESTİRİDİR.
;WDTIFG (0 BİTİ) WDT KESME KAYNAĞINI GÖSTERİR. KESME OLUŞTUĞUNDA BU BAYRAK 1 OLUR YENİDEN WDT KURMAK İÇİN BU BAYRAĞIN SIFIRLANMASI GERKLİDİR.
            EINT                            ; (GIE) GENEL KESME BAYRAĞINI AKTİFLEŞTİRİR
            RETI
 
            COMMON  INTVEC
            DINT              ;GIE KESME BAYRAĞINI TEMİZLE (0 YAPAR)
            ORG     WDT_VECTOR;0FFFEh WDT KESME VEKTÖRÜ
            DW      WDT_KES   ; KESME OLUŞUNCA BU ETİKETE DALLAN
            ORG     RESET_VECTOR;0FFFEh; İLK ENERCİ GELDİĞİNDE VEYA RESET EDİLDİĞİNDE BU ETİKETE DALLAN
            DC16    init
            ORG     PORT1_VECTOR;0xFFE4;buton kesme vektörü
            DW      BTN_KESME;kesme butondan oluştuğunda gidilecek kesme etiketi
 
            END
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Mujdat117

#4
ÖRNEK UYGULAMA 5
MSP430′u ASM ile Programlama Uyg.5(74hc595 kullanımı)
http://www.mcu-turkey.com/?p=16936

merhaba arkadaşlar

bu yazımda asm kodlarıyla şift regestiri entegresi olan 74hc595 i nasıl sürebileceğimizi anlatıcam. Yapacağımız uygulama kısaca 8 adet ledin tek tek soladoğru kayarak sıryala yanması.(istenirse 2 adet şift regestris kullanılarak 16 adet ledde sürülebilir)bu işlemi 5ms aralıklarla WDT kesmesini kullanarak yaptım Buton yardımıylada Paus/Play fonksiyonlarını kontrol edicez yani led leri durdurup kaldığı yerden başlatıcaz.
http://www.dailymotion.com/video/xkpwkm_22082011010_tech#from=embed
74hc595 Entegresi

           74hc595 ve 74ls164 entegreleri shift regestirir olarak adlandırılırlar ve de port çoklamak amacıyla kullanılırlar minimum 2 maksimum 5 pini kullanılarak 8 bitlik veri çıktısı elde etmeye  yarar. Pin sayısının yeterli olmadığı durumlarda kullanılırlar.
http://www.mcu-turkey.com/wp-content/uploads/2011/08/74hc595pinouts1.jpg
Q1-Q7 numaralı pinleri çıkış pinleridir entegreye göndrilen veri bu pinlerden gözlenir:

MR pini entegreninin restlenmesine yarayan pindir.

DS  pini entegreye göndrilen verinin Rest(0) mi set(1) mi olduğunu ayarlayan pindir.

STCP pini gönderilen verilerin portlara yazdırılmasını sağlar.

SHCP pini DS pinindeki biti entegreye yazdırmaya yarar. her clock palsınde porttaki veriyi sola kaydırarak data pinnideki veriyi entegrenin 0. bitine yerleştirir.

OE çıkış portlarını(q0-q7 pinleri) aktif veya pasf yapmaya yarar.



74hc595 yerine 74164 entegreside kullanılablir aralarındaki tek fark ST_CP(Enablet) pinidir 74164 entegresinde bu pin yoktur.  Kaydırma işlemi her Clock sinyalinde portlardan direk gözlenir.74hc595 entegresinde ise kaydırma işlemin 8 bitlik veri gönderildikten sonra (enable)ST_CP pinine pals sinyali gönderildikten sonra portlardan gözlenir.

Kodun Çalışması

              Kullandığımız Shift Regestiriy 74hc595 entegresi 4 pin olarak sürüyoruz bu pinler data(14pin), clock(11pin), enablet(12pin) ve reset(10pin) pinleri. Mcu ve 74hc595 entegresini bağlantıları aşağıdaki tablodan göreblirsiniz.
Shift regestiriye veri gönderen kodumuz  "SHIFTREG" bu kod adım adım açıklayalım ve 74hc595 entegresine  nasıl veri gönderiliceğini kavrayalım.

SHIFTREG                  ;74595 entegreye veri göndermek için kullanılan kodların bulunduğu adresi belileyen etiket.
      CALL #SRESET       ;entegreyi resetle.tüm çıkışlarını sıfırla. Bu işlem için SRESET etiketine dallanır ve işi bitince
bir alt satırdan çalışmaya devam eder.
mov.w     #10h,CNT1 ;Sayac regestirisin 16 sayısını yükle. Msp430 16 bitlik mcu dur gönderilcek verinin tamamını göndermek için sayıcı
değişkenine 16 sayısı yüklenmeli eğer 8 değeri yüklenirse şift regestiriye gönde4rmek istediğimiz verinin yarısını
göndermiş oluruz. buda istedimiz sonucu alamıcamız anlamına gelir.

SRG RLA DATA1       ;DATA1 deişkeninideki değeri bir sola kaydır.kaydırma işleminde Değişkenini 16. biti herzaman Status (SR)regestirisi'nin
C (Caeryy)bitinde gösterilir.
bizde bu özelliği kullanrak C bitindeki değere göre 74hc595 entegresindeki Data pininin değerini ayarlamak suretiyle bitlerin yazdırılmasını sağlıyacağız.
Bu işlemi C bitinide ğerine göre kodu gerekli etiketlere dallandırılması suretiyel data pinin C bitine göre değer almasını sağlayarak yapıcaz.
      jc SETPIN      ;SR nin C bitinin değeri Set(1) ise SETPIN etiketine git.
      jnc CLRPIN      ;SR nin C bitinin değeri reset(0) ise CLRPIN etiketine git
SETPIN                    ;74595 entegresinin data(DS 14 nolu pini) değerini set(1) yap.
      BIS.B #40h,&P1OUT 74hc595 entegresisni data(14.pin)pinine bağlı pinin değerini 1Set etder. jmp CLOCK gönderilecek veriyi belirledikten sonra SH_CP(11.pin) pinine bir clock palsi gönderilir ve data pinnideki değer bir sola kaydırılır.
CLRPIN BIC.B #40h,&P1OUT ;74595 entegresinin data(DS 14 nolu pini) değerini reset(0) yap.
CLOCK                     ; Data Bacağındaki değeri 0/1 74595 yazdırmak için portlardki değeri bir sola kaydırarak data pinin
değerini en sağa yazdırmaya yar.
    BIC.B #80h,&P1OUT   ;Clock (11)pinini 0 yap
      NOP  ;bir saykıl bekle
      BIS.B #80h,&P1OUT   ;clock pinini Set 1 yap.
      dec CNT1          ;DCNT1 bir azalt. 0 değilse sıradaki biti göndermek için SRG etiketine dallan.
      jnz SRG           ;sayma işlemi 0 ise başa dön.
E_                        ;veri gönderme işlemi bitti ise gönderilen verileri 74595 entegresine yazdır.
gönderilen verinin Shift regestiride görülebilmesi için Enable pinine bir pals gönder.
      BIC.B #20h,&P1OUT    enable pinini 0 yap
      NOP bir saykıl bekle
      BIS.B #20h,&P1OUT Enable pinini 1 yap
      ret                  Shift regestirye yazdırma işlemi sona erdi. Geri dön ve programa kaldığın yerden devam et.

istağe bağlı olarak 2 adet Shift regestiri kullanılarak 16 adet led çalıştırılabilir onun için gerekli bağlantı şeması aşağıdaki resimde gösterilmiştir.

#include "msp430g2231.h"                     ; #kulanılan mcu yu tanımlıyoruz
                  ; place program in 'CODE' segment
#define    E_PIN BIT5;20h;00100000b;
#define    C_PIN 80h;10000000b;BIT7
#define    D_PIN 40h;01000000b;BIT6
#define    R_PIN 10h; BIT4
 ;2231 entegresisin 128bitlik ram hafızası vardır bizde bu hafızadan
 ;3 bitlik yer ayırıyoruz bunları shift regestirisine veri göndermek için kullanıcaz.
DATA1 EQU 0x0200;R5 ;shift regestiriye gönderilen veri bu değişkende
 ;tutulur ve bu değişkenini içindeki veri rla komutuyla sola
; kaydırılmak suretiyle fişft regestiriye yazdırılır.
VERI  EQU 0x0210;#define   VERI  0x0210;R9 ;veri değişkeni ise şift regestiriye gönderilmek
; istenen bilgiyi temsil eder.
CNT1  EQU 0x0202; #define    CNT1 0x0202;şift regestiriye gönderilen veri 16 bit
 ;genişliğindedi bu değikene 16 sayısı yüklenerek DATA1 içerisindeki bilginin
 ;16 defa sola kaydırılarak tüm bitlerin yazdırılmasdını sağlayan değişkendir.
; EXTERN   DATA1
; EXTERN   CNT1
;DATA1  DS 1
;CNT1   DS 2
 
        NAME    Mainloop                   ; module name
        PUBLIC  Mainloop                    ; make the main label vissible
        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE
init:   MOV    #SFE(CSTACK), SP        ; set up stack
;            MOV.W   #5A00H+0011000B,&WDTCTL  ; watchdog timer 1000ms ayarla
 
            MOV.W    #WDT_ADLY_250,&WDTCTL;WDT_ADLY_1000 WDT Yİ KULLANARAK 1000MS GECİKME YARATIR
            BIS.B    #10001B,IE1           ;IE1 REGESTİRİSİ GENEL KESME KAYNAKLARINI KONTROL EDN REGESTİRİ
;            BURDAN NMIIE VE WDTIE BAYRAKLARINI KURUYORUZ WDT KESMESİ OLUŞMASI İÇİN
            mov.b   #11110111b,P1DIR        ; P1 portunun 0 ve 6 bitleri çıkış gerisi giriş olarak ayarlandı
            mov.b   #00001000b,P1IE         ;P1 PORTUNUN HANGİ PİNİNDEN KESME OLUŞACAĞINI BLİERLER
            mov.b   #00001000b,P1IES         ; KESMENİN DÜŞEN KENARMI YOKSA YÜKSELEN KENARMI OLDUGUNU BELİRLER.
            mov.b   #11100001b,P1OUT
            mov.b   #00000001b,VERI         ;Veri RAM Alanına 1 değerini yükle bu alan Şift Regestirriye gönderilecek olan veriyi tutar.
            mov.b   #00000001b,DATA1        ;Data1 Ram alanında tanımlanmış olan 2 değişkenimizx bu alan ise şift regestiriye yazdırılacak olan verinin sırayla kaydırılmasında kullanılır.
            EINT                            ;Genel interput kaynaklarını etkinleşirir.
            call  #SHIFTREG                 ;şift regestiriye ilk veriyi gönderrir bu DATA1 Değişkenindeki 1 değeridir.
            ;ve program ilk çalıştığında şift regestirinin 0. bitine bağlı led yanmaya başlar.
Mainloop    ;Ana program bloğu
        jmp      Mainloop  ;herhangibi bir kesme oluşana kadar sonsuz döngüye girer.
SHIFTREG                  ;74595 regestiri bitleri yazdıracak gönderecek program
      CALL  #SRESET       ;Regestiriyi resetle( tüm bitleri sıfırla)
      mov.w     #10h,CNT1 ;Sayac regestirisin 16 sayısını yükle
SRG   RLA     DATA1       ;DATA1 deişkeninideki değeri bir sola kaydır.kaydırma işleminde Değişkenini 16. biti herzaman Status regestirisinin C (Caeryy)bitinde gösterilir.
; bizde bu özelliği kullanrak C floğındaki değere göre 74hc595 entegresindeki Data pininin değerini ayarlamak suretiyle bitlerin yazdırılmasıın sağlıyacağız.
      jc      SETPIN      ;SR nin C bitinin değeri Set(1) ise SETPIN etiketine git
      jnc     CLRPIN      ;SR nin C bitinin değeri reset(0) ise CLRPIN etiketine git
SETPIN                    ;74595 entegresinin data(DS 14 nolu pini) değerini set(1) yap.
      BIS.B #40h,&P1OUT
      jmp   CLOCK
CLRPIN  BIC.B #40h,&P1OUT ;74595 entegresinin data(DS 14 nolu pini) değerini reset(0) yap.
CLOCK                     ; clock palsi göndererek data pinindeki değeri şift regestiriye yazdırır.
; clock işlemi portlardaki bitleri bir sola kaydırarak data(ds 14.)pinindeki değeri 0. bite yazdırarak 8bitlik veriyi portlara gönderir.
      BIC.B #80h,&P1OUT   ;clock pinini resetle
      NOP                 ;bir saykıl bekle
      BIS.B #80h,&P1OUT   ;clock pinini Set et.
      dec   CNT1          ;göndrilen veriyi say 16 ya ulaştığında işlemi bitir.
      jnz   SRG           ;sayma işlemi 16 dan küçükse başa dön.
E_                        ;veri gönderme işlemi bitti ise gönderilen verileri 74595 entegresine yazdır ve işlem portlardan görünsün
      BIC.B #20h,&P1OUT
      NOP
      BIS.B #20h,&P1OUT
      ret                  ;veri gönderme prosödürü bitti. kaldığın yerden çalışmak için geri dön.
SIFIRLA                    ; Veri Değişkeni 16 bit ama 74595 entegresi 8 bit 8 bitlik veriyi aştı ise başa dön.
          mov   #81h,R8    ;r8 değişkenine 129 değerini yükle
          sub.w  VERI,R8   ;VERİ değişkeniniden 129 değerini çıkar.
          jn    S1         ;VERI<129 işlem yapma
          RET
S1        mov   #1h,VERI   ;VERI>129 ise VERI değişkenine 1 değerini yükle
          ret
SRESET                     ;74595 entegresinini reset pinine bir pals göndrir ve entegrenin resetlenerek portların değerini sıfırlar.
      BIC.B #10h,&P1OUT
      NOP
      BIS.B #10h,&P1OUT
      ret
 
BTN_KESME               ;buton kesmesi oluştuğunda WDT kesmesinin oluşması için gerekli(IE1 Reg. 0. biti) bitin değerini tersleyerek WDT kesmesinin durumunu değiştiri (AÇ/KaPA)
            xor.b      #1h,IE1  ;Genel kesme ayarları için gerekli Regestirinin WDT kesmesi için ayrılmış bitinin durumunu tesrle
            BIC.B      #WDTIFG,IFG1 ;kesme kaynaklarını gösteren regestirinin WDt ileilgili bitini sıfırla
            BIC.B      #00001000b,P1IFG ;buton kesmesinin hangi butondan olluştuğunu göstren regestirirni ilgili bitin sıfırla.
            EINT       ;genel kesme bayrağını etkinleştir (herhanigbi bir kesme oluştuğunda algıla)
            RETI       ;kesmeden dön ve kaldığın yerden işlemlerin yapmaya devam et.
WDT_KES    ;WDT kesmesi oluştuğunda bu etikete dallan.
          CALL      #SIFIRLA  ;gönderilecek veriy kontrol et 128 den büyükse sıfırla
          mov.b     VERI,DATA1  ; 74595 göndrilecek veriyi data1 değişkeinnie ata ve şift regestiriye göndrilmesini sağla
          call      #SHIFTREG   ;şift regestiriye veriyi yaz.
          RLA       VERI        ;Veri değişkeinnideki bitleri sola kaydır.sırayla yanması için.
          BIC.B     #1H,IFG1              ;IFG1 REGESTİRİSİ OLUŞAN KESMENİNİ KAYNAĞINI GÖSTEREN rEGESTİRİDİR.
;WDTIFG (0 BİTİ) WDT KESME KAYNAĞINI GÖSTERİR. KESME OLUŞTUĞUNDA BU BAYRAK 1 OLUR YENİDEN WDT KURMAK İÇİN BU BAYRAĞIN SIFIRLANMASI GERKLİDİR.
            EINT                            ; (GIE) GENEL KESME BAYRAĞINI AKTİFLEŞTİRİR
            RETI
 
            COMMON  INTVEC
            DINT              ;GIE KESME BAYRAĞINI TEMİZLE (0 YAPAR)
            ORG     WDT_VECTOR;0FFFEh WDT KESME VEKTÖRÜ
            DW      WDT_KES   ; KESME OLUŞUNCA BU ETİKETE DALLAN
            ORG     RESET_VECTOR;0FFFEh; İLK ENERCİ GELDİĞİNDE VEYA RESET EDİLDİĞİNDE BU ETİKETE DALLAN
            DC16    init
            ORG     PORT1_VECTOR;0xFFE4;buton kesme vektörü
            DW      BTN_KESME;kesme butondan oluştuğunda gidilecek kesme etiketi
 
            END

http://www.dailymotion.com/video/xkr5zu_74595-kullanymy_tech#from=embed
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Mujdat117

ÖRNEK UYGULAMA 6
MSP430′u ASM ile Programlama Uyg.6(74hc595 ile Lcd sürmek)
http://www.mcu-turkey.com/?p=17368
merhaba arkadaşlar bugunkü projemizde 2×16 lcd ekran sürücez. Buekranlar 8/4 bit modunda iki farklı yöntem ile sürülebilir. Biz 8 bit modunda sürücez bunu yapabilmek için daha önce yayınlanış olan 74hc595 sürücü kodumuz üzerine eklemler yaparak gerçekleştiricez. kısaca 8 bitlik Veriyi 74hc595 üzerinden gönderip konfigrasyon bitlerinide mcu tarafından kontrol edip kodun işlenmesini sağlıcaz. öncelikle ilk satırda Müjdat 2. satırda ise TEKE yazısı görünecek ve belli süre sonra ekrandaki yazılar silinir ve 2. satırda belirli aralıklarda saymaya başlar sayma işlem 99.999 sayısından sonra başa döner ve buton yardımıyla sayma işlemini durudurup yeniden başlatablirsiniz.



projede kullanılan 74hc595 entegresini kullanmak için MSP430′u ASM ile Programlama Uyg.5(74hc595 kullanımı) başlığı altında yayınlanmış olan yazımı inceleyebilirsiniz.

#include "msp430g2231.h"                     ; #kulanılan mcu yu tanımlıyoruz
;********74595 PİNLERİ****************************
#define    R_PIN EQ 00010000B;BIT4;10h;
#define    E_PIN EQ 00100000B;BIT5;20h;00100000b;
#define    D_PIN EQ 01000000B;BIT6;40h;01000000b;
#define    C_PIN EQ 10000000B;BIT7;80h;10000000b;
;************LCD PİNLERİ***************************
;#define    RW_PIN   BIT2;lcd RW okuma yazma modu pinin
#define    EN_PIN EQ 0000100B;BIT2;lcd enable data portlarındaki bilgiyi lcdyeyazdırma pini
#define    DI_PIN EQ 0000001B;BIT0;Data komut pini göndeilen pinin datamı yoksa komutmuoldugunu belirler
;**************************************************
#define    KOMUT_MODU  bic.b     BIT0,P1OUT
#define    VERI_MODU bis.b    BIT0,P1OUT
#define    YAZDIR_1 bis.b     BIT2,P1OUT
#define    YAZDIR_0 bic.b     BIT2,P1OUT
;#define    OKUMA_MODU bis.b     BIT2,P1OUT
;#define    YAZMA_MODU bic.b     BIT2,P1OUT
#define     PN
DATA1 EQU 0x0200;R15;shift regestiriye gönderilen veri bu değişkende
VERI  EQU 0x0202;#define   VERI  0x0210;R9 ;veri değişkeni ise şift regestiriye gönderilmek
CNT1  EQU 0x0204; #define    CNT1 0x0202;şift regestiriye gönderilen veri 16 bit
LCD_INFO  EQU 0X0206
LCD_1      EQU 0X0208
LCD_2      EQU 0X0210
LCD_3      EQU 0X0212
LCD_4      EQU 0X0214
LCD_5      EQU 0X0216
;LCD_CNT   EQU 0X0210
;LCD_CHR   EQU 0X0212
;LCD_STR  EQU 0X0206
;***********MAKROLAR******************************************************
SHIFTOUT    MACRO    SENT_DATA
;        MOV.W  #SENT_DATA,&R7
    MOV    #SENT_DATA,DATA1
    CALL    #SHIFTREG    
        ENDM
LCD_INIT MACRO PIN_CNT,SATIR_CNT,FONT
       CLR.W  LCD_INFO
       BIS.B  #BIT5,LCD_INFO
       IF PIN_CNT=4;LCD 4BİT MODUNDAMI YOKSA 8 BİT MODUNDAMI ÇALIŞTIRILACAK
       BIC.B  #BIT4,LCD_INFO;4 BİT MODUNDA
       ELSE
       BIS.B  #BIT4,LCD_INFO;8BİT MODUNDA
       ENDIF
       IF SATIR_CNT=1;KULLANILAN LCD 1 Mİ 2 Mİ SATIR İÇERİYO
       BIC.B  #BIT3,LCD_INFO;1 SATIRLIK LCD
       ELIF SATIR_CNT=2;ELIF SATIR_CNT=1
       BIS.B  #BIT3,LCD_INFO;2 SATIRLI LCD
       ENDIF
       IF FONT=1;FONT 5X7 Mİ 5X10 MU OLACAK
       BIC.B  #BIT2,LCD_INFO;5X7 FONT
       ELSE;ELIF SATIR_CNT=1
       BIS.B  #BIT2,LCD_INFO;5X10 FONT
       ENDIF
       MOV.W  LCD_INFO,DATA1
       CALL #KOMUT_YAZ
       ENDM
LCD_KOR MACRO RW,CLM
    IF  RW=1    
    MOV   #007fH+CLM,DATA1
    ELIF  RW=2  
    MOV   #00BFH+CLM,DATA1;ELSE
    ELIF  RW=3
    MOV   #008FH+CLM,DATA1;ELSE
    ELIF  RW=4  
    MOV   #00CFH+CLM,DATA1;ELSE    
    ENDIF
    CALL  #KOMUT_YAZ
    ENDM
LCD_KARAKTER  MACRO TXT
       REPTC C_TXT,TXT;"MUJDAT"
       MOV.W   #'C_TXT',DATA1;LCD_CHR
       CALL  #VERI_YAZ;LCD_KARAKTER #LCD_CHR
       ENDR
    ENDM
LCD_TEMIZLE MACRO RW
    IF  RW=1    
    MOV   #007fH+1,DATA1
    ELIF  RW=2  
    MOV   #00BFH+1,DATA1;ELSE
    ELIF  RW=3
    MOV   #008FH+1,DATA1;ELSE
    ELIF  RW=4  
    MOV   #00CFH+1,DATA1;ELSE    
    ENDIF
    CALL  #KOMUT_YAZ
    CALL  #TEMIZLE
    ENDM
LCD_OUT MACRO LCD_DATA,ROW,COLM
    IF  ROW=1    
    MOV   #007fH+COLM,DATA1
    ELIF  ROW=2  
    MOV   #00BFH+COLM,DATA1;ELSE
    ELIF  ROW=3
    MOV   #008FH+COLM,DATA1;ELSE
    ELIF  ROW=4  
    MOV   #00CFH+COLM,DATA1;ELSE   
    ENDIF
    CALL  #KOMUT_YAZ
    MOV.B  LCD_DATA,DATA1
    CALL  #VERI_YAZ
    ENDM
LCD_ON  MACRO KURSOR,EFEK
       CLR  LCD_INFO
       BIS.B  #BIT3,LCD_INFO
       BIS.B  #BIT2,LCD_INFO
       IF KURSOR=0;
       BIC.B  #BIT1,LCD_INFO;
       ELIF KURSOR=1;ELSE
       BIS.B  #BIT1,LCD_INFO;
       ENDIF
       IF EFEK=0;
       BIC.B  #BIT0,LCD_INFO;
       ELIF EFEK=1;ELSE;ELIF SATIR_CNT=1
       BIS.B  #BIT0,LCD_INFO;
       ENDIF
       MOV  LCD_INFO,DATA1
       CALL #KOMUT_YAZ
       ENDM
LCD_KOMUT MACRO KMT
    MOV   KMT,DATA1
    CALL  #KOMUT_YAZ   
    ENDM
LCD_SIL MACRO
    MOV #01H,DATA1
    CALL  #KOMUT_YAZ
    ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        NAME    Mainloop                   ; module name
        PUBLIC  Mainloop                    ; make the main label vissible
        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE  
init:   MOV    #SFE(CSTACK), SP        ; set up stack
           MOV.W    #WDT_ADLY_1000,&WDTCTL;WDT_ADLY_1000 WDT Yİ KULLANARAK 1000MS GECİKME YARATIR
           BIS.B    #10001B,IE1           ;IE1 REGESTİRİSİ GENEL KESME KAYNAKLARINI KONTROL EDN REGESTİRİ
;            BURDAN NMIIE VE WDTIE BAYRAKLARINI KURUYORUZ WDT KESMESİ OLUŞMASI İÇİN
            mov.b   #11110111b,P1DIR        ; P1 portunun 0 ve 6 bitleri çıkış gerisi giriş olarak ayarlandı
            mov.b   #00001000b,P1IE         ;P1 PORTUNUN HANGİ PİNİNDEN KESME OLUŞACAĞINI BLİERLER
            mov.b   #00001000b,P1IES         ; KESMENİN DÜŞEN KENARMI YOKSA YÜKSELEN KENARMI OLDUGUNU BELİRLER.
          LCD_SIL               ;LCD Yİ TAMAMEN SİLER
          LCD_INIT 8,2,1        ;1. PARAMETRE 4/8 BİTMİ ÇALIŞTIRILICAĞINI SEÇMEYE YARAR.
          ;2. PARAMETRE KULLANILAN LCD NİN KAÇ SATIR OLDUĞUNU BELİRTİR.
          ;3. PARAMETRE
          LCD_ON 0,0            ;LCD YE AÇMA KOMUTU GÖNDERİR BUNU YAPRKEN2 ADET PARAMETRE ALIR
          ;1. PARAMETRE İMLECİ GÖRÜNÜR/GİZLİ YAPMAYA YARAR(0/1)
          ;2. OARAMETRE İMLECİN KIRPMA EFEKTİ AÇMA/KAPAMAYA YARAR (0/1)
          LCD_SIL
          MOV   #'0',LCD_1
          MOV   #'0',LCD_2
          MOV   #'0',LCD_3
          MOV   #'0',LCD_4
          MOV   #'0',LCD_5
          EINT                 ;Genel interput kaynaklarını etkinleşirir.
Mainloop    ;Ana program bloğu
; LCD YAZDIRMAK İÇİN 2 ADET MAKRO YAZDIM ,LCD_OUT BELİRTİLEN KORDİNATLARA 1 KAREKTER YAZAR.
; 1. MAKROMUZ LCD_OUT BU MAKRODA 3 ADET PARAMAETRE VAR 1. PARAMETRE YAZILACAK KAREKTERİ BELİRTİR.
; 2.PAREMETREDE SATIR 3.PARAMETREDE SUTUN BELİRTİLİREK İSTENİLEN SATIR VE SUTUNDA İSTEDİĞİMİZ
; KAREKTERİ GÖSTEREBLİRSİNİZ.
       LCD_OUT   #'M',1,5
       LCD_OUT   #'U',1,6
       LCD_OUT   #'J',1,7
       LCD_OUT   #'D',1,8
       LCD_OUT   #'A',1,9
       LCD_OUT   #'T',1,10              
       LCD_OUT   #'T',2,6
       LCD_OUT   #'E',2,7
       LCD_OUT   #'K',2,8
       LCD_OUT   #'E',2,9
        jmp     $; Mainloop  ;herhangibi bir kesme oluşana kadar sonsuz döngüye girer.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;*************************74595 entegresine veri gönderen komut******************************************************
SHIFTREG                  ;74595 regestiri bitleri yazdıracak gönderecek program
      CALL  #SRESET       ;Regestiriyi resetle( tüm bitleri sıfırla)
      mov.w     #10h,CNT1 ;Sayac regestirisin 16 sayısını yükle
SRG   RLA     DATA1       ;DATA1 deişkeninideki değeri bir sola kaydır.kaydırma işleminde Değişkenini 16. biti herzaman Status regestirisinin C (Caeryy)bitinde gösterilir.
; bizde bu özelliği kullanrak C floğındaki değere göre 74hc595 entegresindeki Data pininin değerini ayarlamak suretiyle bitlerin yazdırılmasıın sağlıyacağız.
      jc      SETPIN      ;SR nin C bitinin değeri Set(1) ise SETPIN etiketine git
      jnc     CLRPIN      ;SR nin C bitinin değeri reset(0) ise CLRPIN etiketine git
SETPIN                    ;74595 entegresinin data(DS 14 nolu pini) değerini set(1) yap.
      BIS.B #BIT6,&P1OUT   
      jmp   CLOCK
CLRPIN  BIC.B #BIT6,&P1OUT ;74595 entegresinin data(DS 14 nolu pini) değerini reset(0) yap.
CLOCK                     ; clock palsi göndererek data pinindeki değeri şift regestiriye yazdırır.
; clock işlemi portlardaki bitleri bir sola kaydırarak data(ds 14.)pinindeki değeri 0. bite yazdırarak 8bitlik veriyi portlara gönderir.
      BIC.B #BIT7,&P1OUT   ;clock pinini resetle
      NOP                 ;bir saykıl bekle
      BIS.B #BIT7,&P1OUT   ;clock pinini Set et.
      dec   CNT1          ;göndrilen veriyi say 16 ya ulaştığında işlemi bitir.
      jnz   SRG           ;sayma işlemi 16 dan küçükse başa dön.
E_                        ;veri gönderme işlemi bitti ise gönderilen verileri 74595 entegresine yazdır ve işlem portlardan görünsün
      BIC.B #BIT5,&P1OUT
      NOP
      BIS.B #BIT5,&P1OUT
      ret                  ;veri gönderme prosödürü bitti. kaldığın yerden çalışmak için geri dön.
;********************************************************************************************************
SRESET                     ;74595 entegresinini reset pinine bir pals göndrir ve entegrenin resetlenerek portların değerini sıfırlar.
      BIC.B #BIT4,&P1OUT
      NOP
      BIS.B #BIT4,&P1OUT
      ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;***********LCD KOMUTLARI*******************************************************
TEMIZLE
    MOV   #10H,R7
TEMIZLE_   
    MOV.B   #00010000B,DATA1
    CALL  #VERI_YAZ
    DEC   R7
    JNZ  TEMIZLE_
RET
KOMUT_YAZ
;    YAZMA_MODU
     bic.b     #BIT0,P1OUT;KOMUT_MODU
     bis.b     #BIT2,P1OUT;YAZDIR_0
    MOV.W   DATA1,R5
    CALL  #SHIFTREG;SHIFTOUT  #DATA1;   CALL  #SHIFTREG
    CALL  #GECIKME
    bic.b     #BIT2,P1OUT;YAZDIR_1
  RET
VERI_YAZ
;    YAZMA_MODU
    bis.b    #BIT0,P1OUT;VERI_MODU
    bis.b     #BIT2,P1OUT;YAZDIR_0
    MOV #DATA1,R5
    MOV DATA1,R5
    CALL  #SHIFTREG;SHIFTOUT  DATA1
    CALL  #GECIKME
    bic.b     #BIT2,P1OUT;YAZDIR_1
    RET
GECIKME
      MOV #0FFFH,R6
DLY1  DEC   R6
      JNZ DLY1
      RET
 ;************SAYDIRMA PROGRAMI*********************
SAYAC
;       ;1. SAYI
        CMP #'9',LCD_1
        JGE  SAYI_2
        INC.B LCD_1
        RET;JMP SAYI_2_
;2. SAYI      
SAYI_2  MOV #'0',LCD_1;CLR   LCD_1
        CMP #'9',LCD_2
        JGE  SAYI_3
        INC.B LCD_2
        RET;JMP SAYI_3_
;3. SAYI      
SAYI_3  MOV #'0',LCD_2;CLR   LCD_2
        CMP #'9',LCD_3
        JGE  SAYI_4
        INC.B LCD_3
        RET;JMP SAYI_4_
;4. SAYI      
SAYI_4  MOV #'0',LCD_3;CLR LCD_3
        CMP #'9',LCD_4
        JGE  SAYI_5
        INC.B LCD_4
        RET;JMP SAYI_5_
;5. SAYI      
SAYI_5  MOV #'0',LCD_4;CLR   LCD_4
        CMP #'9',LCD_5
        JGE  SAYI_0
        INC.B LCD_5
        RET
SAYI_0  MOV #'0',LCD_5;CLR LCD_5
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTN_KESME               ;buton kesmesi oluştuğunda WDT kesmesinin oluşması için gerekli(IE1 Reg. 0. biti) bitin değerini tersleyerek WDT kesmesinin durumunu değiştiri (AÇ/KaPA)  
            xor.b      #1h,IE1  ;Genel kesme ayarları için gerekli Regestirinin WDT kesmesi için ayrılmış bitinin durumunu tesrle
            BIC.B      #WDTIFG,IFG1 ;kesme kaynaklarını gösteren regestirinin WDt ileilgili bitini sıfırla  
            BIC.B      #00001000b,P1IFG ;buton kesmesinin hangi butondan olluştuğunu göstren regestirirni ilgili bitin sıfırla.
            EINT       ;genel kesme bayrağını etkinleştir (herhanigbi bir kesme oluştuğunda algıla)
            RETI       ;kesmeden dön ve kaldığın yerden işlemlerin yapmaya devam et.
WDT_KES    ;WDT kesmesi oluştuğunda bu etikete dallan.
          LCD_KOR 1,3;YAZIYI YAZACAĞI KORDİNATLARI BELİRTİYORUZ
          LCD_KARAKTER  "CIZGI-TAGEM";YAZIYI BİR DÖNGÜ İLE LCD YE YAZDIRIYORUZ
          CALL  #SAYAC  ;LCD DEKİ SAYILASRI BİRER BİRER ARTIRMAYA YARAYAN KODDU ÇAĞIRIYORUZ.
          MOV   #LCD_1,R8;LCD DEKİ 1LER BASAMAĞINI R8 REG. ALIR
          LCD_OUT    @R8,2,10;R8 DEKİ SAYIYI LCD DE GÖSTER
          MOV   #LCD_2,R8
          LCD_OUT    @R8,2,9
          MOV   #LCD_3,R8
          LCD_OUT    @R8,2,8
          MOV   #LCD_4,R8
          LCD_OUT    @R8,2,7
          MOV   #LCD_5,R8
          LCD_OUT    @R8,2,6
BITIR         
            BIC.B     #1H,IFG1              ;IFG1 REGESTİRİSİ OLUŞAN KESMENİNİ KAYNAĞINI GÖSTEREN rEGESTİRİDİR.
;WDTIFG (0 BİTİ) WDT KESME KAYNAĞINI GÖSTERİR. KESME OLUŞTUĞUNDA BU BAYRAK 1 OLUR YENİDEN WDT KURMAK İÇİN BU BAYRAĞIN SIFIRLANMASI GERKLİDİR.
            EINT                            ; (GIE) GENEL KESME BAYRAĞINI AKTİFLEŞTİRİR
            RETI
COMMON  INTVEC
            DINT              ;GIE KESME BAYRAĞINI TEMİZLE (0 YAPAR)
            ORG     WDT_VECTOR;0FFFEh WDT KESME VEKTÖRÜ
            DW      WDT_KES   ; KESME OLUŞUNCA BU ETİKETE DALLAN
            ORG     RESET_VECTOR;0FFFEh; İLK ENERCİ GELDİĞİNDE VEYA RESET EDİLDİĞİNDE BU ETİKETE DALLAN
            DC16    init  
            ORG     PORT1_VECTOR;0xFFE4;buton kesme vektörü
            DW      BTN_KESME;kesme butondan oluştuğunda gidilecek kesme etiketi
            END Mainloop

Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Herdol90

Teşekkürler Müjdat bu paylaşımın için. Ben uzun bir süre yoktum mesajını şimdi görüyorum kusura bakma... Eğer yardıma ihtiyacın olursa ilgilenmeye çalışırım... Başarılar dilerim...

Mujdat117

rica ederim. aslına bakarsanız elinizde örnek teşkil edebilecek uygulamalar varsa paylaşırsanız sevinirim asm konusunda bir kaynak oluşturmaya çalışıyorum katkılarınız bekliyorum.
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

remziayaz@gmail.com

Merhaba şu anlık sadece Teşekkür etmek için üye oldum bu konu hakkında sizin kadar iyi açıklama yapan hiçbir kişi olmamış tekrar Teşekkürler :)

Mujdat117

Rica ederim faydalı olmuşsa ne mutlu :)
Bu sayede 1 kişi aha kazandık.
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Niyazi_SARAL

Alıntı yapılan: Mujdat117 - 20 Mart 2016, 23:43:50
Rica ederim faydalı olmuşsa ne mutlu :)
Bu sayede 1 kişi aha kazandık.

Emeklerinize teşekkürler.

Çizgi Tagem'in tamamı Türkçe MSP430 kullanım talimatnamelerine, örnek proje dokümanlarına, proje kodlarına ve eğitim videolarına bulut bilişim üzerinden ücretsiz erişebilirsiniz.

Yandex: https://yadi.sk/d/qRyG-W2LoWHgh

MS OneDrive: http://1drv.ms/1T33FsL
"Eğitimli insanlar topluma borçludurlar. Bir işin nasıl yapılabileceğini biliyorken bir başkasının yapamadığını görüp susmaları kendilerini yetiştiren o topluma ihanettir."  Bilgi paylaştıkça çoğalır

murattokan361

paylaşımlarınız için çok teşekkürler uzun bir süredir başlık altına birşeyler yazılmamış ama msp430 ile yapmam gereken bir proje var.Konulan linkler çalışmıyor.Son konulan linkleri veya başka bir eğtim linki koyabilirmisiniz? Böyle bir çalışma yaptığınız için çok teşekkürler

Griffo

Alıntı yapılan: Niyazi_SARAL - 01 Nisan 2016, 14:41:37
Emeklerinize teşekkürler.

Çizgi Tagem'in tamamı Türkçe MSP430 kullanım talimatnamelerine, örnek proje dokümanlarına, proje kodlarına ve eğitim videolarına bulut bilişim üzerinden ücretsiz erişebilirsiniz.

Yandex: https://yadi.sk/d/qRyG-W2LoWHgh

MS OneDrive: http://1drv.ms/1T33FsL


Hocam linkler ölü. Yenileme şansınız var mıdır acaba?