Баловался я ШИМом на именно этом контроллере (AT89S8253), когда пытался его подружить с акселерометром ADXL202AE
пытался идти двумя путями: сначала завел 2 шим вывода акселерометра на INT0 и INT1 контроллера и прописал обработчики прерываний по приходу 1 и срезу, но времени на обработку основного кода (передача по SPI и вывод на LCD) практически не оставалось, поэтому схема частенько висла.
Тогда решил сделать по другому - запустил таймер и программно ждал фронты и срезы шим: по фронтам запоминал текущее значение, по срезам тоже и вычисляя разницу - выводил значения на экран и по SPI отсылал

Так работало... были еще идеи - если надо могу коды поискать.
А насчет стабильности... требования Вы предъявляете достаточно жесткие, но в большинстве задач усреднение классическое или медианное - значительно облегчает жизнь... мне помогло по 6 отсчетам усреднение...
Сообщение отредактировал public32 - Jan 8 2010, 16:19