MSP430′u ASM ile Programlama

Merhaba Arkadaşlar. Bu yazımda sizlere asm kodlarıyla MSP430 LaunhPad nasıl programlanıcağından bahsedeceğim örnek MSP430 ASM uygulamaları ve MSP430 ASM komutları paylaşılacak.
İ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.
![]()
MSP430 ASM – Buton ile led kontrolü
Kodları açıklamaya başlamadan önce yeni proje dosyası nasıl oluşturulucağına dair kısa bilgi vereceğim.
IAR Yeni Proje Oluşturmak;
Kaynak kod;
#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
MSP430 LaunchPad Kodun Yüklenmesi;
Projenin Denenmesi;
![]()
İkinci uygulama WDT kesmesini kullanarak msp430 p1.0 ve p1.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.
MSP430 ASM – WDT Kesmesi
Kaynak kod;
#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
Yazar: mujdat117
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 5 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; mujdat117










