弱智的PIC教程之11 机器周期,指令周期

合集下载

指令周期机器周期等各种周期介绍

指令周期机器周期等各种周期介绍

时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。

在一个时钟周期内,CPU仅完成一个最基本的动作。

对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。

由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。

显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。

8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

机器周期:在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。

例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。

完成一个基本操作所需要的时间称为机器周期。

一般情况下,一个机器周期由若干个S周期(状态周期)组成。

8051系列单片机的一个机器周期同6个S周期(状态周期)组成。

前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。

例如外接24M晶振的单片机,他的一个机器周期=12/24M 秒;指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。

指令不同,所需的机器周期也不同。

对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。

对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

总线周期:由于存贮器和I/O端口是挂接在总线上的,CPU对存贮器和I/O接口的访问,是通过总线实现的。

PIC指令集中文介绍

PIC指令集中文介绍

编译信息的输出显示级别有三种,分别是 0、1 和 2。

级别 0 代表显示所有信息,包括各种错误、警告和提示信息,如图 3-14 所示某些信息单独设定显示或关闭。

每个信息都有一个识别标号,见图 3-14 中信息项“[]”中的数字,打开或关闭某类信息只需在 errorlev
errorlevel 0, -302, -305 ;显示所有信息,但不需要302 和 305 这两类提示信息
errorlevel 1, +305 ;显示错误和警告信息,但同时还要关注 305类的提示信息
,分别是 0、1 和 2。

级别 0 代表显示所有信息,包括各种错误、警告和提示信息,如图 3-14 所示;级别 1 代表显示错误和警告信息,忽略提示信息;个信息都有一个识别标号,见图 3-14 中信息项“[]”中的数字,打开或关闭某类信息只需在 errorlevel 伪指令中引用信息识别标号,并在其前面用“+”或“-”
有信息,但不需要302 和 305 这两类提示信息
警告信息,但同时还要关注 305类的提示信息
示错误和警告信息,忽略提示信息;级别 3代表只显示错误信息而忽略警告和提示信息。

在任何一个大的级别上还可以对信息识别标号,并在其前面用“+”或“-”号,即代表打开或关闭这一类信息,例如:。

PIC单片机定时器相关用法

PIC单片机定时器相关用法

PIC单片机定时器相关用法什么是定时器?定时器顾名思义就是用来定时的。

在单片机应用中常常用于各种各样的定时。

比如让LED灯每隔 1S 亮一次。

这个1S 就是由定时器做到的。

指令周期指令周期就是单片机执行一个指令所花费的时间。

这也是定时器定时的最小时间单位。

时钟频率/4=指令频率。

1/指令频率=指令周期。

假设现在的时钟是4MHZ ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us 就是指令周期,这1us也就是定时器定时的最小单位。

定时器与预分频器假设在没有预分频器情况下。

开启定时器每隔一个指令周期定时器就加一。

假设时钟是4MHz 也就是每隔1us 定时器加一。

如果有了预分频器假设预分频器设置成2分频,定时器就每隔2个指令周期定时器加一。

如果预分频器设置成4分频,定时器就每隔4个指令周期定时器加一,以此类推。

定时器中断标志位如: TMR0 这个是8位的定时器,也就是8位的寄存器。

8位的寄存器能代表的数值为0~255.也就是说定时器可以从0开始加一直加到255.到255后再加一就又变成0。

此时TMR0定时器中断标志位 (TMR0IF)变成 1.(如果中断没有开启,并不执行中断程序。

)到底从时钟频率一直到定时器中断溢出之间是什么关系呢?下面我画了一个流程图我们用频率的方式来理解这一切。

假设时钟频率是4MHz ,定时器预分频值为2,定时器初始值为0.1。

首先4MHz 的时钟 4分频后变成 1MHz的指令频率; 2。

然后预分频器 2 分频后变成 0.5MHz的频率供给定时器;3。

定时器经过256分频后变成约1952Hz的频率溢出中断;然后我们再用周期的方式来理解这一切。

1。

首先0.25us时钟周期4分频后变成 1us指令周期; 2。

然后预分频器 2 分频后变成 2us周期供给定时器;3。

定时器每隔2us加一,加到256次256X2us=512us溢出中断 ;希望上面的流程图能帮你梳理一下概念。

单片机指令周期怎么计算

单片机指令周期怎么计算

单片机指令周期怎么计算指令周期:指令周期执行某一条指令所消耗的时间,它等于机器周期的整数倍。

传统的80C51单片机的指令周期大多数是单周期指令,也就是指令周期=机器周期,少部分是双周期指令。

现在(截至2012)新的单片机已经能做到不分频了,并且尽量单指令周期,就是指令周期=机器周期=时钟周期。

来看这张8051单片机外部数据,这里ALE和$PSEN$的变化频率已经小于一个机器周期,如果使用C语言模拟这个信号是没有办法做到的一一对应的,所以只能尽量和上面的时序相同,周期延长。

指令周期是不确定的,因为她和该条指令所包含的机器周期有关。

一个指令周期=1个(或2个或3个或4个)机器周期,像乘法或除法就含有4个机器周期,单指令就只含有1个机器周期。

对于大多说的51单片机来说,1个机器周期=12个时钟周期(或振荡周期)也有部分单片机时钟周期和振荡周期不相等,例如,1个时钟周期=2个振荡周期。

该定义指的是执行一条指令所需要的时间,通常一个指令周期会由若干个机器周期组成。

指令不同,所需的机器周期数也不同。

对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。

对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

PIC单片机指令周期计算PIC单片机的每四个时钟周期为一个内部指令周期例如:8MHz的晶振,则内部指令周期为1/(8/4)= 0.5 uS实例一:35us,8MHz的晶振,8位定时器,分频比1/2 ,初值E4实例二:156.25us ,32768Hz的晶振,8位定时器,分频比1/32 ,初值FC计算方法一:35 = =(256-初值)*分频*4/晶振+ 14/分频=(256-初值)+14/2。

指令周期机器周期等各种周期介绍

指令周期机器周期等各种周期介绍

时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。

在一个时钟周期内,CPU仅完成一个最基本的动作。

对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。

由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。

显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。

8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

机器周期:在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。

例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。

完成一个基本操作所需要的时间称为机器周期。

一般情况下,一个机器周期由若干个S周期(状态周期)组成。

8051系列单片机的一个机器周期同6个S周期(状态周期)组成。

前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。

例如外接24M晶振的单片机,他的一个机器周期=12/24M 秒;指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。

指令不同,所需的机器周期也不同。

对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。

对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

总线周期:由于存贮器和I/O端口是挂接在总线上的,CPU对存贮器和I/O接口的访问,是通过总线实现的。

PIC单片机的指令系统

PIC单片机的指令系统
黄之峰 广东工业大学 自动化学院
本讲内容 1. PIC单片机的指令系统概述 2. 汇编语言与机器指令的关系 3. 数据传送类指令 4. 逻辑运算类指令 5. 算数运算类指令 6. 4种寻址方式
第四讲 1. PIC单片机的指令系统概述
机器语言是由一条条语句构成的,每一条语句又能准 确表达某种语义。例如,他可以命令机器做某种操作, 指出参与操作的数或者信息在什么地方等。计算机就 是连续执行每一条机器语句而实现全自动工作的。每 一条机器语言称之为机器指令。全部的机器指令的集 合称之为机器的指令系统。 指令由操作码和地址码两部分组成。
第四讲 2. 汇编语言与机器指令的关系
MOห้องสมุดไป่ตู้WF 0x55H
编译软件: 把汇编翻译成 机器指令
010101 101010 01……
第四讲 2. 汇编语言与机器指令的关系
表4-1 核心助记符 p46
核心助记符 含义 MOV SWAP 数据传送 交换 核心助记符 含义 RR RL 右移 左移
ADD
SUB INC
第四讲 4. 逻辑运算类指令
D、逻辑运算指令x 7 (影响标志位Z) ANDWF f, d 作用:把寄存器f的值与W寄存器的值按位相与,d=0 则结果保存到W寄存器,d=1则结果保存到寄存器f。
第四讲 4. 逻辑运算类指令
实例2(工程名PICT4-31 ): INCLUDE "P16F877A.INC“ ; 加载头文件 ORG 0000H ;程序从0000H开始 NOP ;空操作 MOVLW 0x11 CLRF 0x20 ;寄存器0x20清零 CLRW ; 寄存器W清零 MOVLW 0x34 ; 对W寄存器赋值0x34 MOVWF 0x20 ; 对寄存器0x20赋值 RLF 20H,1 ;寄存器0x20左移动1位,结果放入 20H NOP END

指令周期流程图

指令周期流程图

指令周期流程图指令周期是指CPU执行一条指令所经历的一系列步骤。

下面将介绍一种常见的指令周期流程图,包括取指令、译码、执行、访存和写回五个步骤。

首先是取指令(IF)阶段,CPU从内存的指令缓存中取出下一条要执行的指令,并将程序计数器(PC)加1,以指向下一条指令的地址。

接下来是译码(ID)阶段,CPU对取出的指令进行解码,确定指令的类型和操作数等信息。

这个阶段还会检查指令是否合法,若存在异常情况会停止或重新执行指令。

然后是执行(EX)阶段,CPU根据指令的类型和操作数进行计算和操作。

这个阶段可能包括算术运算、逻辑运算、数据传输等操作。

一些指令可能还会涉及到对内存或其他外设的访问。

接着是访存(MEM)阶段,CPU根据指令的需要,读取或写入数据到内存中。

这个阶段可能涉及到读取或写入寄存器、缓存、外设等操作。

这个阶段还可能包括对缓存的命中和失效的处理。

最后是写回(WB)阶段,CPU将执行结果写回到寄存器或缓存中。

这个阶段是为了保证指令的结果可以被后续的指令使用。

有些指令可能不涉及写回操作。

以上就是一条指令的完整指令周期流程。

在实际执行中,这些阶段可能会出现重叠,以提高指令的执行效率。

例如,在某条指令的执行阶段同时进行下一条指令的取指令和译码阶段,以减少延迟。

在现代的CPU中,指令周期的流程图可能会更加复杂,包括预取和预执行等优化技术。

此外,还可能存在流水线冲突、分支预测等问题需要解决。

总之,指令周期流程图描述了CPU执行一条指令所经历的一系列步骤。

通过合理的流程设计和优化技术,可以提高CPU 的执行效率,提高计算机系统的性能。

PIC11定时器/计数器TMR1

PIC11定时器/计数器TMR1



⒈同步计数器工作方式 当 T1SYNC=0 , TMR1 工作在同步方式。 此时,外部输入信号要与系统时钟脉冲在相位 上进行同步。此时假如单片机进入了睡眠模式, 即使有外部触发信号输入, TMR1 也不会增加, 因为同步逻辑电路被关闭,如下图所示。
⒉ 异步计数器工作方式
当T1SYNC=1时,TMRl工作在异步方式。此 时,外部输入信号不与系统时钟脉冲相位进行同 步。此时若单片机处于睡眠模式时,计数器随着 外部触发信号所进行的增量操作不受影响,如图 3.11所示。

自带一个时基振荡器,可记录年、月、日、时、 分、秒,实现实时时钟RTC(real time clo用,实现输入捕捉或输出 比较功能。 TMR1由二个8位寄存器TMR1H和TMR1L对 组成的16位定时器/计数器,可以由软件读/写, 这二个寄存器都是和RAM统一编址的,地址分别 为0EH和0FH 。 TMR1H:TMR1L寄存器对,从0000H递增到 FFFFH(0~65535)之后再返回到0000H时,就会 产生溢出,并且将溢出中断标志位TMR1IF设置 为1。如果此时相关的中断使能位TMR1IE和GIE 都为1,就会引起CPU的中断响应。

一旦 TMR1 自带振荡器被使能 (T1OSCEN=1) , RC1 / T1OSI / CCP2 和 RC0 / T1OSO / T1CKI 引脚就自动设为专用引脚,此时 TRISC 方向寄 存器bit1和bit0的值将失效。 当对寄存器 TMR1H 或 TMR1L 进行赋值时, 预分频器将会自动清0。
TMR1 的触发信号源可来自内部系统时钟、 外部触发信号或自带时基振荡器信号;因此即可 以工作于定时器模式,又可工作于计数器模式, 还可以用作实时时钟RTC模式;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【弱智的PIC教程之11】
机器周期、指令周期
【问题引入】
上一讲中,我们单步执行时,可以看到LED一个一个被点亮。

但如果连续运行,会发现LED乱闪烁。

为什么呢,我们来仔细研究一下。

下面这两张图,是RB0和RB1相继被点亮的截图。

可以看出,从RB0端口LED亮→灭→RB1亮,总共才花费2us的时间。

如果将程序烧录到单片机硬件,用实际的电路进行运行,由于视觉暂留的原因,我们能看到的是8个LED全部亮,而不是一个一个依次点亮(用Protues仿真的效果与实际有差异)。

为此我们需要在每个LED点亮后,进行一段延时,让其保持一定的时间,再熄灭,点亮下一个LED。

是的,我们需要延时,增加一个延时子程序。

这就是本讲要解决的问题。

【机器频率、机器周期】
每个单片机运行时,读需要一个元器件,就是晶振。

如果你手头上有实物之类的电路板,可以找到上面的晶振,如下图的模样:
晶振和单片机内部的相关电路,构成一个振荡器,产生固定的振荡频率,单片机的运行全部依靠这种振荡,实现统一步
伐。

可以把这种振荡比喻成为单片机的心脏。

如果它出现故障停止运行了,单片机也就停止运行了。

有的电路板上找不到晶振,是因为已经固化的单片机内部了,或者使用的是陶振、阻容振荡。

但这不影响我们分析。

仔细看晶振上的数值,比如我手头上的一个晶振,上面是“4MHz”,这就是单片机的心跳速度,我们叫做“机器频率”,其倒数就是“机器周期”
关于机器周期、指令周期我们在第14讲还会有进一步阐述。

回到前面这个例子来,我们是用Proteus仿真,在MPLAB IDE中,单击下面这个图标,打开PROTEUS程序:
进入到PROTEUS程序中,双击PIC16F628A,出现Edit Component对话框,如下:
这是我们在第3讲中设置的机器频率:4MHz,当然我们也可以设置成其他频率,如8MHz、20MHz等。

就好比我们实际使用中,将4MHz的晶振换成8MHZ的一样。

关于晶振的使用条件,请参考该型号单片机的《数据手册》。

【指令周期】
指令周期是:单片机运行一“步”所花费的时间,等于4个机器周期。

在上面的例子中,机器频率是4MHz,机器周期是1/4us,即0.25us,指令周期=4*0.25=1us。

在本讲开始的【问题引入】中,在第7us点亮RB0LED,运行两条指令后,点亮RB1LED,两条指令花去2us,所以第二张图上,显示在第7+2=9us时,RB1LED点亮。

PIC16系列的单片机大约有33条指令,绝大部分指令运行时,只需要一个指令周期。

少数几条指令运行需要2个指令周期。

如:GOTO、CALL等等,后面会有详细的介绍。

【NOP】指令
这条指令,单片机什么也不干,就是空消耗一个指令周期。

通常用NOP这条指令来延时。

我们就用NOP指令,来修改前面的例子,来实现延时吧。

理论上是成立的,我们在原来的程序中插入3条NOP指令:
读者自己试试看,直接在MPLAB IDE中,修改LX1_LED.ASM文件,插入3条NOP指令,看看是不是起到延时的作用。

好了,我们要求每个1秒中,依次将LED点亮。

这好办,不就是增加NOP达到延时的目的吗?算算,1秒=1000000us,一条NOP花去1us,我就插入1000000条NOP 指令。

【休息,听我讲一个故事】
从前…,有个笨财主请了个先生教他的笨蛋儿子,先生第一天教这个笨蛋小子“一”,第二天教会“二”,第三天教会“三”
第四天,这小子按耐不住了,对他爸说,我会了,不要先生了。

于是把先生炒了。

第五天,财主让儿子写请帖,请一个姓“万”的人,来赴宴。

儿子累了半天没写完,老子问个究竟:
儿子说:这个人偏偏姓万,我要写一万个“一”,才能把姓写完…
老子说:真笨,你拿笤帚蘸墨,一下不就可以写出好多“一”…
下一讲,我们来学习“用笤帚蘸墨,一下写出好多个一”来…..
下一将:【延时子程序】。

相关文档
最新文档