技术文章—教你快速读懂单片机时序图
我们都知道在学校是通过铃声来控制所有班级的上下课时间,那个单片机是通过什么样的办法进行取指令,执行指令和其它操作的呢?在这里引入了一个时序的概念:
一、时钟电路
单片机时钟电路有三种方式:
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为例进行讲解,1602的引脚是很整齐的SIP单列直插封装,所以器件手册只给出了引脚的功能数据表:
这里,我们需要关注1602的几个管脚,分别是RS,RW,E,D0...D7。由上面的说明我们可以知道:
RS:数据/命令(状态)选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而此脚为低电平时,进行命令(状态)字节的传输操作。
RW:读写选择端,当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。
E:使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
D0...D7:8位并行数据口。
在此,我们分析两个写时序:写命令和写数据。
1、当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
2、当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
开发者只需要关注以下几个管脚:
3脚:VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。
4脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而此脚为低电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示的字节。值得一提的是,LCD1602的数据是8位的。
5脚:R/W,读写选择端。当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。笔者认为,此脚其实用处不大,直接接地永久置为低电平也不会影响其正常工作。但是尚未经过复杂系统验证,保留此意见。
6脚:E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
7~14脚:8位并行数据口,使得对LCD1602的数据读写大为方便。
LCD1602的操作时序
在此,可以先不读出它的数据的状态或者数据本身,所以只需要看两个写时序:
①当要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
②当要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
实际上写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图:
只要慢慢学会看时序图,要知道操作一个器件的精华便蕴藏在其中,看懂看准了时序,再操控这个芯片就是非常容易的事了。这里使用1602作为例子主要是因为1602的时序是目前最简单的时序之一。
看时序图需要注意的问题:
1、注意时间轴,从左往右的方向为时间正向轴,即时间在增长。
2、时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。
3、有线交叉状的部分,表示电平在变化。
4、两条平行线分别对应高低电平,如上图右上角所示。
5、密封的菱形部分,表示数据有效,Valid Data这个词也显示了这点。
6、时序图里各个引脚的电平变化,基于的时间轴是一致的。一定要严格按照时间轴的增长方向来精确地观察时序图。要让器件严格的遵守时序图的变化。
7、时间的标注,也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。下面是时序参数表:
需要十分严重注意的是,时序图里各个引脚的电平变化,基于的时间轴是一致的,一定要严格按照时间轴的增长方向来精确地观察时序图,要让器件严格的遵守时序图的变化,在类似于18B20这样的单总线器件对此要求尤为严格。
时间标注:
细心的朋友或许注意到了文中关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。下面是时序参数表:
开发者要注意估计主控芯片的指令时间,可以在官方数据手册上查到MCU的一些级别参数。比如现在用AVRM16做为主控芯片,外部12MHz晶振,(1/12MHz)s是振荡周期,而不是时钟周期,因为时钟周期(状态周期)等于两个振荡周期,换句话说就是对振动频率进行“二分频”的振荡信号,所以(2/12MHz)s才是晶振为12MHz时的时钟周期。
以上给的时间参数全部是ns级别的,所以即便在程序里不加延时程序,也应该可以很好的配合LCD1602的时序要求了。怎么看这个表呢?很简单,在时序图里可以找到TR1,对应时序参数表,可以查到这个是E上升沿/下降沿时间,最大值为25ns,表示E引脚上的电平变化,必须在最大为25ns之内的时间完成。
以上介绍的这些内容,虽然是以LCD1602为例,但这仅仅是为了帮助大家进行理解,其中提到的参数是大部分单片机都会有的,因此大家可以通过本文中给予的解读方式来套用到其他单片机当中,大部分的单片机时序图都会遵循文中给出的规则,当大家渐渐掌握其中的内容后,就可以发现其实看懂单片机的时序图其实并不难。
现在我来解读我对这个时序图的理解:
当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是一个完整的LCD1602写命令的时序。
从一个详细的实例来知道单片机编程,你照着做就行了
我们要想使单片机工作,就需要编写程序,再将程序写入单片机,单片机在程序的控制下工作以完成指定的任务。没有程序的控制,单片机就无法工作。那么如何编写单片机程序呢?
1.从一个实例初步了解编程
上面这张图所示是一个边长为100m的正方形跑道,有一个人(称作甲)处于A点,如果要让甲到达B点,可以执行如下的程序:
起点 前进 50m
左转
前进 100m
左转
前进 50m
结束
甲逐条执行程序中的命令:先前进 50m,左转,然后前进100m,左转,再前进50m,结束,就可以到达B点。如果将上述程序改成:
起点 前进 50m
左转
前进 100m
左转
前进 50m
返回到 起点
结束
甲执行上述程序中的命令时会怎样呢?当他执行到第5行命令时,会到达B点,接着执行第6行命令,该命令使他又返回到起点(标号),甲于是又会执行第1行指令……由于执行到第6行的指令时又会返回执行第1行的命令,永远执行不到结束命令,所以,如果甲执行上述程序,就会不断在A、B点之间反复运动,不会停止。如果只要求甲在A、B点之间往返3次,上述程序应如何编写呢?读者可以思考一下,在后面的章节将会讲到这个问题。
2.分析一个单片机汇编语言程序
从前面的介绍初步了解了编程思想后,再来分析用到的汇编语言程序,程序如下:
MAIN: MOV P3,#0FFH
LOOP: MOV P1,P3
LJMP LOOP
END
为了更好地理解上面的程序,下面对照图所示的单片机应用电路来进行讲解。
第1 行指令“MAIN:MOV P3,#0FFH”的含义是将数据11111111(0FFH)送到P3 端口的8个寄存器,让P3端口的P3.0~P3.7这8个引脚全部为高电平。
“MAIN:”为标号,表示该行为主程序开始,这里也可省略,并不影响程序的运行;“MOV”为数据传送指令;“P3”表示单片机P3端口内部的8个寄存器;“#0FFH”中的“#”号表示它后面的“0FFH”是一个数据,而不是地址编号,“0FFH”是一个十六进制数,转换成二进制数就是11111111。
该行指令运行后,图中的单片机P3.0~P3.7这8个引脚内部的寄存器全部为高电平,相应的这8个引脚也为高电平。
第2行指令“LOOP:MOV P1,P3”的含义是将P3端口8个寄存器中的数据送到P1端口的8个寄存器中。
“LOOP:”为标号,用来标识指令“MOV P1,P3”,由于该标号后面的指令会被调用,所以不能省略。
由于第1行指令已经让P3端口8个寄存器内的数据全部为“1”,执行“MOV P1,P3 ”指令后,P1端口8个寄存器内的数据也全部为“1”,单片机的P1.0~P1.7这8个引脚全部为高电平,故发光二极管VD1~VD4全部不亮。
第 3 行指令“LJMP LOOP”的含义是返回执行标号LOOP所在行的指令。也就是说,当执行到该行指令后,又会返回去执行第2行指令“MOV P1,P3”,即不断将 P3 端口 8 个寄存器中的数据送到P1端口的8个寄存器中。
第4行指令“END”的含义是程序结束。由于执行到第 3 行指令时会自动返回执行第 2行指令,所以无法执行到第4行指令,即程序无法结束。
将上面的汇编语言程序汇编成机器语言程序并写入单片机后,在程序的控制下,单片机内部电路不断将P3端口8个寄存器中的数据送给P1端口的8个寄存器。
图示的单片机应用电路的工作过程分析如下。
在没有按下任何按键时,P3端口8个寄存器的数据都为“1”,所以P1端口8个寄存器的数据也为“1”,P1.0~P1.7这8个引脚都为高电平,发光二极管VD1~VD4全部不亮。
若按下S1按键,P3.2引脚变为低电平,P3.2端口内部寄存器的数据变为“0”,P3.7~P3.0端口的数据分别为11111011,在第2条指令的控制下,这些数据被送到P1端口,P1.7~P1.0端口的数据分别为11111011,其中P1.2端口的数据为“0”,P1.2引脚为低电平,于是它外接的发光二极管VD1有电流通过而发光。
如果松开S1按键,P3.2引脚变为高电平,P3.2端口的“1”送到P1.2端口,P1.2引脚为高电平,其外接的发光二极管VD1截止而不亮。
相关问答
单片机编程 的基本步骤?[例如,对于STC89C52单片机来说,编写代码的步骤如下](1)定义DAC数据接口:DAC数据接口是单片机系统中最基本的接口,它与外部设备进行通信。(2)定义GPIO...
怎么编写 单片机 程序?编写单片机程序需要以下几个步骤:1.确定需求:明确要实现的功能和目标,例如控制某个设备,采集数据等。2.选择单片机型号:根据需求选择合适的单片机,并了解...
单片机 编写程序?编写单片机程序需要熟悉单片机的指令集和编程语言,例如C、Assembly等。首先,确定程序的功能和需求,然后按照流程图或伪代码编写程序逻辑。接着,将程序转换...
如何设计一个以 单片机 为核心的继电器控制电路?根据提问者的意思以单片机为核心控制继电器,不知提问者提出这个问题的真正目的是什么,若只是为了想要一块继电器板实现相应的功能,可以直接购买一块单片机继电...
51 单片机编程 程序怎么编?51单片机编程程序怎么编?♣这种技术性问题在今日头条上,几乎没有一个高手给你一个答复。因为学习51单片机编程程序是需要长篇大论,并且用电脑操作截图来说明...
proteus怎么添加 单片机 程序?1.使用其他的编写软件编写单片机程序,并生成.hex文件.2.在proteus中,直接双击芯片在其中的程序路径中添加你的代码文件.hex格式.3.仿真1.使用其他的编写软...
单片机 程序有哪几部分组成?头文件的作用是什么?头文件,变量声明,函数声明,子函数,主函数这几部分组成,头文件其实就是一种声明,将单片机中的一些常用的符号变量进行定义声明,对一些特殊功能寄存器进行声...
单片机 有多个代码怎么运行?单片机可以通过选择不同的代码进行运行。在编程时,可以将多个功能代码编写成不同的函数,并在主程序中通过条件语句或者按键等事件触发的方式来调用不同的函数,...
单片机编程 和PLC编程有什么区别?单片机是一种可编程的集成芯片。2、plc就是由单片机加上外围电路做成的,单片机开发式底层开发,程序编写用汇编...一、区别:1、PLC是建立在单片机之上的产品,...
单片机编程 需要什么配置?1、需要一个编程编译软件,在此软件的编程窗口中编写用户程序,经过软件编译生成hex代码供单片机应用。2、需要一个烧录或下载软件,通过软件与单片机通讯,将用...