PC/104模块Diamond-MM-AT的原理与应用
下面是以PC/104作处理器和Diamond-MM-AT模块进行组合,以对检测的模拟量信号进行A/D转换的读写程序及对各控制寄存器的配置方法。笔者已在实践中对该程序进行了测试,并已成
功运用到某测试工程设计中。
#define Base 0x300
Main Void{
union ?{ unsigned int m; unsigned char n[2];}T;
int dat[3000];?
int i, cd;
int freq=2000; // 设定采样频率为2kHz;
outportb(Base+9, 0x83); // 允许中断,由计数器触发;
outportb(Base+10, 0x08);? // 计数器1产生1MHz方波
outportb(Base+11, 0x05);? // A/D输入范围为0~5V
T.m=(int)(500000/ freq); // 0.5MHz/Freq求写入记数器值;
outportb(Base+15,0x54); // 设定计数器1读/写低字节;
outportb(Base+13,0x01);? // 向计数器1写低字节(二分频);
outportb(Base+15,0xb4);? // 设定计数器2先读/写低字节,再读/写高字节;
outportb(Base+14,T.n[0]);? // 向计数器2写低字节;
outportb(Base+14,T.n[1]);??// 向计数器2写高字节;
outportb(Base+2,0xcc); // 设定测取通道为C通道(即第12通道);
for(i=0;i<3000;i++) // 循环采集3000个数据;
{
outportb(Base+1,0xff);? // 清除FIFO;
outportb(?Base+8,0xff); // 设定中断寄存器8,等计数器触发;
while((inportb(Base+8)&0x10)==0x00); // 等待A/D转换结束;
cd=inportb(Base+0))// 读取低八位数据;
cd=cd/16; // 数据右移四位,除去右四位的通道标志;
dat[i]=inportb(Base+1); // 读取高八位数据;
dat[i]=dat[i]*16; // 高八位数据左移四位;
dat[i]=dat[i]+cd; // 高八位与低四位相加即得A/D转换结果12位数据;
}
……