Мазмұны:

MSP430 секунд санағышы: 10 қадам
MSP430 секунд санағышы: 10 қадам

Бейне: MSP430 секунд санағышы: 10 қадам

Бейне: MSP430 секунд санағышы: 10 қадам
Бейне: TiTAN. MSP430. Умная теплица. 2024, Желтоқсан
Anonim
MSP430 секунд санағышы
MSP430 секунд санағышы

Қош келдіңіз! Seconds Counter жасау: жоба үшін CCStudio 8 мен MSP430F5529 қолдану.

Микроконтроллерді кодтау үшін C тілі. Төмен қуат режимдерін, таймерлер мен үзілістерді қолдану. Шығу 7 сегмент арқылы көрсетіледі.

1 -қадам: түсінік

Түсінік
Түсінік

Бастайық!

Күзетші таймері үшін қажетті құпия сөзді қолданып, күзетші таймерін ӨШІРУ күйіне келтіріңіз (процессордың қауіпсіздігін сақтай отырып, шексіз ілмектерді тексеруге көмектеседі).

#қосу

/** * негізгі.c */

int main (жарамсыз)

{

WDTCTL = WDTPW | WDTHOLD; // күзетші таймерін тоқтату

қайтару 0;

}

2 -қадам: Портты инициализациялау

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 бізге ПОРТ-3 түгелдей кіріс енгізу үшін инициализацияланғанын айтады.

P3DIR | = 0xFF бізге ПОРТ-3 түгелдей шығыс беру үшін инициализацияланғанын айтады.

P3DIR | = 0x01 PORT-3 шығысына тек P3.0 түйрегіші инициализацияланған. Бұл он алтылық портты салыстырудан кейін.

P4REN | = 0xFF, бұл PORT-4 түйреуіштерінің жоғары/төмен тартылатын резисторлары қосылғанын көрсетеді.

Оларды Pull UP немесе Pull DOWN арасында таңдау үшін P $ OUT | = 0xFF нұсқауы қолданылады.

Егер 0xFF қолданылса, олар Pull UP резисторлары ретінде конфигурацияланады, ал 0x00 - POW DOWN ретінде конфигурацияланады.

3 -қадам: Өте төмен қуат

MSP430F5529 процессордан қуат шығынын азайтуға мүмкіндік береді. Бұл дербес қосымшаларда пайдалы.

Бұл барлық түйреуіштерді немесе порттарды шығаруды жариялауды талап етеді.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4 -қадам: ТАЙМЕР

Бір секундқа кешіктіру үшін таймерді қолдану. Бұл 1MHz SMCLK пайдаланады, сонымен қатар таймер төмен қуат режимінде жұмыс істейді (келесі қадамда, оның есептелуінен кейін LPM үзіледі). Бұл процесс процессорға жүктеме мен қуатты үнемдейді

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Мәндер - 999, өйткені таймер регистрінде нөлге оралу үшін тағы бір есеп қажет.

5 -қадам: төмен қуат режимі

_BIS_SR (LPM0_bits+GIE);

Бұл жалпы үзілісті қосуды қосады (GIE) және процессорды LPM0 күйіне қояды, мұнда процессорды қолдайтын MCLK өшірулі, ал таймердің жұмыс істеуін қамтамасыз ететін SMCLK және ACLK жұмыс істейді. біз қуатты үнемдеу арқылы процессордың өшірілгенін көре аламыз.

6-қадам: ISR-таймер

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

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

_ үзіліссіз уақыт Timer_A (жарамсыз)

{

z ++;

егер (z> кешіктіру)

{

P3OUT = коды [x];

P6OUT = код1 [у];

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- қалпына келтіру/ басу түймесі

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

_ үзіліс жарамсыз порт_2 (жарамсыз)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = коды [x];

P6OUT = код1 [у];

v ++;

үшін (i = 0; i

{

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 code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

тұрақсыз белгісіз int x = 0, y = 0, z = 0;

тұрақсыз белгісіз int v = 0, i = 0;

void main ()

{

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 [у];

x ++;

егер (x == 10)

{

x = 0;

y ++;

}

егер (y == 6)

y = 0;

z = 0;

}

}

// Аппаратты үзу қызметі

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

_ үзіліс жарамсыз порт_2 (жарамсыз)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = коды [x];

P6OUT = код1 [у];

v ++;

үшін (i = 0; i

{P1OUT | = BIT0; // P1.0 = ауысу

_кідіріс_циклдар (1048576);

P1OUT & = ~ BIT0; // P1.0 = ауысу

_ кешіктіру_циклдары (1048576);

}

}

10 -қадам: Анықтама коды

Анықтама коды
Анықтама коды

GitHub репозиторийі

Ұсынылған: