Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Dobrodošli! Izdelava števcev sekund: z uporabo CCStudio 8 in MSP430F5529 za projekt.
C jezik za kodiranje mikro krmilnika. Uporaba načinov nizke porabe energije, časovnikov in prekinitev. Izhod je prikazan prek 7 segmentov.
1. korak: Vpogled
Začnimo!
Inicializirajte časovnik nadzornika v stanje OFF (IZKLOPLJENO) z uporabo zahtevanega gesla za časovnika nadzornika (Pomaga pri preverjanju neskončnih zank, pri čemer je procesor varen).
#vključi
/** * main.c */
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; // ustavitev časovnika nadzornika
vrnitev 0;
}
2. korak: Inicializacija vrat
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 nam pove, da je celoten PORT-3 inicializiran, da sprejme vnose.
P3DIR | = 0xFF nam pove, da je celoten PORT-3 inicializiran, da daje izhode.
P3DIR | = 0x01 je samo pin P3.0 inicializiran za izhod v PORT-3. To sledi preslikavi šestnajstiških vrat.
P4REN | = 0xFF, to pomeni, da so na zatičih PORT-4 omogočeni upori navzgor/navzdol.
Če jih želite izbrati med vlečenjem navzgor ali navzdol, uporabite navodilo P $ OUT | = 0xFF.
Če se uporablja 0xFF, se konfigurirajo kot upori navzgor, če pa 0x00, se potegnejo navzdol.
Korak: Ultra nizka poraba energije
MSP430F5529 nam omogoča zmanjšanje izgube energije iz procesorja. To je uporabno v samostojnih aplikacijah.
To zahteva deklaracijo vseh pin ali portov za izhod.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
4. korak: TIMER
Uporaba časovnika za zakasnitev ene sekunde. Ta uporablja SMCLK 1MHz, časovnik deluje tudi v načinu nizke porabe energije (v naslednjem koraku, ko se štetje prekine iz LPM). Ta postopek prihrani moč in obremenitev procesorja
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
Vrednosti so 999, saj je za vrnitev na nič v registru časovnika potrebno še eno štetje.
5. korak: Način nizke porabe energije
_BIS_SR (LPM0_bit+GIE);
S tem je omogočeno Splošno omogočanje prekinitve (GIE), CPU pa nastavljen na LPM0, kjer je MCLK, ki podpira procesor, izklopljen, SMCLK in ACLK pa delujeta, da ohrani časovnik. tako lahko vidimo, da je CPU izklopljen, kar je posledica varčevanja z energijo.
6. korak: ISR-Timer
#pragma vektor = TIMER0_A0_VECTOR
_ prekini void Timer_A (void)
{
z ++;
če (z> zamuda)
{
P3OUT = koda [x];
P6OUT = šifra1 [y];
x ++;
če (x == 10)
{
x = 0;
y ++;
}
če (y == 6)
y = 0;
z = 0;
}
}
vektor pragme je za predstavitev ISR v C embd.
code [x] in code1 [y] sta matriki, ki vsebujeta izhodne vrednosti za dva sedem segmentov za prikaz 60 -sekundnega števca.
7. korak: Prekinitev strojne opreme
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
Tu je P2.1 razglašen za strojno prekinitev. Če pritisnete gumb, se števec ponastavi na vrednost.
preostali program je zapisan znotraj ISR tega prekinitve.
8. korak: ISR- ponastavitev/ potisni gumb
#pragma vektor = PORT2_VECTOR
_prekini void port_2 (void)
{
P2IFG & = ~ BIT1;
x = 0; y = 0;
P3OUT = koda [x];
P6OUT = šifra1 [y];
v ++;
za (i = 0; i
{
P1OUT | = BIT0; //P1.0 = preklop
_odložni_cikli (1048576);
P1OUT & = ~ BIT0; // P1.0 = preklop
_odstavljivi_cikli (1048576);
}
Ta ISR ponastavi števec in šteje, kolikokrat je bil pritisnjen preostanek.
(Tukaj je prikaz prikazan preko LED preklopa, lahko uporabite tudi drugo matriko in časovnik, da prikažete te vrednosti kot izhod v 7 segmentu).
9. korak: KODA
#vključi
#define delay 1000
koda char = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
hlapni nepodpisani int x = 0, y = 0, z = 0;
hlapni nepodpisani int v = 0, i = 0;
void main ()
{
WDTCTL = WDTPW | WDTHOLD; // ustavitev časovnika nadzornika
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_bit+GIE);
}
// Časovna rutina prekinitve časa A0
#pragma vektor = TIMER0_A0_VECTOR
_ prekini void Timer_A (void)
{
z ++;
če (z> zamuda)
{
P3OUT = koda [x];
P6OUT = šifra1 [y];
x ++;
če (x == 10)
{
x = 0;
y ++;
}
če (y == 6)
y = 0;
z = 0;
}
}
// Storitvena rutina strojne prekinitve
#pragma vektor = PORT2_VECTOR
_prekini void port_2 (void)
{
P2IFG & = ~ BIT1;
x = 0;
y = 0;
P3OUT = koda [x];
P6OUT = šifra1 [y];
v ++;
za (i = 0; i
{P1OUT | = BIT0; // P1.0 = preklop
_odstavljivi_cikli (1048576);
P1OUT & = ~ BIT0; // P1.0 = preklop
_odstavljivi_cikli (1048576);
}
}
10. korak: Referenčna koda
Skladišče GitHub