Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Texas Instruments => MSP430 Serisi => Konuyu başlatan: metaltrrocker - 06 Ocak 2013, 19:23:49

Başlık: Ynt: msp430 kesme sorunu
Gönderen: metaltrrocker - 06 Ocak 2013, 19:23:49
Arkadaşlar merhaba msp430 buton sorununu yardımcı olan arkadaşlar sayesinde çözdüm.Şimdi yeni sorunuma geleyim.kesmelere giriş yaptım ancak daha önceden pic yada herhangi bir mikrodenetleyici bilgim olmadığı için(okulda öğretmeye çalıştıkları 8051 i saymıyorum dersi alttan alacam ikinci dönem) sizlerin yardımını istiyorum.aşağıda linkini verdiğim 2 buton led uygulamasını kendi kafama göre düzenlemek istedim kodlarda sözdizimi hatası yok fakat kit üzerinde çalıştıramadım.amacım S2(P1.3) butonuna bastığım zaman LED(P1.0)' ın yanması.açıklamaları da kendime göre düzenlemeye çalıştım benim için kesmeler ve mikrodenetleyiciye giriş gerçekten kafa karıştırıcı keşke geçmişte pic ile uğraşsaydım diyorum şuan....:(
http://www.mcu-turkey.com/2-buton-led-uygulamasi/#more-25985 (http://www.mcu-turkey.com/2-buton-led-uygulamasi/#more-25985)

benim düzenlediğim kodlar

//
//LaunchPad Üzerindeki TXD ve RXD Jumplerlarını Çıkarınız

#include "msp430.h"


void main( void )
{
  WDTCTL = WDTPW + WDTHOLD; //watchdog timer sıfırlanıyor

  BCSCTL1 = CALBC1_1MHZ;    //clk 1Mhz de çalışmaya ayarlanıyor
  DCOCTL  = CALDCO_1MHZ;
  __delay_cycles(1000000);  // 1sn düzgün çalışması için gecikme veriliyor
 
 

  P1DIR = BIT0;             //p1 portunun p1.0 çıkış olarak ayarlanıyor
  P1OUT = 0x00;             //p1 çıkışlarını sıfırladık(logic 0)
  P1IE = 0x08;             //p1 portunun p1.3 pinini kesmeler için aktif ettik
  P1IES = 0x00;             //p1 portu için interrupt edge select
  P1SEL = 0x00;           
  P1SEL2 = 0x00;
 
  P1IFG = 0x00;             //harici kesmeler mi????????
 

  //__bis_SR_register(LPM4_bits + GIE);
  _BIS_SR(GIE);  //genel kesmeler aktif
}

// Port 1 Kesme Rutini
#pragma vector=PORT1_VECTOR
__interrupt void P1_kesmesi(void)
{
  __delay_cycles(10000);
  P1OUT = P1IFG;
  P1IFG = 0x00;
}


mesaj birleştirme:: 06 Ocak 2013, 21:24:40

bu arada kodları derlemek için iar emmedded workbench kullanıyorum
 
Başlık: Ynt: msp430 kesme sorunu
Gönderen: burak ozturk - 07 Ocak 2013, 21:33:39
Hocam kodlarınızı yeniden düzenledim , öncelikle programın dogru çalışması için deneme boardu(cigi-tagem msp430 egitim kiti var ise) üzerinde jp-2 off olmalı



//LaunchPad Üzerindeki TXD ve RXD Jumplerlarını Çıkarınız

#include "msp430.h"


void main( void )
{
  WDTCTL = WDTPW + WDTHOLD; //watchdog timer sıfırlanıyor

  BCSCTL1 = CALBC1_1MHZ;    //clk 1Mhz de çalışmaya ayarlanıyor
  DCOCTL  = CALDCO_1MHZ;
  __delay_cycles(1000000);  // 1sn düzgün çalışması için gecikme veriliyor
 
 

  P1DIR = BIT0;             //p1 portunun p1.0 çıkış olarak ayarlanıyor
  P1OUT = 0x00;             //p1 çıkışlarını sıfırladık(logic 0)
  P1IE = BIT3;             //p1 portunun p1.3 pinini kesmeler için aktif ettik
  P1IES = BIT0;             //p1 portu için interrupt edge select
  P1IFG = 0x00;             //harici kesmeler mi????????
 


  __bis_SR_register(GIE);  //genel kesmeler aktif
}

// Port 1 Kesme Rutini
#pragma vector=PORT1_VECTOR
__interrupt void P1_kesmesi(void)
{
// __delay_cycles(10000);
  P1OUT ^= BIT0;
  P1IFG = 0x00;
}


mesaj birleştirme:: 07 Ocak 2013, 21:45:47

hocam fatih hocam muhtemel örnek oldugu için kullanmış genellikle kesme içerisinde delay kullanmak pek tercih edilen bir davranış değil, kodlara dönecek olur isek örnekteki kesme içerisindeki bu kod ;

P1OUT = P2IFG;

linktede anlatıldıgı gibi P1OUT saklayıcsına P2IFG saklayıcısının içeriği aktarmak, ancak biz led yakmak istedigimizden P1OUT registeri içerisine P1.0 yada P1.6 daki ledleri aktif edecek bir deger göndermemiz gerekiyor , o yüzden her kesmede ilgili portu tersledik .
Başlık: Ynt: Ynt: msp430 kesme sorunu
Gönderen: metaltrrocker - 08 Ocak 2013, 02:26:38
Anladım hocam suan deneme imkanım yok yarın boarda aktarır denerim cesitlemeler yaparım .takıldıgum yerde sorarım:-) .tesekkur ederim:-)