Тогда осцилограммы не будет.
Если используете IAR, в нем есть удобная псевдофункция delay_cycles(const unsigned long ) - задержка на заданное количество тактов.
Либо просто пустые вложенные циклы.
Тут два возможных варианта:
Первый:
1. При выполнении оператора
while (f<(d+1));
когда значение f = 255 = [00,FF]
1. процессор загружает младший байт FF в регистр
срабатывает прерывание и увеличивает значение (f = f+1) f = 256 = [01,00]
2. процессор загружает старший байт в регистр, а теперь он уже 01, а не 00.
поэтому значение в регистах стало [01,FF] = 511, а не 256 как на самом деле.
Происходит выход из цикла while на стадии когда счетчик равен 256
Второй:
и второй вариант если delay_us разрешает прерывания, а на компараторе
происходит шумок.
Какой из них нужно судить по частоте возникновения эффекта.
Наверное быстрее переделать сравнение для первого варианта
Код
while (1)
{
#asm("cli")
unsigned int f_test=f;
#asm("sei")
if(f_test<(d+1)) break;
};
Сообщение отредактировал aiwa - Apr 1 2016, 01:45