弱智的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指令集中文介绍

编译信息的输出显示级别有三种,分别是 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单片机定时器相关用法什么是定时器?定时器顾名思义就是用来定时的。
在单片机应用中常常用于各种各样的定时。
比如让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单片机的指令系统

本讲内容 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

⒈同步计数器工作方式 当 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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 指令。
【休息,听我讲一个故事】
从前…,有个笨财主请了个先生教他的笨蛋儿子,先生第一天教这个笨蛋小子“一”,第二天教会“二”,第三天教会“三”
第四天,这小子按耐不住了,对他爸说,我会了,不要先生了。
于是把先生炒了。
第五天,财主让儿子写请帖,请一个姓“万”的人,来赴宴。
儿子累了半天没写完,老子问个究竟:
儿子说:这个人偏偏姓万,我要写一万个“一”,才能把姓写完…
老子说:真笨,你拿笤帚蘸墨,一下不就可以写出好多“一”…
下一讲,我们来学习“用笤帚蘸墨,一下写出好多个一”来…..
下一将:【延时子程序】。