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

Slides:



Advertisements
Similar presentations

Advertisements

嵌入式系统与单片机 北京科技大学电子信息系.
信息技术:硬件、软件、网络、数据库 计算机技术、多媒体技术、压缩技术...
2017年3月5日 单片机原理与应用 背景知识调查.
实验四 利用中规模芯片设计时序电路(二).
Oracle数据库 Oracle 子程序.
1.1 计算机系统简介 1.2 计算机的基本组成 1.3 计算机硬件的主要技术指标 1.4 本书结构.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
PIC16F1827介紹 以微控器為基礎之電路設計實務-微處理器實驗室.
Hadoop I/O By ShiChaojie.
第二讲 搭建Java Web开发环境 主讲人:孙娜
走进编程 程序的顺序结构(二).
辅导课程六.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月20日.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
时序逻辑电路实验 一、 实验目的 1.熟悉集成计数器的功能和使用方法; 2.利用集成计数器设计任意进制计数器。 二、实验原理
第二章 Java语言基础.
逆向工程-汇编语言
CPU结构和功能.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第7章 在C/C++中使用汇编 罗文坚 中国科大 计算机学院
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
微机系统的组成.
工业机器人技术基础及应用 主讲人:顾老师
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
姚金宇 MIT SCHEME 使用说明 姚金宇
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
College of Computer Science & Technology
Visual Basic程序设计 第13章 访问数据库
Topic 1 Welcome to China! Section A.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
4.1 计算机语言概述 机器语言 机器语言就是用二进制编码表示每条指令。因为计算机只能识别二进制数,所以计算机能够直接执行用机器语言编出的机器码程序。不同种类的计算机,由于其内部结构不完全相同,它的机器码指令也不一定相同。
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
数据表示 第 2 讲.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
DSP技术与应用 电子与信息技术系.
Presentation transcript:

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

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的指令构造分类

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内存结构图。

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为注译部分。在( : )后的文字全为注译。在行头书写上( : )后整行均为注译部分。该部分可有可无,完全不影响程序的编译,指令的动作。仅为程序员记忆,阅读,理解方便所用。

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

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

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

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

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‘00000000’;w=binary 00000000

源程序清单逐行加以说明: 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‘00000001’;w=binary 00000001 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行又是注释,说明程序主体由此开始。

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

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

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

图3.2 Byte指令集

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

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

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