#include <reg52.h>
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DRDY="P3"^2;
uchar Exchange(uchar temp);
int READ_AD(uchar comd);
void delay1 (uint ms);
void AD_AIN1(void);
void AD_AIN2(void);
void main ( )
{
int DATAIN1,DATAIN2;
SP="0x5f"; // 设堆栈指针
AD_AIN1();
AD_AIN2();
IE="0X81";// 开外部中断0,总中断开,
while(1)
{
DATAIN1=READ_AD(0x38); // (0011 1000)为读通道 (AIN1+、 AIN1-)
//数据寄存器可在此加上显示、 按键、 打印等子程序
delay1(200);
DATAIN2=READ_AD(0x39); //( 0011 1001)为读通道(AIN2+、AIN2-)数据寄存器
delay1(200);
}
}
uchar Exchange (uchar temp)
/*八位高低位变换*******************************/
{ uchar a,b,c,i;
c="0";a=temp;b=1;
b="b"&a;c=b|c;
for (i=1;i<8;i++)
{c=c<<1;
a="a">>1;
b="1";
b="b"&a;
c="b|c";
}
return (c);
}
void delay1 (uint ms)
/*****************延时子程序******************/
{ uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++);
}
int READ_AD(uchar comd)
/*READ AD7705 读数据寄存器,comd为通讯寄存器命令*/
{ int data1;
uchar LSB,MSB;
uchar temp,comm;
temp="comd"; // 对命令做高低位变换,以写入用
comm="Exchange" (temp);
while (DRDY==1);
SCON="0"; // 不允许串行口接受数据,REN=0,先写通讯寄存器
SBUF="comm"; // 送通讯寄存器命令
while (TI==0);
TI="0";
SCON="0x10"; // 允许串行口接收,REN=1,RI=0
while (RI==0);
RI="0";
MSB="SBUF"; // 读入串行口MSB 为AD 转换数据高8位,LSB为其低8位
while (RI==0);
RI="0";
LSB="SBUF";
temp="MSB"; // 高低位变换
MSB="Exchange"(temp);
temp="LSB";
LSB="Exchange" (temp);
data1=(int)MSB; // 高低字节合并
data1=data1<<8;
data1=data1|(int)LSB;
return (data1);
}
void AD_AIN1(void)
// 通道1的初始化***********************************
{
SCON="0";
SBUF="Exchange" (0x20); // 串行口控制寄存
//器,设置TI=0(D1) ,RI=0(D0) ,REN=0(D4),不允许接收(REN=1,
//RI=0接收), 写通讯寄存器 (0010 0000), 设置下一
//次操作为写时钟寄存器。设置为“工作模式”,选择通道为AIN1+、AIN1-?
while(TI==0);
TI="0";
SBUF="Exchange" (0x01); // 写时钟寄存器(
//0000 0001), 写时钟寄存器 ( 0000 0001)
//CLKDIS位无效 (不允
//许MCLK OUT输出时钟),
//CLKDIV=0(d4),CLK=0
//(工作于2.4576MHZ),
//设定25HZ输出更新率
while(TI==0);
TI="0";
SBUF="Exchange" (0x10); // 写通讯寄存器
//(0001 0000)设置下
//一次操作为写设置寄存器。
//设置为“工作模
//式”,选择通道为
//AIN1+、AIN1-。
while(TI==0); // 等待发送完成
TI="0";
SBUF="Exchange" (0x62); // 写设置寄存器
//(0110 0010)自校准,
//16倍增益,双极性工作,
//高阻抗源,
//缓冲模式,FSYNC=0
while(TI==0);
TI="0";
}
void AD_AIN2(void)
// 通道2 初始化*************************************
{
SCON=0; //串行口控制寄存器(0000
//0000) ,设置TI=0 (D1) ,
//RI=0 (D0) ,REN=0(D4),
//不允许接收 (REN=1,RI=0接收)
SBUF=Exchange (0x21); // 写通讯寄存器
//(0010 0001)设置下一次操作为
//写时钟寄存器。设置为“工作模
//式”,选择通道为AIN2+、AIN2-?
while(TI==0);
TI=0;
SBUF="Exchange" (0x01); // 写时钟寄
//存器 (0000 0001)
//CLKDIS位无效 (不允许MCLK OUT输出时钟) ,
//CLKDIV=0(d4),CLK=0 (工作于2.4576MHZ),
// 设定25HZ输出更新率。
while(TI==0);
TI="0";
SBUF="Exchange"(0x11); // 写通讯寄存器
while(TI==0);
TI=0;
SBUF="Exchange" (0x01); // 写时钟寄
//存器 (0000 0001)
//CLKDIS位无效 (不允许MCLK OUT输出时钟) ,
//CLKDIV=0(d4),CLK=0 (工作于2.4576MHZ),
// 设定25HZ输出更新率。
while(TI==0);
TI="0";
SBUF="Exchange"(0x11); // 写通讯寄存器
//(0001 0001), 设置下一次操作为写设置寄存器。
// 设置为 “工作模式”,
//选择通道为AIN2+、AIN2-
while(TI==0); // 等待发送完成
TI="0";
SBUF="Exchange" (0x6a); // 写设置寄存器
//(0110 1010) 自校准,32增益,
//双极性,缓冲模式,FSYNC=0
while(TI==0);
TI="0";
}
文章评论(0条评论)
登录后参与讨论