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

📄 ad_fpga.c

📁 单片机控制FPGA的程序,包括AD转换,频率输出,测试程序
💻 C
字号:
#include"includes.h"


extern unsigned char xdata res1[256];
extern unsigned char xdata resmem[256];      //存储数组
extern unsigned char memshow_flag;           //显示存储波形标志位
extern unsigned int L_num,R_num;    //左右移偏移量
extern unsigned char cnv_flag;
extern bit zero_flag;
extern unsigned int show_num;             //显示累计

void mydelay(unsigned int j)		     //延时
{
	unsigned int i;
	for(i=0;i<j;i++);

}

void delay_1us(void)	                 //延时1us子程序
{
       _nop_();
	   _nop_();
	   _nop_();
	   _nop_();
	   _nop_();
	   _nop_();
	   _nop_();
	   
}

/*******************************************************************************/
/*读取FPGA中ADS931z转换结果程序                                                */
/*          																   */
/*                                                                             */
/*                                                                             */
/*******************************************************************************/
void fpag_clr()				         //	读取fpga前清零
{
     clr=0;
	 clr=1;
	 clr=0;

}

unsigned char read_data( )		       //从fpga中读出一次AD转换结果
{
	unsigned int i;
	unsigned char ad_result;
	ad_result=0;
	read=0;
	read=1;
	clk=0;
	clk=1;
	clk=0;
	clk=1;
	clk=0;
	read=0;
	for(i=0;i<8;i++)
	{
		clk=0;
		clk=1;
		clk=0;
		da=1;
		if(da)
		{
		   ad_result|=(0x01<<i);
		}
	}
	return ad_result;

}

void read_result(unsigned char *da/*波形值储存数组*/)		   //读出fpga中RAM中储存的数据
{
    unsigned int i;
    
	for(i=0;i<256;i++)
	{
	   	*da=read_data();
	   da++;
	}


}

void read_ready()	                                  //读fpga准备,ads931转换结果
{
   	write=0;
	read=0;
	clk=0;
	clr=0;
	fpag_clr();
	write=0;
	write=1;
	write=0;
}


void cov_over() interrupt 17 using 0			        //中断判断fpga控制AD转换结束
{
   	 EA=0;
	 PRT1IF&=0xdf;
	 cnv_flag=1;
	 
	 EA=1;	
							       //下一次采样准备
								   //读取采样结果
	 
//     if(memshow_flag==1)		                      //输出存储波形
//	 {
//		 if(L_num>=0)
	
//		 else if(R_num>0)
//		 show_wavright(resmem);
//	 }											    
//	 else if(memshow_flag==0)					      //输出当前波形
//	 {
//		 if(L_num>=0)
//		 show_wavleft(res1,L_num);
//		 else if(R_num>0)
//		 show_wavright(res1,R_num);
//	}
      

}






/*******************************************************************************/
/*双路AD输出程序                                                               */
/*          					   											   */
/*                                                                             */
/*                                                                             */
/*******************************************************************************/


void set_dac0(unsigned char da)	           //向dac0赋值
{
    DAC0L=0x00;
	DAC0H=da;
}

void set_dac1(unsigned int da)	           //向dac1赋值
{
	DAC1L=da&0xff; 
	DAC1H = (da>>8)&0x0f;

}

void show_wavright(unsigned char *da/*波形储存数组*/)	     //向右移动输出波形	,unsigned int num/*显示数组偏移*/
{
       unsigned int i;
	  for(i=0;i<256;i++)
	  {
	     if(zero_flag)
		 set_dac0(0);
		 else
	     set_dac0(da[i]);
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 set_dac1(i*15);	 
	  }
/*	  for(i=0;i<(256-num);i++)
	  {
	     set_dac0(da[i]);
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 set_dac1((i+num)*8);	 
	  }	 */

	  

}



void show_wavleft(unsigned char *da/*波形储存数组*/)	     //向左移动输出波形	,unsigned int num/*显示数组偏移*/
{
       unsigned int i;

	  for(i=0;i<256;i++)
	  {
	     if(zero_flag)
		 set_dac0(0);
		 else
	     set_dac0(da[i]);
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 set_dac1(i*15);	 
	  }
/*	  for(i=0;i<num;i++)
	  {
	     set_dac0(da[i]);
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 delay_1us();
		 set_dac1((256-num+i)*8);	 
	  }	*/

}

void show_wav() interrupt 5 using 0
{
    TF2=0;
    if(show_num==256)
	show_num=0;
	set_dac0(res1[show_num]);
	delay_1us();
	set_dac1(show_num*15);
	show_num++;
    

}



⌨️ 快捷键说明

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