Home / Mikrokontroler / MSP430 / MSP430 Launchpad Konfigurasi Port I/O Digital

MSP430 Launchpad Konfigurasi Port I/O Digital

MSP430 Launchpad Digital Port

Mikrokontroler MSP430 menyediakan beberapa port yang secara default dapat digunakan sebagai perangkat input/output digital. Kali ini kita akan sedikit belajar tentang konfigurasi port pada MSP430, belajar bagaimana cara menjadikan port sebagai masukan ataupun keluaran digital. Untuk mempermudah memahami saya contohkan untuk membuat aplikasi sederhana dengan studi kasus seperti berikut ini :

Sebuah switch push button digunakan untuk mengontrol nyala dua buah led (merah dan hijau). Kita dapat menggunakan switch dan led yang sudah tersedia pada board launchpad.  Dimana switch terhubung pada P1.3, led merah terhubung ke P1.0, dan led hijau terhubung ke P1.6. Jika switch tersebut tidak ditekan, maka led yang akan nyala adalah led hijau, namun jika switch ditekan maka led yang akan nyala adalah led merah. Switch push button pada board launchpad secara default terhubung secara aktif low tanpa menggunakan resistor pull up external.

MSP430 Launchpad Digital IO
MSP430 Launchpad Digital IO

 

Kali ini kita akan mulai dengan pengaturan port untuk input dan output. Pengaturan konfigurasi port untuk menjadi input/output dapat dilakukan dengan mengisi register PxDIR, dimana “x” adalah nomor dari port misalkan P1DIR. Register PxDIR merupakan register 16bit dimana setiap bit mewakili nomor pin yang akan diatur menjadi input atau output. Untuk mengkonfigurasi pin menjadi output kita dapat memberikan nilai 1 pada nomor bit yang bersangkutan. Sedangkan untuk menjadikannya sebagai input, kita harus memberikan nilai 0 pada bit yang bersangkutan. Contohnya kita akan menjadikan pin P1.0 sebagai output, maka nilai P1DIR dapat kita isi dengan nilai biner 0b0000000000000001 atau dengan bilangan hexadesimal 0x0001. Namun untuk mempermudah kita juga dapat menggunakan perintah lain seperti di bawah ini

[sourcecode language=”c”] P1DIR |= BIT0;
[/sourcecode]

perintah diatas berarti memberikan nilai 1 pada register P1DIR bit ke-0. Dengan perintah ini kita dimudahkan karena tidak perlu memberikan nilai langsung ke register. Untuk mengkonfigurasi lebih dari satu pin kita dapat memberikan perintah seperti di bawah ini

[sourcecode language=”c”] P1DIR |= (BIT0 + BIT1 + BIT4);
[/sourcecode]

Perintah di atas berarti memberikan nilai 1 pada bit ke 0,1, dan 4 pada register P1DIR, sehingga P1.0, P1.1, dan P1.4 akan berfungsi menjadi output. Untuk memberikan nilai high atau low pada pin yang bersangkutan kita dapat memberikan nilai pada register PxOUT contohnya seperti dibawah ini.

[sourcecode language=”c”] P1OUT |= BIT0;
[/sourcecode]

Perintah diatas akan memberikan logika high pada pin P1.0, sedangkan untuk memberikan logika low pada pin dapat digunakan perintah berikut.

[sourcecode language=”c”] P1OUT &= ~BIT0;
[/sourcecode]

Sama seperti pada mikrokontroler AVR, MSP430 juga dilengkapi dengan fungsi internal pull up/pull down. Fungsi ini juga dapat kita aktifkan melalui pengaturan register. Register yang digunakan pada pengaturan pull up dan pull down ini adalah PxREN dan PxOUT. PxREN digunakan untuk mengaktifkan fungsi pull up atau pull down, sedangkan PxOUT digunakan untuk memilih apakah menggunakan mode pull up atau pull down. Register PxOUT ini juga dapat digunakan untuk memberikan logika high atau low pada pin, jika pin bersangkutan digunakan sebagai output. Untuk mengaktifkan fungsi pullup/pull down kita bisa mengeset bit ke-x pada register PxREN. Contohnya adalah sebagai berikut.

[sourcecode language=”c”] P1REN |= BIT3;
[/sourcecode]

Perintah di atas berarti kita mengaktifkan mode pull up/ pull down pada pin P1.3. Perintah di atas belum cukup untuk menjadikan pin memiliki pull up/ pull down internal. Kita perlu mengeset (memberikan nilai 1) bit ke-x pada register PxOUT untuk memilih mode pull up. Sedangankan jika memilih mode pull down dapat memberikan nilai 0 pada bit yang bersangkutan. Berikut merupaka contoh untuk memilih mode pull up untuk pin P1.3.

[sourcecode language=”c”] P1OUT |= BIT3;
[/sourcecode]

Lalu bagaimana cara membaca input  ?
Untuk membaca nilai input pada pin, kita dapat memanfaatkan register PxIN. Masing-masing bit pada register ini memiliki nilai yang sesuai dengan kondisi pin yang bersangkutan. Misalkan P1IN bernilai 0x0001, berarti pada P1.0 mendapatkan input high, begitu juga sebaliknya dengan logika low.
Kembali ke tujuan awal kita yaitu membuat aplikasi input dan output sederhana. Dengan penjelasan di atas kita dapat membuat program untuk membaca input dan mengkondisikan nyala led sesuai dengan kondisi input. Pastinya pada awal program kita harus mengkonfigurasi input dan output terlebih dahulu. Kemudian karena switch yang kita gunakan terhubung secara aktif low tanpa external pull up, kita harus mengkonfigurasi pull up internal. Kemudian kita dapat membaca nilai input dan memberikan output pada led sesuai dengan kondisi input switch.
Kira-kira source code programnya seperti di bawah ini.

[sourcecode language=”c”] /*
* main.c
*/
#include <msp430.h>

void init() {
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
// Konfigurasi output
P1DIR |= (BIT0 + BIT6); // P1.0 dan P1.6 dijadikan output (Led)
// Konfigurasi input
P1REN |= BIT3; // Mengaktifkan internal pullup/pulldown pada P1.3 (switch)
P1OUT |= BIT3; // Pilih mode pullup untuk P1.3 (switch)
}

void main(void) {
init();
while(1) {
// Cek switch
if (!(P1IN & BIT3)) { // Jika P1.3 = LOW
P1OUT |= BIT0; // P1.0 = HIGH
P1OUT &= ~BIT6; // P1.6 = LOW
}
else { // Jika P1.3 = HIGH
P1OUT &= ~BIT0; // P1.0 = LOW
P1OUT |= BIT6; // P1.6 = HIGH
}
}
}
[/sourcecode]

Just Share, mohon maaf jika ada kekurangan ! Mohon koreksi jika ada kesalahan, ,  Saya masih belajar 🙂

About Eko Rudiawan

Seorang lelaki yang punya ketertarikan dengan dunia elektronika dan robot yang saat ini sedang serius belajar tentang dunia bisnis dan internet marketing. My dream to be success technopreneur

2 comments

  1. bagaimana program untuk interupsi mas?

Leave a Reply

Your email address will not be published. Required fields are marked *

seven + seven =