Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Mikrodenetleyici Projeleri/

MSP430′u ASM ile Programlama

Sponsorlu Bağlantılar

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.

boll

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;

boll

İ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