C51的指令与时序的一点总结

发布者:cloudy德德最新更新时间:2019-02-19 来源: eefocus关键字:C51  指令与时序 手机看文章 扫描二维码
随时随地手机看文章

我们知道C51的指令存储在ROM中,它需要从ROM中取出指令才能知道该干什么事。一条指令,首先应该告诉计算机要做什么性质的操作,是加减,还是跳转判断等;其次,还需要给出拿去运算的数据,可以是直接的数据(就是立即能用的数,立即数),也可以是数据存放的地址。那么如何告诉计算机我这个操作码后面跟的是立即数还是地址呢?简单,做个记号,用#来表示立即数,没记号的都是地址。取出指令时,要放在指令寄存器IR里,送到指令译码器ID里进行译码,随后生成相应的控制命令C,这一点是自然而然的,因为计算机本身是要通过硬件执行的,一个指令代码要译码过后才能被解读。不然直接给CPU一个10001000它根本不知道该干什么,通过译码,可能也是生成一些10001000类似的数,但是其对应电平可以直接操作一些硬件,产生相应的动作,在外面的人看来,就是形成了各种不同得控制信号。


这里还需要注意到一件事,就是我取指的时候,程序计数器pc是要+1的,这个加1不是说直接加1,而是说指向下一条指令的意思,它可能就在上一条指令的物理地址的后面,也可以是跳转过的,距离上一条指令很远。都可以,反正就是要指向下一条计算机要运行的指令。那么,这个判断是在什么时候进行呢,具体怎么执行呢?比如MOV类指令,取指后我这个PC物理地址应该加1还是2还是3或者更多?


翻开某本教材的后面的附录:


MOV A,Rn                               E8H~EFH                       字节1 机器周期1


MOV A,direct                          E5H direct                       字节2 机器周期1


MOV A,#data                         74H data                           字节2 机器周期1


MOV direct2,,direct1        85H direct1,direct2       字节3 机器周期2


MOV DPTR,#data16        90H addr15-8 addr7-0    字节3 机器周期2


MOVX A,@Ri                        E2H~E3H                          字节1 机器周期2 这里侧面显示寄存器间接寻址的只能是R0和R1


MOVX A,@DPTR                  E0H                                    字节1 机器周期2


我们看到了,指令系统规定了的字节和机器周期对不同内容的MOV指令是不同的,这也是很合理的。如果可以简单的话,谁不想每条指令都是1个字节一个机器周期呀。因为这是最快的了。然而,天下没这种好事——你既想有不同的指令来包含不同的内容,又想这种指令是那么的简短以至于可以放在一个字节里,或者在一个机器周期里就执行完。


对于译码器而言,他看到了的MOV和我们看到的MOV肯定是不同的。我们就看到了上面每条都是MOV打头,但是他看到的是可能E8H,74H之类的。所以,比如他看到了74H,立马就知道了这是MOV A,#data型的,他肯定也知道了这个指令是有两个字节的,因为需要下一个字节存放操作码,也就是某个立即数。所以,他肯定也告诉了PC需要往后移动两个字节作为下一条指令的地址。这样,我们也能理解了为什么MOV direct2 ,direct1需要3字节(一个操作码85H,两个地址direct1、2正好三个字节来存储),也理解了为啥MOV A, Rn只需要1个字节(因为R0-R7只用8个数就能代表,全体用一个字节来代表绰绰有余)。而对于我们而言,我们只看到MOV的头,就会心生疑惑,不是说取指第一字节就该决定PC加多少了吗?那光看MOV的头也看不出到底该加多少呢。我们有这样的疑惑是因为我们不知道虽然都是MOV,但是不同类型的MOV他们在指令系统里的编码是不同的。计算机确实只要看到第一个字节里的编码就能知道这个MOV是哪种具体的MOV,以及后面还有几个字节和需要的周期。


再来考虑机器周期数目问题,首先能在一个周期里办完的那肯定最好咯。2个以上的机器周期肯定是事务复杂导致的,不过好在除了乘MUL除DIV是4周期,别的都是2周期或更少了。实际上,对于51的指令,字节数和机器周期数的组合只可能是11,12,21,22,32和14.


下图是MCS-51系列单片机的指令时序图:




用这个图再来解释一次,


11组合的比如MOV A,Rn  其操作码E8H~EFH 


21组合的比如MOV A,direct 其操作码E5H direct  


12组合的比如MOVX A,@Ri其操作码 E2H~E3H 


我们发现,可能设计者的初衷就是每个机器周期的S1S4都去读一次操作码或者操作数,然后根据实际情况对这些读到的做处理或者不作处理。比如12组合的读一次就够了(比如E2H就在第一个字节,读一次就行了计算机已经知道了全部内容),而后面的每次读到的都是和第一次一样的,所以判为无效。而对于21组合的来说,S4是需要去读一下操作码的。




这是访问外部程序存储器的相关内容,对应的汇编代码有


MOVC A,@A+DPTR        93H        1字节 2周期


MOVC A,@A+PC              83H        1字节 2周期


很明显由于是对外部ROM的读取,故而没有MOVC @A+PC,A这种写操作。


这里的ALE是地址锁存信号,因为扩展ROM的时候,要用16线去寻址,此时P0口既要做地址的低8位与P2口的高8位组成16位去寻址选中指令单元,又要将选中的指令单元里的内容即具体的指令代码传入CPU中执行相应动作,故而需要有个机制来分时复用。这个机制就是ALE和PSEN,ALE为高时,P0是做地址口用的,上面会出现地址信息,同时PSEN无效,也就是读外部指令是失效的。而ALE从高跳转为低的时候的下降沿,这个时候把刚才P0口的地址锁存在锁存器中,因为接下来的低电平时刻我需要用P0口来传数据。当然,P0口保持地址输出的状态应该比ALE下降沿稍微久一点,确保锁存时刻上面的地址信号是还在的。锁存好地址后,就知道去哪里取指了,将取出的指令内容用P0口传回CPU,自然的,这时候PSEN应该让他有效,允许读数据进来。传好之后,ALE再次变成高电平,这时P0口上又出现了低8位地址,PSEN再次无效,不让数据读进来,一直等下一个下降沿的到来时锁存在锁存器中。




再看这种情况,这是MOVX类型,这种类型不论是采用Ri还是DPTR间接寻址,都只是1字节2周期。


MOVX A,@Ri                        E2H~E3H                          字节1 机器周期2 


MOVX A,@DPTR                  E0H                                    字节1 机器周期2


对应这两个读操作,还有两个写操作。


MOVX  @Ri,A                        F2H~F3H                          字节1 机器周期2 


MOVX @DPTR,A                  F0H                                    字节1 机器周期2


在读入ROM中的指令后,得知是MOVX指令,CPU得知接下去要操作的RAM中的数据地址,因此P0口将出现对应地址。如果是DPTR类型的,由于他是16位寻址,所以仍然是P2高8位P0低8位的方式。如果是Ri类型,那么只需要用P0做8位地址输出就可以。在ALE下降沿进行锁存。然后在P0口进行数据的读入或者输出。由于这是对外部RAM的读写操作,所以要注意读写线的信号使能。


而且你还能注意到一些区别,之前外部程序存储器PSEN信号是一直在P0口作为数据传入时是有效的。而在MOVX这里,有点差别,他的失效时间会更长,以保证数据传送不被干扰。


关键字:C51  指令与时序 引用地址:C51的指令与时序的一点总结

上一篇:51单片机PS2键盘解码实验--C51源代码
下一篇:单片机 C51 编程要点总结

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

采用C51插拔式FLASH闪存设计无纸记录仪
ATMEL公司推出的带有看门狗功能的单片机AT89C55WD带有20K的程序存储器,是8051系列中一款较为先进的产品,其看门狗功能可以大大提高产品的稳定性,大容量的内部程序存储器可以容纳功能丰富的软件。   以往的许多无纸记录仪均采用3.5英寸软盘作为数据存贮介质,但软盘存贮的可靠性差、存储容量有限、成本较高等诸多缺点实在难以克服。   作为一种高科技的非易失性存储设备,FLASH闪存首先在数码相机、PDA、移动电话等数字产品当中得到了应用,随着工艺的进步和价格的下降,逐步向其他应用领域扩展,其容量大、功耗低、速度快、不易受损等优点正受到人们越来越多的青睐,而且最大的好处是,随着技术水平的进步,FLASH闪存的容量也在不断
[测试测量]
C51单片机延时时间的计算方法解析
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsignedchar类型具有比unsignedint更优化的代码,在使用时应该使用unsignedchar作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一.500ms延时子程序 程序: voiddelay500ms(void) { unsignedchari,j,k; for(i=15;i》0;i--) for(j=202;j》0;j--) for(k=81;k》0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2=81*2=162usDJNZ2us 二层循环m:R6*(n+3)=202*165=333
[单片机]
C51单片机之串口
/* 名称:C51单片机之串口 说明:在计算机之间进行通讯的时候,有两种方式,一个是串行通信,一个是并行通信。对于前者适合长距离通信、有一定的纠错能力。对于后者,适合短距离通信,速度较快。 对于C51单片机来说,其内部集成有一个功能很强的全双工通信口。设有两个相互独立的接受、发送缓冲器,可以同时发送数据和接收数据。发送缓冲器只能发送不能读出。接收缓冲器只能接收不能发送,而且两个缓冲器共用一个物理地址(0X99)。在编程时由编译器进行区分。还有,C51单片机的串口有4种工作方式,其中两种波特率时刻变的,另外两种是不可变的。 对于具体的使用来说,首先也是需要进行一系列初始化设置(包括工作方式设置、波特率设置等)。然后可以通
[单片机]
C51单片机数字时钟系统原理解析
有关的硬件原理图: c程序: //温馨提示: /*程序还没有调试完成,实际电路板调节时间时时-分-秒都会有闪烁现象,其实我是不知道的,why,也求解释 #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include //与_nop_有关 sbit duan=P2^2; //定义锁存使能端口 段锁存 sbit wei=P2^3; // 位锁存 sbit key1 = P1^1; sbit key2 = P1^2; sbit key3 = P1^3; sbit key4 = P1^4; unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0
[单片机]
<font color='red'>C51</font>单片机数字时钟系统原理解析
C51编程经验汇总分享
  在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种。用惯了汇编的人,总觉得高级语言“可控性”不好,不如汇编那样随心所欲。以下是笔者在C51编程中的几点经验,希望对初学C51者有所帮助。   一、C51热启动代码的编制   工业控制计算机,往往设有看门狗电路,看门狗动作,计算机复位,这就是热启动。热启动时,一般不允许程序从头开始,因为这将使测量或计算值复位,导致系 统工作异常。故程序必须判断是热启动还是冷启动。常用的方法是:设定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如 果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行初始化部分
[单片机]
lcd液晶12232F的串口C51程序(ST7920)
由于12232F这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12232F的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教! /******************************************************/ /* */ /* 12232F串口驱动程序C51,11.0592M晶振 */ /*使用这款LCD应该要注意的问题: */ /*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器, */ /*电位器的中间脚接VO,其它二脚接VDD和VSS。 */ /*然后调节电位器的大小,直到有显示为止。若是不接的话,
[单片机]
C51 单片机_波形发生器
课程设计内容与要求: 任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率. 设计要求: 1、电子仿真、测试电路。 2、独立完成课程设计报告,严禁报告内容雷同; 3、电路图中的图形符号必须符合国家或国际标准; 4、所有电路图的制作应采用电子CAD正确绘制; 5、报告内容完整,格式正确,A4纸张打印,字数不少于5000字。 说明:※符号表示提高要求。 课程设计内容与要求: 任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率 基本图: 0832的图解: 0032电路接法: 程序: #include unsigne
[单片机]
<font color='red'>C51</font> 单片机_波形发生器
C51系列单片机设计物体分级设备的测量光幕
1引言 光幕是电子测量系统中应用比较多的一种设备。利用光幕可以测量恒速传送带上的物体高度、长度或宽度等一系列数据,以便为后面的电子系统提供相应的参数。本文给出了一种利用单片机实现物体高度测量的光幕测量方法。 2光幕测量物体高度的基本原理 图1所示是一个用普通光幕测量物体高度的测试原理结构示意图。图中,光幕的一边等间距安装有多个红外发射管,另一边相应的有相同数量同样排列的红外接收管,每一个红外发射管都对应有一个相应的红外接收管,且安装在同一条直线上。当同一条直线上的红外发射管、红外接收管之间没有障碍物时,红外发射管发出的调制信号(光信号)能顺利到达红外接收管。红外接收管接收到调制信号后,相应的电路输出低电平,而在
[单片机]
用<font color='red'>C51</font>系列单片机设计物体分级设备的测量光幕
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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