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