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

📄 ac1020.c

📁 用VC编写的完整采样程序
💻 C
字号:
#include        <conio.h>
#include        <graph.h>

int     AC1020_base;
int     ad_max, ad_min ;
long    sam ;
int     saml = 300 ;

main()
{
	AC1020_base = 0x210 ;

	test_ac1020_io() ;
	test_ac1020_ad() ;
	test_ac1020_da() ;

}


test_ac1020_io()
{
	int     i, j ;
	int     flag ;

	flag = 0 ;

	_clearscreen( _GCLEARSCREEN ) ;

	printf( "\n\nTest AC1020's IO" ) ;
	printf( "\nStart..." ) ;

	for( i=0; i<255; i++ )
	{
		outp( (AC1020_base+6), i ) ;
		j = inp( AC1020_base+6 ) ;
		printf( "." ) ;
		if( i != j )
		{
			flag = 1 ;
			printf( "outp=%x, inp=%x  ",i, j ) ;
		}
	}

	for( i=0; i<255; i++ )
	{
		outp( (AC1020_base+7), i ) ;
		j = inp( AC1020_base+7 ) ;
		printf(".") ;
		if( i != j )
		{
			flag = 1 ;
			printf( "%x, %x ", i, j ) ;
		}
	}

	if( flag == 0 )
	{
		printf( "\n\nTest AC1020's IO is OK!" ) ;
		printf( "\nPress any key to continue." ) ;
		getch() ;
	}

	if( flag == 1 )
	{
		printf( "Test AC1020's IO is ERROR!\a" ) ;
		printf( "\nPress any key to continue." ) ;
		getch() ;
	}

}


test_ac1020_ad()
{
	int     i, j, k ;
	int     data ;
	float   value1, value2, value3 ;
	float   val ;

	_clearscreen( _GCLEARSCREEN ) ;

	printf( "\n\nTest AC1020's A/D\n" ) ;

	printf( "\nCh    Data         0-5V          0-10V        -5V-+5v" ) ;

	do
	{
		_settextposition(6,0) ;

		for( i=0; i<16; i++ )
		{
			data = ac1020_ad( i ) ;
			value1 = (float)data * 5.000/1023.0 ;
			value2 = value1*2.0 ;
			value3 = value2 - 5.0 ;
			printf( "%2d    %3x        %5.3f(V)      %5.3f(V)      %5.3f(V)\n", i, data, value1, value2, value3 ) ;
		}

		AC1020_max_min( 0 ) ;

		data = sam / saml ;
		val = (float)data*5.000/1023.0 ;

		printf("%5d times test, max = %3x, min = %3x, aver = %3x, val = %5.3f", saml, ad_max, ad_min, data, val ) ;


	}while( !kbhit() ) ;

	getch() ;


}

int     ac1020_ad( int ch )
{

	int     i, j, k ;
	int     datal, datah ;
	int     data ;

	outp( AC1020_base, ch ) ;

	for( i=0; i<2; i++ )
	{
		outp( (AC1020_base+2), 0 ) ;
		do
		{
			j = inp( AC1020_base ) ;
			j = j & 1 ;
			//printf( "%d", i ) ;
		} while( j != 0 ) ;
	}


	//printf("2222") ;
	datal = inp( AC1020_base+2 ) ;
	datah = inp( AC1020_base+3 ) ;

	datah = datah & 0x3 ;

	data = datah*256+datal ;

	//printf( "datah=%d  datal=%x     ", datah, datal ) ;

	return data ;

}

AC1020_max_min( int ch )
{
	int     i, j, k ;
	int     datal, datah ;
	int     data ;


	outp( AC1020_base, ch ) ;


	for( i=0; i<30; i++ )
	{
		outp( (AC1020_base+2), i ) ;
		do
		{
			j = inp( AC1020_base ) ;
			j = j & 1 ;
			//printf( "%d", i ) ;
		} while( j != 0 ) ;
	}

	ad_max = 0 ;
	ad_min = 0x3ff ;

	sam = 0 ;

	for( i=0; i<saml; i++ )
	{
		outp( (AC1020_base+2), 0 ) ;
		do
		{
			j = inp( AC1020_base ) ;
			j = j & 1 ;
			//printf( "%d", i ) ;
		} while( j != 0 ) ;

		datal = inp( AC1020_base+2 ) ;
		datah = inp( AC1020_base+3 ) ;
		datah = datah & 3 ;

		data = datah*256+datal ;

		sam = sam + data ;

		if( data>ad_max)
			ad_max = data ;
		if( data<ad_min )
			ad_min = data ;
	}




}


test_ac1020_da()
{
	int     i, j, k ;

	_clearscreen( _GCLEARSCREEN ) ;

	printf( "\nTest D/A Channel 0:\n" ) ;
	printf( "\nD/A Ch0 output 0V\n" ) ;
	outp( (AC1020_base+4), 0 ) ;
	getch() ;

	printf( "\nD/A Ch0 output 5V\n" ) ;
	outp( (AC1020_base+4), 0xff ) ;
	getch() ;

	printf( "\nD/A Ch0 output 1.67V\n" ) ;
	outp( (AC1020_base+4), 0x55 ) ;
	getch() ;

	printf( "\nD/A Ch0 output 3.33V\n" ) ;
	outp( (AC1020_base+4), 0xaa ) ;
	getch() ;

	printf( "\nTest D/A Channel 1:\n" ) ;
	printf( "\nD/A Ch1 output 0V\n" ) ;
	outp( (AC1020_base+5), 0 ) ;
	getch() ;

	printf( "\nD/A Ch1 output 5V\n" ) ;
	outp( (AC1020_base+5), 0xff ) ;
	getch() ;

	printf( "\nD/A Ch1 output 1.67V\n" ) ;
	outp( (AC1020_base+5), 0x55 ) ;
	getch() ;

	printf( "\nD/A Ch1 output 3.33V\n" ) ;
	outp( (AC1020_base+5), 0xaa ) ;
	getch() ;







}

⌨️ 快捷键说明

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