十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

时间:2022-09-17 19:59:24

1.实际电路

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

2.引脚图

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

3.地址

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

高四位为固定地址1001,A2A1A0可编程地址,通过观察实际电路,可知A2A1A0 为000。最低位为读写为,1为读,0为写。

4.控制字

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

控制寄存器的高半字节用于 允许模拟输出 将模拟输入编程为单端或差分输入

低半字节选择一个由高半字节定义的模拟输入通道。如果自动增量标志(AUTO-INCREMENT FLAG)置1,每次A/D转换后通道号将自动增加。

5.开始 停止信号

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

 void Start()
{
SDA = ;
delay();
SCL = ;
delay();
SDA = ;
delay();
} void Stop()
{
SDA = ;
delay();
SCL = ;
delay();
SDA = ;
delay();
}

6.应答 非应答信号

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

 void Respons()
{
SDA = ;
delay();
SCL = ;
delay();
SCL = ;
delay();
} void NoRespons()
{
SDA = ;
delay();
SCL = ;
delay();
SCL = ;
delay();
}

7.位传输

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

 void write_byte(unsigned char dat)
{
unsigned char i = ;
for(i = ; i < ; i++) {
dat = dat<<;
SCL = ;
delay();
SDA = CY; //类似于8086的PSW的CF位 即左移data溢出位进入CY
delay();
SCL = ;
delay();
}
SCL = ;
delay();
SDA = ;
delay();
} unsigned char read_byte()
{
unsigned char i = , dat;
SCL = ;
delay();
SDA = ;
for(i = ; i < ; i++) {
SCL = ;
delay();
dat = (dat<<) | SDA;
SCL = ;
delay();
}
return dat;
}

8.IIC总线协议 A/D

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

读模式总线协议

 unsigned char readAdc()
{
unsigned char dat;
Start();
write_byte(0x90); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 写信号
Respons();
write_byte(0x40); //控制字 通道0
Respons(); Start();
write_byte(0x91); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 读信号
Respons();
dat = read_byte();
NoRespons();
Stop();
return dat;
}

9.IIC总线协议 D/A

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

写模式总线协议

void writeDAC(unsigned char dat)
{
Start();
write_byte(0x90); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 写信号
Respons();
write_byte(0x40); //控制字
Respons();
write_byte(dat);
Respons();
Stop();
}

10.功能实现

 //IIC PCF8591 A/D D/A
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
sbit SDA = P2^;
sbit SCL = P2^; void delay()
{;;} void delayms(unsigned int n) //误差 -0.651041666667us
{
unsigned char a,b;
unsigned int i;
for(i = ; i < n; i++) {
for(b=;b>;b--)
for(a=;a>;a--);
}
} void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
TR1 = ;
} void Init()
{
SCL = ;
delay();
SDA = ;
delay();
} void Start()
{
SDA = ;
delay();
SCL = ;
delay();
SDA = ;
delay();
} void Stop()
{
SDA = ;
delay();
SCL = ;
delay();
SDA = ;
delay();
} void Respons()
{
SDA = ;
delay();
SCL = ;
delay();
SCL = ;
delay();
} void NoRespons()
{
SDA = ;
delay();
SCL = ;
delay();
SCL = ;
delay();
} void write_byte(unsigned char dat)
{
unsigned char i = ;
for(i = ; i < ; i++) {
dat = dat<<;
SCL = ;
delay();
SDA = CY; //类似于8086的PSW的CF位 即左移data溢出位进入CY
delay();
SCL = ;
delay();
}
SCL = ;
delay();
SDA = ;
delay();
} unsigned char read_byte()
{
unsigned char i = , dat;
SCL = ;
delay();
SDA = ;
for(i = ; i < ; i++) {
SCL = ;
delay();
dat = (dat<<) | SDA;
SCL = ;
delay();
}
return dat;
} unsigned char readAdc()
{
unsigned char dat;
Start();
write_byte(0x90); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 写信号
Respons();
write_byte(0x40); //控制字 通道0
Respons(); Start();
write_byte(0x91); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 读信号
Respons();
dat = read_byte();
NoRespons();
Stop();
return dat;
} void writeDAC(unsigned char dat)
{
Start();
write_byte(0x90); //前四位地址1001 后三位根据硬件000 最后一位R/W(上划线) 写信号
Respons();
write_byte(0x40); //控制字
Respons();
write_byte(dat);
Respons();
Stop();
} void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = ;
}
int main()
{
unsigned char dat;
unsigned char tmpDA = ;
Init();
InitUART(); while()
{
delayms();
dat = readAdc();
SendOneByte(dat); tmpDA++;
if(tmpDA == )
tmpDA = ;
writeDAC(tmpDA);
}
return ;
}

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)AD直接采集DA出来的电压十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)串口发送 验证成功

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)的更多相关文章

  1. 十天学会单片机Day5 IIC总线AT2402芯片&lpar;EEPROM&rpar;应用

    1.采用串行总线技术可以使系统的硬件设计大大简化.系统的体积减小.可靠性提高.同时,系统的更改和扩充极为容易. 常用的串行扩展总线有: IIC (Inter IC BUS)总线.单总线(1-WIRE ...

  2. 《十天学会单片机和C语言编程》

    <十天学会单片机和C语言编程> 大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程]. ...

  3. 十天学会单片机Day3 D&sol;A与A&sol;D转换器

    D/A转换器 1.二进制权电阻网络型D/A转换器 基准电压Vref 数据D(d3d2d1d0) 输出模拟电压V0 i0 = Vref/8R    i1 = Vref/4R     i2 = Vref/ ...

  4. 十天学会单片机Day1点亮数码管&lpar;数码管、外部中断、定时器中断&rpar;

    1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...

  5. 十天学会单片机Day4串行口通信

    并行与串行基本通信方式 1.并行通信方式 通常是将数据字节的各位用多条数据线同时进行传送. 并行通信控制简单.传输速度快:由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难. 2.串行通 ...

  6. 十天学会单片机Day2键盘检测&lpar;独立键盘、矩阵键盘&rpar;

    1.键盘的分类 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘 非编码键盘:靠软件编程来识别的称为非编码键盘.独立键盘.矩阵键盘 2.按键消抖   ...

  7. 十天学会单片机Day0点亮LED &lpar;锁存器、三极管、继电器&rpar;

    C51常用的数据类型 数据类型 关键字 所占位数 表示数范围 无符号字符型 unsigned char 8 0~255 有符号字符型 char 8 -128~127 无符号整型 unsigned in ...

  8. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

  9. 十句话教你学会Linux数据流重定向

    1.看到重定向一下子就想起了web里面的redirect,没错,但是Linux数据流重定向的作用不是跳到另一个网页,而是用来存储重要的屏幕信息.将不必要的屏幕信息输出到文件里或者“黑洞”里.将错误信息 ...

随机推荐

  1. 如何获取Iframe的页面控件的值

    有时候我们在页面需要使用iframe的方法来引用另一个页面,虽然个人建议不要使用iframe哈,但是有些时候是没得法了才使用的咯,那么在使用的过程中也会遇到某一些问题,我将自己遇到的问题记录下来方便以 ...

  2. Linux查看可执行程序所在路径

    首先通过命令获得进程PID:如4285,然后执行下述命令 cd /proc/4285 ls -l 或直接ls -l /proc/4285 其中exe所在行即为可执行文件的全路经.如下图所示:

  3. 设计模式之美:Proxy(代理)

    索引 别名 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):使用相同 Subject 接口实现 Proxy. 别名 Surrogate 意图 为其他对象提供一种代理以控制对这个对象的 ...

  4. EasyUI TreeGrid

    数据格式1: { , "rows": [ { "id": 1, "name": "All Tasks", "b ...

  5. android MotionEvent中getX&lpar;&rpar;和getRawX&lpar;&rpar;的区别

    public class Res extends Activity implements View.OnTouchListener { Button btn = null; int x = 0; in ...

  6. shell常用命令总结

    统计文件行数 wc -l filename grep -c "" filename sed -n '$=' filename awk 'END{print NR}' filenam ...

  7. Redis核心原理

    Redis系统介绍: Redis的基础介绍与安装使用步骤:https://www.jianshu.com/p/2a23257af57b Redis的基础数据结构与使用:https://www.jian ...

  8. linux 自总结常用命令&lpar;centos系统&rpar;

    查看apache2的命令 httpd -V 其中HTTPD_ROOT和SERVER_CONFIG_FILE  就可以确定httpd.conf(Apache配置文件)的路径了 apache启动.停止.重 ...

  9. linux编辑器使用记录

    超强大vim配置文件: wget  http://files.cnblogs.com/ma6174/vimrc.zip unzip  -f  vimrc.zip  -d  ~/ 一.vim编辑器 进入 ...

  10. iOS 8 之后的动态沙盒路径

    在iOS8之前,我们获取到沙盒中的document.cache.tmp之后,下一次模拟器或真机无论重启多少次,这具体的路径是固定的,可是iOS8 之后,你要是在按原来的路径去找你想要的东西,我想它会把 ...