📄 ad5532.c
字号:
#include <reg52.h>
#include <intrins.h>
#define AD_AVERAGE_NUM 10 //6
//定义AD5532的引脚
/*sbit ad_cs = P3^2; //
sbit ad_di = P3^3; //
sbit ad_do = P2^1;
sbit ad_sck = P2^0; //*/
//5532
sbit ad_cs = P2^0 ;
sbit ad_di = P2^1 ;
sbit ad_do = P2^2 ;
sbit ad_sck = P2^3 ;
//定义5532的初始化数据
unsigned char code mtb_1[]={0x03,0x20,0x00,0x00,0x00}; // ;reset rs=1; 10.30
unsigned char code mtb[] ={0x03,0x00,0x00,0x00,0x00, // ;配置寄存器
0x01,0x00,0x00,0x00,0x00, // ;偏移寄存器
0x02,0x01,0x00,0x00,0x00 //;增益寄存器
} ;
//通道设置积存器
unsigned char code mtb_2[]={0x05,0x32,0x40,0x00,0x00, //7.5次/秒
0x05,0x31,0xc0,0x00,0x00, // 15次/秒
0x05,0x31,0x40,0x00,0x00, // 30次/秒
0x05,0x30,0xc0,0x00,0x00 // 60次/秒
};
unsigned long int xdata ad_buff[AD_AVERAGE_NUM];
unsigned char xdata ad_number;
extern signed long data ad_out; //POL输出的内码
extern bit pick,stab1;
//extern unsigned char xdata sped_ptr; //AD转换的速度选择
extern void DelayInter(unsigned int num);
extern void gal(unsigned long int li1);
void InitAd(void);
void write_ad(unsigned char dat)
{
ACC=dat;
ad_sck = 0;
_nop_();
_nop_();
// for (B = 8;B !=0; B--)
B = 8;
wr_8:
// ACC = ACC << 1;
CY = ACC & 0x80; //带进位左移
/* #pragma asm
rlc a
#pragma endasm*/
ad_di = CY;
ad_sck = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ad_sck = 0;
_nop_();
_nop_();
B --;
if (B!=0) goto wr_8;
ad_di = 0;
}
unsigned long int read_ad(void)
{
unsigned long int li = 0;
ad_sck = 0;
B = 32;
rd80: _nop_();
_nop_();
_nop_();
li = li << 1;
if (ad_do != 0) li++;
ad_sck = 1;
_nop_();
_nop_();
_nop_();
ad_sck = 0;
B --;
if (B != 0) goto rd80;
/* for ( loop = 0 ; loop < 32 ; loop++ )
{
_NOP();
_NOP();
_NOP();
li = li << 1;
if ( (P3IN & AD_SDO) != 0 ) li++;
P3OUT |= AD_SCK;
_NOP();
_NOP();
_NOP();
P3OUT &= ~AD_SCK;
}*/
return( li>>8 );
}
//初始化5532
void InitAd(void)
{
unsigned char loop1;
ad_number = 0;
ad_do=1;
ad_di=0;
ad_sck=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ad_cs=0;
for (loop1=0;loop1<30;loop1++)
{
write_ad(0xff);
}
write_ad(0xfe);
DelayInter(10);
////////////////////////////
for (loop1=0;loop1<5;loop1++)
{
write_ad(mtb_1[loop1]);
}
DelayInter(50);
//////////////////////////////
for (loop1=0;loop1<15;loop1++)
{
write_ad(mtb[loop1]);
}
for (loop1=0;loop1<5; loop1++)
{
// write_ad( mtb_2[loop1+sped_ptr*5]);
write_ad( mtb_2[loop1+5]); //A/D Convert 15 pcs
}
write_ad(0xc0);
}
void adpro(void)
{
signed long int li;
// unsigned char loop;
ad_do = 1;
_nop_();
if ( ad_do != 0 ) return;
write_ad(0x00);
li = read_ad();
// li = li >> 4;
li = li >> 5;
/* ad_buff[ad_number] = li;
ad_number++;
if (ad_number >= AD_AVERAGE_NUM) ad_number = 0;
li = 0;
for (loop=0; loop<AD_AVERAGE_NUM; loop++)
{
li1 = ad_buff[loop];
li = li + li1;
}
li = li / AD_AVERAGE_NUM;*/
/* if ( li <50 )
{
ad_out = li << 1;
pick = 1;
stab1 = 0;
return;
}*/
gal(li);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -