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 (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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/SR.bmp)
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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/Stak-Reg.jpg)
Ö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)
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/rra.jpg)
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. )
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/rrc.jpg)
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
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/sxt.jpg)
************************************************************************
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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/rla.jpg)
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ı.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/rlc.jpg)
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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/reti-interput.jpg)
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.
*************************************************************************
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/msp_instructions1.png)
ÖRNEK UGULAMA 1
http://www.mcu-turkey.com/?p=16362 (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 (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 (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 (http://www.dailymotion.com/video/xkjzkk_projenin-yuklenmesi-ve-deneme-new_tech#from=embed)
ÖRNEK UGULAMA 2
MSP430′u ASM ile Programlama Uyg.2(WDT Kesmesi)
http://www.mcu-turkey.com/?p=16674 (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 (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 (http://www.dailymotion.com/video/xkl82n_17082011009_tech#from=embed)
ÖRNEK UYGULAMA 3
MSP430′u ASM ile Programlama Uyg.3(Buton ile Kesme oluşturma)
http://www.mcu-turkey.com/?p=16861 (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 (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 (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 (http://www.dailymotion.com/video/xkpwg7_15082011005_tech#from=embed)
ÖRNEK UYGULAMA 4
MSP430′u ASM ile Programlama Uyg.4(Buton ve WDT Kesmeleri)
http://www.mcu-turkey.com/?p=16894 (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
ÖRNEK UYGULAMA 5
MSP430′u ASM ile Programlama Uyg.5(74hc595 kullanımı)
http://www.mcu-turkey.com/?p=16936 (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 (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 (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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/5662_74595fy4_11.jpg)
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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/Shift-reg-ba%C4%9Flant%C4%B1.jpg)
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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/rla1.jpg)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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/shift-kayd%C4%B1rma.jpg) 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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/08/16-bit-74595.jpg)
#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 (http://www.dailymotion.com/video/xkr5zu_74595-kullanymy_tech#from=embed)
ÖRNEK UYGULAMA 6
MSP430′u ASM ile Programlama Uyg.6(74hc595 ile Lcd sürmek)
http://www.mcu-turkey.com/?p=17368 (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.
(http://www.mcu-turkey.com/wp-content/uploads/2011/09/ads%C4%B1z.jpg)
#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
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...
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.
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 :)
Rica ederim faydalı olmuşsa ne mutlu :)
Bu sayede 1 kişi aha kazandık.
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 (https://yadi.sk/d/qRyG-W2LoWHgh)
MS OneDrive: http://1drv.ms/1T33FsL (http://1drv.ms/1T33FsL)
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
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 (https://yadi.sk/d/qRyG-W2LoWHgh)
MS OneDrive: http://1drv.ms/1T33FsL (http://1drv.ms/1T33FsL)
Hocam linkler ölü. Yenileme şansınız var mıdır acaba?