带SPI接口的16位AD7705驱动程序.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带SPI接口的16位AD7705驱动程序 来源于 HYPERLINK 作者:tonghe 最近在做一个印度项目时,应用到16位AD转换器AD7705,此器件是AD公司推出的双通道16位∑-Δ(电荷平衡式)A/D转换器。具有高分辨率、宽动态范围、自校准,低功耗及优良的抗噪声性能,因此非常适用于仪表测量和工业控制等领域。16位无丢失代码;0.003%的非线性度;内部放大器可选择1,2,4,8,16,32,64,128;8种增益;输出数据更新速率可编程;具有自校准和系统校准功能,三线串行接口,可缓冲模拟输入;低功耗。经努力,目前已调通一个通道,现将驱动程序共享,愿起到抛砖引玉的作用。此程序在项目板上调试通过,而且测试精度极高,显示的电压值准确稳定。 #include iom16v.h #include macros.h #include delay.h #include ylkz_io.h #include FYD_12864_B.h #include AD7705.h //数据类型的定义 #define uchar unsigned char #define uint unsigned int #define spk_f 230 //全局变量定义 uint vol; /******************************** * 器件端口初始化函数 * ********************************/ void port_init(void) { PORTA = 0 DDRA = 0 PORTB = 0 DDRB = 0 //输出 PORTC = 0xFF; DDRC = 0 //输入 PORTD = 0 DDRD = 0 } /************************************* * 蜂鸣器操作函数组 * *************************************/ //无源蜂鸣器操作函数 //入口:n响声次数,m响声时长1/10MS void spk(uchar n,uint m) { uint a; CLI(); //暂停中断,以免影响声音 for(;n;n--) { a=(m*100/spk_f)*5; //计算循环次数 for(;a;a--) {; SPK_TG; delay_us(spk_f); SPK_TG; delay_us(spk_f); } SPK_OFF; delay_ms(100); } SEI(); //开中断 } /**************************** * 电压显示函数 * * 入 口:da 电压数据 * ****************************/ void dy_disp(uint da) { uchar temp; locate(1,1); lcd(AD7705测试程序:); locate(2,2); lcd(一通道电压值); locate(3,3); temp=((da/1000)+0x30); wr_12864(1,temp); temp=(da%1000)/100+0x30; wr_12864(1,temp); temp=(da%100)/10+0x30; wr_12864(1,temp); temp=(da%10)+0x30; wr_12864(1,temp); lcd(mV); } /************************************ * 定时器1初始化函数 * * 功 能:定时读取AD7705数据 * * 定时时间:预分频64,定时500MS * * 实际定时:499.991mSec (0.0%) * ************************************/ void timer1_init(void) { TCCR1B = 0x00; //停止定时器 TCNT1H = 0x1F; //装初值 TCNT1L = 0x01; TCCR1A = 0x00; // TCCR1B = 0x03; //启动定时器 } /****************************** * 定时器1中断函数 * ******************************/ #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF void timer1_ovf_isr(void) { TCNT1H = 0x1F; //重装初值 TCNT1L = 0x01; LED_TG

文档评论(0)

小教资源库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档