Когда я задаю значение d меньше или равное 255, то все работает нормально, после каждого импульса на выходе PORTC.2 возникает импульс выходе PORTC.3, как и должно быть. Но если я задаю значение d больше или равное 256, то импульсы на выходе PORTC.3 так и продолжают идти, но не каждому из них предшествует импульс на выходе PORTC.2.
Пробовал разные частоты синусоиды - то же самое.
В чем причина?
Фрагмент кода:
CODE
unsigned int d=255; // Заданное кол-во НЧ-периодов счета (кол-во сработок компаратора)
unsigned int f; // Текущее кол-во НЧ-периодов счета (кол-во сработок компаратора)
// Timer1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
// Place your code here
PORTC.0=1;
delay_us(10);
PORTC.0=0;
if (f==1) {
PORTC.1=1;
delay_us(10);
PORTC.1=0;
};
if (f==(d)) {
PORTC.2=1;
delay_us(10);
PORTC.2=0;
};
f=f+1;
}
void main(void)
{
f=0;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
while (f<(d+1));
#asm("cli")
PORTC.3=1;
delay_us(10);
PORTC.3=0;
delay_us(100);
PORTC.4=1;
delay_us(10);
PORTC.4=0;
f=0;
#asm("sei")
};
}
Осциллограммы :
d=255; синий цвет - вых. РС2; желт. цвет - вых. РС3; Здесь все правильно и понятно:
Нажмите для просмотра прикрепленного файла
d=256; синий цвет - вых. РС2; желт. цвет - вых. РС3; Видно, что нет импульса на РС2, а соответствующий импульс на РС3 есть:
Нажмите для просмотра прикрепленного файла
Желт. цвет - сигнал на входе компаратора; синий цвет - на вых. РС0 (смотри код программы):
Нажмите для просмотра прикрепленного файла