Presentation is loading. Please wait.

Presentation is loading. Please wait.

第3章 PIC单片机指令系统 在第2章简要介绍PIC16F8系列单片机的基本结构基础上,如何基于硬件进行相关的程序设计是一重要的目标和任务,传统书籍通常从理论(包括数据类型、寻址方式等)到具体指令分类,再到详细分析,通常是比较抽象的讲述。本章直接从组成单片机指令的构造、组成单片机的源程序及机器码,到广泛的单片机指令集详解。回避了一些复杂抽象的问题,深入浅出。这一点对于初学者尤其重要。

Similar presentations


Presentation on theme: "第3章 PIC单片机指令系统 在第2章简要介绍PIC16F8系列单片机的基本结构基础上,如何基于硬件进行相关的程序设计是一重要的目标和任务,传统书籍通常从理论(包括数据类型、寻址方式等)到具体指令分类,再到详细分析,通常是比较抽象的讲述。本章直接从组成单片机指令的构造、组成单片机的源程序及机器码,到广泛的单片机指令集详解。回避了一些复杂抽象的问题,深入浅出。这一点对于初学者尤其重要。"— Presentation transcript:

1 第3章 PIC单片机指令系统 在第2章简要介绍PIC16F8系列单片机的基本结构基础上,如何基于硬件进行相关的程序设计是一重要的目标和任务,传统书籍通常从理论(包括数据类型、寻址方式等)到具体指令分类,再到详细分析,通常是比较抽象的讲述。本章直接从组成单片机指令的构造、组成单片机的源程序及机器码,到广泛的单片机指令集详解。回避了一些复杂抽象的问题,深入浅出。这一点对于初学者尤其重要。

2 3.1 PIC系列单片机源程序与机器码 3.1.1 PIC单片机指令构成
PIC单片机是由美国Microchip公司开发的8位单片机。PIC单片机采用指令总线和数据总线分开的哈佛双总线结构,避免了瓶颈现象。PIC单片机根据指令长度的大小分为三类,基本型的指令长度为12位(编号PIC12CXX,16C5X)、中级型的指令长度为14位(编号PIC16C6X,16C7X,16F87X)、高级型的指令长度为16位(编号PIC17CXX,18CXX)。本书主要研究PIC16F8XX系列的单片机,其PIC系列单片机的指令均由14位长组成,全部指令有35条以上,但根据其内部结构可进行大的3个分类。图3.1示出其3大类指令。其3大类为 (1) 字节处理指令 (2) Bit位处理指令 (3) literal直定数处理指令。这样分类有利于软件开发者记忆和使用方便。以下对图3.1所示指令构造进行说明。 图3.1 PIC的指令构造分类

3 1.首先,指令均由14位构成。这种构成可使程序存储器一个地址就存储一条指令。通常这种指令也称为单字节指令。具有此特征的Microcomputer Chip通常也被称为RISC构造。
2.由程序计数器指定程序存储器的地址,读出指令,执行指令。在执行指令时,首先解读指令码,根据指令码判断指令的种类。 3.读出指令如属于(a)构造,即判断该指令是以演算为中心的指令。f指定寄存器的地址,所存数据作为被运算对象。另外指令中d代表指令执行后结果存储的场所。f具有7 位长,可指定地址范围可达128。 在不足时,PIC通过Bank分类方式,使得指定范围可达128×4. 详细说明见PIC内存结构图。 4.读出指令如属于(b)构造,即判断该指令属Bit位运算指令。是对f指定寄存器的数据的第b Bit位进行操作运算。存储数据的寄存器均为8 位长度,使用b为3位长即可对整个8 位进行运算。 5.读出指令如属于(c)构造,即判断该指令属literal直定数处理指令。常数k为演算对象。 因k仅为8 位位长,k的大小仅限于8 位能表示的常数内。请注意,在执行跳转指令时,由于k为8 位位长,跳转范围仅在最大256内。跳转在256以上范围时,PIC采用了页分类功能来解决这个问题。具体详细说明见PIC内存结构图。

4 3.1.2 PIC指令书写方法 PIC单片机的指令一般采用下面的书写方法。PIC指令的基本原则是要简洁,阅读容易。 一条指令可分为4个部分。指令书写格式如下 Lable Mnemonic Operand Comment 1.Lable Lable部分是从指令行的开头书写的记号。它通常作为跳转指令所指定的跳转目标地址。不必要时,可不书写。Lable部分必须由行头开始书写,内容可包含所有英文字母、数字等。Lable部分长度必须为32文字以下。字母大小写代表不同的Lable。也可设定编程环境,设置大小书写无区别。 2.Mnemonic Mnemonic部分就是要执行的指令的记号。书写编辑指令和指示指令必须从行头空一个Space以上。在有Lable部分时,必须在Lable后空一个Space以上或书写上( : ),再书写指令。 3.Operand Operand部分是指令所要处理,运算的对象,数据等。书写Operand时,必须在Mnemonic与Operand间留有一个以上Space。另外,在多个Operand的情况下,使用( ,)来分离。 Opearnd部分具有多种记号如下 d : 指令执行后结果存储场所指定。d为0时,结果送入Wreg,d为1时寄存器 f : 寄存器地址指定寄存器。 k : 常数. 范围0 〜 255 间。 b : Bit位置指定。最低位0,最高位7。 4.Comment Comment为注译部分。在( : )后的文字全为注译。在行头书写上( : )后整行均为注译部分。该部分可有可无,完全不影响程序的编译,指令的动作。仅为程序员记忆,阅读,理解方便所用。

5 3.1.3源程序与机器码 在单片微机中,规定了一系列用于编写程序的语句和应该遵循的语法规则。人们根据一种语言给定的语句及语法规则就可以写出程序,计算机则通过执行已经编好的程序来完成人们要求它完成的各种功能。PIC单片机提供了一整套的指令系统。在PIC单片机通用的语言就是汇编语言。汇编语言和高级语言有较大的差别。汇编语言的语句与机器的种类和型号密切相关,而高级语言完成某种功能,只要算法正确,具体实施则相对自由。 1)机器码 机器语言也可以称为机器码,机器语言是计算机可以直接执行的一条指令,这些指令以二进制代码的形式表示。 要单片机完成一项基本任务,必须将任务分解成一些具体步骤,再要求它去逐项执行每个步骤,还要对它下指令。该指令在单片机术语中称为“指令”(Instruction)。完成一项任务所需的所有指令的有序集合就称为“程序”(Programm)。这些指令要预先一条一条顺序地放到单片机的程序存贮器中,单片机在运行时,片中的CPU从程序存贮器中逐条有序取出指令,执行指令,并将有关指令执行完毕,即可完成既定任务。 不同种类的单片机有不同的一套指令(即所谓“指令系统”)。PIC系列的单片机其指令系统与51系列的完全不同。PIC16F84有30余条指令构成的指令系统。每条指令由14位(bit)构成,这些位是二进制码的0和1,如果要使16F84端口B的B0位输出高电平,以点亮一只发光二极管LED,而B口的其余各位仍保持低电平,则需要使单片机执行下列各条指令(机器码):               

6 早先的技术人员就是用这样的二进制码来编写程序的。这种程序,看起来像天书,很费解,但它完全能指挥单片机的运作。因为单片机实际上是一种复杂的数字逻辑电路。要数字电路运作,必须相应输入高、低电平,对正逻辑而言,高电平为1,低电平为0。上述指令顺序在不同的数位上出现的0和1,经译码后,即可完成各种不同的运作,逐步完成单片机所要执行的任务,如点亮一个LED。 上述各条指令的写法,完全面向单片机,是用来直接指示单片机该如何运作的。因此,这种由0、1组成的指令称为机器语言。实际上,这种由二进码构成的指令集不但难读懂,而且用来编程也有困难。因为程序往往不是从头到尾顺序执行,有时还需中途转移到其它单元执行一段程序后再返回来。而指令是一条一条顺序存放在存贮器各个单元内的。因此,如果要转移,需指明具体转到哪个单元,即要写出该单元的地址。但在编写程序时,该程序有多长,具体要放到哪些单元中,都是未知数,又怎能具体指明要转到哪个单元呢?

7 2.汇编语言 由于用机器语言会使程序难写、难读,后来一种新型的语言形式——汇编语言就问世了。使用这种语言写程序较方便,也比较容易读懂。不过,和机器语言一样,不同类型的单片机有完全不同的汇编语言。就如不同地区的人有不同的方言一样。在汇编语言中,转移地址是用符号来表示的。把上面由机器语言写成的程序改写成由汇编语言构成的程序:   movlw B‘ ’   tris PORT B   movlw B‘ ’   movwf PORT B fin: goto   fin 上列各条指令实际上是英语缩写和一些数组成的。如第一条中的movlw就是move Literal to w的缩写,其意义为照原样移入工作寄存器W,而“原样”就是后接引号内的数字‘ ’。引号前的B表示后续的是二进制数。第二句是将W内的数复制到B口的三态(tri-state)控制寄存器中,以设定B口为输出,然后将 送入W中,再复制到B口;最后执行一条无限循环语句以保持B口的状态不变。从单片机外部看去,16F84的第6脚(即B0)维持为高电平,以点亮LED。 由上例可知,汇编语言较之机器语言要好懂得多。同时,最后一句自身循环也是一种转移语句,转移目的地就是此句所在单元地址,如用机器语言,就难以标出具体地址,而用汇编语言助记符fin即可替代。

8 3.源程序 为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。

9 3.1.4 PIC系列8位单片机源程序的组成 10_config_RC_OSC&_WDT_OFF&_PWRTE_ON 11Program
PIC系列单片机的源程序是指PIC的助记符指令编写的程序(汇编语言程序)。下面对PIC源程序的格式要求和源程序的书写作简要的介绍。 一般来说对PIC的源程序格式并没有统一的要求,用户可以根据习惯来编写,当然编写时应遵守汇编的一些规范。下面以PIC16F84芯片点亮一支发光二极管的汇编程序实例,介绍一种源程序编写的方法(格式)。 源程序清单   1File TURNON.ASM   2Assembly code for PIC16F84 microcontroller   3Turns on an LED connected to B0   4Uses RC oscillator,about 100kHz   5CPU configuration   6(it’s a 16F84,RC oscillator   7watchdog timer off,power-up timer on)   8processor 16F84   9include <p16F84inc> 10_config_RC_OSC&_WDT_OFF&_PWRTE_ON   11Program   12org 0;start at address 0   13At startup,all ports are inputs   14Set Port B to all outputs   15movlw B‘ ’;w=binary

10 源程序清单逐行加以说明: 17Put a 1 in the lowest bit of port B
16tris Portb     ;copy w to port B control reg   17Put a 1 in the lowest bit of port B   18movlw B‘ ’;w=binary 19movwf portb    ;copy w to port B itself   20Stop by going into an endless loop   21fin:goto fin   22end ;program ends here 源程序清单逐行加以说明: 第1行为文件(File)名,这里取名TURNONASM。TURNON意指一个接通(即接通LED)程序。ASM是源程序的扩展名。 第2行说明是由适用于PIC16F84微控制器的汇编码编写的源程序。 第3行说明程序用途是接通PIC16F84 PORTB的B0位LED。 第4行说明由RC振荡器供给时钟,频率约为100kHz。 第5、6、7行说明对16F84 CPU的结构设置(用RC振荡器,看门狗定时器即watchdog timer关,上电power-up定时器开,关于16F84的结构设置,后面将详谈)。 第8、9、10行为伪指令。这是用来向汇编程序提供有关如何完成汇编的控制指令信息,它既是汇编过程的控制指令,也是汇编程序的操作指令。在这里8、9、10行还向汇编程序说明,单片机用的是16F84,用RC振荡器、看门狗定时器关断不用,但上电定时器接通使用。对照5、6行,可见二者内容相同,但一个是注释,专门为用户说明,另一个是伪指令,是为PC机的汇编程序提供指令信息。 第11行又是注释,说明程序主体由此开始。

11 第12行说明程序存放在由地址0开始的16F84单片机中的程序存贮器中,也是一条伪指令。
第13、14两行为注释,说明后续的一段指令(两句)的作用,即在启动时,所有端口为输入,随即将B口设定为全输出(即各位均为输出)。 第15行是汇编语言编写的第一条指令,即对二进制(B)数“ ”存入工作寄存器W。 第16行将W寄存器的内容(即 )传送到B口控制寄存器,使B口成为输出口。15、16行均带有注释。   第17行为注释,说明下面的二条指令是使B口的最低位为1。 第18行的指令将二进制数 送入工作寄存器W,第19行指令则将W寄存器的内容复制到B口,则B口的最低位B0为高电平,其余各位则为低电平,使接到B0位的LED发光。 第20行又是注释。说明下面的指令将使B0位为高的状态继续下去。 第21行的指令为无限循环语句,维持B1口输出为高不变。 第22行是伪指令END,表明程序到此结束。

12 BCF STATUS,5;STATUS,5复位 MOVW 0xAA ;可使B口的 LED间亮 MOVWF PORTB ;B口输出10
编写PIC单片机的源程序,除了源程序的开始处要求严格的列表指令外,还需注意源程序中字母符号大小写的有关规则,否则在PC机上汇编源程序时不会成功。笔者用下列的PIC16F84单片机对B口送数的源程序(源程序各自定义)为实例,说明需注意的问题。  LIST    P=PIC16F84  #INCLUDE P16F84INC  ORG START CLRW       ;起始地址  BSF STATUS,5 ;选体1  MOVWF  TRISB  ;置B口为输出    BCF    STATUS,5;STATUS,5复位  MOVW   0xAA  ;可使B口的              LED间亮  MOVWF  PORTB ;B口输出10              LOOP GOTO   LOOP  END 述源程序中因用了伪指令INCLUDE,在这里是指把列表指定的PIC16F84文件(在MPLAB中)读入源程序作为上述源程序的一部分,所以凡是MPLAB中有关PIC16F84已有的寄存器在上述源程序中无需再用赋值指令(EQU)赋值,这就使所建立的源程序大为简化。 此外,由于有了伪指令INCLUDE,所以根据MPLAB软件中的格式,在源程序中的操作数凡是涉及MPLAB已规定的寄存器名称,其字母一律只能大写,不能小写,其余操作码、标号字母可任意大小写,但0x中的x应小写,否则汇编不会成功。鉴于上述原因,为了书写方便,所以在使用MPLAB软件时,PIC单片机的源程序均用大写字母为宜(0x例外)。

13 3.2软件指令集 3.2.1 Byte处理指令集 Byte指令集如图3.2所示

14 图3.2 Byte指令集

15 3.2.2 Bit位处理指令集 Bit指令集如图3.3所示 图3.3 Bit指令集

16 3.2.3 Literal处理指令集 Literal指令集如图3.3所示 图3.4 Literal指令集 图3.4 Literal指令集

17 3.3 软件指令功能详解 本节将对PIC所使用的指令进行分类说明。通常PIC单片机的指令可分为数据转移指令、ALU逻辑与算术指令、位寻址指令、跳转指令及其他指令5大类。其中大部分的ALU逻辑与算术运算指令能够将指令的读取、改变与更新(read-modify-update)在一个指令周期内完成。 以下说明按指令的开头字母为序。具体如下

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35


Download ppt "第3章 PIC单片机指令系统 在第2章简要介绍PIC16F8系列单片机的基本结构基础上,如何基于硬件进行相关的程序设计是一重要的目标和任务,传统书籍通常从理论(包括数据类型、寻址方式等)到具体指令分类,再到详细分析,通常是比较抽象的讲述。本章直接从组成单片机指令的构造、组成单片机的源程序及机器码,到广泛的单片机指令集详解。回避了一些复杂抽象的问题,深入浅出。这一点对于初学者尤其重要。"

Similar presentations


Ads by Google