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 + -
显示快捷键?