Код на асме взял тут-же и решил его, уж простите за лень, портануть.
Получилось вот так. Просто оригинальная константа не прошла.
<code>
#define FCLK XTAL
#define FOUT 125ul //output frequency, kHz
#define BYTC 11ul //data byte count
#define BITC 5ul //data bit count
#define dMask 0x1Ful //0b00011111 ;data byte mask
#define sSymb 0x1FFul //0b0000000111111111 ;syncro symbol
#define sMask 0x3FFul //0b0000001111111111 ;syncro symbol mask
#define MIN1T 58ul //64 - 10%
#define NOM1T5 96ul //64 + 1/2 * 64
#define MAX2T 141ul //128 + 10%
//Decoder phases (dPhase values):
#define pOff 0 //off
#define pSync 1 //find syncronization
#define pData 2 //get data
//Derivated constantes:
//#define T1DIV ((((FCLK/FOUT)/200ul)+5ul)/10ul) //CK/1
#define T1DIV (((FCLK/FOUT)/200ul)/10ul)
void TIMER1_Init(void)
{
RF_DDR |= ((1<<OC1A) | (1<<OC1B));
TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1);
TCCR1B = (1<<WGM12) | (1<<CS10);//CTC, CK/1
OCR1A = (unsigned)T1DIV;
TIFR1 |= (1<<OCF1A);
TIMSK1 |= (1<<OCIE1A);
//TCCR1A = (1<<COM1A0) | (1<<COM1B0);
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Обработчик прерывания
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
#pragma vector = TIMER1_COMPA_vect
__interrupt void TIMER1_OCR1A_Isr(void)
{
if((RF_PIN & (1<<OC1A)) == 0)
{
TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1);
}
else
{
TCCR1A = (1<<COM1A1) | (1<<COM1B0) | (1<<COM1B1);
}
}
</code>