单片机开发--时序影响

发布者:pi26最新更新时间:2015-12-23 来源: eefocus关键字:单片机开发 手机看文章 扫描二维码
随时随地手机看文章

在单片机开发中,如果时序关系不正确定的话,数据就不能正确的读写。因此,在程序中,如何正确的控制时序关系,就显得特别的重要。

 

先来看以下的两个例子:

 

1.        DS1302时钟芯片,采用SPI总线;

 

2.        24C08存储芯片,采用I2C总线。

在对DS1302进行编程时,发现数码管只显示时间的奇数值,而偶数值则不显示。

 

检查了下程序,问题定位在读出数据与写入数据的函数,原函数具体如下:

 

uchar ReadDs1302()

{

        uchar dat,i;

        SCLK=1;

        Delayus(2);

        for(i=0;i<8;i++)

        {

             dat>>=1;

              if(DATA==1)

              {

                     dat|=0x80;

              }

              SCLK=1;

              Delayus(2);

              SCLK=0;

              Delayus(2);

        }

        return da;

}

                                                                                               

将上面红色字体的那行程序删除,或者改为:SCLK=0,再重新烧写后,数码管显示的时间正常。

 

而写入数据的函数如下:

 

void WriteDs1302(uchar dat)

{

       uchar i;

       SCLK=0;   

       Delayus(2);

       for(i=0;i<8;i++)

       {

              DATA=dat&0x01;

              Delayus(2);

              SCLK=1;

              Delayus(2);

              SCLK=0;

              dat>>=1;

              Delayus(2);

       }

}

 

若只将上面蓝色部分的程序改为:

if(i<7)

              {

                     SCLK=0;

              }

 

重新烧写进去后,数码管也能正确的显示。

 

以蓝色那行程序的修改,分析其原因:

 

先看下SPI总线的读操作时序,其为下降沿采样,如下图所示:

 

 

 

从时序图中,可看出,对于写数据,是在时钟的上升沿,而读数据,则是在时钟的下降沿。

 

程序修改前,在往DS1302中写入第八位数据后,时钟信号就变为低电平。此后,进入读阶段,在DS1302还没将数据送到SDA线上时,时钟就变为高电平,此时对应的SDA上的数据,还是为写入的数据1。

 

而程序修改后,即在SDA写入数据后,在第八位数据时,SCLK就不降为低电平了,一直保持为高电平,直到DS1302将数据送到SDA时,才变为低电平,在下降沿时对SDA上的数据进行采样。

 

即修改后的程序,在读写操作交替那个时钟,等到DS1302送数据到SDA线上后,才变为低电平,进行采样的。

 

对于24C08,其采用I2C总线技术,当程序烧写进入后,发现不能正常的工作。

 

问题定位在I2C结束信号函数,具体如下所示:

 

void Stop()           

{

         SCL=1;

         SDA=0;        

         _nop_();

         _nop_();

         _nop_();

         _nop_();

         _nop_();

         _nop_();

         SDA=1;

         _nop_();

         _nop_();

         _nop_();

         _nop_();

         _nop_();

         _nop_();

}

 

上面红色两行程序的顺序对调下,则能正确的读写24C08芯片内部的数据。

 

分析其原因,则在于若执行Stop()这个函数之前时,若SDA上存在几个周期的高电平时,此时执行SCL=1;SDA=0,相当于多出了个I2C的开始信号,导致错误。

 

 

在实际中,总结了下以后几点,希望可以尽量避免时序操作错误:

 

1.         特别注意单字节读,写函数刚开始或结束时,时钟信号的高低电平;

 

2.         可确定1或者0为程序的默认电平。如对于DS1302的CLK,可以低电平;

 

3.         从节省功耗的角度出发,尽量保证默认电平功耗低。以I2C总线为例,因其有上拉电阻   的存在,故可保证默认电平为高;

 

4.         同样从功耗的角度出发,尽量保证各类信号少翻转;

 

5.         对于总线控制信号(如SPI总线的RST),一切信号都准备好之后,控制信号才开启。当总线要停止工作时,先将控制信号关断,再作其他信号的处理;

 

6.         当然,得时刻警惕信号的建立时间与保持时间。

 

当然,若在程序中查找不出问题时,可采用示波器,同时测量时钟与数据信号,判断时序是否正确。

关键字:单片机开发 引用地址:单片机开发--时序影响

上一篇:单片机C语言求平方根函数
下一篇:直流电机PWM调速程序

推荐阅读最新更新时间:2024-03-16 14:41

意法半导体推出新款STM32L0系列微控制器开发生态系统
中国,2016年3月2日 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)宣布其超高能效的ARM Cortex -M0+ STM32L0 微控制器实现量产,同时发布支持该系列产品的功能丰富的开发生态系统,包括成本极低的开发板和免费的软件工具,帮助开发人员充分控制应用能耗,且最大限度缩减产品上市时间。 作为穿戴式装置、医用监视器、工业传感器、智能生活设备等能源敏感应用的理想微控制器,STM32L0系列拥有同级领先的能效,ULPMarkTM-C认证测试取得135分,配合一个直流转换器,ULPMark-C 成绩取得158.7分 。此外,意法半
[单片机]
意法半导体推出新款STM32L0系列<font color='red'>微控制器</font>和<font color='red'>开发</font>生态系统
ST吸引Linux用户使用STM32微控制器免费开发嵌入式应用
意法半导体(STMicroelectronics,简称ST)为包括工程师、学者和业余爱好者等在内的Linux 系统用户拓展了使用广受欢迎的意法半导体STM32微控制器免费开发应用的机会。 大多数Linux发行版都是免费使用的,开源应用软件让技术发烧友对Linux着迷。不过,此前市面上常见的嵌入式计算技术开发工具多数只支持Windows PC平台。 现在,STM32CubeMX配置器及初始化工具和System Workbench for STM32(由Ac6 Tools公司开发的集成开发环境(IDE),得到openSTM32.org社区的支持、可在www.st.com/sw4stm32上下载)已经上市并都能在Linux操
[嵌入式]
ST吸引Linux用户使用STM32<font color='red'>微控制器</font>免费<font color='red'>开发</font>嵌入式应用
51单片机开发之静态数码管
开发板上这个独立的数码管刚好接在单片机的P0引脚上。 对应关系: P0.0 - A P0.1- B P0.2- C P0.3- D……… 3.7.2 数码管介绍 LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。 LED数码管常用的段数一般为7段,有的另加一个小数点 。 LED数码管根据LED的接法不同,分为共阴和共阳两类 。 当前开发板使用的数码管是共阳极。 使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。 图3-
[单片机]
51<font color='red'>单片机</font><font color='red'>开发</font>之静态数码管
PIC单片机开发之面包板上组装电路
  我们如果想在面包板上组装电路,一般需要参考两种方法,一种是物理接线图,另一种是电子电路图。但是,原始电路图和面包板布线之间都没有对应关系。单片机开发工程师建议,对新手来说,想要在面包板上完成组装,需再次检查PIC单片机和PICKit的引脚号,以防接错,烧毁电子元件和调试器。   首先,我们先来查看实际接线图。如下:      单片机开发工程师提醒,实际的组装顺序没有绝对规则,但是在这里我们将按照以下顺序进行组装。      下图中已经完成了电源的接线,面包板两侧连接电源线是为了更好的布局。这种电源的接线方式已简化,但实际上,在面包板上接线要更复杂一些。所以,在开始在面包板上构建电路之前,可以使用物理接线图来更好
[单片机]
PIC<font color='red'>单片机</font><font color='red'>开发</font>之面包板上组装电路
掌握这7个规则,单片机开发没难度!
01设计满足要求的最精简的系统 正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有这样一个认识,即单片机的处理能力是非常强大的。 早期的PC机,其CPU(8086)处理能力和8051相当,却能处理相当复杂的任务。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。 02使用看门狗 看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复
[单片机]
51单片机(三)—— 51单片机集成开发环境介绍
一、开发环境安装 能够进行51单片机的集成开发环境比较多,比较常用的是Keil C51,可以从相应的网站上下载,如下图所示为Keil C51的安装文件 点击“Setup.exe”,出现如下图所示的窗口。 点击上图中的“Full Version”,出现如下图所示的窗口 点击“Next”,出现如下图所示的窗口。 点击“Yes”,出现如下图所示的窗口 这个页面用来设置Keil的安装位置,默认安装在C盘,如果需要安装在其它位置,请点击后边的“Browse…”来重新设置安装路径。选好之后点击“Next”,出现如下图所示的窗口。 这一步需要填写序列号。这个序列号,可以在网上找一下,在上图中填写好序列号,如下图所示。
[单片机]
51<font color='red'>单片机</font>(三)—— 51<font color='red'>单片机</font>集成<font color='red'>开发</font>环境介绍
用PICC编译器开发PIC系列单片机的代码
摘要:介绍PIC系列单片机C语言的发展;以HI-TECH Software公司的HI-TECH PICC为例,介绍PICC编译器的特点和用其开发PIC系列单片机时应注意的一些问题。 关键词:PIC PICC编译器 C语言/汇编语言 Hi-Tech 引言 目前,在市场上应用最广泛的应该属于8位单片机,Microchip Technoloogy公司推出的8位PIC系列单片机,目前在国内市场上深受用户欢迎,已经逐渐成为单片机应用的新潮流;但遗憾的是,目前国内介绍它的C语言开发工具的书籍和文章却比较少,而且用的人也不多,广大的程序员在用其开发的过程中都在慢慢摸索,可能会走一些弯路。笔者最近在用PIC的C语言时就遇到了好些问题,在这
[单片机]
利用单片机控制的数字气压计开发与实现
1 引言 气压计是利用压敏元件将待测气压直接变换为容易检测、传输的电流或电压信号,然后再经过后续电路处理并进行实时显示的一种设备。其中的核心元件就是气压传感器,它在监视压力大小、控制压力变化以及物理参量的测量等方面起着重要作用。运用于气压计的气压传感器基本都是依靠不同高度时的气压变化来获取气压值的。 气象学研究表明,在垂直方向上气压随高度增加而降低。例如在低层,每上升100m气压便降低10hPa;在5~6km的高空,高度每增加100m,气压便会降低7hPa;而当高度进一步增加时,即到9~10km的高空之后,高度每增加100m,气压便会降低5hPa;同样,若空气中有下降气流时,气压会增加;若空气中有上升气流时,作用于空
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved