Mivel az
MSP430 processzorokkal én is csak ismerkedek, ezért kis lépésekben haladok előre.
Ha minden jól megy - nem ígéret - előfordulhat, hogy némelyik a cikksorozatban megemlített LaunchPad-hoz való plusz eszköz KIT formájában rendelhető lesz.
Hirdetés
Első cikkemben a portok beállítását és használatát szeretném megmutatni.
A legtöbb cikkemben az
MSP430G2231 processzort fogom használni mivel két IC-t kapunk a panel mellé és ez a kettő közül a nagyobb tudású.
Ez az IC DIP-14 tokozású, melynek lábkiosztása a következő:
Először próbálkozzunk ugye egy egyszerűbb programmal, villogtassuk a
LED1-et és
LED2-t egyszerre.
Ehhez ez a kód szükségeltetik:
#include <
msp430g2231.h>
void main(void) _{_
WDTCTL = WDTPW + WDTHOLD; // watchdog leállítása
P1DIR |= (BIT0 + BIT6); // P1.0 és P1.6 portok kimenetek
for (;;) { // végtelen ciklus
P1OUT ^= (BIT0 + BIT6); // P1.0 és P1.6 váltakozása
__delay_cycles(1000000); // késleltetés
}
}
Itt a _delay_cycles(1000000); átírásával változtathatjuk a
LED-ek villogási sebességét.
Minél kisebb számot adunk meg annál gyorsabban, minél nagyobbat annál lassabban kapcsoljuk a
LED-eket ki, majd be.
A következő próbában villogtassuk a két
LED-et felváltva.
#include <
msp430g2231.h>
void main(void)
WDTCTL = WDTPW + WDTHOLD; // watchdog leállítása
P1DIR |= (BIT0 + BIT6); // P1.0 és P1.6 portok kimenetek
P1OUT &= ~(BIT0 + BIT6); //
LED-ek kikapcsolása
unsigned int i = 0;
for (;;) { // végtelen ciklus
if (i == 0)
P1OUT |= BIT0; // P1.0 port -
LED1 bekapcsolása
P1OUT &= ~BIT6; // P1.6 port -
LED2 kikapcsolása
}
else
P1OUT &= ~BIT0; // P1.0 port -
LED1 kikapcsolása
P1OUT |= BIT6; // P1.6 port -
LED2 bekapcsolása
}
i = 1 - i;
__delay_cycles(1000000); // késleltetés
}
}
Most pedig készítsünk egy két
LED-es "Knight-Rider" villogót.
Ehhez pedig ezt a kódot égessük az IC-be:
#include <
msp430g2231.h>
void main(void)
WDTCTL = WDTPW + WDTHOLD; // watchdog leállítása
P1DIR |= (BIT0 + BIT6); // P1.0 és P1.6 lábak kimenetek
P1OUT &= ~(BIT0 + BIT6); //
LED-ek kikapcsolása
unsigned int i = 0;
for (;;) { // végtelen ciklus
switch (i)
case 0: P1OUT |= BIT0; break; // P1.0 port -
LED1 bekapcsolása
case 1: P1OUT |= BIT6; break; // P1.6 port -
LED2 bekapcsolása
case 2: P1OUT &= ~BIT0; break; // P1.0 port -
LED1 kikapcsolása
case 3: P1OUT &= ~BIT6; break; // P1.6 port -
LED2 kikapcsolása
case 4: P1OUT |= BIT6; break; // P1.6 port -
LED2 bekapcsolása
case 5: P1OUT |= BIT0; break; // P1.0 port -
LED1 bekapcsolása
case 6: P1OUT &= ~BIT6; break; // P1.6 port -
LED2 kikapcsolása
case 7: P1OUT &= ~BIT0; break; // P1.0 port -
LED1 kikapcsolása
}
i++;
if (i == 8) { i = 0; }
__delay_cycles(100000); // késleltetés
}
}
Itt ugye már látható hogy a TI CCS-ben használhatjuk a többi programozási nyelvhez hasonlóan a switch utasítást.
Ugyan így használhatunk változókat és definíciókat is. Mint látható az előző forráskód egy kicsit már-már zavarosan kezd hatni
ha hirtelen összefutunk vele nem igen ismerjük fel mi mit csinál.
Ezen nagyon egyszerűen segíthetünk:
#include <
msp430g2231.h>
#define
LED1 BIT0
#define
LED2 BIT6
#define
LED_PORT P1OUT
void main(void)
WDTCTL = WDTPW + WDTHOLD; // watchdog leállítása
P1DIR |= (
LED1 +
LED2); // P1.0 és P1.6 lábak kimenetek
LED_PORT &= ~(
LED1 +
LED2); //
LED-ek kikapcsolása
unsigned int i = 0;
for (;;) { // végtelen ciklus
switch (i)
case 0:
LED_PORT |=
LED1; break; // P1.0 port -
LED1 bekapcsolása
case 1:
LED_PORT |=
LED2; break; // P1.6 port -
LED2 bekapcsolása
case 2:
LED_PORT &= ~
LED1; break; // P1.0 port -
LED1 kikapcsolása
case 3:
LED_PORT &= ~
LED2; break; // P1.6 port -
LED2 kikapcsolása
case 4:
LED_PORT |=
LED2; break; // P1.6 port -
LED2 bekapcsolása
case 5:
LED_PORT |=
LED1; break; // P1.0 port -
LED1 bekapcsolása
case 6:
LED_PORT &= ~
LED2; break; // P1.6 port -
LED2 kikapcsolása
case 7:
LED_PORT &= ~
LED1; break; // P1.0 port -
LED1 kikapcsolása
}
i++;
if (i == 8) { i = 0; }
__delay_cycles(100000); // késleltetés
}
}
Egyenlőre ennyi, folytatása következik... hamarosan.
Fájlok:
Fájlnév | Fájlméret | Letöltve |
A cikkhez tartozó fájlok csak bejelentkezés után tölthetőek le! |
Hozzászólások
Hozzászólás csak bejelentkezés után lehetséges...