Intro till mikrokontroller felsökning (och en Pomodoro Timer) (4 / 9 steg)
Steg 4: Lägga till buggar!
#include "msp430g2211.h" #define LED4 BIT1 unsigned int klick = 0; räknare för varje timer irq konfigurerbara alternativ! |
CONST unsigned int pomodoro_length = 25; Hur lång tid bör pomodoro? [standard: 25]
CONST unsigned int pomodoro_break = 5; och bryta? [standard: 5]
anger ljusdioderna till reflektera de låga 5 bitarna av "värde"
void setLEDs (char-värde) {
IF(Value & 0x10)
P1OUT | = (LED4); ställa in LED4 på
annat
P1OUT & = ~ (LED4); iväg för LED4
IF(Value & 0x08)
P1OUT | = (LED3); ställa in LED3 på
annat
P1OUT & = ~ (LED3); iväg för LED3
IF(Value & 0x04)
P1OUT | = (LED2); ställa in LED2 på
annat
P1OUT & = ~ (LED2); kvitta LED2
IF(Value & 0x02)
P1OUT | = (LED1); ställa in LED1 på
annat
P1OUT & = ~ (LED1); kvitta LED1
IF(Value & 0x01)
P1OUT & = ~ (LED0); ställa in LED0 på
annat
P1OUT | = (LED0); iväg för LED0
}
void main (void) {
unsigned int pomodoro_remain = pomodoro_length + pomodoro_break; räknaren för att hålla reda på tiden gick
WDTCTL = WDTPW + WDTHOLD; Stoppa watchdog timer för att undvika timeout återställa
BCSCTL1 = CALBC1_1MHZ; DCO inställd på 1MHz fabriken kalibreringsvärde
DCOCTL = CALDCO_1MHZ;
CCTL0 = CCIE; CCR0 avbrott aktiverad
CCR0 = 50000; timer IRQ-kurs
TACTL = TASSEL_2 + MC_1; SMCLK, upmode
_BIS_SR(GIE); Aktivera avbrott
P1DIR | = (LED0 + LED1 + LED2 + LED3 + LED4 + SUMMER); alla LED stift och Summer som utgång
P1OUT & = ~ (LED0 LED1 LED2 + LED3 + LED4 + + Summer); alla lysdioder och summern off
While(pomodoro_remain) {//let's köra denna loop tills pomodoro görs
IF(Minutes > new_minute) {//see om vi har nått nästa minut
setLEDs(pomodoro_remain); ställa in lysdioderna att återspegla den nuvarande minuten
new_minute = minuter; ändra våra counter
pomodoro_remain--; mindre tid finns kvar i våra pomodoro
}
}
While(1) {} //this är låten som aldrig tar slut, vissa människor började sjunga det...
}
Timer A0 avbrottstjänstens rutin
Då körs när ett timer-avbrott utlöses
#pragma vektor = TIMERA0_VECTOR
__interrupt void Timer_A (void) {
klick ++; ny klicka varje 1Mhz / 50k = 20 gånger en sekunder
om (klickar på > = 2) {//we're med nummer 2 här istället för 20
påskynda felsökning
om (klickar på > = 20) {//waited en full andra ännu?
klick = 0; sedan återställa räknaren...
sekunder ++; förväg andra counter
om (sekunder > = 60) {//see om vi har väntat en minut?
sekunder = 0; sedan Återställ räknaren för andra
minuter ++; Advance minut counter
}
}
}