登录
首页 嵌入式系统 嵌入式系统
回帖 发帖
正文

主题:请教AD卡的读写?

点击:2524 回复:1

AD卡有4个-5V--+5V的电压通道:通道0-通道3,-5V--+5V的电压信号对应与数量:0--4096(0V对应与数字量2048)
AD卡的读写:
1)选通道控制字:通道0:10H,通道1:11H,通道2:12H,通道3:13H,通道地址:22CH
2)启动AD转换:(1)控制字1:30 H;地址:22BH(2)控制字2:10H;地址:228H(3)控制字3:00H;地址:228H
3)延时50微秒
4)从AD卡读数据:(1)读12位低8位数据:地址:220H(2)读12位高4位数据:地址:221H(取该字节的低4位数据)
程序如下(win98下的):
#include
#include
#define BASEADDR 0x220
#define CHANCEL  0x10
int adin(int ch)
{
int i;
unsigned char a,b ;
unsigned int data;
outportb(BASEADDR+12,ch);
for(i=0;i<50;i++);
outportb(BASEADDR+11,0x30);
outportb(BASEADDR+8,0x10);
outportb(BASEADDR+8,0x00);
for(i=0;i<650;i++);                 //延时50微秒
a=inportb(BASEADDR);
for(i=0;i<50;i++);
b=inportb(BASEADDR+1);
data=(unsigned int)((b&0x0f)*256+a);
return(data);
}
main()
{
 unsigned int da[4];
int i;
while(!kbhit())
{
for(i=0;i<4;i++)
{
da[i]=adin(CHANCEL+i);
printf("da[%d]=%d\n",i,da[i]);
}
}
}
不加电压时,也有数据,并且这数据在不断的变化(波动很大),在通道上加电压时(1.4V的小电池),读的数据也在不断的变化(波动很大),这结果明显不对,请高手指点,这问题怎么解决,是不是卡的问题?
04-08-30 16:04
用延时的方法不好,应该检测状态位,是否完成了A/D转换。50微秒时转换不一定完成,所以数据不准
04-09-02 12:23

工控新闻

更多新闻资讯