Mundarija:

MSP430 soniya hisoblagichi: 10 qadam
MSP430 soniya hisoblagichi: 10 qadam

Video: MSP430 soniya hisoblagichi: 10 qadam

Video: MSP430 soniya hisoblagichi: 10 qadam
Video: MSP430 Nixie Clock 2024, Noyabr
Anonim
MSP430 soniya hisoblagichi
MSP430 soniya hisoblagichi

Xush kelibsiz! Soniya hisoblagichini yaratish: loyiha uchun CCStudio 8 va MSP430F5529 dan foydalanish.

Mikro tekshirgichni kodlash uchun C tili. Kam quvvatli rejimlar, taymerlar va uzilishlar. Chiqish 7 segment orqali ko'rsatiladi.

1 -qadam: tushuncha

Fikr
Fikr

Boshlaylik!

Kuzatuvchi taymeri uchun zarur parol yordamida qo'riqchi taymerini O'chirish holatiga o'tkazing (bu protsessor xavfsizligini ta'minlash uchun cheksiz tsikllarni tekshirishga yordam beradi).

#qo'shing

/** * asosiy.c */

int main (bekor)

{

WDTCTL = WDTPW | WDTHOLD; // qo'riqchi taymerini to'xtatish

qaytarish 0;

}

2 -qadam: Portni ishga tushirish

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 bizga PORT-3 ning butun qismi kirish uchun ishga tushirilganligini aytadi.

P3DIR | = 0xFF bizga aytadiki, PORT-3 ning hammasi chiqish uchun ishga tushirilgan.

P3DIR | = 0x01 faqat P3.0 pimi PORT-3da chiqish uchun ishga tushiriladi. Bu o'n oltilik portni xaritalashdan so'ng sodir bo'ladi.

P4REN | = 0xFF, bu shuni ko'rsatadiki, PORT-4 pinlari yuqoriga/pastga qarshiliklari yoqilgan.

Ularni Pull UP yoki Pull DOWN orasidan tanlash uchun P $ OUT | = 0xFF buyrug'i ishlatiladi.

Agar 0xFF ishlatilsa, ular Pull UP rezistorlari sifatida konfiguratsiya qilinadi, 0x00 esa POWN DOWN.

3 -qadam: Ultra past quvvat

MSP430F5529 protsessordan quvvat yo'qotilishini kamaytirishga imkon beradi. Bu mustaqil dasturlarda foydalidir.

Bu barcha pinlar yoki portlarning chiqarilishini e'lon qilishni talab qiladi.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4 -qadam: TIMER

Bir soniyani kechiktirish uchun taymerdan foydalanish. Bu 1 MGts chastotali SMCLK -dan foydalanadi, shuningdek taymer past quvvatli rejimda ishlaydi (keyingi bosqichda uning hisobi LPMdan uziladi). Bu protsessor yukini va quvvatini tejaydi

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Qiymatlar - 999, chunki taymer registrida nolga qaytish uchun yana bir marta hisoblash kerak.

5 -qadam: Kam quvvat rejimi

_BIS_SR (LPM0_bits+GIE);

Bu Umumiy uzilishni yoqish (GIE) ni ishga tushiradi va protsessorni LPM0 ga qo'yadi, bu erda protsessorni qo'llab -quvvatlaydigan MCLK o'chirilgan va taymer ishlashini ta'minlaydigan SMCLK va ACLK ishlaydi. Shunday qilib, biz quvvatni tejash orqali CPU o'chirilganini ko'rishimiz mumkin.

6-qadam: ISR-taymer

ISR-taymer
ISR-taymer

#pragma vektori = TIMER0_A0_VEKTOR

_ uzilish bo'shligi Timer_A (bo'sh)

{

z ++;

agar (z> kechikish)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

agar (x == 10)

{

x = 0;

y ++;

}

agar (y == 6)

y = 0;

z = 0;

}

}

pragma vektori I emblemasi uchun C embd.

kod [x] va kod1 [y] - bu 60 sekundli hisoblagichni ko'rsatish uchun ikkita etti segment uchun chiqish qiymatlarini o'z ichiga olgan massivlar.

7 -qadam: Uskuna uzilishi

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Bu erda P2.1 uskuna uzilishi deb e'lon qilinadi, agar tugma bosilsa, hisoblagich qiymatga qaytadi.

qolgan dastur bu uzilish ISR ichida yozilgan.

8-qadam: ISR- Qayta tiklash/ bosish tugmasi

#pragma vektori = PORT2_VEKTOR

_ uzilish void port_2 (bekor)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

uchun (i = 0; i

{

P1OUT | = BIT0; //P1.0 = o'tish

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = o'tish

_delay_cycles (1048576);

}

Bu ISR hisoblagichni qayta o'rnatadi va qolganlari necha marta bosilganligini hisoblab chiqadi.

(Bu erda displey LEDni almashtirish orqali amalga oshiriladi, shuningdek, bu qiymatlarni 7 segmentda chiqish sifatida ko'rsatish uchun boshqa qator va taymerdan foydalanish mumkin).

9 -qadam: KOD

KOD
KOD

#qo'shing

#kechikish 1000ni aniqlang

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

char kod1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

uchuvchi belgisiz int x = 0, y = 0, z = 0;

uchuvchi belgisiz int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // qo'riqchi taymerini to'xtatish

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

}

// Taymer A0 uzilish xizmati tartibi

#pragma vektori = TIMER0_A0_VEKTOR

_ uzilish bo'shligi Timer_A (bo'sh)

{

z ++;

agar (z> kechikish)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

agar (x == 10)

{

x = 0;

y ++;

}

agar (y == 6)

y = 0;

z = 0;

}

}

// Uskuna uzilishlarining xizmat ko'rsatish tartibi

#pragma vektori = PORT2_VEKTOR

_ uzilish void port_2 (bekor)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

uchun (i = 0; i

{P1OUT | = BIT0; // P1.0 = o'tish

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = o'tish

_delay_cycles (1048576);

}

}

10 -qadam: Malumot kodi

Malumot kodi
Malumot kodi

GitHub ombori

Tavsiya: