MSP430 წამის მრიცხველი: 10 ნაბიჯი
MSP430 წამის მრიცხველი: 10 ნაბიჯი
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 საცავი

გირჩევთ: