Etape 23 : Programmer le MSP430
Après avoir installé, ouvrez utilisation CCS quand il vous demande sur l’espace de travail, lui permettre de faire un avec le nom qu'il a généré.
Appuyez sur fichier -> Nouveau -> CCSProject
Une fenêtre pop-up, nommez votre projet, jeu de Zombie.
Puis sélectionnez MSP430 série
Ensuite, dans le type de recherche à: MSP430G2553 (ou juste le trouver)
Sélectionnez le modèle LED clignotent et l’ouverture du programme clin, supprimer tout cela.
Collez le code affiché ici et appuyez sur le petit bug. Si vous n’avez pas de problèmes, alors vous aurez une petite barre d’outils après il programmes la puce, qui est une console de débogage, et il y aura un > bouton, appuyez dessus et le Launchpad MSP430 enverra des données rétrospectives par UART, afin de pouvoir vérifier les données sur le terminal.
#include « msp430g2553.h »
#include < intrinsics.h > / / intrinsèque des fonctions
#include < stdint.h > / / Standard types entiers
#define TXD BIT1 / / TXD sur P1.1
#define Bitime 104 //9600 Baud, SMCLK = 1MHz (1MHz/9600) = 104
unsigned char BitCnt ; Nombre d’octets, utilisée lors de la transmission d’octets
unsigned int TXByte ; Valeur envoyée sur UART lorsque Transmit() est appelé
unsigned int i, j, h ;
unsigned int ADCVal ;
Définition de fonction
void Transmit(void) ;
void Single_Measure(unsigned int) ;
#define NSAMPLES 16 / / nombre d’échantillons dans chaque bloc
void main (void)
{
WDTCTL = WDTPW + WDTHOLD ; Arrêter de WDT
unsigned int uartUpdateTimer = 10 ; Boucle jusqu'à ce que les octets est envoyé
uint32_t moyenne = 0 ; Valeur moyenne du bloc
BCSCTL1 = CALBC1_1MHZ ; Plage définie
DCOCTL = CALDCO_1MHZ ; SMCLK = DCO = 1MHz
P1DIR | = 0 X 01 ; Sortie direction la valeur P1.0
P1SEL | = TXD ; //
P1DIR | = TXD ; //
__bis_SR_register(GIE) ; enabled\ interruptions
/ * Boucle principale Application * /
while(1)
{
Si ((--uartUpdateTimer == 0))
{
__bis_SR_register (CPUOFF + GIE) ; LPM0, ADC10_ISR forcera sortie
if(0x08 & P1IN) {}
pour (i = 0; i < 1000; i ++) ; Retard factice pour debounce
if(0x08 & P1IN) {}
P1OUT & = ~ 0 x 01 ; Conseil d’administration a conduit OFF
}
}
else {}
pour (i = 0; i < NSAMPLES; ++ j’ai) {
Single_Measure(INCH_4) ;
ADCVal = ADC10MEM ;
moyenne += ADCVal ; Accumuler la somme
}
moyenne / = NSAMPLES ; Moyenne arithmétique des échantillons
P1OUT | = 0 x 01 ; //board conduit ON
moyenne = moyenne & 0xFF ;
TXByte = moyenne ;
}
Transmit() ;
moyenne = 0; //reset avarage
uartUpdateTimer = 10 ;
pour (h = 0; h < 10000; h ++) ; Factice délai entre les cycles de la communication
}
}
}
Fonction transmet le personnage de TXByte
Sub Transmit()
{
CCTL0 = ; TXD Idle comme marque
TACTL = TASSEL_2 + MC_2 ; SMCLK, mode continu
BitCnt = 0xA ; Charger le compteur bits, 8 bits + ST/SP
CCR0 = TAR ;
CCR0 += Bitime ; Temps jusqu’au premier bit
TXByte | = 0 x 100 ; Ajouter le bit d’arrêt à TXByte (ce qui est logique 1)
TXByte = TXByte << 1 ; Ajouter le bit de départ (ce qui est logique 0)
CCTL0 = CCIS0 + OUTMOD0 + CCIE ; Ajuster le signal, valeur intial, interruptions
tandis que (CCTL0 & CCIE) ; Attendre la fin de la TX
TACTL = TASSEL_2 ; SMCLK, timer off (pour une consommation)
}
Routine de service de minuteur A0 interruption
#pragma vecteur = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
CCR0 += Bitime ; Ajouter l’Offset à CCR0
Si (BitCnt == 0) / / si tous les bits TXed, désactiver l’interruption
CCTL0 & = ~ CCIE ;
d’autre
{
CCTL0 | = OUTMOD2 ; Espace TX
Si (TXByte & 0 x 01)
CCTL0 & = ~ OUTMOD2 ; Marque de TX
TXByte = TXByte >> 1 ;
BitCnt--;
}
}
/********************************************************
Routine d’interruption du service ADC10
********************************************************/
#pragma vecteur = ADC10_VECTOR
__interrupt Sub ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF) ; Claire CPUOFF peu de 0(SR)
}
void Single_Measure (int unsigned chan)
{
ADC10CTL0 & = ~ ENC ; Désactiver l’ADC
ADC10CTL0 = ADC10SHT_3 + ADC10ON + ADC10IE ; 16 graduations, ADC sur, activer interruption ADC
ADC10CTL1 = ADC10SSEL_3 + chan ; Ensemble « chan », SMCLK
ADC10CTL0 | = ENC + ADC10SC ; Activer et démarrer la conversion
}