Цитата(Vladimir_T @ May 12 2010, 13:03)

Но не пойму, почему в прерывании из TACCR0 вычитываются очень часто нули?
Видимо потому, что вы используете таймер в режиме
Up-mode, а хотели наверняка в режиме
Continuous-mode. Либо Up-mode, но при этом следует использовать другой вход захвата, который связан с CCR1, а не с CCR0. И соответственно использовать другой вектор прерывания. Почитайте внимательно в User's Guide про режимы работы таймера.
Кроме того, вот здесь у вас потенциальная ошибка зарыта.
Цитата(Vladimir_T @ May 12 2010, 13:03)

Код
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
T_P [Cnt_Bit++] = TACCR0;
} // __interrupt void Timer_A (void)
Буферизация без явной проверки на
выход за границы буфера это типовая ошибка и потенциальный глюкодром.