AD7.docx

上传人:b****6 文档编号:7378832 上传时间:2023-01-23 格式:DOCX 页数:8 大小:15.88KB
下载 相关 举报
AD7.docx_第1页
第1页 / 共8页
AD7.docx_第2页
第2页 / 共8页
AD7.docx_第3页
第3页 / 共8页
AD7.docx_第4页
第4页 / 共8页
AD7.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

AD7.docx

《AD7.docx》由会员分享,可在线阅读,更多相关《AD7.docx(8页珍藏版)》请在冰豆网上搜索。

AD7.docx

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;}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1