Სარჩევი:

MSP430 წამის მრიცხველი: 10 ნაბიჯი
MSP430 წამის მრიცხველი: 10 ნაბიჯი

ვიდეო: MSP430 წამის მრიცხველი: 10 ნაბიჯი

ვიდეო: MSP430 წამის მრიცხველი: 10 ნაბიჯი
ვიდეო: Лекция 6. Обзор контроллера MSP-430 2024, ნოემბერი
Anonim
MSP430 წამების მრიცხველი
MSP430 წამების მრიცხველი

მოგესალმებით! წამების მრიცხველის დამზადება: პროექტისათვის CCStudio 8 და MSP430F5529 გამოყენება.

C ენა მიკრო კონტროლერის დასაკოდირებლად. დაბალი სიმძლავრის რეჟიმების, ტაიმერების და შეფერხებების გამოყენება. გამომავალი ნაჩვენებია 7 სეგმენტის საშუალებით.

ნაბიჯი 1: გამჭრიახობა

გამჭრიახობა
გამჭრიახობა

Მოდით დავიწყოთ!

ინიციალიზაცია მოახდინეთ გუშაგის ქრონომეტრის OFF მდგომარეობისათვის საჭირო პაროლის გამოყენებით დარაჯის ქრონომეტრის გამოყენებით (ეს ხელს უწყობს უსასრულო მარყუჟების შემოწმებას, პროცესორის დაცვას).

#ჩართეთ

/** * main.c */

მთავარი (ბათილია)

{

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 მხოლოდ pin P3.0 ინიციალიზებულია PORT-3– ში გამოსასვლელად. ეს მოყვება ჰექსადეციმალური პორტის რუქას.

P4REN | = 0xFF, ეს მიუთითებს იმაზე, რომ PORT-4- ის ქინძისთავებს აქვთ გაწეული/ქვემოთ მიმართული რეზისტორები ჩართული.

Pull UP ან Pull DOWN შორის მათ ასარჩევად გამოიყენება ინსტრუქცია P $ OUT | = 0xFF.

თუ 0xFF გამოიყენება, ისინი კონფიგურირდება როგორც Pull UP რეზისტორების და თუ 0x00 კონფიგურაციის როგორც Pull DOWN.

ნაბიჯი 3: ულტრა დაბალი სიმძლავრე

MSP430F5529 საშუალებას გვაძლევს შევამციროთ ენერგიის დაკარგვა პროცესორიდან. ეს სასარგებლოა დამოუკიდებელი პროგრამებისთვის.

ეს მოითხოვს გამოაქვეყნოს ყველა pin ან Ports გამომავალი.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

ნაბიჯი 4: დრო

ტაიმერის გამოყენება ერთი წამის გადადების დაგვიანებისთვის. ეს იყენებს SMCLK 1 მჰც -ს, ასევე ტაიმერი მუშაობს დაბალი სიმძლავრის რეჟიმში (მომდევნო ეტაპზე, მას შემდეგ რაც მისი დათვლა შეწყვეტილია LPM– დან). ეს პროცესი დაზოგავს ენერგიასა და ტვირთს პროცესორზე

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

ღირებულებებია 999, რადგანაც საჭიროა კიდევ ერთი დათვლა ტაიმერის რეესტრში ნულის დასაბრუნებლად.

ნაბიჯი 5: დაბალი ენერგიის რეჟიმი

_BIS_SR (LPM0_bits+GIE);

ეს შესაძლებელს ხდის გენერალური შეწყვეტის ჩართვას (GIE) და აყენებს პროცესორს LPM0– ზე, სადაც MCLK, რომელიც მხარს უჭერს cpu– ს, გამორთულია და SMCLK და ACLK მუშაობს, რომელიც ინარჩუნებს ტაიმერს. ასე რომ ჩვენ ვხედავთ პროცესორი გამორთულია, იქ ენერგიის დაზოგვით.

ნაბიჯი 6: ISR- ტაიმერი

ISR- ტაიმერი
ISR- ტაიმერი

#პრაგმის ვექტორი = TIMER0_A0_VECTOR

_ უწყვეტი სიცარიელის ტაიმერი_A (ბათილია)

{

z ++;

თუ (z> დაგვიანებით)

{

P3OUT = კოდი [x];

P6OUT = კოდი 1 [y];

x ++;

თუ (x == 10)

{

x = 0;

y ++;

}

თუ (y == 6)

y = 0;

z = 0;

}

}

პრაგმის ვექტორი არის ISR წარმომადგენლობისათვის C embd.

კოდი [x] და კოდი 1 [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 [y];

v ++;

for (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 კოდი 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

_ უწყვეტი სიცარიელის ტაიმერი_A (ბათილია)

{

z ++;

თუ (z> დაგვიანებით)

{

P3OUT = კოდი [x];

P6OUT = კოდი 1 [y];

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

v ++;

for (i = 0; i

{P1OUT | = BIT0; // P1.0 = გადართვა

_ დაგვიანებული_ციკლები (1048576);

P1OUT & = ~ BIT0; // P1.0 = გადართვა

_ დაგვიანებული_ციკლები (1048576);

}

}

ნაბიჯი 10: საცნობარო კოდი

საცნობარო კოდი
საცნობარო კოდი

GitHub საცავი

გირჩევთ: