弱智的PIC教程之11 机器周期,指令周期
指令周期机器周期等各种周期介绍
![指令周期机器周期等各种周期介绍](https://img.taocdn.com/s3/m/1eef57f1ba0d4a7302763a03.png)
时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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指令集中文介绍](https://img.taocdn.com/s3/m/cec400fa770bf78a652954e4.png)
编译信息的输出显示级别有三种,分别是 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单片机定时器相关用法](https://img.taocdn.com/s3/m/b91a6ec00975f46527d3e1be.png)
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溢出中断 ;希望上面的流程图能帮你梳理一下概念。
单片机指令周期怎么计算
![单片机指令周期怎么计算](https://img.taocdn.com/s3/m/d5f63caf7c1cfad6195fa77d.png)
单片机指令周期怎么计算指令周期:指令周期执行某一条指令所消耗的时间,它等于机器周期的整数倍。
传统的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。
指令周期机器周期等各种周期介绍
![指令周期机器周期等各种周期介绍](https://img.taocdn.com/s3/m/1eef57f1ba0d4a7302763a03.png)
时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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单片机的指令系统](https://img.taocdn.com/s3/m/804f19fb4afe04a1b071de1e.png)
本讲内容 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
指令周期流程图
![指令周期流程图](https://img.taocdn.com/s3/m/7476dcd950e79b89680203d8ce2f0066f5336411.png)
指令周期流程图指令周期是指CPU执行一条指令所经历的一系列步骤。
下面将介绍一种常见的指令周期流程图,包括取指令、译码、执行、访存和写回五个步骤。
首先是取指令(IF)阶段,CPU从内存的指令缓存中取出下一条要执行的指令,并将程序计数器(PC)加1,以指向下一条指令的地址。
接下来是译码(ID)阶段,CPU对取出的指令进行解码,确定指令的类型和操作数等信息。
这个阶段还会检查指令是否合法,若存在异常情况会停止或重新执行指令。
然后是执行(EX)阶段,CPU根据指令的类型和操作数进行计算和操作。
这个阶段可能包括算术运算、逻辑运算、数据传输等操作。
一些指令可能还会涉及到对内存或其他外设的访问。
接着是访存(MEM)阶段,CPU根据指令的需要,读取或写入数据到内存中。
这个阶段可能涉及到读取或写入寄存器、缓存、外设等操作。
这个阶段还可能包括对缓存的命中和失效的处理。
最后是写回(WB)阶段,CPU将执行结果写回到寄存器或缓存中。
这个阶段是为了保证指令的结果可以被后续的指令使用。
有些指令可能不涉及写回操作。
以上就是一条指令的完整指令周期流程。
在实际执行中,这些阶段可能会出现重叠,以提高指令的执行效率。
例如,在某条指令的执行阶段同时进行下一条指令的取指令和译码阶段,以减少延迟。
在现代的CPU中,指令周期的流程图可能会更加复杂,包括预取和预执行等优化技术。
此外,还可能存在流水线冲突、分支预测等问题需要解决。
总之,指令周期流程图描述了CPU执行一条指令所经历的一系列步骤。
通过合理的流程设计和优化技术,可以提高CPU 的执行效率,提高计算机系统的性能。
PIC11定时器/计数器TMR1
![PIC11定时器/计数器TMR1](https://img.taocdn.com/s3/m/3fb3919ca0116c175f0e487f.png)
⒈同步计数器工作方式 当 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模式;
第4章PIC指令系统
![第4章PIC指令系统](https://img.taocdn.com/s3/m/15787d270722192e4536f675.png)
PIC单片机原理
例:已知(50H)=5AH,(30H)=60H,(FSR)=50H ,
(40H)=00H MOVF 40H,F ;结果 Z=1
MOVF 50H,W ;结果(W)=5AH,Z=0 MOVLW 20H ;结果(W)=20H,Z=? MOVWF 30H ;结果(30H)=20H,Z= ?
W 和f 异或运算
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作: (W) .XOR. (f) 目标寄存器)
受影响的状态位:Z
说明: W 寄存器与“f”寄存器的内容进行异或运
算。 如果“d”为0,结果存入W。 如果“d”为1,
结果存回到寄存器“f”。
PIC单片机原理
11)
ANDLW k
PIC单片机原理
4)
DECFSZ f,d f
减1,为0 则跳过
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作:(f) - 1 目标寄存器) ;如果结果为0 则跳过 ( 受影响的状态位:无 说明:寄存器“f”的内容递减, 如果“d”为0,结果存入 W 寄存器。如果“d”为1,结果存回到寄存器“f”。如果 结果非0,执行下一个指令。如果结果为0,则执行NOP 指令,使其成为2TCY 的指令。
ADDWF INDF,W ;(W)=5AH,Z=0,C=0 ,DC=0
SUBWF 30H ,F ;(30H)-(W) =06H,Z=0,C= ? ,DC=?
PIC单片机原理
3、逻辑运算类指令
1) CLRF f 操作: 00h (f)
有14条
f 清零 ;1 Z
操作数: 0 ≤ f ≤ 127
PIC单片机指令周期计算
![PIC单片机指令周期计算](https://img.taocdn.com/s3/m/8e0021e43186bceb19e8bbfd.png)
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 计算方法二:0.015625 =(256-初值)*分频*4/晶振= (256-初值)*32*4/32768 特别注意:分频比1-8 需要加上一个14/分频
什幺是预分频比后分频比
分频器一般都是跟计数单元一起结合使用。
预分频比是在计数单元值发生变化之前起作用(假如不用预分频时,计数器在每个上升沿到来时加1,而现在使用分频比为1:2 的预分频器的话,那幺必须等到两个上升沿的到来,计数器才会加1)。
PIC指令介绍
![PIC指令介绍](https://img.taocdn.com/s3/m/dd8f8deb6294dd88d0d26b59.png)
PIC指令介绍PIC的指令系统PIC 8位单片机共有三个级别,有相对应的指令集。
基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PI C系列芯片共有指令58条,每条指令是16位字长。
其指令向下兼容。
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。
1、标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。
在程序汇编时,已赋以指令存储器地址的具体数值。
汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。
标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。
在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。
指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。
书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。
再有标号不能用操作码助记符和寄存器的代号表示。
标号也可以单独占一行。
2、操作码助记符该字段是指令的必选项。
该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。
3、操作数由操作数的数据值或以符号表示的数据或地址值组成。
若操作数有两个,则两个操作数之间用逗号(,)分开。
当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。
还可以是被定义过的标号、字符串和ASCⅡ码等。
具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。
PIC单片机定时器初值计算方法及几种周期小结
![PIC单片机定时器初值计算方法及几种周期小结](https://img.taocdn.com/s3/m/71dbf74127284b73f342502b.png)
PIC单片机定时器初值计算方法及几种周期小结
PIC 定时器也用是蛮多的,据说网上还有计算初值的强力软件,不过我还
是手动算下吧。
总结了下2013.8.27PIC 单片机定时器初值计算方法
PIC 的指令周期是4 个震荡周期,在没有使用分频器的情况下,TMR0 会在
每个指令周期信号(等于晶体振荡器产生的主时钟周期的 4 倍)到来时自动
加1。
在配置了分频器的情况下,TMR0 会在每次收到由分频器将指令周期信
号分频一个固定倍数后产生的信号时自动加1。
如果TMR0 在累加计数的过程中,CPU 执行一条往TMR0 中写入数据的指令,则累加计数器的加 1 操作
将被推迟两个指令周期,重新开始计数。
这两个指令周期的偏差在用户编写时
间精度要求较高的程序时应引起注意,可以通过在每次写入TMR0 时给一个
调整值的方法来解决。
假设的是时钟频率为4MHz。
因此,一个指令周期就是一个微秒(μs)
的时间。
,也就是计数一次时间是1us。
没有分频比定时器的初值计算公式:T0=256-Tc+2
其中TC 是想得到的次数。
加2 的原因是写值的时候要消耗两个指令周期。
如果分频器给了定时器,最好不要再读写TMR0 了,不然会照成误差。
假设分频器是16,晶振是4Mhz,一次由00 到FF 的时间是
16*256=4096us。
假设50ms 的时间
在中断每次加上4096,
主程序检查是不是超过5000,超过了就减掉5000,这样算是50ms 就得到了。
1:8。
PIC汇编指令集概述
![PIC汇编指令集概述](https://img.taocdn.com/s3/m/4bc5e620bcd126fff7050b49.png)
PIC汇编指令集概述2010-8-4 16:23:39PIC单片机(Peripheral Interface Controller)是一种用来开发的去控制外围设备的集成电路(IC),翻译为外设接口控制器。
PIC 意思确实有点奇怪,不知道的话第一个P肯定翻译为Programable(可编程)的。
目前我接触的基本都是8位的CPU,包括AVR,PIC等系列,之前我写的程序都是以C语言去写的,也从未出现过什么问题,虽然很多人说道C语言的BUG问题,我一直都不是很在意,就目前为止我从未遇到过这种问题,用AVR-GCC写的时候也曾经出现过问题,也怀疑过C语言和编译器,最终事实证明是错的,一直都是我们没有注意的语法问题的造成的。
接触PIC后我开始用起了他的汇编,原因无它,只是大家都在用汇编。
这是发表的第二篇文章,处女篇给了梦梦哈,首先介绍一下PIC的单片机,PIC单片机是基于哈弗结构的精简指令集(RISC)的单片机,没啥说的,很多单片机都是的。
特殊的地方就是他的指令和存储器结构,一直有个问题到底是他的指令结构决定的他的存储器结构,还是存储器结构决定的指令结构?PIC8位机分为低中高三个档子,低档次的是PIC12系列的,指令是以12BIT结构编码的,对应的指令集有33条指令;中档的CPU是PIC16系列,指令集包含35条指令,并且是以14BIT的结构编码的;高档次的PIC18系列包含58条指令,每条指令是以16BIT结构编码的。
并且所有指令向下兼容。
PIC指令的语法和其他系列的一样,都是有以下几部分组成的:标号操作码助记符操作数1 操作数2 ;注释1。
关于标号,没啥说的,和其他单片机一样,它表示一个地址,标号也是可选的,不是所有的指令都需要的,只有在被其他语句引用时才需的,在没有标号的情况下,操作码助记符前必须保留一个或以上的空格再去写指令助记符,一般使用一个TAB,如果没有标号,而操作码助记符占用了标号的位置,汇编器会把指令助记符当做标号来处理。
单片机学习笔记
![单片机学习笔记](https://img.taocdn.com/s3/m/166fc9e381c758f5f61f67c1.png)
C51的机器周期和指令周期(1)振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,实验板上一般为11.0592MHZ。
(2)状态周期: 每个状态周期为时钟周期的2 倍, 是振荡周期经二分频后得到的。
(3)机器周期: 一个机器周期包含6 个状态周期S1~S6, 也就是12 个时钟周期。
在一个机器周期内, CPU可以完成一个独立的操作。
(4)指令周期: 它是指CPU完成一条操作所需的全部时间。
每条指令执行时间都是有一个或几个机器周期组成。
MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。
I/O口I/O口,可作为输入和输出端口,在写程序时,1为高电平,0为低电平,高位控制大数,低位控制小数。
电阻标号认阻值标号103,表示10*103Ω,即10kΩ,150表示15*100Ω,即15Ω。
1002表示100*102Ω;标号3R0表示3Ω,4K7表示4.7KΩ,R002表示0.002Ω。
LED灯LED灯,即发光二极管,通过5mA左右的电流即可点亮,导通后两端电压为1.7V左右,在电路中,有一个电阻与之串联,二极管具有先分压特性,电阻电压为电源电压减去二极管两端的电压,电路中电流为电阻电压除以电阻大小。
在控制中,利用串口的电压高低来使二极管点亮或熄灭。
可以利用延时使二极管闪烁。
在C语言中,可以使用库实现左移和右移。
_crol_(变量,位数),其返回值为一个十六进制的数,将其赋给端口,实现循环左移。
_cror_()与_crol_()相同,实现循环右移。
两个函数包含在intrins.h这个头文件中。
移位(1)左移。
C51中操作符为“<<”,每执行一次左移指令,被操作的数将最高位移入单片机的PSW寄存器的CY为,CY位中原来的数丢弃,最低位补0,其它位依次向左移动一位。
(2)右移。
C51中操作符为“>>”,每执行一次左移指令,被操作的数将最低位移入单片机的PSW寄存器的CY为,CY位中原来的数丢弃,最高位补0,其它位依次向右移动一位。
PIC指令集
![PIC指令集](https://img.taocdn.com/s3/m/6fcc4ce0c8d376eeafaa3113.png)
PIC指令集NOP 空操作指令执行时间:1个指令周期执行过程:除了消耗单片机一个指令周期外,没有任何其他影响。
说明:NOP指令归属于字节操作是个特例,因为该指令的执行没有任何操作数参与,其结果也不影响任何其他寄存器。
一般用于指令运行过程中的延时。
MOVWF 把W寄存器的内容传送至数据寄存器中语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7f)执行时间:1个指令周期执行过程:把W寄存器的内容传送至数据寄存器中,W寄存器的内容保持不变说明:该指令是用于对数据寄存器赋值的最主要方式MOVF 把数据寄存器的内容传送至目的寄存器语法形式:MOVF f, d操作数: f为数据寄存器的低7位地址(0x00~0x7f)d=w,把数据寄存器的内容传送至W寄存器d=f,把数据寄存器内容放回自己本身,目的在于判断数据寄存器的内容是否为0执行时间:1个指令周期执行过程:[f] d说明:该指令可以通过W寄存器把数据寄存器的内容传送至它处,或对数据寄存器做判0操作。
如果传送的数据为0,则置位Z标志。
CLRW W寄存器的内容清0语法形式:CLRW执行时间:1个周期执行过程:0x00 W 1 Z状态标志影响:Z说明:该指令对W寄存器清0,同时置位0标志Z另外有一条指令movlw 0x00 也可以使W寄存器清0,但不影响任何状态标志。
指令范例:CLRWCLRF 数据寄存器的内容清0语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7f)指令编码:00 0001 1fff ffff执行时间:1个指令周期执行过程:0x00 f1 Z状态标志影响:Z说明:该指令对数据寄存器清0,同时置位0 标志Z指令范例:CLRF TRISBSUBWF 数据寄存器的内容和W寄存器相减语法形式:SUBWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0010 dfff ffff执行时间:1个指令周期执行过程:[f]-[W] d状态标志影响:Z DC C说明:必须特别注意W寄存器在这条减法指令里是减数如果f=W,相减的的结果为零,则Z=1如果f>W,没有借位发生,则C=1如果f<W ,有借位发生,则C=0实际上在PIC单片机内部这条减法指令的执行是先对W寄存器求补码,然后与被减数相加,所以判别是否有借位标志时和其他常见的单片机正好相反,编写程序时要千万小心指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W;W=tmp – W=0xf1,tmp=0x23;tmp< W,所以C=0ADDWF 数据寄存器的内容和W寄存器相加语法形式:ADDWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0111 dfff ffff执行时间:1个指令周期执行过程:[f]+[W] d状态标志影响:Z DC C说明:数据寄存器的内容和W寄存器相加,结果按照d指定的目的地存放指令范例:MOVLW 0x55 ;W=0x55,假定Sum=0xaaADDWF Sum,f ;W不变,Sum=0xffIORWF 数据寄存器的内容和W寄存器做逻辑或操作语法形式:IORWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0100 dfff ffff执行过程:[f] | [W] d状态标志影响:Z说明:数据寄存器的内容和W寄存器相或,结果按照d指定的目的地存放。
指令PIC的指令详解
![指令PIC的指令详解](https://img.taocdn.com/s3/m/38babdee951ea76e58fafab069dc5022aaea4608.png)
伪指令#i nclud e p16f877a.inclistp=16f877a,r=dec__co nfig__idl ocs(用户利用它存放程序版本或日期等) __id locs0x1234err orlev el 0,-302,-305(编译信息输出显示等级及对对某些信息的单独设定)#defi ne/#u ndefi ne #d efine KEY1 PORT B,7e qu w_tempequ 0x20c block+endc: cbl ock 0x20 w_temp buff er:8var1endcorg 0x00d t(定义表格数据代替retl w)tab le a ddwfpcl,fdt 0dt 1,2,'3';ret lw 1;retlw 2 ;ret lw 0x33('3')dt"abc" ;r etlw'a' ;re tlw 'b' ;ret lw 'c'de(源程序中定义片内ee prom的初值其实地址0x2100)org 0x2100de 0,1,2,3de "ABCD";定义8个字节f ill(填充程序空间) fil l 0x0000,5fill(goto $),n ext_b loclk-$ (从当前填充至标号nex t)死循环end宏指令banks el、pa gesel、bank isel、clrc、setc、clrz、setz、clrdc、setd c、skp c、skp nc、sk pdc、s kpndc、bc、b nc、bz、bnz、bdc、b ndcm acro自定义宏1.ADD LITE RAL T O WA DDLWK (W)+K->W加立即数至WADD LW 0X15W=0X10->0X252.AD D W T O FA DDWFF,D ((W)+(F)->W/F)A DDWFREG1,0 ADD WF FS R,13.ADDW AND CARR Y D T O FA DDWFC F,DADDWF C FSR,1 (W+FSR+C->FS R)4.AND L ITERA L AND WAN DLW KANDL W 0x5F((W)并0x5F->W)5.AND W WI TH FANDWF F,DANDWF FSR1 (W并FSR->W/F)6.BIT CLEA R FB CF F,BBCF FLAG_REG,7 将FL AG_RE G的D7清07.B IT SE T FB SF F,BBSF PROT A,0 PROT A的D0置18.BIT T EST,S KIP I F CLE ARBT FSC F,BBT FSC F LAG,1 FALS E TRU E位测试0跳转9.BITTEST,SKIPIF SE TBTF SS F,BBTF SS FL AG,1FALSE TRUE位测试1跳转10.BITTOGGL E FB TG F,BBTG PROT C,4 位取反 PO RTC=0111 0101->0110010111.SU BROUT INE C ALLC ALL 调用子程序12.CL EAR FCLRF FLAG_REG(F清零置Z=1)13.C LEARW REG ISTERCLRW (W清零置Z=1)14.CLEAR WATC HDOGTIMERCLRW DT(监视定时器清零 00h->WDT0->WD T预定标器 1->T O' 1->PD') 15.C OMPLE MENTFCOM F REG1,0(寄存器内容取反->W/F)1P ARE F WITH W,SH IP IF F=WCPFS EQ R EG1P ARE F WITH W,SH IP IF F>WCPFSG T REG18.C OMPAR E F W ITH W,SHIP IF F<WCP FSLTREG19.DEC IMALADJUS T W R EGIST ERD AW RE G1,0(对F中内容进行10进制调整->F/W+F)RE G1=0X A5 C=0 DC=0->0X05 C=1 DC=020.DECRE MENTFDEC F CNT,1(寄存器内容减1->W/F)21.DECRE MENTF,SHI P IF0DEC FSZ C NT,1GOTO...C ONTIN UE ...(减1后为0跳转至CONTI NUE)22.DE CREME NT F,SHIOIF NO T 0D ECFSN Z CNT,0GO TO ...CON TINUE ...(减1后不为0跳转至C ONTIN UE)23.UNC ONDIT IONAL BRAN CH24.I NCREM ENT FINCF CNT,1(指令加1)CN T=0XF F Z=0 ->CN T=0X00 Z=1 C=125.IN CREME NT F,SHIPIF 0INCFS Z F,D26.I NCREM ENT F,SHIP IF N OT 0INCFS NZ F,D27.INCLU SIVEOR LI TERAL WITH WIO RLW 0X35((W)或0X35->W)28.INCLU SIVEOR WWITHFIOR WF RE SULT,1 ((W)或RES ULT->RESUL T)29.LONG CALL长调用指令???和CALL有区别???MOV LW HI GH 高位地址MO VPF W REG,P CLATH存放在P CLATH中LCA LL LO W 调用子程序(指令只含低8位地址)30.MOV E FM OVF R EG,0((REG)->W)31.M OVE F TO PMOVF P F,P (F:00H-FF H P:00H-1F H)MO VFP R EG1,R EG2把数据存储单元传至某外围接口寄存器内容32.MOV E LIT ERALTO LO W NIB BLE I N BSRMOVL B 0XA5 BSR=0X22->0X25(传立即数至BSR寄存器低4位高4位为0) 33.MOV E LIT ERALTO HI GH NI BBLEIN BS RMOV LR 5BSR=0X22->0X52(传至高4位低4位为0)34.MOV E LIT ERALTO WMOVLW 0X5A W=0X5A (立即数传至W)35.MOVEP TOFMOV PF RE G1,RE G2 (F:00H-FFHP:00H-1FH)把某外围接口寄存器内容传至数据存储单元36.M OVE W TO FMOVW F REG ((W)->REG)37.NEGAT E WN EGW R EG 0(REG取反->F/F+W)取反的规则???P25138.NO OP ERATI ONNO P无操作占用一个指令周期PC+139.LO AD OP TIONREGIS TER(W)->O PTION只为可移植至PIC16C6X不建议使用40.RETUR N FRO M INT ERRUP TRET FIE TOS->PC 1->GIE(中断允许位GIE开放中断)指令周期241.RE TURNLITER AL TO WK->W TOS->PC(立即数传至W并返回地址至PC)指令周期2 CAL L TAB LETA BLE ADDW F PCRETL W K1RETL W K2...RETL W KN->W=0X07->W=K7?42.RE TURNFROMSUBRO UTINERETU RN (T OS->P C 指令周期2)43.ROT ATE L EFT F THRO UGH C ARRYRLF F,D/RL CF F,DF(N)->D(N+1)F(7)->C C->D(0)RLFREG1,0RE G1=1110 0110->1110 0110 C=0->1 W=1100 110044.ROTA TE LE FT FNO CA RRYR LNCF F,D无进位循环左移45.ROT ATE R IGHTF THR OUGHCARRYRRFF,D/R RCF F,DRR F REG1,0R EG1=1110 0110->11100110C=1->0 W=0111 001146.ROT ATE R IGHTF NOCARRYRRNC F F,D无进位循环右移47.SE T FS ETF F,SSE TF RE G,0W REG=0X05->0XFFREG=0XDA->0XFF48.SL EEPO OH->W DT 0->WDT预分频器1->TO'(定时时间) 0->PD'掉电状态49.SUBT RACTW FRO M LIT ERALSUBLW KK-(W)->WMOV LW 01HSUB LW 02H W=01H C=1结果为正MOV LW 02HSU BLW 02H W=0 C=1结果为0MOVL W 02HSUBL W 01H W=FF C=0结果为负50.SU BTRAC T W F ROM FSUBW F F,DM OVWFREG1MOVLW 2SU BWF R EG1,0 W=1C=1MOVLW 2MO VWF R EG1M OVLW2SUB WF RE G1,0W=0 C=1M OVLW2MOV WF RE G1MO VLW 3SUBW F REG1,0 W=FF C=051.SUB TRACT W FR OM FWITHBORRO WSUB WFB F,D(F)-(W)-C->F/W带借位F-W减法MOVL W 4M OVWFREG1MOVWF REG1MOVL W 2S UBWFB REG1,0 设C初始为1则W=1C=152.SWA P FS WAPFF,DS WAPFREG1,1REG1=0XA5->0X A5 W=0X5AREG1=0X5A?53.TA BLE R EADT ABLRD T,I,FTAB LRD 1,1,RE GREG=OX53->0XA A TBL ATH=0XAA->0X12TBLAT L=0X55->0X34TB LPTR=0XA356->0X A3567存储单元=0X1234->0X5678传高字节???TBLA T中一个字节传至FT=0传高字节 T=1传低字节;TBLP TR指向的程序存储单元内容传至表锁存器T BLAT;I=1 T BLPTR+1 I=0 TBL PTR不变存储单元的值为何改变?????周期2若F=PC则3周期54.TABLE WRIT ETA BWT T,I,FTABWT 0,1,REGR EG=0X53->0X53 T BLATH=0XAA->0X53 TBL ATL=0X55->0X55TBLP TR=0X A356->0XA357存储单元=0XF FFF->0X5355F值传至16为T BLAT表锁存器T=0传低字节 T=1传至高字节;TBLA T内容写入TBLPT R指向的程序存储器单元;I=1 TBLP TR+1I=0 T BLPTR不变指令周期2若F=PC 这周期355.TAB LE LA TCH R EADT LRD T,F 表锁存读T BLATH=0X00 TBLA TL=0X AF T=0 RAM=0XAF TBLA TH=0X00 TB LATL=0XAF56.TA BLE L ATCHWRITETLWT T,F表锁存写RAM=0XB7 T BLATH=0X00 TBLA TL=0X00 T=0 RAM=0XB7 TBLA TH=0X00 TB LATL=0XB757.LO AD TR IS RE GISTE R I/O控制寄存器TRIS设置指令不建议使用58.T EST F,SKIP IF 0TSTF SZ CN T F等于0跳转G OTO ...(CN T!=0)ZERO (CNT==0)59.EX CLUSI VE OR LITE RAL W ITH WXORL W K (W)异或K->WX ORLW0XAFW=0XB5->0X1A60.EXCL USIVE OR W WITH FXO RWF F D (W)异或(F)->(W)(F)XORWF REG1,1W=0XB5->0XB5 REG1=0XAF->0X1A直观助记符:BCF 3,0(进位位C清零)=CLRCBSF3,0(进位位C置1)=SET CCLR DC BC F 3,1SETD C BSF 3,1CLRZBCF 3,2SE TZ BS F 3,2SKPC(有进位间跳)=BT FSS 3,0SK PNC(无进位间跳)=BTFS C 3,0SKPD C BTF SS 3,1SKP NDC B TFSC3,1S KPZ B TFSS3,2S KPNZBTFS C 3,2影响Z???TS TF F(测试寄存器是否全零)=MOV F F,1影响ZMOVF W F((F)->W) MOV F F,0影响ZNEGFF,D取补码COM F F,1影响ZADDCF F,D内容加进位BTFSC 3,0影响Z ???为0跳转IN CF F,DSUB CF F,D内容减进位BTF SC 3,0DECF F,DADDDC F F,D BTF SC 3,1INCFF,DS UBDCF F,DBTFS C 3,1D ECF F,DB K 无条件转移GOTO KBC K 有进位转移BTFSC 3,0GO TO KBNC K无进位转移BTF SS 3,0GOTOKBDC K BTF SC 3,1GOTO KBN DC KBT FSS 3,1GOTO KBZ K BTFS C 3,2G OTO KBNZK B TFSS3,2GOT O K清零CL RW CL RF CL RWDT算术运算ADDLW K A DDWFF,D S UBLWK SU BWF F,D DE CF F,D INC F F,D逻辑运算ANDL W K ANDWF F,DIORLW K或I ORWFF,D X ORLWK异或XORWF F,DRLF F,D RRF F,D MOVLW K M OVF F,D MO VWF F NOP半字节交换指令SW APF F,D可用于中断现场保护:MOV F W-T EMP S WAPFSTATU S,W MOVWF S-TE MP-->SWAPF S-TE MP,WSWAPF STAT US,WSWAPF W-TE MP,W(W置于后一操作数?)子程序调用CAL L G OTO跳转(CAL L都是无返回值的?C ALL的子程序都是无参数?)取反COM F F,DDECF SZ F,D INC FSZ F,D位操作BSFF,B BCF F,B B TFSSF,B B TFSCF,B返回RETL W K R ETURN SLE EP RE TFIE(RETUR N FRO MINT ERRUP T WIT H ENA BLE)懒得算延时:3X Y+4X+5(x外循环Y内循环)255-->19610020mhz 0.05us T=0.2us1、程序的基本格式先介绍二条伪指令:EQ U ——标号赋值伪指令O RG ——地址定义伪指令PIC16C5X在R ESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFHP IC16C57/58:7FFH一般来说,PI C的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。
指令周期名词解释
![指令周期名词解释](https://img.taocdn.com/s3/m/e635cca0d1d233d4b14e852458fb770bf78a3b98.png)
指令周期名词解释
指令周期是取出一条指令并执行这条指令的时间。
一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
指令周期类型有非访内指令的指令周期、取数指令的指令周期、存数指令的指令周期、空操作指令和转移指令的指令周期。
指令周期,读取-执行周期是指CPU要执行指令经过的步骤。
计算机之所以能自动地工作,是因为CPU能从存放程序的内存里取出一条指令并执行这条指令;紧接着又是取指令,执行指令,如此周而复始,构成了一个封闭的循环。
除非遇到停机指令,否则这个循环将一直继续下去。
指令周期:CPU从内存取出一条指令并执行这条指令的时间总和。
CPU周期:又称机器周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。
时钟周期: 通常称为节拍脉冲或T周期。
一个CPU周期包含若干个时钟周期。
PIC11定时器/计数器TMR1解析教学提纲
![PIC11定时器/计数器TMR1解析教学提纲](https://img.taocdn.com/s3/m/b3ce848114791711cd791776.png)
工作在异步计数器方式期间,对于TMR1寄 存器对的读取、写入操作应特别注意。
①读取操作:当对寄存器对TMR1H~TMR1L进行 读操作时,可以分两次进行。但是,在读取期间 存在TMR1的低字节向高字节产生进位的可能性。
➢ 此 时 TMR1H:TMR1L 可 能 正 巧 发 生 从 00FFH 到 0100H或从FFFFH到0000H之类的递增。
MOVWF TMR1L
MOVLW TMR1HB ;TMR1高字节赋初值
MOVWF TMR1H
MOVF COUNT,0 ;COUNT作为查表地址偏移量送W
CALL READ
;调用读取显示信息子程序
MOVWF PORTC ;将查表得到的驱动码送显
INCF COUNT,1 ;计数器加1
MOVLW D'40'
;表中只有40个元素,计数值只能=0~39
SUBWF COUNT,0 ;检查计数器=40?
;BTFSC STATUS, Z ;否!跳一步
CLRF COUNT
;是!应该回到0
RETFIE
; 中断返回
;****** *****************************
MAIN BSF STATUS, RP0 ;设置文件寄存器的体1
⑺一个施密特触发器G2,用于对来自外部引脚的触 发信号或自带振荡器产生的时钟信号进行整形。
⑻一个由受控三态门G3构成的独立的低频低功耗晶 体振荡器,用来为TMR1提供独立于系统时钟的时 间基准信号,如图3.4所示。
只 有 当 使 能 端 T1OSCEN 为 高 电 平 时 , 振 荡器才能够工作;而当T1OSCEN为低电平时, 非门G3的输出端呈现高阻状态,振荡器不能工 作,此时,工作于计数器方式的TMR1的触发信 号,从T1OSO端加入。
- 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 指令。
【休息,听我讲一个故事】
从前…,有个笨财主请了个先生教他的笨蛋儿子,先生第一天教这个笨蛋小子“一”,第二天教会“二”,第三天教会“三”
第四天,这小子按耐不住了,对他爸说,我会了,不要先生了。
于是把先生炒了。
第五天,财主让儿子写请帖,请一个姓“万”的人,来赴宴。
儿子累了半天没写完,老子问个究竟:
儿子说:这个人偏偏姓万,我要写一万个“一”,才能把姓写完…
老子说:真笨,你拿笤帚蘸墨,一下不就可以写出好多“一”…
下一讲,我们来学习“用笤帚蘸墨,一下写出好多个一”来…..
下一将:【延时子程序】。