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

📄 fs511.c

📁 18 bit ADC FS511 C与ASM源代码
💻 C
字号:
/*********************************************/
// File Name: FS511_adc.c
// Author: henny
// Create Date: 2006/3/1
// Modify Date:	2006/7/21
/*********************************************/
#include <SST89x5xxRD2.h>
#include <intrins.h>

#define VOID void 
typedef signed char 	INT8;
typedef signed short 	INT16;
typedef signed long 	INT32;
typedef char 			CHAR;
typedef unsigned char 	BYTE;
typedef unsigned short 	WORD;
typedef unsigned long 	DWORD;
typedef double 			FLOAT;
typedef bit 			BOOL;

#define	CS	P1_0
#define	SK  P1_1
#define DI	P1_2
#define DO  P1_3
#define RDBY P1_3

#define NETA 0
#define NETB 1
#define NETC 2
#define NETD 3

#define Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()

DWORD AD_Value;
DWORD AD_Data_buf[5];

VOID FS511_Write(BYTE adr,BYTE c)
{
	INT8 i;
	CS = 0;
	Nop();

	DI = 0;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	if ((adr&0x02)==0x02)
	{
		DI = 1;
		Nop();
	}
	else
	{
		DI = 0;
		Nop();
	}

	SK = 1;
	Nop();
	SK = 0;
	Nop();

	if ((adr&0x01)==0x01)
	{
		DI = 1;
		Nop();
	}
	else
	{
		DI = 0;
		Nop();
	}

	SK = 1;
	Nop();
	SK = 0;
	Nop();

	DI = 0;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	for (i=0; i<8; i++)
	{  
		if ((c<<i)&0x80)
		{
			DI = 1;
		}

		else
		{  
	   		DI = 0;
		}
		SK = 1;
		Nop();
		SK = 0;
		Nop();
	}

	CS = 1;
	DI = 0;
	Nop();			
}

BYTE Get_FS511_Byte()
{
	INT8 i;
	BYTE d;
	for (i=0;i<8;i++)
	{
		d = d<<1;

        if (DO == 1)
		{
			d=d+1;
		}
		SK = 1;
		Nop();
		SK = 0;
		Nop();	
	}
	return d;	
}

BYTE FS511_Read(BYTE adr)
{
	BYTE c;
	CS = 0;
	Nop();

	if ((adr&0x04)==0x04)
	{
		DI = 1;
		Nop();
	}
	else
	{
		DI = 0;
		Nop();
	}
	SK = 1;
	Nop();
	SK = 0;
	Nop();
	
	if ((adr&0x02)==0x02)
	{
		DI = 1;
		Nop();
	}
	else
	{
		DI = 0;
		Nop();
	}
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	if ((adr&0x01)==0x01)
	{
		DI = 1;
		Nop();
	}
	else
	{
		DI = 0;
		Nop();
	}
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	DI = 1;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();
	
	c = Get_FS511_Byte();

	CS = 1;
	DI = 0;
	Nop();
	
	return c;	
}

VOID FS511_Init()
{
	CS = 1;
	Nop();
	SK = 1;
	Nop();
	DI = 1;
	Nop();
	DO = 0;
	Nop();
	DO = 1;
	Nop();
	CS = 1;
	Nop();
	FS511_Write(NETA,0x88);
	FS511_Write(NETB,0xe0);
	FS511_Write(NETC,0x93);
	FS511_Write(NETD,0x56);	
}

DWORD Get_AD_Convert_Data()
{
	INT8 i;

	while (RDBY);

	CS = 0;
	Nop();

	DI = 1;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	DI = 0;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	DI = 0;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();
	
	DI = 1;
	Nop();
	SK = 1;
	Nop();
	SK = 0;
	Nop();

	
	AD_Value=Get_FS511_Byte();
	AD_Value=AD_Value<<8;
	AD_Value+=Get_FS511_Byte();
	AD_Value=AD_Value<<8;
	AD_Value+=Get_FS511_Byte();

	for (i=4; i>0; i--)
	{
		AD_Data_buf[i]=AD_Data_buf[i-1];
	}

	AD_Data_buf[0]=AD_Value>>6;
	
	AD_Value=0;

	for (i=0; i<5; i++)
	{
		AD_Value+=AD_Data_buf[i];	
	}
	AD_Value = AD_Value/5;	

	CS = 1;
	DI = 0;
	Nop();

	return AD_Value;	
}

⌨️ 快捷键说明

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