标题: 关于如何用PCF8951更换ADC0832的问题,要求基本功能不变,望大神指点迷津 [打印本页]
作者: 木君哥哥 时间: 2017-12-12 13:03
标题: 关于如何用PCF8951更换ADC0832的问题,要求基本功能不变,望大神指点迷津
- #include "ADC0832.h"
- unsigned char Read_ADC0832(unsigned char CH)
- {
- unsigned char i,dis0,dis1;
- unsigned int date;
- ADC_Clk=0; //拉低时钟
- ADC_DI=1; //初始化
- _nop_();
- ADC_CS=0; //芯片选定
- _nop_();
- ADC_Clk=1; //拉高时钟
- _nop_();
- if(CH==0) //通道选择
- {
- ADC_Clk=0; //第一次拉低时钟
- ADC_DI=1; //通道0的第一位
- _nop_();
- ADC_Clk=1; //拉高时钟
- _nop_();
- ADC_Clk=0; //第二次拉低时钟,ADC0832 DI接受数据
- ADC_DI=0; //通道0的第二位
- _nop_();
- ADC_Clk=1;
- _nop_();
- }
- else
- {
- ADC_Clk=0;
- ADC_DI=1; //通道1的第一位
- _nop_();
- ADC_Clk=1;
- _nop_();
- ADC_Clk=0;
- ADC_DI=1; //通道1的第二位
- _nop_();
- ADC_Clk=1;
- _nop_();
- }
- ADC_Clk=0; //第三次拉低时钟,此前DI两次赋值决定通道
- ADC_DI=1; //DI开始失效,拉高电平,便于DO数据传输
- for(i= 0;i<8;i++) //读取前8位的值
- {
- _nop_();
- dis0<<= 1;
- ADC_Clk=1;
- _nop_();
- ADC_Clk=0;
- if (ADC_DO)
- dis0|=0x01;
- else
- dis0|=0x00;
- }
- for (i=0;i<8;i++) //读取后8位的值
- {
- dis1>>= 1;
- if (ADC_DO)
- dis1|= 0x80;
- else
- dis1|= 0x00;
- _nop_();
- ADC_Clk=1;
- _nop_();
- ADC_Clk=0;
- }
- if(dis0==dis1) //两次结束数据比较,若相等
- date=dis0; //则赋值给dat
- _nop_();
- ADC_CS=1; //释暸ADC0832
- ADC_DO=1; //拉高输出端,暯便下次通道选择DI端有效
- ADC_Clk=1; //拉高时钟
- return date;
复制代码
作者: zl2168 时间: 2017-12-14 21:09
本帖最后由 zl2168 于 2017-12-14 21:12 编辑
实例85 PCF8591 I2C串行A-D(1602显示)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |