afsk.c

来自「一个通过串口与51通信的AVR的程序,还有一些其实功能」· C语言 代码 · 共 93 行

C
93
字号
#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 + =
减小字号Ctrl + -
显示快捷键?