【资料】如何看懂时序图?

我们都知道在学校是通过铃声来控制所有班级的上下课时间,那个单片机是通过什么样的办法进行取指令,执行指令和其它操作的呢?在这里引入了一个时序的概念:

一、时钟电路
单片机时钟电路有三种方式:
1、单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端,XTAL1和XTAL2需外接上晶体和合适的电容。  


2、有的单片机内部也自带时钟电路,用于产生时钟信号。
3、单片机管脚XTAL2直接接晶振。



二、周期

1、时钟周期

时钟电路产生时钟信号的周期我们叫时钟周期(振荡周期)。
单片机通电后就产生了固定标称值的脉冲信号,单片机就是在脉冲信号的驱动下顺序地从ROM中(程序存储器)取出指令一条一条的顺序执行,然后进行一系列的微操作控制,来完成各种指定的动作。

2、机器周期

单片机每访问一次存储器的时间我们把它称为一个机器周期,它是一个时间基准就象我们日常生活中使用的秒一样。单片机中一个机器周期包括12个振荡周期。振荡周期就是振荡源的周期也就是我们使用的晶振的时间周期。一个12M的晶振它的时间周期是1/12微秒,那么使用12M晶振的单片机它的一个机器周期就应该等于12*1/12微秒,也就是1微秒。

3、指令周期

  单片机中有些指令只要一个机器周期而有些指令则需要两个或三个机器周期另外还有两条指令需要4个机器周期。如何衡量指令执行时间的长短我们就要用到一个新的概念:指令周期,即执行一条指令所需的机器周期。

三、时序

单片机时序是指单片机执行指令时应发出的控制信号的时间序列。这些控制信号在时间上的相互关系就是CPU的时序。它是一系列具有时间顺序的脉冲信号。

CPU发出的时序有两类:一类用于片内各功能部件的控制,它们是芯片设计师关注的问题,对用户没有什么意义。另一类用于片外存储器或I/O端口的控制,需要通过器件的控制引脚送到片外,这部分时序对分析硬件电路的原理至关重要,也是软件编程遵循的原则,需要认真掌握。


CPU发出的时序有两类:一类用于片内各功能部件的控制,它们是芯片设计师关注的问题,对用户没有什么意义。另一类用于单片机外部芯片的控制,这部分时序对分析硬件电路的原理至关重要,也是软件编程遵循的原则。


操作时序永远使用是任何一片IC芯片的最主要的内容。一个芯片的所有使用细节都会在它的官方器件手册上包含。所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上有用的内容提取,掌握其工作时序。

在这里我们以液晶1602为例,分析其操作时序。其基本时序有读状态,写指令,读数据和写数据。



这里,我们需要关注1602的几个管脚,分别是RS,RW,E,D0...D7。由上面的说明我们可以知道:

RS:数据/命令(状态)选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而此脚为低电平时,进行命令(状态)字节的传输操作。

RW:读写选择端,当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。

E:使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。

D0...D7:8位并行数据口。

在此,我们分析两个写时序:写命令和写数据。


1、当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测   
{
if (BuysC) ReadStatusLCD();      //根据需要检测忙  
LCD_Data = WCLCD;            //将要写的命令放在数据线上
LCD_RS = 0;               //RS为低表明要写的为命令         
LCD_RW = 0;               //RS为低表明执行的是写操作
LCD_E = 0;                           
LCD_E = 0;
LCD_E = 1;               //以上三条语句引入一个高脉冲
}


2、当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

void WriteDataLCD(unsigned char WDLCD)
{
ReadStatusLCD();             //检测忙
LCD_Data = WDLCD;           //将要写的命令放在数据线上
LCD_RS = 1;              //RS为高表明要写的为数据  
LCD_RW = 0;              //RS为低表明执行的是写操作
LCD_E = 0;                              
LCD_E = 0;                                             
LCD_E = 1;               //以上三条语句引入一个高脉冲
}




写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图,大家写驱动代码的时候一定要充分理解器件的时序图(配合文字说明),否则写不出合格的驱动代码,器件也就不能工作。大家可以将上面的代码对照下图,看是不是一回事。



看时序图需要注意的问题:

1、注意时间轴,从左往右的方向为时间正向轴,即时间在增长。

2、时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。

3、有线交叉状的部分,表示电平在变化。

4、两条平行线分别对应高低电平,如上图右上角所示。

5、密封的菱形部分,表示数据有效,Valid Data这个词也显示了这点。

6、时序图里各个引脚的电平变化,基于的时间轴是一致的。一定要严格按照时间轴的增长方向来精确地观察时序图。要让器件严格的遵守时序图的变化。

7、时间的标注,也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。下面是时序参数表:

大家要懂得估计主控芯片的指令时间,可以在官方数据手册上查到MCU的一些级别参数。比如我们现在用AVR M16做为主控芯片,外部12MHz晶振,指令周期就是一个时钟周期为(2/12MHz)s,所以至少确定了它执行一条指令的时间是us级别的。我 们看到,以上给的时间参数全部是ns级别的,所以即便我们在程序里不加延时程序,也应该可以很好的配合LCD1602的时序要求了。怎么看这个表呢?很简 单,我们在时序图里可以找到TR1,对应时序参数表,可以查到这个是E上升沿/下降沿时间,最大值为25ns,表示E引脚上的电平变化,必须在最大为 25ns之内的时间完成。大家看是不是这个意思?

现在我来解读我对这个时序图的理解:

当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效 阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便 是一个完整的LCD1602写命令的时序。

ps感谢热心网友的指出错误之处:

(1/12MHz)s是振荡周期,而不是时钟周期,因为时钟周期(状态周期)等于两个振荡周期,换句话说就是对振动频率进行“二分频”的振荡信号,所以(2/12MHz)s才是晶振为12MHz时的时钟周期。


  • 18
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值