Код
void TimerInterrupt(){
long RAZ;// otsch;//, _w_enk;
unsigned short otsch, ob;
++step;
//fl = 1;
ob = DATIn14();
otsch = DATIn16();
_oborot = ob;
RAZ = otsch - otschet;
otschet = otsch;
if (RAZ < -32768) {RAZ =+ 65536;} // обработка перехода через 0 в положительном направлении
if (RAZ > 32768) {RAZ =- 65536;} // обработка перехода через 0 в отрицательном направлении
w_enk = (RAZ*0.0054931640625)/0.001;...........}
long RAZ;// otsch;//, _w_enk;
unsigned short otsch, ob;
++step;
//fl = 1;
ob = DATIn14();
otsch = DATIn16();
_oborot = ob;
RAZ = otsch - otschet;
otschet = otsch;
if (RAZ < -32768) {RAZ =+ 65536;} // обработка перехода через 0 в положительном направлении
if (RAZ > 32768) {RAZ =- 65536;} // обработка перехода через 0 в отрицательном направлении
w_enk = (RAZ*0.0054931640625)/0.001;...........}
условие (RAZ < -32768) получается исходя из максимальной скорости вращения (ну пол оборота за 0.001 сек она не может быть никак).
Проблема: в определенные моменты времени при наличии угловой скорости RAZ становится равным -65535. Если угловая скорость постоянна то такая ошибка выдается примерно через равные отрезки времени.
Помогите, где ошибка?


и независимо от результатов


Работаю на LPC2114. Компилятор IAR.