📄 afsk.c
字号:
#include <header.h>
#include <afsk.h>
#include <max038.h>
volatile unsigned short int ask_dat;
volatile unsigned short int fsk_dat;
volatile unsigned short int ask_mask;
volatile unsigned short int fsk_mask;
volatile unsigned char ask_sending=0;
volatile unsigned char fsk_sending=0;
void afsk_ctrl(unsigned char ctrl)
{
TCCR1A=0x00;
TCCR1B=(1<<WGM12);
if(ctrl)
{
TIMSK=1<<OCIE1A;
MAX038_com(MAX038_SIN);
}
else
TIMSK=0;
}
void ask_com(unsigned short int speed,unsigned short int dat,unsigned short int in)
{
unsigned long int fre_clk=11059200;
unsigned short int div[5]={1,8,64,256,1024};
unsigned char i;
ask_dat=dat;
ask_mask=in;
for(i=0;i<5;i++)
{
if(fre_clk/div[i]>0xFFFF)continue;
OCR1A=fre_clk/div[i];
TCCR1B=(TCCR1B&0xf8)|((i+1)&0x07);
ask_sending=1;
}
}
void fsk_com(unsigned short int speed,unsigned short int dat,unsigned short int in)
{
unsigned long int fre_clk=11059200;
unsigned short int div[5]={1,8,64,256,1024};
unsigned char i;
fsk_dat=dat;
fsk_mask=in;
for(i=0;i<5;i++)
{
if(fre_clk/div[i]>0xFFFF)continue;
OCR1A=fre_clk/div[i];
TCCR1B=(TCCR1B&0xf8)|((i+1)&0x07);
fsk_sending=1;
PORTD=PORTD|0x20;
}
}
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
if(ask_sending)
{
if(ask_mask)
PORTD=((PORTD&0xef)|((ask_dat&0x01)<<4));
else
{
ask_sending=0;
if(!fsk_sending)
TCCR1B=(TCCR1B&0xf8);
}
ask_dat>>=1;
ask_mask>>=1;
}
else if(fsk_sending)
{
if(fsk_mask)
{
if(fsk_dat&0x01)
MAX038_com(MAX038_1000);
else
MAX038_com(MAX038_100);
}
else
{
fsk_sending=1;
if(!ask_sending)
TCCR1B=(TCCR1B&0xf8);
}
fsk_dat>>=1;
fsk_mask>>=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -