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

📄 ad9850.c

📁 基于凌阳和ad9850实现的正弦波信号发生器程序
💻 C
字号:
#include "SPCE061V004.h"

int change;
int ctr_word[5]={0x0,0x00,0x01,0x5d,0x86};///////
int key_value=0;
int key_out;
int key_num;
float a;
//unsigned long int freq_value;
unsigned long int f_value=0;
void step_forword(void);
void step_backword(void);
void sin_send(unsigned long int f_con);

void key(void)
{int i,j;
	key_value = *P_IOA_Data;
	key_value &= 0x000f;			//key
	if(key_value)
	{
	 	i=4900;
	 	while(i--)
	 	{*P_Watchdog_Clear = 1;}
	 	key_value = *P_IOA_Data;
	 	key_value &= 0x000f;		//key
	 	if(key_value)
		{
			change=1;
			switch(key_value)
	 	 	{
	 	 		case 0x0001:
	 	 		step_forword();
	 	 		break;
	 	 		
	 	 		case 0x0002:
	 	 		step_backword();
	 	 		break;
	 	 		
	 	 		case 0x0004:
	 	 		sin_send(2000000);
	 	 		break;
	 	 	}
		}
	 	key_out = 1;	
	 	while(key_out)
	 	{
	 		*P_Watchdog_Clear = 1; 
	 		key_value = *P_IOA_Data;
	 		key_value &= 0x000f;			//key
	 		if(key_value)
	 			key_out = 1;
	 		else
	 			key_out = 0;
	 	}
	}
}

void wr_word(void)
{int i,j;
	*P_IOB_Buffer |= 0x4000;
	for(j=0;j<5;j++)
	{
		*P_IOB_Buffer=ctr_word[j];			//5 byte ctr_word
		*P_IOB_Buffer |= 0x8000;
		*P_IOB_Buffer &= 0x7fff;
	}
	*P_IOB_Buffer |= 0x4000;				//update
}

void step_forword(void)
{int i,j;
	f_value |= ctr_word[1];
	f_value <<= 8;
	f_value |= ctr_word[2];
	f_value <<= 8;
	f_value |= ctr_word[3];
	f_value <<= 8;
	f_value |= ctr_word[4];

	f_value += 0x22f4;
	if(f_value > 0x50000000)
		f_value = 0x50000000;
	
	ctr_word[4] = f_value;
	ctr_word[4] &= 0x00ff;
	f_value >>= 8;
	ctr_word[3] = f_value;
	ctr_word[3] &= 0x00ff;
	f_value >>= 8;
	ctr_word[2] = f_value;
	ctr_word[2] &= 0x00ff;
	f_value >>= 8;
	ctr_word[1] = f_value;
	ctr_word[1] &= 0x00ff;
	wr_word();
}

void step_backword(void)
{int i,j;
	f_value |= ctr_word[1];
	f_value <<= 8;
	f_value |= ctr_word[2];
	f_value <<= 8;
	f_value |= ctr_word[3];
	f_value <<= 8;
	f_value |= ctr_word[4];

	f_value -= 0x22f4;
	if(f_value < 0x015d86)
		f_value = 0x015d86;
	
	ctr_word[4] = f_value;
	ctr_word[4] &= 0x00ff;
	f_value >>= 8;
	ctr_word[3] = f_value;
	ctr_word[3] &= 0x00ff;
	f_value >>= 8;
	ctr_word[2] = f_value;
	ctr_word[2] &= 0x00ff;
	f_value >>= 8;
	ctr_word[1] = f_value;
	ctr_word[1] &= 0x00ff;
	wr_word();
}

void sin_send(unsigned long int f_con)
{int i,j;
	a=89.4784853*f_con;
	f_value = (long)a;
	ctr_word[4] = f_value;
	ctr_word[4] &= 0x00ff;
	f_value >>= 8;
	ctr_word[3] = f_value;
	ctr_word[3] &= 0x00ff;
	f_value >>= 8;
	ctr_word[2] = f_value;
	ctr_word[2] &= 0x00ff;
	f_value >>= 8;
	ctr_word[1] = f_value;
	ctr_word[1] &= 0x00ff;
	wr_word();
}

int main()
{       int i,j;

	

	
	change=0;
	
	i=19500;
	while(i--)
	{*P_Watchdog_Clear = 1;}
	
	wr_word();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -