AD7.docx
- 文档编号:7378832
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:8
- 大小:15.88KB
AD7.docx
《AD7.docx》由会员分享,可在线阅读,更多相关《AD7.docx(8页珍藏版)》请在冰豆网上搜索。
AD7
#include<>
#include""
sbitAD7798_CS=P2^2;//1
sbitAD7798_SCLK=P2^3;//1
sbitAD7798_RDY=P2^1;//0
sbitAD7798_DOUT=P2^1;
sbitAD7798_DIN=P2^0;//1
voidInit_Serial(void);//串口初始化
voidWaiteRDY(void);//等待RDY变为低电平
unsignedcharReadByte_7798(void);//读一个字节
voidReadData_7798(void);//AD7798采集到得数据
voidSerial_Receive(unsignedcharData);//发送一个字节数据
voidWriteByte_7798(unsignedcharData);//写一个字节
voidInit_Ad7798(unsignedcharChannelNum);//AD7798初始化
unsignedchardisp[8]={0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x04};
unsignedcharNew_Data[8]={0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x04};
unsignedcharNext_Data[8]={0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x04};
unsignedcharTwo_Data[8]={0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x04};
unsignedcharhData,lData;
longintnew,old,yy;
//=======================主函数
voidmain(void)
{
unsignedchari,j;//AD7798读取的数据
Init_Serial();
P2=0x00;
WriteByte_7798(0xff);//resetad7798
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0xff);
while
(1)
{
for(i=0;i<3;i++)
{
Init_Ad7798(i);//通道1、通道2、通道3初始化
ReadData_7798();
new=hData*256+lData;
old=(longint)((new-yy)/2);
yy=(unsignedint)(old+yy);
j=2*i+1;
New_Data[j]=yy/256;
New_Data[j+1]=yy%256;
//Serial_Receive(hData);//发送数据
//Serial_Receive(lData);//发送数据
}
}
}
//=======================写一个字节
voidWriteByte_7798(unsignedcharData)
{
unsignedchari;
//AD7798_CS=0;
for(i=0;i<8;i++)
{
AD7798_SCLK=0;_nop_();_nop_();
if(Data&0x80)AD7798_DIN=1;
elseAD7798_DIN=0;_nop_();_nop_();
Data=Data<<1;_nop_();_nop_();
AD7798_SCLK=1;_nop_();_nop_();
}
//AD7798_CS=1;
}
//=======================读一个字节
unsignedcharReadByte_7798(void)
{
unsignedchari;
unsignedcharReadData;
//AD7798_CS=0;
ReadData=0;
for(i=0;i<8;i++)
{
AD7798_SCLK=0;_nop_();_nop_();
ReadData=ReadData<<1;_nop_();_nop_();
if(AD7798_DOUT)ReadData+=1;_nop_();_nop_();
AD7798_SCLK=1;_nop_();_nop_();
}
AD7798_DOUT=1;
//AD7798_CS=1;
return(ReadData);
}
//=======================等待RDY变为低电平
voidWaiteRDY(void)
{
unsignedintiint;
iint=0;
while(AD7798_RDY)
{
iint++;
if(iint>65500)
{
WriteByte_7798(0xff);//resetad7798
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0xff);
Init_Ad7798(0);
break;
}
}
}
//=======================7798的初始化
voidInit_Ad7798(unsignedcharChannelNum)
{
WriteByte_7798(0xff);//resetad7798
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0x10);//写入通讯寄存器设置下一个操作,写信给配置寄存器
WriteByte_7798(0x27);//增益为128
WriteByte_7798(0x30+ChannelNum);
/*
//写入模式注册启动系统满量程较准
WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
WriteByte_7798(0xe0);
WriteByte_7798(0x0a);
WaiteRDY();//等待及由RDY销去低显示最终的校准周期
//写入模式注册启动系统失调较准
WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
WriteByte_7798(0xc0);
WriteByte_7798(0x0a);
WaiteRDY();//等待及由RDY销去低显示最终的校准周期
*/
//写入模式注册启动内部零刻度校准
WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
WriteByte_7798(0x80);
WriteByte_7798(0x0a);
WaiteRDY();//等待及由RDY销去低显示最终的校准周期
//写入模式注册启动内部满刻度校准
//WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
//WriteByte_7798(0xa0);
//WriteByte_7798(0x0a);
//WaiteRDY();//等待及由RDY销去低显示最终的校准周期
WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
WriteByte_7798(0x00);
WriteByte_7798(0x0a);
}
//=======================读AD的数据
voidReadData_7798(void)
{
intConverData;
unsignedcharADSAT;
unsignedcharErrNUM;
WaiteRDY();//RDY为低电平时读取数据,读取完成后变为高电平
WriteByte_7798(0x40);
ADSAT=ReadByte_7798();//出错或者读写异常
//Serial_Receive(ADSAT);
while((ADSAT&0x40)||(ADSAT&0x08))//0x40错误位0x08必须为1
{
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0xff);
WriteByte_7798(0xff);
Init_Ad7798(0);
WaiteRDY();
WriteByte_7798(0x40);
ADSAT=ReadByte_7798();
ErrNUM++;
if(ErrNUM>5)break;
}
WriteByte_7798(0x58);//写入通讯寄存器设置下一个操作是连续的读取数据寄存器
WaiteRDY();//等待及由RDY销去低显示最终的校准周期
if(!
AD7798_RDY)
{
ConverData=0;
hData=ReadByte_7798();
ConverData=hData;
ConverData=ConverData<<8;
lData=ReadByte_7798();
ConverData=lData+ConverData;
ReadByte_7798();
}/*
WriteByte_7798(0x60);//读ID
ADSAT=ReadByte_7798();
Serial_Receive(ADSAT);//ID显示*/
}
//=========================波特率初始化
voidInit_Serial(void)
{
TMOD=0X20;//设置定时器1为方式2
TH1=0xfa;//装入初值
TL1=0Xfa;//装入初值
TR1=1;//启动定时器1
SM0=0;//设置串口为方式1
SM1=1;//设置串口为方式1
REN=1;//接收始能
EA=1;//打开总中断开关
ES=1;//打开串口中断开关
}
//=======================串口发送
voidSerial_Receive(unsignedcharData)
{
ES=0;//关闭串口中断开关
SBUF=Data;//将数据发送给电脑
while(!
TI);//等待数据发送结束
TI=0;
ES=1;
}
//=======================串口接受
voidserial()interrupt4
{
unsignedchark;
unsignedchara;
staticunsignedcharindex_a=0;
staticunsignedcharindex_b=0;
a=SBUF;
RI=0;
if(index_b)
{
for(k=1;k<7;k++)Two_Data[k]=Next_Data[k];
for(k=1;k<7;k++)//比较大小
{
if((New_Data[k]>=Next_Data[k])&&(Next_Data[k]>=Two_Data[k]))disp[k]=Next_Data[k];
if((New_Data[k]>=Two_Data[k])&&(Two_Data[k]>=Next_Data[k]))disp[k]=Two_Data[k];
if((Next_Data[k]>=New_Data[k])&&(New_Data[k]>=Two_Data[k]))disp[k]=New_Data[k];
if((Next_Data[k]>=Two_Data[k])&&(Two_Data[k]>=New_Data[k]))disp[k]=Two_Data[k];
if((Two_Data[k]>=New_Data[k])&&(New_Data[k]>=Next_Data[k]))disp[k]=New_Data[k];
if((Two_Data[k]>=Next_Data[k])&&(Next_Data[k]>=New_Data[k]))disp[k]=Next_Data[k];
}
for(k=1;k<7;k++)Next_Data[k]=New_Data[k];
if(disp[1]>234)disp[1]=0;
if(disp[3]>234)disp[3]=0;
if(disp[5]>234)disp[5]=0;
for(k=0;k<8;k++)Serial_Receive(disp[k]);//发送数据
}
else
{
index_a++;if(index_a==5){index_a=0;index_b=1;}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AD7