Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Tere tulemast! Sekundite loenduri tegemine: projekti jaoks CCStudio 8 ja MSP430F5529 kasutamine.
C keel mikrokontrolleri kodeerimiseks. Vähese energiatarbega režiimide, taimerite ja katkestuste rakendamine. Väljundit kuvatakse 7 segmendi kaudu.
1. samm: ülevaade
Alustagem!
Initsialiseerige valvekoera taimer väljalülitatud olekusse, kasutades valvekoera taimeri jaoks vajalikku parooli (see aitab kontrollida lõpmatuid silmuseid, tagades protsessori turvalisuse).
#kaasake
/** * peamine.c */
int main (tühine)
{
WDTCTL = WDTPW | WDTHOLD; // peatada valvekoera taimer
tagasitulek 0;
}
2. samm: pordi lähtestamine
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 ütleb meile, et kogu PORT-3 on lähtestatud sisendite vastuvõtmiseks.
P3DIR | = 0xFF ütleb meile, et kogu PORT-3 lähtestatakse väljundite andmiseks.
P3DIR | = 0x01 lähtestatakse PORT-3 väljundiks ainult tihvt P3.0. See järgneb kuueteistkümnendsüsteemi sadama kaardistamisele.
P4REN | = 0xFF, see näitab, et PORT-4 tihvtidel on üles/alla takistid lubatud.
Nende valimiseks Pull UP või Pull DOWN kasutatakse käsku P $ OUT | = 0xFF.
Kui kasutatakse väärtust 0xFF, konfigureeritakse need tõmmatavateks takistiteks ja kui 0x00, siis allalaadimiseks.
3. samm: ülimadal võimsus
MSP430F5529 võimaldab meil vähendada protsessori toitekaod. See on kasulik iseseisvates rakendustes.
See nõuab väljundi kõigi pinide või portide deklareerimist.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
4. samm: taimer
Taimeri kasutamine ühe sekundi viivituse loomiseks. See kasutab 1MHz SMCLK -d, samuti töötab taimer vähese energiatarbega režiimis (järgmises etapis pärast selle loendamist LPM -i katkestamine). See protsess säästab protsessori energiat ja koormust
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
Väärtused on 999, kuna taimeriregistris nulli tagasi pöördumiseks kulub veel üks arv.
Samm: vähese energiatarbega režiim
_BIS_SR (LPM0_bits+GIE);
See lubab üldise katkestamise lubamise (GIE) ja seab protsessori LPM0 -le, kus CPU -d toetav MCLK on välja lülitatud ning SMCLK ja ACLK töötavad, mis hoiavad taimerit töös. nii et näeme, et protsessor on energia säästmise tõttu välja lülitatud.
6. samm: ISR-taimer
#pragma vektor = TIMER0_A0_VECTOR
_interrupt void Timer_A (tühine)
{
z ++;
kui (z> viivitus)
{
P3OUT = kood [x];
P6OUT = kood1 [y];
x ++;
kui (x == 10)
{
x = 0;
y ++;
}
kui (y == 6)
y = 0;
z = 0;
}
}
pragma vektor on mõeldud ISR -i esitamiseks C embd -s.
kood [x] ja kood1 [y] on massiivid, mis sisaldavad kahe seitsme segmendi väljundväärtusi 60 sekundi loenduri kuvamiseks.
Samm: riistvara katkestamine
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
Siin kuulutatakse P2.1 riistvarakatkestuseks, kui nuppu vajutatakse, lähtestatakse loendur väärtusele.
ülejäänud programm on kirjutatud selle katkestuse ISR -i.
8. samm: ISR- lähtestamine/ vajutamine
#pragma vektor = PORT2_VECTOR
_interrupt void port_2 (tühine)
{
P2IFG & = ~ BIT1;
x = 0; y = 0;
P3OUT = kood [x];
P6OUT = kood1 [y];
v ++;
jaoks (i = 0; i
{
P1OUT | = BIT0; //P1.0 = lüliti
_ viivitustsüklid (1048576);
P1OUT & = ~ BIT0; // P1.0 = lüliti
_ viivitustsüklid (1048576);
}
See ISR lähtestab loenduri ja loeb, mitu korda ülejäänud osa vajutati.
(Siin kuvatakse LED -lüliti abil, saab kasutada ka mõnda muud massiivi ja taimerit, et näidata neid väärtusi väljundina 7 segmendis).
9. samm: KOODI
#kaasake
#defineerige viivitus 1000
sümbolikood = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
sümbolikood = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
lenduv allkirjastamata int x = 0, y = 0, z = 0;
lenduv allkirjastamata int v = 0, i = 0;
void main ()
{
WDTCTL = WDTPW | WDTHOLD; // peatada valvekoera taimer
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);
}
// Taimer A0 teenuse katkestamise rutiin
#pragma vektor = TIMER0_A0_VECTOR
_interrupt void Timer_A (tühine)
{
z ++;
kui (z> viivitus)
{
P3OUT = kood [x];
P6OUT = kood1 [y];
x ++;
kui (x == 10)
{
x = 0;
y ++;
}
kui (y == 6)
y = 0;
z = 0;
}
}
// Riistvara katkestusteenuse rutiin
#pragma vektor = PORT2_VECTOR
_interrupt void port_2 (tühine)
{
P2IFG & = ~ BIT1;
x = 0;
y = 0;
P3OUT = kood [x];
P6OUT = kood1 [y];
v ++;
jaoks (i = 0; i
{P1OUT | = BIT0; // P1.0 = lüliti
_ viivitustsüklid (1048576);
P1OUT & = ~ BIT0; // P1.0 = lüliti
_ viivitustsüklid (1048576);
}
}
10. samm: viitekood
GitHubi hoidla