Table des matières:

Compteur de secondes MSP430 : 10 étapes
Compteur de secondes MSP430 : 10 étapes

Vidéo: Compteur de secondes MSP430 : 10 étapes

Vidéo: Compteur de secondes MSP430 : 10 étapes
Vidéo: Etapes d'exécution d'une instruction dans le microprocesseur 2024, Novembre
Anonim
Compteur de secondes MSP430
Compteur de secondes MSP430

Bienvenue! Making of Seconds Counter: Utilisation de CCStudio 8 et MSP430F5529 pour le projet.

Langage C pour coder le micro contrôleur. Application de modes de faible consommation, de minuteries et d'interruptions. La sortie est affichée via 7 segments.

Étape 1: Aperçu

Aperçu
Aperçu

Commençons!

Initialisez le temporisateur de chien de garde à l'état OFF en utilisant le mot de passe requis pour le temporisateur de chien de garde (cela permet de contrôler les boucles infinies, en protégeant le processeur).

#comprendre

/** * principal c */

int main(void)

{

WDTCTL = WDTPW | WDTHOLD; // arrête le chronomètre du chien de garde

renvoie 0;

}

Étape 2: initialisation du port

{

P3DIR=0xFF; // P3DIR=0x00;

P6DIR=0xFF;

P4DIR |=0x00;

P4REN |=0xFF;

P4OUT |=0xFF;

}

P3DIR |=0x00 nous indique que l'ensemble du PORT-3 est initialisé pour prendre des entrées.

P3DIR |=0xFF nous dit que l'ensemble du PORT-3 est initialisé pour donner des sorties.

P3DIR |=0x01 seule la broche P3.0 est initialisée pour sortir dans PORT-3. Cela suit un mappage de port hexadécimal.

P4REN |=0xFF, cela indique que les broches du PORT-4 ont leurs résistances pull up/down activées.

Pour les sélectionner entre Pull UP ou Pull DOWN, l'instruction P$OUT |=0xFF est utilisée.

Si 0xFF est utilisé, ils se configurent comme des résistances Pull UP et si 0x00, ils se configurent comme Pull DOWN.

Étape 3: Ultra faible puissance

MSP430F5529 nous permet de réduire les pertes de puissance du processeur. Ceci est utile dans les applications autonomes.

Cela appelle à la déclaration de toutes les broches ou ports à sortir.

{

P7DIR |= 0xFF;

P6DIR |= 0xFF;

P5DIR |= 0xFF;

P4DIR |= 0xFF;

P3DIR |= 0xFF;

P2DIR |= 0xFF;

P1DIR |= 0xFF;

}

Étape 4: MINUTERIE

Utilisation de la minuterie pour la génération de retard d'une seconde. Cela utilise le SMCLK de 1MHz, la minuterie fonctionne également en mode basse consommation (à l'étape suivante, après son décompte, elle est interrompue à partir de LPM). Ce processus économise de l'énergie et de la charge sur le processeur

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

Les valeurs sont 999, car il faut un compte supplémentaire pour revenir à zéro dans le registre de la minuterie.

Étape 5: Mode faible consommation

_BIS_SR(LPM0_bits+GIE);

Cela active l'activation d'interruption générale (GIE) et place le processeur sur LPM0, où MCLK qui prend en charge le processeur est désactivé, et SMCLK et ACLK s'exécutent pour que la minuterie continue de fonctionner. nous pouvons donc voir que le processeur est éteint, en économisant de l'énergie.

Étape 6: ISR-Timer

ISR-Timer
ISR-Timer

#pragma vector=TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z++;

si(z>délai)

{

P3OUT=code[x];

P6OUT=code1[y];

x++;

si(x==10)

{

x=0;

y++;

}

si(y==6)

y=0;

z=0;

}

}

le vecteur pragma est pour la représentation ISR dans C embd.

code[x] et code1[y] sont les tableaux qui contiennent les valeurs de sortie pour les deux sept segments, pour afficher le compteur de 60 secondes.

Étape 7: interruption matérielle

P2DIR=0x00;

P2REN=0x02;

P2OUT=0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

Ici P2.1 est déclaré comme une interruption matérielle, si le bouton est enfoncé, le compteur se remet à la valeur.

le reste du programme est écrit à l'intérieur de l'ISR de cette interruption.

Étape 8: ISR - Réinitialiser/bouton poussoir

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0; y=0;

P3OUT=code[x];

P6OUT=code1[y];

v++;

pour(i=0;i

{

P1OUT |= BIT0; //P1.0 = basculer

_delay_cycles (1048576);

P1OUT &=~BIT0; // P1.0 = basculer

_delay_cycles (1048576);

}

Cet ISR réinitialise le compteur et compte le nombre de fois où le reste a été pressé.

(Voici l'affichage est effectué via une bascule à led, peut également utiliser un autre tableau et une autre minuterie, pour afficher ces valeurs en tant que sortie dans 7 segments).

Étape 9: CODEZ

CODE
CODE

#comprendre

#définir le délai 1000

code de caractères={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

code de caractère1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

int non signé volatile x=0, y=0, z=0;

int non signé volatile v=0, i=0;

vide principal()

{

WDTCTL = WDTPW | WDTHOLD; // arrête le chronomètre du chien de garde

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);

}

// Routine de service d'interruption du temporisateur A0

#pragma vector=TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z++;

si(z>délai)

{

P3OUT=code[x];

P6OUT=code1[y];

x++;

si(x==10)

{

x=0;

y++;

}

si(y==6)

y=0;

z=0;

}

}

// Routine de service d'interruption matérielle

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0;

y=0;

P3OUT=code[x];

P6OUT=code1[y];

v++;

pour(i=0;i

{ P1OUT |= BIT0; // P1.0 = basculer

_delay_cycles (1048576);

P1OUT &=~BIT0; // P1.0 = basculer

_delay_cycles (1048576);

}

}

Étape 10: Code de référence

Code de référence
Code de référence

Dépôt GitHub

Conseillé: