📄 ac1020.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 + -