#include int c, start, ready; unsigned long int a, b; unsigned int t, dp; void delay(unsigned int); // display void set_7segment(int nr, int dp); const int seg7[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71}; #define reslow (1638) // resolution 0,1 sec #define reshigh (819) // resolution 0,05 sec void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR = BIT0;// output for display, Leds and Buzzer P1OUT = BIT0; // Led 3 and Led 4 off //Setup Interrupt buttons //P1IE |= BIT7; // signal from S3 serves as interrupt P1IES |= BIT0; // active for high to low transition // Setup Interrupt + Timer_A BCSCTL1 = 0x87; BCSCTL3 = 0x00; TACTL = TASSEL0 + TACLR; // Timer A clock is ACLK + clear TACTL |= MC1; // Timer A in Continous UP mode TACTL |= TAIE; // enable interrupt at overflow TACTL |= ID0;// + ID1; // TimerA overflow after 4 [2,8 or 16] seconds CCTL0 |= CCIE; // enable CCR0 interrupt _EINT(); // enable all active interrupts while(1) // endless loop; game starts always { start=0; //ready=0; while (P1IN & BIT0); // button S1 not active a= TAR; // read count of Timer A b = a * 65521 + 12345; // make an arbitrary value with TAR CCR0 = b % 32768; // rest of dividing b by 32768 if (CCR0 < 4000) CCR0 = 4000; start=0; TACTL |= TACLR; // Timer A clear while(!start); // wait for Timerinterrupt CCR0 //CCTL0 &= ~CCIE; // disable CCR0 interrupt P1OUT |= BIT0; // buzzer on delay(1000); P1OUT &= ~BIT0; // buzzer off P1IFG = 0; // for sure reset interrupt flag P1IE = BIT0; // signal from S3 serves as interrupt ready=0; TACTL |= TACLR; // Timer A Clear(TAR=0), start measurement while(!ready); // wait for S3 t=TAR; // read count of Timer A c=t/reshigh; // resolution 0,05 sec if(c>15) { c=-1;dp=1;} else dp=0; P1OUT &=~BIT0; delay(65000); P1OUT |= BIT0; set_7segment(c,dp); // clear 7-segment display } // end while(1) } // end main() #pragma vector=TIMERA1_VECTOR // interrupt by timer-overflow, value __interrupt void Timer (void) // TAR = 65535; takes 4 seconds { P1OUT &= ~BIT0; //Led 3 on delay(3000); P1OUT |= BIT0; // Led 3 off TACTL &= ~TAIFG ; // reset interrupt overflow flag } #pragma vector=TIMERA0_VECTOR // counter TimerA reaches CCR0 value __interrupt void timerA_Compare_IRQ(void) { start=1; } #pragma vector=PORT1_VECTOR __interrupt void knopactief(void) { ready=1; P1IE = 0; // interrupts port off P1IFG = 0; // reset interruptPort flag } void delay(unsigned int k) { unsigned int i; for(i=0;i -1) segment = seg7[nr]; // get segment code if (dp) segment |= 0x80; // enable/disable decimal point P1OUT &= ~BIT0; // clear bits just to make sure for (i = 7; i >=0; i--) { if (segment & (1<