ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
61197 Топик полностью
Коля (22.06.2006 14:26, просмотров: 1) ответил rezident на Не совсем понятно. Поясните куском кода.
Вот кусочки: В одном прерывании формируется временной интервал, в другом идет подсчет импульсов для рассчета скорости вращения. Переменная Flg_Tick_Sec - конец врем. интервала модифицируется в обоих прерываниях из-за чего и подвисает процессор. __interrupt void watchdog_timer(void) { ++ Tick_ms; // WDT - interval Timer, ACLK=32768/64 = 512 ->0.00195 sec if ((Tick_ms == 0x0200)) { Tick_ms = 0; Flg_Tick_Sec = true; Encoder_Curr = Encoder_Pulse; } } __interrupt void PORT_1_Sensors (void) { if (P1IFG == Encoder_A) { P1IE &= ~Encoder_A; // Reset interrupts from P2.2 & P2.3 P1IFG &= ~Encoder_A; // Reset interrupt flags from P2.2 & P2.3 if (Flg_Tick_Sec == true) { Flg_Tick_Sec = false; Encoder_Pulse = 0; } Encoder_Pulse ++; P1IE |= Encoder_A; // Enable interrupt from Encoder }