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

📄 ads7841.c

📁 12位串行AD:ADS7841的驱动程序
💻 C
字号:
#define ADS7841_CLOCK_DOWN() *ADS7841_PORT_DATA&=(ADS7841_CLOCK^0xFFFF)
#define ADS7841_CLOCK_UP()   *ADS7841_PORT_DATA|=ADS7841_CLOCK
#define ADS7841_DIN_DOWN() *ADS7841_PORT_DATA&=(ADS7841_DIN^0xFFFF)
#define ADS7841_DIN_UP()   *ADS7841_PORT_DATA|=ADS7841_DIN
#define ADS7841_DOUT_DOWN() *ADS7841_PORT_DATA&=(ADS7841_DOUT^0xFFFF)
#define ADS7841_DOUT_UP()   *ADS7841_PORT_DATA|=ADS7841_DOUT

#define ADS7841_POWER_DOWN 3
#define ADS7841_MODE 0x8
#define ADS7841_SGL_DIF 0x4
#define ADS7841_S 0x80

unsigned int *ADS7841_PORT_DATA;
unsigned int *ADS7841_PORT_DIR;
unsigned int *ADS7841_PORT_ATTRIB;

unsigned int ADS7841_CLOCK;
unsigned int ADS7841_DIN;
unsigned int ADS7841_DOUT;
unsigned int ADS7841_CHANNEL;

void ini_ADS7841(char Port,unsigned int Clock,unsigned int Din,unsigned int Dout)
{
	if (Port=='b'||Port=='B')
	{
		ADS7841_PORT_DATA=0x7005;
		ADS7841_PORT_DIR=0x7007;
		ADS7841_PORT_ATTRIB=0x7008;
	}
	else 
	{
		ADS7841_PORT_DATA=0x7000;
		ADS7841_PORT_DIR=0x7002;
		ADS7841_PORT_ATTRIB=0x7003;		
	}
	ADS7841_CLOCK=Clock;
	ADS7841_DIN=Din;
	ADS7841_DOUT=Dout;

	*ADS7841_PORT_DIR|=(ADS7841_CLOCK|ADS7841_DIN);
	*ADS7841_PORT_DIR&=(ADS7841_DOUT^0xFFFF);
	*ADS7841_PORT_ATTRIB|=(ADS7841_CLOCK|ADS7841_DIN);
	*ADS7841_PORT_ATTRIB&=(ADS7841_DOUT^0xFFFF);
	*ADS7841_PORT_DATA&=(ADS7841_DOUT|ADS7841_DIN|ADS7841_CLOCK)^0xFFFF;
}

unsigned int ADS7841_Read_Data(unsigned int Channel)
{
	unsigned int In_Data,Out_Data=0,i;
	switch (Channel)
	{
		case 0:ADS7841_CHANNEL=0x10;break;
		case 1:ADS7841_CHANNEL=0x50;break;
		case 2:ADS7841_CHANNEL=0x20;break;
		case 3:ADS7841_CHANNEL=0x60;break;
		default:ADS7841_CHANNEL=0x10;break;		
	}
	In_Data=ADS7841_S|ADS7841_CHANNEL|ADS7841_MODE|ADS7841_SGL_DIF|ADS7841_POWER_DOWN;
	//send_data
	for(i=0;i<8;i++)
	{
		ADS7841_CLOCK_DOWN();
		if((In_Data<<i)&0x80) ADS7841_DIN_UP();
		else ADS7841_DIN_DOWN();
		ADS7841_CLOCK_UP();
	}
	ADS7841_CLOCK_DOWN();
	asm("nop");
	ADS7841_CLOCK_UP();
	asm("nop");	
	ADS7841_CLOCK_DOWN();	
	asm("nop");	
	//get_data
	for(i=0;i<12;i++)
	{
		ADS7841_CLOCK_UP();
		if (*ADS7841_PORT_DATA&ADS7841_DOUT) Out_Data=(Out_Data<<1)+1;
		else Out_Data=(Out_Data<<1);
		ADS7841_CLOCK_DOWN();			
	}
	*ADS7841_PORT_DATA&=(ADS7841_DOUT|ADS7841_DIN|ADS7841_CLOCK)^0xFFFF;
	return Out_Data;
}

⌨️ 快捷键说明

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