pcf8591中文数据手册进行DA转换

基于51单片机用PCF8591进行AD_DA转换用1602LCD
还不错的程序,对于初学者来说,学习学习就足够的把,看看还不错。
基于51单片机用PCF8591进行AD_DA转换用1602LCD下载
下载资料需要,并消耗一定积分。
下载此资料的人还喜欢:
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
本月热点资料
电子资料热门词查看: 3154|回复: 3
PCF8591 AD/DA转换程序
PCF8591用的也是IIC 总线,有了昨晚写的总线协议,倒不是很难,下一步可以考虑做一个不精确的信号发生器,睡觉去咯!
#ifndef __PCF8591_h#define __PCF8591_h
#include &basic.h&
#include &IIC.H&
//-------------------------------------------
#define AD_WRITE_MODE 0X90
#define AD_READ_MODE&&0X91
#define EN_DA0& && &&&0X40//打开DA
#define AI_M0& && && &0X00//AD模式0,四个单通道输入
#define AI_M1& && && &0X10//AD模式1,三个差分输入
#define AI_M2& && && &0X20//AD模式2,两个单通道,一个差分混合输入
#define AI_M3& && && &0X30//AD模式3,两个差分混合输入
#define AUTO& && && &0X04//自动增加打开
#define CH0& && && &&&0X00//1通道
#define CH1& && && &&&0X01//2通道
#define CH2& && && &&&0X02//3通道
#define CH3& && && &&&0X03//4通道
//--------------------------------------
//进行DA转换
uchar AD_W_BYTE(uchar DATA)
&&IIC_START();//启动IIC
&&IIC_WRITE_DATA(AD_WRITE_MODE);//写入模式
&&//delay();
&&if(TEST_ACK())
& & return 1;
&&IIC_WRITE_DATA(EN_DA0);//写控制寄存器,打开DA转换器
&&//delay();
&&if(TEST_ACK())
& & return 1;
&&IIC_WRITE_DATA(DATA);//写入数据
&&//delay();
&&if(TEST_ACK())
& & return 1;
&&IIC_STOP();//停止IIC
&&return 0;
//-----------------------------------------
//进行AD转化,并返回一个8位数据(单通道,自动增加关闭)
uchar AD_R_BYTE(uchar CH)
&&uchar temp=0;
&&IIC_START();//启动IIC
&&IIC_WRITE_DATA(AD_WRITE_MODE);//伪写模式
&&if(TEST_ACK())
& & return 1;
&&IIC_WRITE_DATA(AI_M0|CH);//写入通道,已经设定为四个单通道模式,如要改变方式,请改变值
&&if(TEST_ACK())
& & return 1;
&&IIC_START();//重新启动IIC
&&IIC_WRITE_DATA(AD_READ_MODE);//读取模式
&&if(TEST_ACK())
& & return 1;
&&temp=IIC_READ_DATA();//读取数据
&&NO_ACK();
&&IIC_STOP();
&&delayms(10);
//-------------------------------------------------
//连续的进行DA转化,用于输出一个特定的波形
uchar AD_W_PAGE(uchar *p,uchar lengh)
&&uchar i=0;
&&IIC_START();//启动IIC
&&IIC_WRITE_DATA(AD_WRITE_MODE);//写入模式
&&//delay();
&&if(TEST_ACK())
& & return 1;
&&IIC_WRITE_DATA(EN_DA0);//写控制寄存器,打开DA转换器
&&//delay();
&&if(TEST_ACK())
& & return 1;
&&for(i=0;i&i++)
& & IIC_WRITE_DATA(*p);//写入数据
& & //delay();
& & if(TEST_ACK())
& && &return 1;
& & delayms(1);
&&IIC_STOP();//停止IIC
&&return 0;
//------------------------------------------------
//连续的进行AD转换,用于外界波形的采样
uchar AD_R_PAGE(uchar CH,uchar *p,uchar lengh)
&&uchar temp=0;
&&IIC_START();//启动IIC
&&IIC_WRITE_DATA(AD_WRITE_MODE);//伪写模式
&&if(TEST_ACK())
& & return 1;
&&IIC_WRITE_DATA(AI_M0|CH);//写入通道,已经设定为四个单通道模式,如要改变方式,请改变值
&&if(TEST_ACK())
& & return 1;
&&IIC_START();//重新启动IIC
&&IIC_WRITE_DATA(AD_READ_MODE);//读取模式
&&if(TEST_ACK())
& & return 1;
&&for(i=0;i&lengh-1;i++)
& & *p=IIC_READ_DATA();//读取数据
& & IIC_ACK();
& & delayms(1);
&&*p=IIC_READ_DATA();//读取数据
&&NO_ACK();
&&IIC_STOP();
&&delayms(10);
楼主,问您一个问题好吗?我用的也是PCF8591这个AD/DA芯片,但是在进行采集到的模拟量滤波处理的时候遇到问题了,就是针对这个芯片的采集到的模拟量数据的滤波处理怎么解决呀,我是新手,就是想着,如果外界的干扰大了,就需要考虑加软件滤波进一步的处理数据的,但是我也尝试的弄了好几天,看似一个简单的滤波处理,但是对于我就是没有搞定,我加了滤波处理之后的值要么数据一直在加,要么数据不对,显示的不正确的。看看您有什么可以指点的不?或者说您可以写一小段代码供我参考一下。
很给力!!!
Powered by求助,用PCF8591进行DA转换,为什么最大输出电压只有4V? - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
求助,用PCF8591进行DA转换,为什么最大输出电压只有4V?
<div class=""
RT,用PCF8591进行DA转换,数字量为255,基准电压为4.85V,可最大输出电压只能达到4V,请问是什么引起的?
14:12:12  
该类别下有 43 个回答。
该类别下有 35 个回答。
该类别下有 27 个回答。
该类别下有 24 个回答。
该类别下有 23 个回答。
该类别下有 23 个回答,其中被选为最佳答案 1 次。
该类别下有 21 个回答。
该类别下有 21 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 18 个回答。
该类别下有 18 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
你测试PCF8591参考电源引脚是多少,如果参考电压引脚为4V,那么最大输出电压也只能为4V。
你测试PCF8591参考电源引脚是多少,如果参考电压引脚为4V,那么最大输出电压也只能为4V。 ...
我的基准电压是4.85V
我的基准电压是4.85V
是不是程序的问题
算法有问题吧!
大神,你的问题解决了吗
同问,有大神可以指导下吗?多谢
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司PCF8591_DA转换演示程序(AVR)_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
PCF8591_DA转换演示程序(AVR)
&&pcf8591的DA转换实验的源代码
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
&#xe64e;加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢PCF8591A/D D/A之间转换
11:48:13&&&来源:51hei &&
/********************
& &A/D D/A之间转换
********************/
#define uint unsigned int
#define uchar unsigned char
#define PCF//PCF8591的地址
sbit sda=P2^0;
sbit scl=P2^1;&
sbit LS138A=P2^2;//138译码器的3位 控制数码管的 &&
sbit LS138B=P2^3;&
sbit LS138C=P2^4;&
uint Ledout[8];//8位数码管
uint num0,num1,num2,num3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//段选 &
void delay()//执行空语句,微秒级延时函数
void delay1ms(uint z)//延时1ms
for(x=z;x>0;x--)
for(y=0;y<=110;y++)
void init()//初始化状态下SCL和SDA都为高电平
void start()//在SCL为高电平时SDA由高电平到低电平
void respons()
应答信号,SCL在高电平期间,SDA被从设备拉为低电平表示应答。
(sda==1)和i<255相与,表示若在一段时间内没有从器件的应答则主器件
默认从器件已经收到数据而不再等待应答信号
while((sda==1)&&(i<250))
void stop()//SCL在高电平期间,SDA一个上升沿停止信号
void write_byte(uchar date)//写一个字节
for(i=0;i<8;i++)
temp=temp<<1;
scl=0;//只有在SCL为0期间才允许SDA数据线上的状态才允许变化
sda=CY;//PSW的寄存器的CY进位标志位
scl=1; //SCL时钟信号为高电平期间数据线上的数据必须保持稳定 delay();
sda=1;//释放总线
uchar read_byte()
uchar i,k;
sda=1;//释放总线
for(i=0;i<8;i++)
//delay();here is a bug
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
PCF8591相关资源
AD相关资源
DA相关资源
编辑:什么鱼
本文引用地址:
最新视频课程
本周热门资源推荐
EEWORLD独家

我要回帖

更多关于 mf8591 的文章

 

随机推荐