#pragma INTERUPT_TIMER void foo(void) {
static unsigned long faza; faza+=12345;// Fout=Ftimer*12345/(2^32) if(faza&0x80000000) out=!0; else out=0; }
На АВР-ассемблере это будет прекрасно
https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B8%D0%BD%D1%82%D0%B5%D0%B7%D0%B0%D1%82%D0%BE%D1%80