中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

嵌入式系统

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 嵌入式系统 → 浏览主题: 请教AD卡的读写?
发表新帖 回复该主题
回帖:1个,阅读:2446 [上一页] [1] [下一页]
* 帖子主题:

请教AD卡的读写?

分享到
911
whitespray
文章数:2
年度积分:50
历史总积分:911
注册时间:2004/8/30
发站内信
发表于:2004/8/30 16:04:00
#0楼
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<conio.h>
#include<stdlib.h>
#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的小电池),读的数据也在不断的变化(波动很大),这结果明显不对,请高手指点,这问题怎么解决,是不是卡的问题?

918
daemondong
文章数:7
年度积分:50
历史总积分:918
注册时间:2004/7/1
发站内信
发表于:2004/9/2 12:23:00
#1楼
用延时的方法不好,应该检测状态位,是否完成了A/D转换。50微秒时转换不一定完成,所以数据不准
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003