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

📄 ads8364.c

📁 Fujitsu 16bit mcu application, with ads8364.
💻 C
字号:
/*------------------------------------------------------------------------
This software includes some function about operating ADS8364.

Copyright 2002-2003,Xiaoquan Tang

File : ADS8364.c
by Xiaoquan Tang

E-mail:xqtang@vip.sina.com

History:    
Date      Version              Author         Description 
3-5-03    1.0 initial version  Xiaoquan Tang
---------------------------------------------------------------------- */


#include "mb90540.h"
#include "ads8364.h"

unsigned int TONUM; // define total samples 
int CHS[6][400];	 //CHS[ch,n] continue sample array
					 // ch:channel number,n:n sample

// initialize ADS8364
void InitADS8364(void)
{
	// Set P1 and P2 to Output 
	DDR1 = 0x00;
	DDR2 = 0x00;
	// Set P00,P01 to input,and P02~P07 to Output
	DDR0 = 0xfc;
	// Set P3 to Output
	DDR3 = 0xf7;
	// Set PA0 to Output
	DDRA = 0x01;
	// Set P90 to Input;
	DDR9 = 0x00;
	// Set WR and RD to Invalid
	WR = 1;
	RD = 1; 
	// Set CS to Invalid
	CS = 1;
	// Reset ADS8364
	RST = 1;
	RST = 0;
	RST = 1;
	// Select Cycle Mode
	A0 = 0;
	A1 = 1;
	A2 = 1;
	// Select 16-bit mode
	BYTE = 0;	
	ADD = 0;

}	

// start ADS8364 convert
void StartADS8364(void)
{
			CS = 1;
			RD = 1;
			WR = 1;
			
			RST = 1;
			RST = 0;
			RST = 1;
			
			HOLDA = 1;
			HOLDB = 1;
			HOLDC = 1;
		
			HOLDA = 0;
			HOLDB = 0;
			HOLDC = 0;
		
			HOLDA = 1;
			HOLDB = 1;
			HOLDC = 1;
}

int CH[6];
// read ADS8364  data
void ReadADS8364(void)
{
	unsigned char i;
	unsigned int  k;
	unsigned char HI;	// define ADS8364 High Byte
	unsigned char LO;	// define ADS8364 Low Byte
					
	CS = 1;
	CS = 0;
	for(i = 0; i < 6; i++)
	{
		RD = 0;
		HI = PDR2;
		LO = PDR1;
		RD = 1;
		// composed of high byte and low byte  
		CH[i] = (HI * 256 +LO);
		// 14 bit precision
		//CH[i] = CH[i] + 0x01;
		//CH[i] = CH[i] >> 2;
	}
	CS = 1;
}

// short delay 
void shortdelay()
{
		unsigned char i;
		for(i = 0; i < 50; i++);
}

// hex converter to ASCII
unsigned char ASCII[5];
void HextoASCII(unsigned int hexs)
{
	unsigned int va;
	unsigned char i;
		va = 10000;								
		for (i = 4; i ; i--)
	 	{
			ASCII [i] = 0;					
			while (( hexs >= va )&&( va > 9 ))
		 	{
				hexs -= va;						
				ASCII[i]++;				
			}
			va /= 10;							
		}
		ASCII[0]=hexs;
		for(i = 0; i < 5; i++)
			ASCII[i] = ASCII[i] +0x30;					
}

// read one time  AD converter result and send it to PC
void OneADResult(void)
{
		unsigned i,j;
		ReadADS8364 ();
		for(i = 0; i < 6; i++)
		{
			if(CH[i] < 0)
			{
				CH[i] = -CH[i];
				Putch (0x2d);
			}	
			else
				Putch (0x20);
			HextoASCII (CH[i]);
			for(j = 0; j < 5 ; j++)
				Putch (ASCII[4-j]);
			Putch (0x20);
		 }
		NewLine();
}

// Single conversion
void SingleConversion(void)
{
		unsigned char ch;
		NewLine();
		Puts ("Press space key to start or other key to exit");
		Puts ("   CH0   CH1    CH2    CH3    CH4    CH5");
		do
		{
			LED = ON;
			ch = Getch ();
			LED = OFF;
			StartADS8364 ();
			shortdelay ();
			OneADResult ();
		}while (ch == 0x20);
}

// send continue sample to PC
void sendConuRsult (void)
{
	unsigned char k,j,l;
	unsigned int i;
	for(k = 0; k < 6; k++)
	{
		NewLine();
		Putch (0x43); // send C to PC
		Putch (0x48); // send H to PC
		Putch (0x30+k);
		NewLine();
		l = 0;
		for(i = 0; i < TONUM; i++)
		{
			LED = ON;
			
			// convert A/D result to ASCII
			if(CHS[k][i] < 0)
			{
				CHS[k][i] = -CHS[k][i];
				Putch (0x2d);
			}	
			else
				Putch (0x20);
			HextoASCII (CHS[k][i]);
			LED = OFF;
			for(j = 0; j < 5 ; j++)
				Putch (ASCII[4-j]);
			
			// adjust output data format for display 
			// composing 9 data a line  	
			l = l + 1;
			if(l < 10 )
			{
				Putch (0x20);
			}
			else
			{
				l = 0x00;
				NewLine();
			}
		}
		NewLine();
	}
}

// convert input char to total samples
void InputSamplesNum(unsigned char ch)
{
		switch(ch)
		{
			case 0x31 :
				TONUM = 50;
				break;
			case 0x32 :
				TONUM = 100;
				break;
			case 0x33 :
				TONUM = 150;
				break;
			case 0x34 :
				TONUM = 200;
				break;
			case 0x35 :
				TONUM = 250;
				break;
			case 0x36 :
				TONUM = 300;
				break;
			case 0x37 :
				TONUM = 350;
				break;
			case 0x38 :
				TONUM = 400;
				break;
			default:
				TONUM = 0;
		} 
}
// Continue  samples 
void ContinueConversion (void)
{
	unsigned char ch;
	unsigned int i,j;
	do
	{
		// select samples number 
		NewLine();
		Puts("Select sample number:");
		NewLine();
		Puts("1 -- 050 samples");
		Puts("2 -- 100 samples");
		Puts("3 -- 150 samples");
		Puts("4 -- 200 samples");
		Puts("5 -- 250 samples");
		Puts("6 -- 300 samples");
		Puts("7 -- 350 samples");
		Puts("8 -- 400 samples");
		NewLine();
		
		ch = Getch();
		InputSamplesNum(ch);
		
		for(i = 0; i < TONUM; i++)
		{
			StartADS8364 ();
			LED = ON;
			shortdelay ();
			ReadADS8364();
			for(j = 0; j < 6; j++)
				CHS[j][i] = CH[j];
		}
		sendConuRsult ();
		NewLine();
		Puts ("Press space key to start or other key to exit");
		ch = Getch();
	}while(ch == 0x20);
}

⌨️ 快捷键说明

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