Извиняюсь, что влезаю в чужой топик. Возникла непонятка со спецификатором static, поэтому решил запостить сюда вопрос. Программа осуществляет ЦАП с помощью ШИМ. Запись в регистр сравнения осущетсвляется по прерыванию при переполнению счетчика.
Функция обработки прерывания выглядит следующим образом:
Код
__interrupt void T1_OVF_Handler()
{
static unsigned int num = 0;
temp = sin(2*pi*Fsin*num/Fpwm); //
OCR1A = short(temp*TOP_PWM);
num++;
if (num >= Fpwm) num = 0;
IntToChar(UART_out, 4, OCR1A);
PutTextToUART(UART_out, 4);
}
При пошаговой отладке после вычисления синуса, значение num меняется на 22016 (причем Fpwm=7844), и соответственно при сравнении обнуляется. Если сделать глобальное объявление переменной, то проблема исчезает. Но почему так происходит, к сожалению понять так и не смог.