Daftar Isi:

Penghitung Detik MSP430: 10 Langkah
Penghitung Detik MSP430: 10 Langkah

Video: Penghitung Detik MSP430: 10 Langkah

Video: Penghitung Detik MSP430: 10 Langkah
Video: tutorial 2: MSP430 programming - how to download Energia IDE 2024, November
Anonim
Penghitung Detik MSP430
Penghitung Detik MSP430

Selamat datang! Pembuatan Penghitung Detik: Menggunakan CCStudio 8 dan MSP430F5529 untuk proyek tersebut.

bahasa C untuk mengkode mikrokontroler. Menerapkan Mode Daya Rendah, Timer, dan Interupsi. Output ditampilkan melalui 7 Segmen.

Langkah 1: Wawasan

Wawasan
Wawasan

Mari kita mulai!

Inisialisasi pengatur waktu pengawas ke status OFF menggunakan kata sandi yang diperlukan untuk pengatur waktu pengawas (Ini membantu untuk tetap memeriksa loop tak terbatas, menjaga prosesor tetap aman).

#termasuk

/** * utama.c */

int utama (kosong)

{

WDTCTL = WDTPW | WDTHOLD; // hentikan pengatur waktu pengawas

kembali 0;

}

Langkah 2: Inisialisasi Port

{

P3DIR=0xFF; // P3DIR=0x00;

P6DIR=0xFF;

P4DIR |=0x00;

P4REN |=0xFF;

P4OUT |=0xFF;

}

P3DIR |=0x00 memberitahu kita bahwa seluruh PORT-3 diinisialisasi untuk mengambil input.

P3DIR |=0xFF memberitahu kita bahwa seluruh PORT-3 diinisialisasi untuk memberikan output.

P3DIR |=0x01 hanya pin P3.0 yang diinisialisasi ke output di PORT-3. Ini mengikuti pemetaan Port Heksadesimal.

P4REN |=0xFF, ini menunjukkan bahwa pin PORT-4 memiliki resistor pull up/down yang diaktifkan.

Untuk memilihnya antara Pull UP atau Pull DOWN, digunakan instruksi P$OUT |=0xFF.

Jika 0xFF digunakan mereka mengkonfigurasi sebagai resistor Pull UP dan jika 0x00 mereka mengkonfigurasi sebagai Pull DOWN.

Langkah 3: Daya Ultra Rendah

MSP430F5529 memungkinkan kita untuk mengurangi kehilangan daya dari prosesor. Ini berguna dalam aplikasi mandiri.

Ini panggilan untuk deklarasi semua pin atau Port ke output.

{

P7DIR |= 0xFF;

P6DIR |= 0xFF;

P5DIR |= 0xFF;

P4DIR |= 0xFF;

P3DIR |= 0xFF;

P2DIR |= 0xFF;

P1DIR |= 0xFF;

}

Langkah 4: TIMER

Penggunaan timer untuk Delay generasi satu detik. Ini menggunakan SMCLK 1MHz, juga timer berjalan dalam Mode Daya Rendah (pada langkah berikutnya, setelah penghitungannya terputus dari LPM). Proses ini menghemat daya dan beban pada prosesor

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

Nilainya adalah 999, karena dibutuhkan satu hitungan lagi untuk memutar kembali ke nol di register pengatur waktu.

Langkah 5: Mode Daya Rendah

_BIS_SR(LPM0_bits+GIE);

Ini mengaktifkan General interrupt Enable (GIE), dan menempatkan CPU ke LPM0, di mana MCLK yang mendukung cpu dimatikan, dan SMCLK dan ACLK run yang membuat timer tetap berjalan. jadi kita bisa melihat CPU dimatikan, di sana dengan menghemat daya.

Langkah 6: ISR-Timer

ISR-Timer
ISR-Timer

#pragma vector=TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z++;

jika(z>tunda)

{

P3OUT=kode[x];

P6OUT=kode1[y];

x++;

jika(x==10)

{

x=0;

y++;

}

jika(y==6)

y=0;

z=0;

}

}

vektor pragma adalah untuk representasi ISR di C embd.

code[x] dan code1[y] adalah array yang berisi nilai output untuk dua tujuh segmen, untuk menampilkan penghitung 60 detik.

Langkah 7: Interupsi Perangkat Keras

P2DIR=0x00;

P2REN=0x02;

P2OUT=0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

Di sini P2.1 dideklarasikan sebagai interupsi perangkat keras, jika tombol ditekan, penghitung akan direset ke nilainya.

program sisanya ditulis di dalam ISR dari interupsi ini.

Langkah 8: ISR- Atur Ulang / Tombol Tekan

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0; y=0;

P3OUT=kode[x];

P6OUT=kode1[y];

v++;

untuk(i=0;i

{

P1OUT |= BIT0; //P1.0 = beralih

_delay_cycles(1048576);

P1OUT &=~BIT0; // P1.0 = beralih

_delay_cycles(1048576);

}

ISR ini mengatur ulang penghitung, dan menghitung berapa kali sisanya ditekan.

(Disini tampilan dibuat melalui led toggle, bisa juga menggunakan array dan timer lain, untuk menampilkan nilai-nilai tersebut sebagai output di 7 segmen).

Langkah 9: KODE

KODE
KODE

#termasuk

#tentukan penundaan 1000

kode karakter={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

kode karakter1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

volatile unsigned int x=0, y=0, z=0;

volatile unsigned int v=0, i=0;

batal utama()

{

WDTCTL = WDTPW | WDTHOLD; // hentikan pengatur waktu pengawas

P7DIR |= 0xFF;

P7OUT |= 0x00;

P8DIR |= 0xFF;

P8OUT |= 0x00;

P4DIR |= 0xFF;

P4OUT |= 0x00;

P5DIR |= 0xFF;

P5OUT |= 0x00;

P1DIR=0xFF;

P3DIR=0xFF;

P6DIR=0xFF;

P2DIR=0x00;

P2REN=0x02;

P2OUT=0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR(LPM0_bits+GIE);

}

// Rutin layanan interupsi timer A0

#pragma vector=TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z++;

jika(z>tunda)

{

P3OUT=kode[x];

P6OUT=kode1[y];

x++;

jika(x==10)

{

x=0;

y++;

}

jika(y==6)

y=0;

z=0;

}

}

// Rutin layanan interupsi perangkat keras

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0;

y=0;

P3OUT=kode[x];

P6OUT=kode1[y];

v++;

untuk(i=0;i

{ P1OUT |= BIT0; // P1.0 = beralih

_delay_cycles(1048576);

P1OUT &=~BIT0; // P1.0 = beralih

_delay_cycles(1048576);

}

}

Langkah 10: Kode Referensi

Kode referensi
Kode referensi

Repositori GitHub

Direkomendasikan: