1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » MSP430 Projeleri devreler, Yazar Projeleri Makaleler Elektronik Genel »

MSP430′u ASM ile Programlama

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.

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

YAZININ DİĞER SAYFALARI: 1 2 3

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;

Elektronik

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)

  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.