AD574全12位转换原理图及转换函数
已有 958 次阅读2012-6-12 12:59
|个人分类:程序
[attachment=2142]
[table=938,#ffffff,,0][tr][td][align=left][color=#625b49]AD574[/color][color=#625B49][font=宋体]全[/font][/color][color=#625b49]12[/color][color=#625B49][font=宋体]位转换原理图[/font][/color][color=#625b49]:[/color][/align][align=left][size=1][color=#625b49][img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_image001.jpg[/img][/color][/size][/align][align=left][color=#625B49][font=宋体]转换函数[/font][/color][color=#625b49]:[/color][/align][align=left][color=#625b49]//*********************************************/
/* AD574[/color][color=#625B49][font=宋体]全[/font][/color][color=#625b49]12[/color][color=#625B49][font=宋体]位转换读数据函数[/font][/color][color=#625b49] */
//[/color][color=#625B49][font=宋体]参考电压为芯片内部输出的[/font][/color][color=#625b49]10[/color][color=#625B49][font=宋体]电压[/font][/color][color=#625b49] */
//[/color][color=#625B49][font=宋体]读写操作:[/font][/color][color=#625b49] */
//[/color][color=#625B49][font=宋体]启动[/font][/color][color=#625b49] A0=0,CS=0;RC=0; */
//[/color][color=#625B49][font=宋体]读低四位[/font][/color][color=#625b49]CS=0;A0=1;RC=1; */
//[/color][color=#625B49][font=宋体]读高四位[/font][/color][color=#625b49]CS=0;A0=0;RC=1; */
/**********************************************/
#include "absacc.h"
#include "at89x51.h"[/color][/align][align=left][color=#625b49]#define uint unsigned int
#define uchar unsigned char
#define ADCOM XBYTE[0xff7c] //[/color][color=#625B49][font=宋体]启动[/font][/color][color=#625b49] A0=0,CS=0;RC=0;
#define ADLO XBYTE[0xff7f] //[/color][color=#625B49][font=宋体]读低四位[/font][/color][color=#625b49] CS=0;A0=1;RC=1;
#define ADHI XBYTE[0xff7d] //[/color][color=#625B49][font=宋体]读高四位[/font][/color][color=#625b49] CS=0;A0=0;RC=1;[/color][/align][align=left][color=#625b49]uchar code dis1[] = { 0x28, 0x7E,0xA2, //[/color][color=#625B49][font=宋体]数码管显示代码[/font][/color][color=#625b49]
0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};[/color][/align][align=left][color=#625b49]sbit STS=P3^5; //[/color][color=#625B49][font=宋体]转换标志位[/font][/color][color=#625b49][/color][/align][align=left][color=#625b49]//sbit wr=P3^7; //WR
//sbit rd=P3^6; //RD[/color][/align][align=left][color=#625b49]sbit sw=P3^3; //[/color][color=#625B49][font=宋体]开始转换[/font][/color][color=#625b49][/color][/align][align=left][color=#625b49]uint temp;
uchar qian,bai,shi,ge;
uchar display_buf[3];
uint addate[7];
uint ad_team;[/color][/align][align=left][color=#625b49]void display(); //[/color][color=#625B49][font=宋体]转换读出[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]数据[/font][/color][color=#625b49]
/*****************************/
void delay(uint ms)[/color][color=#625b49] [/color][color=#625b49]
// [/color][color=#625B49][font=宋体]延时[/font][/color][color=#625b49]1MS
{
uchar i;
while(ms--)
for(i=0;i<125;i++);
}
/*****************************/
uint ad574()
{
ADCOM=0;
while(STS==1);
return((uint)(ADHI<<4)+(ADLO&0x0f));
}
/*****************************/
/* display */
/*****************************/
void display()
{
qian=temp/1000; //2
bai=(temp-qian*1000)/100;
shi=(temp-qian*1000-bai*100)/10;
ge=temp-qian*1000-bai*100-shi*10;[/color][/align][align=left][color=#625b49]display_buf[0]=dis1[qian];
display_buf[1]=dis1[bai];
display_buf[2]=dis1[shi];
display_buf[3]=dis1[ge];[/color][/align][align=left][color=#625b49]P1=display_buf[0];
P2_0=0;
delay(2);
P2_0=1;[/color][/align][align=left][color=#625b49]P1=display_buf[1];
P2_1=0;
delay(2);
P2_1=1;[/color][/align][align=left][color=#625b49]P1=display_buf[2];
P2_2=0;
delay(2);
P2_2=1;[/color][/align][align=left][color=#625b49]P1=display_buf[3];
P2_3=0;
delay(2);
P2_3=1;
}[/color][/align][align=left][color=#625b49]/***********************/
main()
//[/color][color=#625B49][font=宋体]主函数[/font][/color][color=#625b49]
{
uint idata result;
uchar s;
temp=0;
ad_team=0;
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
EA=1; //[/color][color=#625B49][font=宋体]开总中断[/font][/color][color=#625b49]
ET0=1;
TR0=1;
P0=0xff;
while(1)
{
if(sw==0) //[/color][color=#625B49][font=宋体]按钮按下,执行[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]转换[/font][/color][color=#625b49]
{
delay(10);
while(!sw);
{[/color][color=#625b49] [/color][color=#625b49]
for(s=0;s<8;s++) //AD[/color][color=#625B49][font=宋体]采样[/font][/color][color=#625b49]8[/color][color=#625B49][font=宋体]次[/font][/color][color=#625b49]
{[/color][color=#625b49] [/color][color=#625b49]
temp=0;
result=ad574();
addate[s]=result; //[/color][color=#625B49][font=宋体]采样数据保存[/font][/color][color=#625b49]
delay(1);
}[/color][color=#625b49] [/color][color=#625b49]
for(s=0;s<8;s++) //8[/color][color=#625B49][font=宋体]次[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]相加后除[/font][/color][color=#625b49]8[/color][color=#625B49][font=宋体]求平均[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]值[/font][/color][color=#625b49]
{
ad_team=ad_team+addate[s];
}
temp=(uint)ad_team/8;
ad_team=0;
}
}
}
}
/**********************************/[/color][/align][align=left][color=#625b49]void timer0() interrupt 1
//[/color][color=#625B49][font=宋体]定时中断用作显示[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]值[/font][/color][color=#625b49]
{
TH0=0xd8;
TL0=0xf0;
display();
}[/color][/align][/td][/tr][/table]