⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9850a.h

📁 凌阳单片机控制ad9850来产生正弦波信号1KHz-10MHz的源代码
💻 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 + -