📄 ad_fpga.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 + -