网站大量收购闲置独家精品文档,联系QQ:2885784924

单片机技术与项目训练 课件 第9章 单片机串行总线通信设计.pptx

单片机技术与项目训练 课件 第9章 单片机串行总线通信设计.pptx

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

单片机串行总线通信设计第9章

在单片机的通信技术中,串行通信扮演着重要的角色。除串口数据通信之外,单片机与外部的通信还有常用的I2C总线、SPI总线等,它们都是标准的串行总线通信技术,有的单片机内部已经包含了这些接口硬件设计。然而,也有很多芯片、设备并不具备标准的串行总线接口,而是提供了接口的协议和控制时序,需要单片机通过I/O口来模拟产生时序逻辑控制脉冲对这些设备进行读/写控制。引言

目录单片机I/O口时序控制方法1DS18B20数字温度传感器通信2本章小结6项目训练一:温度采集系统设计3项目训练二:精准数字钟设计5行业PPT模板/hangye/DS1302时钟芯片通信4

9.1单片机I/O时序控制方法

9.1.1并行转串行单片机内部的存储数据通常以字节为单位,而单片机与外围设备的通信需要通过I/O口将单片机内部的字节数据发送出来,这就需要经过并行到串行的数据转换,把8位数据按位展开,一位接一位地把数据顺序传送出去,即把并行数据转为串行数据。在通信接口的设计中,除需要一根数据线外,通常还需要一根时钟线(并不是必需的)作为数据的时间基准。

9.1.1并行转串行图1一种并行转串行的时序

9.1.1并行转串行1时钟输出时钟的波形是一个方波,方波的输出在第5章介绍过,可以用定时器来实现。但是这里的方波需要和数据输出进行配合,定时器的输出方式不适合这样的操作。因此,可以采用延时的方式来实现,延时的时间根据时序参数的要求设定即可。2串行数据的输出串行数据的输出是重点,它是把1字节的数据变为8位的数据顺序输出,需要用到的算法如下。设要传输的数据为0x56,其二进制数要把这些二进制数由低位到高位拆分出来,需要用到与运算和移位运算。算法解释如下。(1)把数据和0x01进行与运算(2)把数据右移一位,得再行与算法,得把它送到I/O口,I/O口上得到的数据为“1”。(3)以此类推,最后即可把一字节的数据按位拆开送到I/O口,从而实现数据由并行转串行的操作。程序算法通过一条语句来实现:DATA=(send_datai)0x1; //i从0到7递增

9.1.1并行转串行3合并操作把时钟产生和串行数据输出合并在一起,就可以实现类似图1的时序控制要求,即先把时钟置1(初始为0),产生上升沿脉冲并延时;然后做与运算和移位运算和与运算,把结果输出并延时;最后把时钟置0,并延时,延时的时间根据实际要求而定。主要的算法示例程序如下:for(i=0;i8;i++){ CLK=1;//时钟上升沿延时; DATA=(send_datai)0x1; //将send_data的第i位赋DATA 延时; CLK=0; //时钟下降沿 延时;}

9.1.2串行转并行1时钟上升沿检测程序中是通过while(1)来循环检测CLK的状态的,当检测到上一次的CLK的状态clk_history为0,并且当前的CLK状态clk_get为1时,即认为检测到一个时钟上升沿。while(1){ clk_get=CLK; //在一次while循环中,只采样一次CLK端口 if((clk_history==0)(clk_get==1)) //时钟上升沿 {...(略)//起始位检测及有效数据的读取 } clk_history=clk_get;}后面的起始位检测及有效数据的读取均在检测到时钟上升沿时进行。

9.1.2串行转并行2起始位检测使用一个关键变量state来表示单片机程序当前的工作状态,当state为0时,表示当前处于起始位检测状态;当state为1时,表示当前处于有效数据的读取状态。state的初始值为0,当检测到CLK上升沿有效且DATA的数据为0时,认为检测到起始位,将state置1。

9.1.2串行转并行3有效数据读取当state为1时,进行有效数据的读取。通过变量cnt来表示当前读取的串行数据位是接收数据data_receive的第几位,cnt的数值为0~7。从I/O口读进来的数据是一个接一个的二进制数,需要把它们组合到一起,形成1字节的数据,这里需要用到左移和或运算。算法原理是:在时钟信号CLK上升沿到来时读取一位I/O口(DATA)的数据(data_get),左移cnt(cnt初始值为0)位后,将其和存放最终结果的变量data_receive进行或运算,并将结果存放到data_receive中,

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档