📄 ads8505.c
字号:
#include <c8051f020.h>
#include <absacc.h>
#include <intrins.h>
#include "Def.h"
#define Read_AD P3
#define Test_Cs
//#define Test_Count_8
//#define Test_Count_16
//#define Test_Count_32
//#define Test_Count_64
volatile U8 xdata AD8505_Data1[100];
volatile U8 xdata AD8505_Data[3200];
volatile U8 AD_High=0,AD_Low=0;
#define BAUDRATE 115200
#define SYSCLK 22118400
sbit BUSY_IO = P2^1; //忙状态判断端口,输入
sbit CS_IO = P2^2; //片选端口,输出
sbit Read_IO = P2^3; //数据读状态端口,输出
sbit BYTE_HL = P2^4; //转换数据的高低输出端口选择,输出
void SYSCLK_Init (void)
{
U16 i;
CKCON = 0x00;
OSCXCN = 0x67;
for (i=0; i < 256; i++) ;
while (!(OSCXCN & 0x80));
OSCICN = 0x88;
TCON |=0x01;
}
void PORT_Init (void)
{
XBR0 = 0x05;
XBR1 = 0x24;
XBR2 = 0x40;
P0MDOUT = 0x1D;
P1MDOUT = 0x0E;
P1MDIN = 0xFF;
P2MDOUT = 0x1C;
EMI0CF = 0x20;
}
void Delay(U8 Count)
{
U8 i;
for(i=Count;i>0;i--)
{
_nop_();
_nop_();
// _nop_();
// _nop_();
}
}
void Read_AD_Data(void)
{
BYTE_HL = 0; /*准备读数据*/
Read_AD = 0xFF;
BUSY_IO = 1;
CS_IO = 1; /*R/C脚为底,CS为高*/
Read_IO = 0;
__nop_();
__nop_();
__nop_();
__nop_();
// Read_IO = 1;// __nop_();
CS_IO = 0; /*R/C脚为底,CS出现负跳沿,AD开始转换*/
__nop_();
Read_IO = 1;
while(BUSY_IO==0); /*等待AD转化出结果*/
CS_IO = 1; /*R/C脚为高,CS为高*/
__nop_();
__nop_();
CS_IO = 0;
__nop_();
__nop_();
//Read_IO = 1;
//BYTE_HL = 0; /*准备读数据*/
AD_Low = Read_AD; /*读低八为数*/
BYTE_HL = 1;
Read_AD = 0xFF;
// Delay(20);
AD_High = Read_AD; /*读高八为数*/
CS_IO = 1;
// Read_IO = 0;
// Delay(40);
}
void Read_AD_Data1(void)
{
BYTE_HL = 0; /*准备读数据*/
Read_AD = 0xFF; /*读数据前先输出1*/
// Read_IO = 1;
BUSY_IO = 1; /*读数据前先输出1*/
Read_IO = 0; /*下降沿触发AD转换*/
__nop_(); /*1/22.1184M=45.2ns*/
__nop_();
Read_IO = 1; /*下降沿中部至上升沿中部所需时间至少40ns,最大1750ns*/
while(BUSY_IO==0); /*等待AD转化出结果*/
AD_Low = Read_AD; /*读低八为数*/
BYTE_HL = 1; /*准备读数据*/
Read_AD = 0xFF;
AD_High = Read_AD; /*读高八为数*/
//Read_IO = 0;
Delay(5); /*保证转换之间间隔4us*/
}
void Init_Data(void)
{
U16 i=0;
for(i=3200;i>0;i--)
{
AD8505_Data[i]=0;
}
}
void UART0_Init (void)
{
SCON0 = 0x50;
TMOD = 0x21;
T2CON &= 0x0cf;
TH1 = -(SYSCLK/BAUDRATE/16);
TR1 = 1;
CKCON |= 0x10;
PCON |= 0x80;
}
void main(void)
{
U16 i=0;
U32 Temp=0;
WDTCN = 0xde;
WDTCN = 0xad; //关看门狗
SYSCLK_Init();
PORT_Init();
Init_Data();
UART0_Init();
Delay(100);
#ifdef Test_Cs
Read_IO = 1;
CS_IO = 0;
#else
CS_IO = 1;
Read_IO = 1;
#endif
while(1)
{
if(i<3200)
{
#ifdef Test_Cs
Read_AD_Data1();
#else
Read_AD_Data();
#endif
AD8505_Data[i] =AD_Low;
AD8505_Data[i+1]=AD_High;
i+=2;
}
else
{
#ifdef Test_Count_64
for(i=0;i<3200;i=i+64)
{
Temp = AD8505_Data[i]+ AD8505_Data[i+2]+AD8505_Data[i+4]+
AD8505_Data[i+6]+AD8505_Data[i+8]+AD8505_Data[i+10]+
AD8505_Data[i+12]+AD8505_Data[i+14]+AD8505_Data[i+16]+
AD8505_Data[i+18]+AD8505_Data[i+20]+AD8505_Data[i+22]+
AD8505_Data[i+24]+AD8505_Data[i+26]+AD8505_Data[i+28]+
AD8505_Data[i+30]+AD8505_Data[i+32]+AD8505_Data[i+34]+
AD8505_Data[i+36]+AD8505_Data[i+38]+AD8505_Data[i+40]+
AD8505_Data[i+42]+AD8505_Data[i+44]+AD8505_Data[i+46]+
AD8505_Data[i+48]+AD8505_Data[i+50]+AD8505_Data[i+52]+
AD8505_Data[i+54]+AD8505_Data[i+56]+AD8505_Data[i+58]+
AD8505_Data[i+60]+AD8505_Data[i+62]+AD8505_Data[i+64];
Temp+= AD8505_Data[i+66]+AD8505_Data[i+68]+AD8505_Data[i+70]+
AD8505_Data[i+72]+AD8505_Data[i+74]+AD8505_Data[i+76]+
AD8505_Data[i+78]+AD8505_Data[i+80]+AD8505_Data[i+82]+
AD8505_Data[i+82]+AD8505_Data[i+84]+AD8505_Data[i+86]+
AD8505_Data[i+88]+AD8505_Data[i+90]+AD8505_Data[i+92]+
AD8505_Data[i+94]+AD8505_Data[i+96]+AD8505_Data[i+98]+
AD8505_Data[i+100]+AD8505_Data[i+102]+AD8505_Data[i+104]+
AD8505_Data[i+106]+AD8505_Data[i+108]+AD8505_Data[i+110]+
AD8505_Data[i+112]+AD8505_Data[i+114]+AD8505_Data[i+116]+
AD8505_Data[i+118]+AD8505_Data[i+120]+AD8505_Data[i+122]+
AD8505_Data[i+124]+AD8505_Data[i+126];
AD8505_Data1[i>>6] = (U8)(Temp>>6);
}
#elif defined(Test_Count_32)
for(i=0;i<3200;i=i+32)
{
Temp = AD8505_Data[i]+ AD8505_Data[i+2]+AD8505_Data[i+4]+
AD8505_Data[i+6]+AD8505_Data[i+8]+AD8505_Data[i+10]+
AD8505_Data[i+12]+AD8505_Data[i+14]+AD8505_Data[i+16]+
AD8505_Data[i+18]+AD8505_Data[i+20]+AD8505_Data[i+22]+
AD8505_Data[i+24]+AD8505_Data[i+26]+AD8505_Data[i+28]+
AD8505_Data[i+30]+AD8505_Data[i+32]+AD8505_Data[i+34]+
AD8505_Data[i+36]+AD8505_Data[i+38]+AD8505_Data[i+40]+
AD8505_Data[i+42]+AD8505_Data[i+44]+AD8505_Data[i+46]+
AD8505_Data[i+48]+AD8505_Data[i+50]+AD8505_Data[i+52]+
AD8505_Data[i+54]+AD8505_Data[i+56]+AD8505_Data[i+58]+
AD8505_Data[i+60]+AD8505_Data[i+62];
AD8505_Data1[i>>5] = (U8)(Temp>>5);
}
#elif defined(Test_Count_16)
for(i=0;i<3200;i=i+16)
{
Temp = AD8505_Data[i]+ AD8505_Data[i+2]+AD8505_Data[i+4]+
AD8505_Data[i+6]+AD8505_Data[i+8]+AD8505_Data[i+10]+
AD8505_Data[i+12]+AD8505_Data[i+14]+AD8505_Data[i+16]+
AD8505_Data[i+18]+AD8505_Data[i+20]+AD8505_Data[i+22]+
AD8505_Data[i+24]+AD8505_Data[i+26]+AD8505_Data[i+28]+
AD8505_Data[i+30];
AD8505_Data1[i>>4] = (U8)(Temp>>4);
}
#elif defined(Test_Count_8)
for(i=0;i<3200;i=i+8)
{
Temp = AD8505_Data[i]+ AD8505_Data[i+2]+AD8505_Data[i+4]+
AD8505_Data[i+6]+AD8505_Data[i+8]+AD8505_Data[i+10]+
AD8505_Data[i+12]+AD8505_Data[i+14];
AD8505_Data1[i>>3] = (U8)(Temp>>3);
}
#endif
#ifdef Test_Count_32
for(i=0;i<100;i++)
{
SBUF0=AD8505_Data1[i];
while(TI0==0);
TI0=0;
}
#elif defined(Test_Count_64)
for(i=0;i<49;i++)
{
SBUF0=AD8505_Data1[i];
while(TI0==0);
TI0=0;
}
#elif defined(Test_Count_16)
for(i=0;i<200;i++)
{
SBUF0=AD8505_Data1[i];
while(TI0==0);
TI0=0;
}
#elif defined(Test_Count_8)
for(i=0;i<400;i++)
{
SBUF0=AD8505_Data1[i];
while(TI0==0);
TI0=0;
}
#else
for(i=0;i<3200;i++)
{
SBUF0=AD8505_Data[i];
while(TI0==0);
TI0=0;
}
#endif
Init_Data();
while(RI0==0);
RI0=0;
i=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -