Агуулгын хүснэгт:

MSP430 секундын тоолуур: 10 алхам
MSP430 секундын тоолуур: 10 алхам

Видео: MSP430 секундын тоолуур: 10 алхам

Видео: MSP430 секундын тоолуур: 10 алхам
Видео: Лекция 6. Обзор контроллера MSP-430 2024, Долдугаар сарын
Anonim
MSP430 секундын тоолуур
MSP430 секундын тоолуур

Тавтай морилно уу! Секунд тоолуур хийх: Төсөлд CCStudio 8 болон MSP430F5529 ашиглах.

Микро хянагчийг кодлох C хэл. Бага чадлын горим, таймер, тасалдлыг ашиглах. Үр дүнг 7 сегментээр харуулна.

Алхам 1: Ойлголт

Ойлголт
Ойлголт

Эхлээд үзье!

Харуулын нохойны таймерын шаардлагатай нууц үгийг ашиглан харуулын нохойны таймерыг OFF горимд эхлүүлэх (Энэ нь хязгааргүй гогцоог шалгаж, процессорыг аюулгүй байлгахад тусалдаг).

#оруулах

/** * үндсэн.c */

int main (хүчингүй)

{

WDTCTL = WDTPW | WDTHOLD; // манаачийн цаг хэмжигчийг зогсоох

буцаах 0;

}

Алхам 2: Порт эхлүүлэх

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 нь оролт авахын тулд PORT-3-ийг бүхэлд нь эхлүүлсэн болохыг бидэнд хэлдэг.

P3DIR | = 0xFF нь гаралт өгөхийн тулд PORT-3-ийг бүхэлд нь эхлүүлсэн гэж бидэнд хэлдэг.

P3DIR | = 0x01 зөвхөн P3.0 зүүг PORT-3 дээр гаргахаар эхлүүлсэн. Энэ нь арван зургаатын портын зураглалыг дагана.

P4REN | = 0xFF, энэ нь PORT-4-ийн тээглүүр нь дээш/доош татах эсэргүүцлийг идэвхжүүлсэн болохыг харуулж байна.

Pull UP эсвэл Pull DOWN хооронд тэдгээрийг сонгохын тулд P $ OUT | = 0xFF зааврыг ашиглана.

Хэрэв 0xFF -ийг ашиглавал тэдгээрийг Pull UP резистороор, 0x00 бол Pull DOWN гэж тохируулдаг.

Алхам 3: Хэт бага хүч

MSP430F5529 нь процессороос гарах эрчим хүчний алдагдлыг бууруулах боломжийг бидэнд олгодог. Энэ нь бие даасан програмуудад ашигтай байдаг.

Энэ нь бүх зүү эсвэл портуудыг гаргахыг зарлахыг шаарддаг.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Алхам 4: TIMER

Нэг секундын саатал гаргах таймерын хэрэглээ. Энэ нь 1MHz -ийн SMCLK -ийг ашигладаг бөгөөд таймер нь бага чадлын горимд ажилладаг (дараагийн алхамд тооллогын дараа LPM -ээс тасалдсан). Энэ процесс нь процессор дээр ачаалал, хүчийг хэмнэдэг

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Таймерын бүртгэлд тэг рүү буцаж орохын тулд дахин нэг тоолох шаардлагатай болдог тул утга нь 999 байна.

Алхам 5: Бага эрчим хүчний горим

_BIS_SR (LPM0_bits+GIE);

Энэ нь General interrupt Enable (GIE) -г идэвхжүүлж, CPU -ийг LPM0 -д оруулдаг бөгөөд энд CPU -г дэмждэг MCLK унтраалттай, таймерыг ажиллуулдаг SMCLK ба ACLK ажиллуулдаг. Цахилгаан хэмнэх замаар CPU унтарсан байгааг бид харж байна.

Алхам 6: ISR-таймер

ISR-таймер
ISR-таймер

#прагма вектор = TIMER0_A0_VECTOR

_ тасалдал хоосон Timer_A (хүчингүй)

{

z ++;

хэрэв (z> саатал)

{

P3OUT = код [x];

P6OUT = код1 [y];

x ++;

хэрэв (x == 10)

{

x = 0;

y ++;

}

хэрэв (y == 6)

y = 0;

z = 0;

}

}

прагма вектор нь C embd дахь ISR дүрслэлд зориулагдсан болно.

code [x] ба code1 [y] нь 60 секундын тоолуурыг харуулах хоёр долоон сегментийн гаралтын утгыг агуулсан массивууд юм.

Алхам 7: Тоног төхөөрөмжийн тасалдал

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Энд P2.1 -ийг тоног төхөөрөмжийн тасалдал гэж зарласан бөгөөд хэрэв товчлуур дарагдсан бол тоолуур нь утга руу дахин орно.

үлдсэн програмыг энэ тасалдлын ISR дотор бичсэн болно.

Алхам 8: ISR- Дахин тохируулах/ түлхэх товч

#прагма вектор = ПОРТ2_ВЕКТОР

_ тасалдал void port_2 (хүчингүй)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = код [x];

P6OUT = код1 [y];

v ++;

for (i = 0; би

{

P1OUT | = BIT0; //P1.0 = сэлгэх

_хугацаа_цикл (1048576);

P1OUT & = ~ BIT0; // P1.0 = сэлгэх

_хугацаа_цикл (1048576);

}

Энэхүү ISR нь тоолуурыг анхны байдалд нь оруулж, үлдсэнийг нь хэдэн удаа дарсан тухай тооллогыг хийдэг.

(Энд дэлгэцийг LED товчлуураар хийдэг, өөр массив, таймер ашиглан эдгээр утгыг 7 сегментэд гаралт болгон харуулах боломжтой).

Алхам 9: КОД

КОД
КОД

#оруулах

#хойшлуулах хугацааг 1000 тодорхойлох

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

char код1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

дэгдэмхий тэмдэггүй int x = 0, y = 0, z = 0;

дэгдэмхий тэмдэггүй int v = 0, i = 0;

хоосон үндсэн ()

{

WDTCTL = WDTPW | WDTHOLD; // харуулын нохойн цаг хэмжигчийг зогсоох

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

}

// Таймер A0 тасалдлын үйлчилгээний горим

#прагма вектор = TIMER0_A0_VECTOR

_ тасалдал хоосон Timer_A (хүчингүй)

{

z ++;

хэрэв (z> саатал)

{

P3OUT = код [x];

P6OUT = код1 [y];

x ++;

хэрэв (x == 10)

{

x = 0;

y ++;

}

хэрэв (y == 6)

y = 0;

z = 0;

}

}

// Тоног төхөөрөмжийн тасалдлын үйлчилгээний горим

#прагма вектор = ПОРТ2_ВЕКТОР

_ тасалдал void port_2 (хүчингүй)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = код [x];

P6OUT = код1 [y];

v ++;

for (i = 0; би

{P1OUT | = BIT0; // P1.0 = сэлгэх

_хугацаа_цикл (1048576);

P1OUT & = ~ BIT0; // P1.0 = сэлгэх

_хугацаа_цикл (1048576);

}

}

Алхам 10: Лавлах код

Лавлах код
Лавлах код

GitHub репозитор

Зөвлөмж болгож буй: