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

📄 ad5532.c

📁 用CS5532做的无线吊钩称的吊称端程序
💻 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 + -