📄 9850a.h
字号:
#ifndef __9850A_h__
#define __9850A_h__
// write your header here
/*#define ASK 0 //调制方式
#define PSK 1 //调制方式*/
#define Offset5K 0 //调制方式
#define Offset10K 1 //调制方式
#define DDSSCK P1_5
#define UPDATE P1_6
#define REST P1_7
#define DDSDATA P1_Highbyte
unsigned long f_freqword;
unsigned int f_phaseword;
// Sine table for AM;
/*Uint const UnAMed[32]={0x8000,0x98F9,0xB0FC,0xC71D,0xDA82,0xEA6D,0xF641,0xFD8A,
0xFFFF,0xFD8A,0xF641,0xEA6D,0xDA82,0xC71D,0xB0FC,0x98F9,
0x8000,0x6707,0x4F04,0x38E3,0x257E,0x1593,0x09BF,0x0276,
0x0001,0x0276,0x09BF,0x1593,0x257E,0x38E3,0x4F04,0x6707
};*/
int const UnAMed[42]={
0x0000,0x0BA5,0x1707,0x21E6,0x2C02,0x3523,0x3D15,
0x43A9,0x48B9,0x4C2B,0x4DE8,0x4DE8,0x4C2B,0x48B9,
0x43A9,0x3D15,0x3523,0x2C02,0x21E6,0x1707,0x0BA5,
0x0000,0xF45C,0xE8FA,0xDE1B,0xD3FF,0xCADE,0xC2EC,
0xBC58,0xB748,0xB3D6,0xB219,0xB219,0xB3D6,0xB748,
0xBC58,0xC2EC,0xCADE,0xD3FF,0xDE1B,0xE8FA,0xF45C
};
Uint AMoffset[42]={};
// Direct frequency offset table for FM;
int const DirUnFMed[32]={0,1951,3827,5556,7071,8315,9239,9808,
10000,9808,9239,8315,7071,5556,3827,1951,
0,-1951,-3827,-5566,-7071,-8315,-9239,-9808,
-10000,-9808,-9239,-8315,-7071,-5556,-3827,-1951
};
// Direct frequency word table for FM;
unsigned long DirFMword[32]={};
void Word2Str(Uint It,Uint *str,Uint In)
{
Uint Ia[5];
Uint Ii, Ij;
*(unsigned int*)0x7012 = 1;
Ia[0]=(It/10000)%10;
Ia[1]=(It/1000)%10;
Ia[2]=(It/100)%10;
Ia[3]=(It/10)%10;
Ia[4]=(It/1)%10;
for(Ii=0; Ii<5; Ii++)
{Ia[Ii]=Ia[Ii]+'0';*(unsigned int*)0x7012 = 1;}
for(Ii=0;Ia[Ii]=='0' && Ii<=3;Ii++);
for(Ij=5-In; Ij<Ii;Ij++)
{ *str=' '; str++; *(unsigned int*)0x7012 = 1;}
for(;Ii<5;Ii++)
{ *str=Ia[Ii]; str++;*(unsigned int*)0x7012 = 1;}
*str='\0';
}
void Long2Str(signed long It,Uint *str,Uint In)
{
Uint Ia[8];
Uint Ii, Ij;
*(unsigned int*)0x7012 = 1;
Ij=0;
Ia[0]=(It/10000000)%10;
Ia[1]=(It/1000000)%10;
Ia[2]=(It/100000)%10;
Ia[3]=(It/10000)%10;
Ia[4]=(It/1000)%10;
Ia[5]=(It/100)%10;
Ia[6]=(It/10)%10;
Ia[7]=It%10;
/* for(Ii=0; Ii<8; Ii++)
{Ia[Ii]=Ia[Ii]+'0';*(unsigned int*)0x7012 = 1;}
for(Ii=0;Ia[Ii]=='0' && Ii<=6;Ii++);
for(Ij=8-In; Ij<Ii;Ij++)
{
*str=' '; str++; *(unsigned int*)0x7012 = 1;
}*/
for(Ii=0;Ii<8;Ii++)
{
while(Ia[Ii]==0&&Ij==0)
{
Ii++;
}
Ij=1;
if(Ia[Ii]>=0&&Ia[Ii]<10)
*str=Ia[Ii]+'0';
str++;*(unsigned int*)0x7012 = 1;
}
*str='\0';
}
void UpdateDDS()
{
UPDATE=0;
DDSSCK=0;
DDSDATA=f_phaseword<<3;
DDSSCK=1;
DDSSCK=0;
DDSDATA=(f_freqword>>24)&0xff;
DDSSCK=1;
DDSSCK=0;
DDSDATA=(f_freqword>>16)&0xff;
DDSSCK=1;
DDSSCK=0;
DDSDATA=(f_freqword>>8)&0xff;
DDSSCK=1;
DDSSCK=0;
DDSDATA=f_freqword & 0xff;
DDSSCK=1;
UPDATE=1;
UPDATE=0;
}
void SendFreq(double freq)
{
UPDATE=0;
f_freqword=(unsigned long)freq*42.949673;
UpdateDDS();
UPDATE=1;
UPDATE=0;
}
void SendPhase(Uint phase)
{
UPDATE=0;
f_phaseword=phase;
UpdateDDS();
UPDATE=1;
UPDATE=0;
}
// f_freqword=(unsigned long)freq*130.150524;//42.949673;
//**********************************************
////////////////////////////////////////////////////
// MCU Block;
//以下所有中断每个时刻只开一种,对应功能允许对应中断,同时屏蔽其它中断;
//**********************************************
//FM ISR;
/////////////////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -