首页 8-AD7705的C51程序

8-AD7705的C51程序

举报
开通vip

8-AD7705的C51程序12位串行A/D转换器的原理及应用开发 AD7705的C51程序 /*********************************************************** 程序名称:16bitA/D AD7705驱动程序 作者:shengtuo 作者评价:测试过。工业低速测量广泛应用 收集整理:amo ************************************************************/ sbit AdClk = P1^3; /*AD7705时钟脉冲*/ sbit...

8-AD7705的C51程序
12位串行A/D转换器的原理及应用开发 AD7705的C51程序 /*********************************************************** 程序名称:16bitA/D AD7705驱动程序 作者:shengtuo 作者评价:测试过。工业低速测量广泛应用 收集整理:amo ************************************************************/ sbit AdClk = P1^3; /*AD7705时钟脉冲*/ sbit AdDout = P1^4; /*AD7705数据输出的反相脉冲*/ sbit AdDin = P1^5; /*AD7705数据输入脉冲*/ #define CH1 1 /*AD7705输入通道IN1*/ #define CH2 2 /*AD7705输入通道IN2*/ #define BIPOLAR 0 /*AD7705双极性输入*/ #define UNIPOLAR 1 /*AD7705单极性输入*/ #define AD_CLK_WIDTH 1 /*AD7705串口时钟脉冲宽度*/ /* AD7705软件延时 */ void Wait7705(unsigned int t) { for( ;t>0 ;t-- ); } /* 向AD7705写入一个字节 */ void WriteByte7705(unsigned char x) { unsigned char i; AdClk = 1; for (i=0; i<8; i++) { AdClk=0; Wait7705(AD_CLK_WIDTH); AdDin =(bit) (x & 0x80); Wait7705(AD_CLK_WIDTH); AdClk=1; Wait7705(AD_CLK_WIDTH); x <<=1; } } /* 从AD7705读一个字 */ unsigned int ReadWord7705(void) { unsigned char i; unsigned int x ; AdClk = 1 ; for (i = 0,x=0 ; i < 16 ; i++) { AdClk=0; Wait7705(AD_CLK_WIDTH); x<<=1; if (!AdDout) /* 光电耦合器反相 */ x |= 0x01; AdClk=1; Wait7705(AD_CLK_WIDTH); } return x; } /* AD7705通信端口复位 */ void Reset7705(void) { unsigned char i; for(i=0;i<35;i++) { /* 多于连续32个 DIN=1 使串口复位 */ AdClk=0; Wait7705(AD_CLK_WIDTH); AdDin =1; Wait7705(AD_CLK_WIDTH); AdClk=1; Wait7705(AD_CLK_WIDTH); } } /**AD7705初始化 输入通道channel ----1=IN1,2=IN2; 输入极性polarity----0=双极性, 1=单极性; PGA 增益gain -------[1,2,4,8,16,32,64,128] 非缓冲模式***************/ void Init7705(unsigned char channel , bit polarity , unsigned char gain) { unsigned char x; Reset7705(); /* 防止串口失步 */ WriteByte7705(0x20); /* 写ch0 clock register */ WriteByte7705(0x00); /* 2.4576MHz时钟,20Hz数据更新速率 */ WriteByte7705(0x21); /* 写CH1 clock register */ WriteByte7705(0x00); /* 2.4576MHz时钟,20Hz数据更新速率 */ if(channel==1) /* com register ,选择下步操作 setup register */ WriteByte7705(0x10); else WriteByte7705(0x11); if(polarity) /* setup register */ x=0x04; else x=0x00; switch(gain) { case 1 : x|=0x40;break; case 2 : x|=0x48;break; case 4 : x|=0x50;break; case 8 : x|=0x58;break; case 16 : x|=0x60;break; case 32 : x|=0x68;break; case 64 : x|=0x70;break; case 128 : x|=0x78;break; default : x|=0x40;break; } WriteByte7705(x); } /* 读AD7705转换数据 输入通道channel ----1=IN1,2=IN2;*/ unsigned int GetData7705(unsigned char channel) { if(channel==1) WriteByte7705(0x38); else WriteByte7705(0x39); return ( ReadWord7705() ); } /*********************************************************** /*********************************************************** 另外一个搜索到的: /*----------------AD7705------------------*/ void select7705(uchar partnumber) { switch(partnumber) { case 1:PA18155=PA18155&0xfd;break; case 2:PA18155=PA18155&0xf7;break; default:break; } } void unselect7705(void) { PA18155=PA18155|0x0f; } void write_bit7705(uchar w_bit) { if(w_bit==0) DIN7705=0; else DIN7705=1; SCLK7705=0; SCLK7705=1; } uchar read_bit7705(void) { uchar r_bit; SCLK7705=0; SCLK7705=1; if(DOUT7705==0) r_bit=0x00; else r_bit=0x80; return(r_bit); } void write_part7705(uchar w_data) { uchar index; uchar param; SCLK7705=1; for (index = 0; index<8; index++) /* Write out data */ { param = w_data<>index; } return(r_data); } void wait7705(uchar channel) { do{ write_part7705(channel | 0x08); }while(read_part7705()&0x80); } int ad7705(uchar partnumber,uchar channel) { uchar i,hi_data,lo_data; uint all_data; ulong total_data; int sample_mv; total_data=0; select7705(partnumber); wait7705(channel); write_part7705(channel | 0x38); hi_data=read_part7705(); lo_data=read_part7705(); for(i=0;i<8;i++) { dog(); wait7705(channel); write_part7705(channel | 0x38); hi_data=read_part7705(); lo_data=read_part7705(); all_data=hi_data; all_data=(all_data<<8)|lo_data; total_data=total_data+all_data; } sample_mv=(int)((total_data>>3)-32768); unselect7705(); return(sample_mv); } void ad7705s(uchar mode,uchar partnumber,uchar channel) { uchar i; uchar j; dog(); select7705(partnumber); write_part7705(channel | 0x20); write_part7705(0x0c); write_part7705(channel | 0x10); write_part7705(mode); wait7705(channel); write_part7705(channel | 0x60); j=(partnumber-1)*3+channel*3; for(i=0;i<3;i++) { write_part7705(ad7705jzdata[j+i]); } unselect7705(); } void ad7705z(uchar mode,uchar partnumber,uchar channel,uchar x,uchar y) { uchar i; uchar j; uchar m; dog(); select7705(partnumber); write_part7705(channel | 0x10); write_part7705(mode); wait7705(channel); write_part7705(channel | 0x68); for(i=0;i<3;i++) { m=read_part7705(); j=x+i*0x06; showys(m,j,y,1); } unselect7705(); } /*----------------AD7705------------------*/
本文档为【8-AD7705的C51程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_591390
暂无简介~
格式:doc
大小:50KB
软件:Word
页数:6
分类:互联网
上传时间:2011-08-30
浏览量:21