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

📄 备份 fft_240128.c

📁 用avr调试t6369的240128并将采到的数据用于fft分析的程序
💻 C
字号:
/********16位ad函数*************
sclk     接PD2
DOUT     接PD1
CONV     接PD3
EOC      接PD0
cs		 接PD4
*******************************/
#define uint  unsigned int 
#define uchar unsigned char 
#include<avr/io.h>
#include <avr/pgmspace.h>
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
/**********位操作函数*********/
void set_sclk(uchar i)//clk     接PA2
{	 
	 if(i)
	 PORTD|=0x04;
	 else
	 PORTD&=0xfb;
}
void set_conv(uchar i)
{	 
	 if(i)
	 PORTD|=0x08;
	 else
	 PORTD&=0xf7;
}
void set_cs(uchar i)
{	 
	 if(i)
	 PORTD|=0x10;
	 else
	 PORTD&=0xEF;
}
/*********m16初始化**********/
void m16_init(void)
{
	 DDRD|=0Xfc;
	 DDRD&=0Xfc;//定义pa1 pa2 为输入,其他引脚为输出
	 DDRE=0Xff;
	 DDRF=0Xff;
	 DDRG=0Xff;
	 DDRB=0Xff;
	 DDRC=0Xff;
	 DDRA=0Xff;//端口初始化
	 PORTD|=0X03;//定义pa1 pa2为带上拉输入
	 //CLI();//关中断
}
/********max195初始化********/ 
void max195_inital(void)
    {
     set_cs(1);
     set_sclk(0);
    }
/**********************
max195转换开始
**********************/
void max195_start(void)
{
     set_conv(0);//,启动转换
     delay_nus(100);
     set_conv(1);
}
/***********************/
uint max195_read(void)
{	 uint num2=0;
	 uchar num1=0,k;
	 while((PIND&0x01)==0x01);
	 set_cs(0);
	 for(k=0;k<16;k++)
	 {
	 set_sclk(1);
	 delay_1us();
	 if((PIND&0x02)==0x02)//判断pa1是否为1
	 {
	 num1=1;
	 //PORTA|=0x20;
	 }
	 else
	 {
	 num1=0;
	 //PORTA&=0xdf;
	 }
	 num2=num2*2+num1;
	 set_sclk(0);//下降沿锁存下一位
	 delay_nus(3);
	 }
	 return num2;
}
int main(void)
{	
	 uint dat=0,average_dat[10]={0};
	 uchar i=0;
	 float  average=0.0;
	 volatile float v=0.0;
	 m16_init();
	 max195_inital();
	 for(i=0;i<10;i++)
	 {
	 max195_start();
	 delay_nus(10);//必须加一段延时
	 dat=max195_read();
	 average_dat[i]=dat;
	 average=average+average_dat[i];
	 }
	 v=(average/10-32768);
	 v=v*2.48/32768;
	  while(1);
}

⌨️ 快捷键说明

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