Étape 4: Ajout de bugs !
#include « msp430g2211.h » #define LED4 BIT1 |
unsigned int clics = 0 ; compteur pour chaque minuterie irq
unsigned int secondes = 0 ; compteur de secondes
unsigned int minutes = 0 ; compteur des minutes
unsigned int new_minute = 0 ; marqueur pour atteindre la minute suivante
options configurables !
const unsigned int pomodoro_length = 25 ; Combien de temps faut-il la pomodoro ? [par défaut : 25]
const unsigned int pomodoro_break = 5 ; et la pause ? [par défaut: 5]
définit les LEDs pour refléter les 5 bits de poids faibles de « valeur »
void setLEDs (valeur char) {}
if(value & 0x10)
P1OUT | = (LED4) ; la valeur LED4 sur
d’autre
P1OUT & = ~ (LED4) ; partit LED4
if(value & 0x08)
P1OUT | = (DEL3) ; la valeur DEL3 sur
d’autre
P1OUT & = ~ (DEL3) ; partit DEL3
if(value & 0x04)
P1OUT | = (LED2) ; LED2 réglée sur
d’autre
P1OUT & = ~ (LED2) ; partit LED2
if(value & 0x02)
P1OUT | = (LED 1) ; LED1 réglée sur
d’autre
P1OUT & = ~ (LED 1) ; LED1 partit
if(value & 0x01)
P1OUT & = ~ (LED0) ; LED0 réglée sur
d’autre
P1OUT | = (LED0) ; LED0 partit
}
void main (void) {
unsigned int pomodoro_remain = pomodoro_length + pomodoro_break ; compteur pour suivre les temps passés
WDTCTL = WDTPW + WDTHOLD ; Arrêter le temporisateur pour empêcher la réinitialisation du délai d’expiration
BCSCTL1 = CALBC1_1MHZ ; La valeur DCO valeur de calibrage d’usine 1MHz
DCOCTL = CALDCO_1MHZ ;
CCTL0 = CCIE ; Interruption de CCR0 activée
CCR0 = 50000 ; taux d’irq minuterie
TACTL = TASSEL_2 + MC_1 ; SMCLK, upmode
_BIS_SR(GIE) ; activer les interruptions
P1DIR | = (LED0 + LED1 LED2 + DEL3 + LED4 + BUZZER) ; toutes les broches de la LED et buzzer comme sortie
P1OUT & = ~ (LED0 DEL1 DEL2 + DEL3 + LED4 + BUZZER) ; tous les LEDs et buzzer off
while(pomodoro_remain) {//let's exécuter cette boucle jusqu'à ce que la pomodoro est faite
if(minutes > new_minute) {//see si nous avons atteint la minute suivante
setLEDs(pomodoro_remain) ; définir les LEDs pour refléter la minute actuelle
new_minute = minutes ; changer notre compteur
pomodoro_remain--; moins de temps reste dans notre pomodoro
}
}
while(1) {} //this est la chanson qui ne finit jamais, certaines personnes ont commencé à chanter il...
}
Routine de service de minuteur A0 interruption
Cela s’exécute lorsqu’une interruption de la minuterie est déclenchée
#pragma vecteur = TIMERA0_VECTOR
__interrupt void Timer_A (void) {}
clics ++ ; Cliquez de nouveau sur chaque 1Mhz / 50k = 20 fois une secondes
Si (clique sur > = 2) {//we're en utilisant le numéro 2 ici au lieu de 20
accélérer le débogage
Si (clique sur > = 20) {//waited une seconde encore ?
clique sur = 0 ; Réinitialisez le compteur...
secondes ++ ; compteur de secondes Advance
Si (secondes > = 60) {//see si nous avons attendu une minute ?
secondes = 0 ; Réinitialisez le compteur de secondes
minutes ++ ; compteur des minutes Advance
}
}
}