İyi Günler
Msp430g2553 le bir program yapmak istiyorum ancak hiç bilmediğim bir dil. bir çok kaynakdan baktım ancak tam kavrayamadım. Örnek bir programı revize etmeye çalıştım.
S1-S8 buton
X, Z, Q giriş, Y çıkış olarak ayarlamalıyım ve butonlar dahil hepsinde interupt kullanmalıyım
aşağıda ki gibi başladım. kontrol edebilirmisiniz. Teşekkürler
// GPIO Port 1 Definitions
#define S1 BIT0 // P1.0
#define S2 BIT1 // P1.1
#define S3 BIT2 // P1.2
#define S4 BIT3 // P1.3
#define S5 BIT4 // P1.4
// GPIO Port 2 Definitions
#define S6 BIT0 // P2.0
#define S7 BIT1 // P2.1
#define S8 BIT2 // P2.2
#define X BIT4 // P2.4
#define Y BIT5 // P2.5
#define Z BIT6 // P2.6
#define Q BIT7 // P2.7
typedef enum {low, high} gpio;
// Configure GPIO
P1SEL &= ~(S1 | S2 |S3 |S4 |S5);
P1SEL2 &= ~(S1 | S2 |S3 |S4 |S5);
P1DIR |= (S1 | S2 |S3 |S4 |S5);
P1OUT |= (S1 | S2 |S3 |S4 |S5);
P1DIR &= ~(S1 | S2 |S3 |S4 |S5);
P1REN |= (S1 | S2 |S3 |S4 |S5);
P1IE |= (S1| S2 |S3 |S4 |S5);
P2SEL &= ~(S6 | S7 | S8 | X | Y | Z | Q);
P2SEL2 &= ~(S6 | S7 | S8 | X | Y | Z | Q);
P2DIR |= (S6 | S7 | S8 | X | Y | Z | Q);
P2OUT |= (S6 | S7 | S8 |Y );
P2OUT &= ~(X | Y | Z | Q);
P2IN |=(X | Y | Z | Q)
P2DIR &= ~(X | Y | Z | Q);
P2REN |= (S6 | S7 | S8| X | Y | Z | Q);
P2IE |= (S6 | S7 | S8| X | Y | Z | Q);
------------------------------------------------------
gpio G_S1 = high;
gpio G_S2 = high;
gpio G_S3 = high;
gpio G_S4 = high;
gpio G_S5 = high;
gpio G_S6 = high;
gpio G_S7 = high;
gpio G_S8 = high;
gpio G_X = low;
gpio G_Y = low;
gpio G_Z = low;
gpio G_Q = low;
#pragma vector=PORT1_VECTOR, PORT2_VECTOR
_interrupt void Port_1 (void)
{......}
Mesajınıza kod beklerken "KOD"
düğmesini kullanınız.
Buradaki videoları da izleyiniz.
https://drive.google.com/folderview?id=0B7qdCk48lHGaTjV1X2dKTHZfclU
KOD düğmesi göremiyorum
https://drive.google.com/file/d/0B7qdCk48lHGaSmNjcExpQ3JKVW8/view?usp=drivesdk
Ayrıca Muhammed Fatih İnanç
Hoca' nın bir çok videosu ve anlatımımı
bulabilirsiniz.
katkılarınız için teşekkürler, türkce ve ingilizce kitaplara baktım, şimdiye kadar, ancak öğrenemedim,
konu başlığının msp430 programlamayı nereden öğrenirim olmadığına dikkat çekmek isterim.
bir yerde okumuştum PxSEL ayarı yapmaya gerek yok yazıyoyordu, default olarak GPİO ayarlıdır zaten, diyordu. doğru hatırlıyormuyum
P1DIR |= (S1 | S2 |S3 |S4 |S5);
P1OUT |= (S1 | S2 |S3 |S4 |S5);
P1REN |= (S1 | S2 |S3 |S4 |S5);
P1IE |= (S1| S2 |S3 |S4 |S5);
P2DIR |= (S6 | S7 | S8 | Y |X | Z | Q);
P2OUT |= (S6 | S7 | S8 | Y);
P2IN |= (X |Z | Q);
P2REN |= (S6 | S7 | S8| Y );
P2IE |= (S6 | S7 | S8| Y | X |Z | Q);
Bu şekilde revize ettim.
G_CTRL_REG.ENBL = 0x01;
"Detected consecutive bitfield assigns. Recommend using bit mask instead" hatası alıyorum.
PxDIR&=~(BIT0 + BIT1 + BIT2); // Bit 0..2 giriş olarak ayarlandı.
PxREN|=(BIT0 + BIT1 + BIT2); // Bit 0..2 pull-up/down dirençleri aktif
PxOUT|=(BIT0 + BIT1 + BIT2); // Pull-up/down dirençleri Vcc'ye çekildi. PxOUT aynı zamanda çıkışları 1/0 yapar.
PxIE|=(BIT0 + BIT1 + BIT2); // Bit 0..2 interrupt aktif
PxIES|=(BIT0 + BIT1 + BIT2); // Bit 0..2 interrupt yükselen/düşen kenar (Yükselen kenar aktif)
PxIFG&=~(BIT0 + BIT1 + BIT2); // Bit 0..2 interrupt bayrağı temizlendi.
_BIS_SR(GIE); // Genel kesmeler aktif
#pragma vector=PORTx_VECTOR __interrupt void Port_x(void)
{
if(PxIFG&BIT0)
{
Yapılacak işlemler;
PxIFG&=~BIT0;
}
if(PxIFG&BIT1)
{
Yapılacak işlemler;
PxIFG&=~BIT1;
}
}
PxSEL ile işiniz yok. Bit 1 ise çıkış, 0 ise giriş.
Energia da kullanabilirsiniz aynı kodlar orda da çalışır.
http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_PushButton (http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_PushButton)
Teşekkürler Mustafa Hocam,
CTRL_REG.ENBL ayarını bir bir türlü yapamadım. extern struct, struct ve extern hepsi bir birine karıştı.
"CTRL_Register is undefined"
bu tanımlamayı nasıl yaparım
define komutu ilemi, typdef enum ile mi?
ayarları yapabildim, sorun hata veren struct yada extern struct dan değil, main.c de pragma vector ADC10_VECTOR ü kullanmadığım halde silmemiş olmamdan kaynaklanmış. Program launcpedde çalıştı. Katkısı olanlara teşekkürler.