Я запускаю встроенную программу в CCS IDE.
Мой проект должен выполнить для l oop от 0 до 3 (4 раза), и для каждого раунда выбрать случайное число, распечатать его и дождитесь, пока пользователь нажмет на тот же номер на клавиатуре.
Если пользователь нажмет ранее, чем 1 сек c, то сохраненное время будет временем реакции или 1 сек c, если пользователь нажал неправильный номер или нажмет после 1 сек c.
Инициализация выглядит следующим образом:
srand(time(NULL)); // Initialization, should only be called once.
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; //set Basic Clock System Control 1 to - 1 Mhz
DCOCTL = CALDCO_1MHZ; //set DCO Clock Frequency Control to - 1 Mhz
UCA0CTL1 |= UCSSEL_2; //use ACLK
UCA0CTL1 |= UCSWRST; //USCI software reset
P3SEL |= 0x30; //Pin P3.5 and P3.4 and P3.3 used by USART module
UCA0BR0 = 104; //DIVIDE CLOCK FOR BAUD RATE 9600
UCA0BR1 = 0; //DIVIDE CLOCK FOR BAUD RATE 9600
UCA0MCTL = 2; //UCBRSx=1
UCA0CTL1 &= ~UCSWRST; //initialize USCI
UC0IE |= UCA0RXIE; //enabling USCI_A0 RX interrupt
_BIS_SR(GIE);
uart_init();
и ISR:
// it is timer interrupt handler
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void) {
if (time_received) {
TACTL = TASSEL_1 + MC_0; //should reset the timer
time_received = 0;
}
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
time_t time;
char valuchar;
valuchar = UCA0RXBUF;
UCA0TXBUF = valuchar;
// Checking if the user hit the right hole(should be equal to r)
if ((valuchar - 48) == random) {
// Assign timer_A value to time
time = TAR; //sampling the timer value
// If the user pressed too late
if (time == 12000)
user_time_arr[index++] = 12000; //12000 = 1 sec
else
user_time_arr[index++] = time;
}
// Press on the wrong number - automatically failed
else
user_time_arr[index++] = 12000; //12000 = 1 sec
time_received = 1;
}
Кажется, что таймер не сбрасывается, даже если и должен. Есть идеи?
TIA