Покуда набросал программу для несущей меандр на Т1 и частотой модуляции на Т0, на кварце 4,096. При проверке в железе частоты практически погрешности не имеют. Модулировал несущую внешне элементами. Но такая модуляция скорее всего для приёмника не прокатит. Нужно, чтобы отключение сигнала было на уровне примерно 2,4-2,5 В., т.е. по середине амплитуды и этот уровень поддерживался до следующего появления меандра, а не отрубало до нулевого уровня.
#include <tiny2313a.h>
flash unsigned char byte [] = {3, 3, 2, 2};
void main(void)
{
PORTB=0x00;
DDRB=0x3F;
PORTD=0x7F;
DDRD=0x00;
TCCR0A=0x42;
TCCR0B=0x05;
OCR0A=0x00;
while (1) {
unsigned long a = 0; // необходимая частота при обрыве коммутации (Гц)
unsigned long c = OCR1A ;
unsigned long d = 1;
unsigned long F_PU = 4098000;
char i;
if(PIND.0==0){a = 425;} // при нажатии кнопки PD.0 частота 425 Гц
if(PIND.1==0){a = 475;} // при нажатии кнопки PD.1 частота 475 Гц
if(PIND.2==0){a = 725;} // при нажатии кнопки PD.2 частота 725 Гц
if(PIND.3==0){a = 775;} // при нажатии кнопки PD3 частота 775 Гц
if(PIND.4==0){OCR0A = 0xA6;} // частота 12 Гц
if(PIND.4==1){OCR0A = 0xF9;} // частота 8 гц
c = (F_PU / a / 2);
for (i = 0; i < 4; i++)
{
if (c > 65536) {
d <<= byte[i];
c = (F_PU / a / 2 / d);
}
else {
TCCR1B = (i + 1) | (1 << WGM12);
break;
}
}
OCR1A = c - 1; TCCR1A |= (1 << COM1A0);
}
}