Ynt: msp430 kesme sorunu

Başlatan metaltrrocker, 06 Ocak 2013, 19:23:49

metaltrrocker

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

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
 

burak ozturk

#1
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 .
happy coding.

metaltrrocker

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:-)