Isi kandungan:

Kaunter Detik MSP430: 10 Langkah
Kaunter Detik MSP430: 10 Langkah

Video: Kaunter Detik MSP430: 10 Langkah

Video: Kaunter Detik MSP430: 10 Langkah
Video: Tidak Sampai Satu Menit, Skak Matt Tercipta. Korban Menteri dan Dua Pion 2024, November
Anonim
Kaunter Detik MSP430
Kaunter Detik MSP430

Selamat datang! Pembuatan Pembilang Detik: Menggunakan CCStudio 8 dan MSP430F5529 untuk projek tersebut.

Bahasa C untuk kod pengawal mikro. Menerapkan Mod, Pemasa dan Gangguan Kuasa Rendah. Output dipaparkan melalui 7 Segmen.

Langkah 1: Wawasan

Wawasan
Wawasan

Mari kita mulakan!

Memulakan pemasa pengawas ke keadaan MATI menggunakan kata laluan yang diperlukan untuk pemasa pengawas (Ini membantu untuk memeriksa gelung tanpa batas, menjaga pemproses selamat).

#sertakan

/ ** * main.c * /

int utama (tidak sah)

{

WDTCTL = WDTPW | WDTHOLD; // berhenti pemasa pengawas

pulangan 0;

}

Langkah 2: Permulaan Pelabuhan

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 memberitahu kita bahawa keseluruhan PORT-3 diinisialisasi untuk mengambil input.

P3DIR | = 0xFF memberitahu kita bahawa keseluruhan PORT-3 diinisialisasi untuk memberikan output.

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

P4REN | = 0xFF, ini menunjukkan bahawa pin PORT-4 mempunyai perintang tarikan atas / bawah mereka diaktifkan.

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

Sekiranya 0xFF digunakan mereka mengkonfigurasi sebagai perintang Pull UP dan jika 0x00 mereka mengkonfigurasi sebagai Tarik KE BAWAH.

Langkah 3: Kuasa Ultra Rendah

MSP430F5529 membolehkan kita mengurangkan kehilangan kuasa dari pemproses. Ini berguna dalam aplikasi mandiri.

Ini memerlukan pengisytiharan untuk mengeluarkan semua pin atau Pelabuhan.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Langkah 4: PEMASA

Penggunaan pemasa untuk penjanaan kelewatan satu saat. Ini menggunakan SMCLK 1MHz, juga pemasa berjalan dalam Mod daya rendah (pada langkah seterusnya, setelah kiraannya terganggu dari LPM). Proses ini menjimatkan kuasa dan beban pada pemproses

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Nilai adalah 999, kerana jumlah yang diperlukan sekali lagi untuk kembali ke sifar dalam daftar pemasa.

Langkah 5: Mod Kuasa Rendah

_BIS_SR (LPM0_bits + GIE);

Ini membolehkan General Interrupt Enable (GIE), dan meletakkan CPU ke LPM0, di mana MCLK yang menyokong cpu dimatikan, dan SMCLK dan ACLK dijalankan yang memastikan pemasa berjalan. sehingga kita dapat melihat CPU dimatikan, di sana dengan menjimatkan kuasa.

Langkah 6: Pemasa ISR

Pemasa ISR
Pemasa ISR

#pragma vektor = TIMER0_A0_VECTOR

_teruskan kekosongan Pemasa_A (tidak sah)

{

z ++;

jika (z> kelewatan)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

jika (x == 10)

{

x = 0;

y ++;

}

jika (y == 6)

y = 0;

z = 0;

}

}

vektor pragma adalah untuk perwakilan ISR di C embd.

kod [x] dan kod1 [y] adalah tatasusunan yang mengandungi nilai output untuk dua tujuh segmen, untuk memaparkan pembilang 60 saat.

Langkah 7: Gangguan Perkakasan

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Di sini P2.1 dinyatakan sebagai gangguan perkakasan, jika butang ditekan, kaunter diset semula ke nilainya.

program selebihnya ditulis dalam ISR gangguan ini.

Langkah 8: ISR- Tetapkan Semula / Butang Tekan

#pragma vektor = PORT2_VECTOR

_menutup port kosong_2 (tidak sah)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

untuk (i = 0; i

{

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

ISR ini menetapkan semula kaunter, dan mengira berapa kali selebihnya ditekan.

(Berikut adalah tampilan yang dibuat melalui toggle led, juga dapat menggunakan array dan timer lain, untuk menunjukkan nilai-nilai tersebut sebagai output dalam 7 segmen).

Langkah 9: KOD

KOD
KOD

#sertakan

#tentukan kelewatan 1000

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

kod char1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

int tidak bertanda yang tidak menentu x = 0, y = 0, z = 0;

tidak bertanda int v = 0, i = 0;

kekosongan utama ()

{

WDTCTL = WDTPW | WDTHOLD; // berhenti pemasa 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);

}

// Pemasa A0 mengganggu rutin perkhidmatan

#pragma vektor = TIMER0_A0_VECTOR

_ interrupt void Timer_A (tidak sah)

{

z ++;

jika (z> kelewatan)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

jika (x == 10)

{

x = 0;

y ++;

}

jika (y == 6)

y = 0;

z = 0;

}

}

// Perkakasan mengganggu rutin perkhidmatan

#pragma vektor = PORT2_VECTOR

_menutup port kosong_2 (tidak sah)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

untuk (i = 0; i

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

}

Langkah 10: Kod Rujukan

Kod rujukan
Kod rujukan

Repositori GitHub

Disyorkan: