Az oldal néhány funkciója egy rendszerfrissítés miatt egy ideig nem volt használható.
Ezeket javítottuk, így minden a megszokott medrében megy tovább.
Ha mégis talál valaki valamilyen hibát, kérjük tudassa velünk a Visszajelzés oldalon! Köszönjük!
Megvilágítás
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évFájlméretLetö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...