收藏 分销(赏)

PIC汇编语言程序设计基础.pptx

上传人:a199****6536 文档编号:4841360 上传时间:2024-10-14 格式:PPTX 页数:65 大小:1.49MB
下载 相关 举报
PIC汇编语言程序设计基础.pptx_第1页
第1页 / 共65页
PIC汇编语言程序设计基础.pptx_第2页
第2页 / 共65页
PIC汇编语言程序设计基础.pptx_第3页
第3页 / 共65页
PIC汇编语言程序设计基础.pptx_第4页
第4页 / 共65页
PIC汇编语言程序设计基础.pptx_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、第四章 PIC汇编语言程序设计基础l简介简介人人 汇编语言汇编语言 机器语言机器语言 单片机单片机 源程序源程序 汇编器汇编器 目标程序目标程序第四章 PIC汇编语言程序设计基础l简介简介机器语言:用二进制代码表示的能为计算机直接识机器语言:用二进制代码表示的能为计算机直接识别和执行的指令的集合。别和执行的指令的集合。汇编语言:采用便于人们记忆的符号或者字符串来汇编语言:采用便于人们记忆的符号或者字符串来表示操作码、操作数和地址码的符号语言。表示操作码、操作数和地址码的符号语言。源程序:用汇编语言编写的程序。源程序:用汇编语言编写的程序。目标程序:由源程序翻译成的机器语言程序。目标程序:由源程

2、序翻译成的机器语言程序。第四章 PIC汇编语言程序设计基础lMPASMMPASM汇编器简介汇编器简介第四章 PIC汇编语言程序设计基础lMPASMMPASM汇编器简介汇编器简介MPASMMPASM汇编器是美国汇编器是美国MicrochipMicrochip公司为其单片机应用公司为其单片机应用者、开发者提供的一套语言工具软件。者、开发者提供的一套语言工具软件。功能:将汇编语言源程序翻译成机器语言目标程序功能:将汇编语言源程序翻译成机器语言目标程序代码。代码。检察源程序中的语法错误或格式错误。检察源程序中的语法错误或格式错误。第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式

3、第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式对于对于PICPIC系列单片机,在编写源程序时必须依照所用汇编器的系列单片机,在编写源程序时必须依照所用汇编器的一些约定进行书写。例如使用一些约定进行书写。例如使用MicrochipMicrochip公司提供的公司提供的MPASMMPASM汇汇编器,汇编语言语句的一般格式由以下编器,汇编语言语句的一般格式由以下4 4个字段组成:个字段组成:标号标号 操作码(指令助记符)操作码(指令助记符)操作数操作数 ;注释;注释(labellabel)(opcode

4、opcode)(operandoperand)(commentcomment)这些字段不都是必需的,但其顺序是不能颠倒的;这些字段不都是必需的,但其顺序是不能颠倒的;标号必须从最左边第一列开始书写,其后至少用一个空格与标号必须从最左边第一列开始书写,其后至少用一个空格与操作码隔离;操作码隔离;在没有标号的语句中,指令操作码前面必须保留一个或一个在没有标号的语句中,指令操作码前面必须保留一个或一个以上的空格;以上的空格;第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式标号标号 操作码(指令助记符)操作码(指令助记符)操作数操作数 ;注释;注释(labellabel)(op

5、codeopcode)(operandoperand)(commentcomment)操作码与操作数之间也必须保留一个或一个以上的空格;操作码与操作数之间也必须保留一个或一个以上的空格;操作码后面如果跟随操作码后面如果跟随2 2个操作数的话,操作数之间必须用逗号个操作数的话,操作数之间必须用逗号(半角)隔开;(半角)隔开;在必要时可以加注释,注释可以跟在操作码、操作数或标号在必要时可以加注释,注释可以跟在操作码、操作数或标号之后,并用分号引导,甚至可以单独占用一行且可以从任何之后,并用分号引导,甚至可以单独占用一行且可以从任何一列开始。一列开始。汇编语言源程序既可以用大写字母书写,也可以用小写

6、字母汇编语言源程序既可以用大写字母书写,也可以用小写字母书写,还可以大写小写混用,以便于阅读。一个语句行最多书写,还可以大写小写混用,以便于阅读。一个语句行最多允许有允许有225225个(半角)字符。个(半角)字符。l汇编语言的语句格式汇编语言的语句格式标号标号用在指令助记符之前的标号就是该指令的符号地址,用在指令助记符之前的标号就是该指令的符号地址,在程序汇编时,它被赋以该指令在程序存储器中所存在程序汇编时,它被赋以该指令在程序存储器中所存放的具体地址。放的具体地址。并不是每一条语句都需要加标号,只有那些欲被其他并不是每一条语句都需要加标号,只有那些欲被其他语句引用的语句之前才需要加标号。语

7、句引用的语句之前才需要加标号。标号最多可以由标号最多可以由3232个字母、数字和其他一些字符组成,个字母、数字和其他一些字符组成,且第一个字符必须是字母或下划线且第一个字符必须是字母或下划线“”,标号不能用指令助记符、寄存器名称或其他在系统中标号不能用指令助记符、寄存器名称或其他在系统中已有固定用途的字符串(这些又称为系统保留字);已有固定用途的字符串(这些又称为系统保留字);一个标号在程序中只能定义一次。一个标号在程序中只能定义一次。标号必须从一行的第一列开始写,后面用空格、制表标号必须从一行的第一列开始写,后面用空格、制表符或换行符与操作码隔开;可以单独作为一行。符或换行符与操作码隔开;可

8、以单独作为一行。l汇编语言的语句格式汇编语言的语句格式操作码操作码这个字段不能是空的,操作码就是指令助记符,这个字段不能是空的,操作码就是指令助记符,它是指令功能名称的英文缩写,表示指令的操作它是指令功能名称的英文缩写,表示指令的操作类型和操作性质,是汇编语言语句中的关键词,类型和操作性质,是汇编语言语句中的关键词,因此不可缺省。因此不可缺省。指令操作码的助记符在汇编过程中,汇编器把它指令操作码的助记符在汇编过程中,汇编器把它与一个事先建立的操作码索引表进行逐一比较,与一个事先建立的操作码索引表进行逐一比较,找出相应的机器码,并且取而代之,所以这一汇找出相应的机器码,并且取而代之,所以这一汇编

9、过程又叫做代真。编过程又叫做代真。在其前面没有标号时,操作码前面至少保留一个在其前面没有标号时,操作码前面至少保留一个空格,即不能顶格书写,以便与标号区别,否则,空格,即不能顶格书写,以便与标号区别,否则,会被汇编器误认为是标号。会被汇编器误认为是标号。l汇编语言的语句格式汇编语言的语句格式操作数操作数该部分是操作对象,也就是数据或地址,可以用该部分是操作对象,也就是数据或地址,可以用数值形式或标号形式表示。数值形式或标号形式表示。数值可以是二进制、八进制、十进制、十六进制数值可以是二进制、八进制、十进制、十六进制数值或者数值或者 ASCllASCll字符值;字符值;标号可以是在此之前经过定义

10、或者赋值的代表数标号可以是在此之前经过定义或者赋值的代表数据或地址的标号或字符串。据或地址的标号或字符串。如果操作数有如果操作数有2 2个,中间应该用逗号分开。个,中间应该用逗号分开。MPASMMPASM的默认进制不是十进制,而是十六进制,的默认进制不是十进制,而是十六进制,这一点与许多其他单片机的汇编器不同,需要格这一点与许多其他单片机的汇编器不同,需要格外注意。外注意。操作数还可以是事先经过定义的符号以及表达式,操作数还可以是事先经过定义的符号以及表达式,若想进一步了解,请参考附录若想进一步了解,请参考附录C C。第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式十六

11、进制数由数字十六进制数由数字0 09 9和和字母字母A AF F组成。当在源程组成。当在源程序中采用后缀序中采用后缀“H H”表示一表示一个以个以A AF F打头的十六进制打头的十六进制数时,则必须在它的前面数时,则必须在它的前面增添一个增添一个“0 0”作为引导,作为引导,以便于汇编器将其与标号以便于汇编器将其与标号或符号名相区别。或符号名相区别。用字符代表的常数就是该用字符代表的常数就是该字符对应的字符对应的ASCllASCll码(即美码(即美国标准信息交换码,长度国标准信息交换码,长度为为7 7位,许多计算机原理书位,许多计算机原理书或高级语言程序设计书中或高级语言程序设计书中都能找到都

12、能找到 ASCllASCll表,也可表,也可以参考附录以参考附录I I)。)。第四章 PIC汇编语言程序设计基础l汇编语言的语句格式汇编语言的语句格式注释注释注释部分可有可无,但是最好养成附带注释的习惯。用来注释部分可有可无,但是最好养成附带注释的习惯。用来对程序作一些注解和说明,便于人们阅读、交流、修改和对程序作一些注解和说明,便于人们阅读、交流、修改和调试程序。调试程序。注释不是程序的功能部分,通常用分号(半角)引导或与注释不是程序的功能部分,通常用分号(半角)引导或与指令部分隔开,也可以单独书写为以分号(半角)开头的指令部分隔开,也可以单独书写为以分号(半角)开头的独立行,汇编器对该部分

13、不作任何处理。独立行,汇编器对该部分不作任何处理。加注释时,一般应该说明指令的作用和执行的条件,尤其加注释时,一般应该说明指令的作用和执行的条件,尤其要说明程序在做什么;在用到子程序时,要说明子程序的要说明程序在做什么;在用到子程序时,要说明子程序的入口条件和出口条件以及该程序完成的功能。入口条件和出口条件以及该程序完成的功能。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令汇编器能汇编器能“听得懂听得懂”的语言的语言伪指令。要让单片伪指令。要让单片机为我们服务,我们必须先学会它的语言机为我们服务,我们必须先学会它的语言指令指令系

14、统一样。系统一样。用来编写汇编语言源程序的语句,主要是指令助记用来编写汇编语言源程序的语句,主要是指令助记符(亦称指令性语句),其次就是伪指令(也叫指符(亦称指令性语句),其次就是伪指令(也叫指示性语句)。所谓伪指令就是示性语句)。所谓伪指令就是“假假”指令的意思,指令的意思,不是单片机的指令系统中的真实指令。不是单片机的指令系统中的真实指令。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令一般格式也由一般格式也由4 4个字段组成:个字段组成:符号名符号名 伪指令助记符伪指令助记符 操作数操作数 ;注释;注释符号名通常是代表专用寄存器名、通用寄存器变量、符号名通常是代表专用寄存器名、通

15、用寄存器变量、常数名、标志位或控制位名、复位矢量或中断矢量常数名、标志位或控制位名、复位矢量或中断矢量的一个字符串。符号名应从一行的第一列开始书写,的一个字符串。符号名应从一行的第一列开始书写,其后至少保留一个空格与伪指令隔离,但是,不能其后至少保留一个空格与伪指令隔离,但是,不能像标号那样单独作为一行书写。像标号那样单独作为一行书写。与指令系统中的助记符不同,没有机器码与伪指令与指令系统中的助记符不同,没有机器码与伪指令对应,当源程序被汇编成目标程序时,目标程序中对应,当源程序被汇编成目标程序时,目标程序中并不出现这些伪指令的代码,它们仅在汇编过程中并不出现这些伪指令的代码,它们仅在汇编过程

16、中起作用。起作用。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令伪指令是程序设计人员向汇编器发出的控制命令,伪指令是程序设计人员向汇编器发出的控制命令,告诉汇编器如何完成汇编过程和一些规定的操作,告诉汇编器如何完成汇编过程和一些规定的操作,以及控制汇编器的输入、输出和数据定位等。以及控制汇编器的输入、输出和数据定位等。对于对于MicrochipMicrochip公司为开发公司为开发PICPIC单片机提供的单片机提供的MPASMMPASM汇编器,可以使用的伪指令多达数十条,不过,初汇编器,可以使用的伪指令多达数十条,不过,初学者掌握以下几条最常用的伪指令即可满足一般编学者掌握以下几条最

17、常用的伪指令即可满足一般编程的需要(欲想深入了解更多的伪指令可以参考附程的需要(欲想深入了解更多的伪指令可以参考附录录C C)第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令1 1)EQUEQU符号名赋值伪指令符号名赋值伪指令格式:符号名格式:符号名 EQU nnEQU nn说明:使说明:使EQUEQU两端的值相等,即给符号名赋予一个两端的值相等,即给符号名赋予一个特定值,或者说是给符号名定义一个数值。特定值,或者说是给符号名定义一个数值。其中,其中,nnnn可以是一个长度不同的二进制数值(可以是一个长度不同的二进制数值(1 1位位的目标寄存器指示符的目标寄存器指示符d d的值、的值、

18、3 3位的标志位的位地址、位的标志位的位地址、7 7位的寄存器地址、位的寄存器地址、8 8位的数据常数、位的数据常数、1313位的复位或位的复位或中断矢量等)。中断矢量等)。一个符号名一旦由一个符号名一旦由EQUEQU赋值,其值就固定下来了,赋值,其值就固定下来了,不能再被重新赋值。不能再被重新赋值。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令2 2)ORGORG程序起始地址定义指令程序起始地址定义指令格式:格式:ORG nnnn ORG nnnn 说明:用于指定该伪指令后面的源程序存放的起始说明:用于指定该伪指令后面的源程序存放的起始地址,也就是汇编后的机器码目标程序;在单片机地

19、址,也就是汇编后的机器码目标程序;在单片机的程序存储器中开始存放的首地址。其中的程序存储器中开始存放的首地址。其中nnnnnnnn是一是一个个1313位长的地址参数。位长的地址参数。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令3 3)ENDEND程序结束伪指令程序结束伪指令格式:格式:ENDEND说明:该伪指令通知说明:该伪指令通知MPASMMPASM汇编器结束对源程序的汇编器结束对源程序的汇编。汇编。在一个源程序中必须要有并且只有一条在一个源程序中必须要有并且只有一条ENDEND指令,指令,放在整个程序的末尾。放在整个程序的末尾。第四章 PIC汇编语言程序设计基础l常用伪指令常用

20、伪指令4 4)LISTLIST列表选项伪指令列表选项伪指令格式:格式:LIST LIST 可选项,可选项,可选项,可选项,说明:用于设置汇编参数来控制汇编过程,或对打说明:用于设置汇编参数来控制汇编过程,或对打印输出的列表文件进行格式化。该伪指令的所有参印输出的列表文件进行格式化。该伪指令的所有参数都必须在一行内书写完成。参数种类共有数都必须在一行内书写完成。参数种类共有1010余种,余种,在此只介绍最常用的在此只介绍最常用的2 2种,即可满足初学者的基本种,即可满足初学者的基本需要:需要:P=P=设定单片机型号。例如设定单片机型号。例如P=16C84P=16C84或或P=16F877P=16

21、F877等。等。R R 。例如。例如R=DECR=DEC(十进(十进制);制);R=HEXR=HEX(十六进制)等。(十六进制)等。第四章 PIC汇编语言程序设计基础l常用伪指令常用伪指令5 5)INCLUDEINCLUDE:调入外部程序文件伪指令:调入外部程序文件伪指令格式:格式:INCLUDEINCLUDE“文件名文件名”说明:用来告知汇编器,将一个预先编写好的外部说明:用来告知汇编器,将一个预先编写好的外部程序文件包含进来,作为该源程序的一部分。这样程序文件包含进来,作为该源程序的一部分。这样可以减少重复劳动,提高编程效率。可以减少重复劳动,提高编程效率。调入的外部文件,通常是定义文件,

22、其中定义了单调入的外部文件,通常是定义文件,其中定义了单片机的复位矢量、专用寄存器的地址以及控制位和片机的复位矢量、专用寄存器的地址以及控制位和状态位的位地址等。状态位的位地址等。第四章 PIC汇编语言程序设计基础l程序格式和程序流程图程序格式和程序流程图第四章 PIC汇编语言程序设计基础l程序格式和程序流程图程序格式和程序流程图第四章 PIC汇编语言程序设计基础l程序格式和程序流程图程序格式和程序流程图第四章 PIC汇编语言程序设计基础l程序格式和程序流程图程序格式和程序流程图通常在编写程序之前,需要画程序流程通常在编写程序之前,需要画程序流程图。流程图是一种图形语言,它用各种图。流程图是一

23、种图形语言,它用各种图形符号来说明程序的执行过程。常常图形符号来说明程序的执行过程。常常采用的图形符号有以下几种:采用的图形符号有以下几种:(1 1)圆角矩形框)圆角矩形框端点框,表示一个程端点框,表示一个程序的开始或结束;序的开始或结束;(2 2)矩形框)矩形框任务框,表示要处理的任任务框,表示要处理的任务;务;(3 3)菱形框)菱形框判断框,表示要判断的因判断框,表示要判断的因素,判断结果将导致程序走入不同的分素,判断结果将导致程序走入不同的分支(菱形框也有时用两端带尖的条形框支(菱形框也有时用两端带尖的条形框代用);代用);(4 4)指向线)指向线带有箭头的线段,表示程带有箭头的线段,表

24、示程序的走向。序的走向。第四章 PIC汇编语言程序设计基础lRAMRAM数据存储器的体选寻址问题数据存储器的体选寻址问题PICPIC单片机面向字节操作和面向位操作的指令,其单片机面向字节操作和面向位操作的指令,其指令码中均包含一个指令码中均包含一个7 7位长的数据存储器单元地址位长的数据存储器单元地址F F。F F最多可以区分最多可以区分128128个存储器单元。个存储器单元。PIC16F87XPIC16F87X内部的内部的RAMRAM配置了配置了512512个单元的地址空间,个单元的地址空间,地址编码长度需要地址编码长度需要9 9位,从位,从000H000H到到1FFH1FFH(即(即000

25、000000B000000000B1111lllllB1111lllllB)。如果想用)。如果想用7 7位地址码位地址码(从(从00H00H到到 7FH7FH即即 0000000B0000000B1111111B1111111B)实现对)实现对512512个单元的寻址,就必须对长度为个单元的寻址,就必须对长度为512512的的RAMRAM均匀均匀划分为划分为4 4等份,每一等份称作一个体,按地址从小等份,每一等份称作一个体,按地址从小到大的顺序分别记为体到大的顺序分别记为体0 0、体、体1 1、体、体2 2和体和体3 3。lRAMRAM数据存储器的体选寻址问题数据存储器的体选寻址问题区分区分4

26、 4个体需要个体需要2 2位地址码(位地址码(00B00B11B11B)对对RAMRAM直接寻址时,直接寻址时,2 2位体选妈来自于状态寄存器位体选妈来自于状态寄存器STATUSSTATUS的的RPORPO和和RP1RP1位;位;对对RAMRAM进行间接寻址时,进行间接寻址时,2 2位体选码来自于状态寄存器位体选码来自于状态寄存器STATUSSTATUS的的IRPIRP位和位和FSRFSR寄存器的最高位寄存器的最高位第四章 PIC汇编语言程序设计基础lRAMRAM数据存储器的体选寻址问题数据存储器的体选寻址问题RAM数据存储器的体选寻址问题有些寄存器单元有些寄存器单元7 7位地址码能位地址码能

27、找到同一个单元。如找到同一个单元。如STATUSSTATUS根据根据“够用即可够用即可”的原则,的原则,PIC16F87XPIC16F87X在在000H000HIFFHIFFH的的地址空间里,实际并没有地址空间里,实际并没有配置配置512512个真实的单元。个真实的单元。特殊功能寄存器安排在特殊功能寄存器安排在4 4个体个体的上半部分,而通用寄存的上半部分,而通用寄存器占据着器占据着4 4个体的下半部分。个体的下半部分。在在RAMRAM中寻找某一单元需用中寻找某一单元需用2 2个个地址码,这就像在直角坐地址码,这就像在直角坐标系表示的平面上确定一标系表示的平面上确定一个点一样,需要用到横坐个点

28、一样,需要用到横坐标和纵坐标标和纵坐标2 2个数据。个数据。第四章 PIC汇编语言程序设计基础l顺序程序结构顺序程序结构顺序程序结构是最简单的一种结构,顺序程序结构是最简单的一种结构,在流程图中表示为任务框一个一个地在流程图中表示为任务框一个一个地串行连接。串行连接。在计算机执行程序时表现为,从头至在计算机执行程序时表现为,从头至尾严格按照次序一条语句一条语句地尾严格按照次序一条语句一条语句地顺序执行,并且每一条语句均被执行顺序执行,并且每一条语句均被执行一遍。如图所示。图中的一遍。如图所示。图中的A A、B B和和C C分分别代表的可以是一条语句,也可以是别代表的可以是一条语句,也可以是一段

29、程序。一段程序。第四章 PIC汇编语言程序设计基础l顺序程序结构顺序程序结构例例 当用当用LEDLED数码管对某一数码管对某一RAMRAM存存储器单元的内容进行显示时,储器单元的内容进行显示时,因为一位数码管一般只能显因为一位数码管一般只能显示示4 4位二进制数,所以通常需位二进制数,所以通常需要将被显示单元内的要将被显示单元内的8 8位数据位数据拆分成高拆分成高4 4位和低位和低4 4位位2 2个个“半半字节字节”。在本例中,假设将。在本例中,假设将RAMRAM中文件寄存器中文件寄存器20H20H单元的单元的数据分解后,依次将低数据分解后,依次将低4 4位和位和高高4 4位分别放入位分别放入

30、21H21H和和22H22H单元,单元,并将这并将这2 2个单元中空余的高个单元中空余的高4 4位补位补0 0。第四章 PIC汇编语言程序设计基础l顺序程序结构顺序程序结构要点:设要点:设Z Z是一位二进制数,同是一位二进制数,同1 1和和O O进行逻辑与运算时,进行逻辑与运算时,结果一个是保持原样而另一个是变成结果一个是保持原样而另一个是变成0 0,基于这一道理,基于这一道理采用采用 ANDLWANDLW指令,我们可以将一个指令,我们可以将一个 8 8位数据同常数位数据同常数0FH0FH相与,实现清相与,实现清0 0高高4 4位和保留低位和保留低4 4位的目的。但这一位的目的。但这一操作只能

31、在工作寄存器操作只能在工作寄存器W W内才能完成。内才能完成。第四章 PIC汇编语言程序设计基础l分支程序结构分支程序结构 分支程序流程图中都包含分支程序流程图中都包含1 1个判断个判断框,该判断框具有框,该判断框具有1 1个入口和个入口和2 2个出个出口口B B和和C C,语句语句A A执行完之后通常产生一个条件执行完之后通常产生一个条件码码CCCC,当条件,当条件CCCC判为判为“是是”(记为(记为YESYES或或Y Y)时进入)时进入B B分支,当条件分支,当条件CCCC判判为为“否否”(记为(记为 NONO或或 N N)时进入)时进入 C C分支。由此可见,只有一个分支中分支。由此可见

32、,只有一个分支中的程序被执行了一遍,而另一分支的程序被执行了一遍,而另一分支中的程序没有得到执行。在实际编中的程序没有得到执行。在实际编程时,不仅会用到上述的二分支程程时,不仅会用到上述的二分支程序结构,还会用到分支数多于序结构,还会用到分支数多于2 2个的个的多分支程序结构。不过,多分支结多分支程序结构。不过,多分支结构可以看作由二分支结构嵌套而成,构可以看作由二分支结构嵌套而成,即分支中又包含分支。即分支中又包含分支。第四章 PIC汇编语言程序设计基础l分支程序结构分支程序结构例例4.34.3RAMRAM存储器的存储器的20H20H和和21H21H单元存放单元存放2 2个个数,找出大者存入

33、数,找出大者存入22H22H单元。单元。要点要点两数做减法,判断标志位两数做减法,判断标志位C C的值的值第四章 PIC汇编语言程序设计基础l分支程序结构分支程序结构第四章 PIC汇编语言程序设计基础l分支程序结构分支程序结构对于程序中的指令运用作几点说明:对于程序中的指令运用作几点说明:(1 1)凡是需要)凡是需要2 2个数参与的逻辑运算(与、或、异或)和算术运个数参与的逻辑运算(与、或、异或)和算术运算(加、减),都需要事先将其中一个操作数放入算(加、减),都需要事先将其中一个操作数放入W W中。对于中。对于在此使用的减法指令更要格外关注,应预先把减数放人在此使用的减法指令更要格外关注,应

34、预先把减数放人W W中,中,或者说,预先放入或者说,预先放入W W中的数,在运算中是当做减数,而寄存器中的数,在运算中是当做减数,而寄存器中的数当做了被减数。中的数当做了被减数。(2 2)一条条件跳转指令往往需要跟随一条无条件跳转指令,才)一条条件跳转指令往往需要跟随一条无条件跳转指令,才能实现长距离的转移和程序的分支。能实现长距离的转移和程序的分支。(3 3)PICPIC单片机的指令系统中没有设置专用的停机指令,可以用单片机的指令系统中没有设置专用的停机指令,可以用一条跳转到自身的无条件跳转指令一条跳转到自身的无条件跳转指令GOTOGOTO来实现。来实现。第四章 PIC汇编语言程序设计基础l

35、循环程序结构循环程序结构在程序设计过程中,有时要求对某一段程序重复执行多遍,此时若用在程序设计过程中,有时要求对某一段程序重复执行多遍,此时若用循环程序结构,有助于缩短程序。在一个循环程序的结构中包含以循环程序结构,有助于缩短程序。在一个循环程序的结构中包含以下下4 4个组成部分:个组成部分:(1 1)循环变量设置。在循环开始时,往往需要指定或定义一个循环)循环变量设置。在循环开始时,往往需要指定或定义一个循环变量(可以是循环次数计数器、地址指针等),并且给它设置一个变量(可以是循环次数计数器、地址指针等),并且给它设置一个初始值。初始值。(2 2)循环体。要求重复执行的程序段,即循环程序的主

36、体部分。)循环体。要求重复执行的程序段,即循环程序的主体部分。(3 3)循环变量修改。修改循环变量的值,为下一次的循环准备条件。)循环变量修改。修改循环变量的值,为下一次的循环准备条件。(4 4)循环控制。在循环程序中必须给出循环结束的条件,否则就成)循环控制。在循环程序中必须给出循环结束的条件,否则就成为死循环为死循环第四章 PIC汇编语言程序设计基础l循环程序结构循环程序结构第四章 PIC汇编语言程序设计基础l循环程序结构循环程序结构例例4.44.4数据存储器中,从地址数据存储器中,从地址30H30H开始的开始的5050个单元都填入个单元都填入00H00H。要点要点间接寻址寄存器间接寻址寄

37、存器FSRFSR当作地址指针。当作地址指针。第四章 PIC汇编语言程序设计基础l循环程序结构循环程序结构第四章 PIC汇编语言程序设计基础l子程序结构子程序结构编制标准化的程序段,存储于程序存储器的指定区域,在每编制标准化的程序段,存储于程序存储器的指定区域,在每次需要时就调出使用,这种程序段就称为子程序,调用子程次需要时就调出使用,这种程序段就称为子程序,调用子程序的程序称为主程序或者调用程序。子程序结构是程序设计序的程序称为主程序或者调用程序。子程序结构是程序设计标准化和模块化的有效方法。标准化和模块化的有效方法。对对PICPIC系列单片机编程时,在主程序的适当地方放置系列单片机编程时,在

38、主程序的适当地方放置CALLCALL指令来实现调用(或跳转),在子程序的开头需要设置地址指令来实现调用(或跳转),在子程序的开头需要设置地址标号(又可兼作于程序的名称和入口地址的标志),末尾需标号(又可兼作于程序的名称和入口地址的标志),末尾需要放置要放置RETURNRETURN或或RETLWRETLW指令,以便于主程序的调用和子程序的指令,以便于主程序的调用和子程序的返回。在主程序调用子程序时,有时会遇到参数传递和现场返回。在主程序调用子程序时,有时会遇到参数传递和现场保护这两个问题。保护这两个问题。第四章 PIC汇编语言程序设计基础l子程序结构子程序结构所谓参数传递,就是在调用子程序前,主

39、程序应先把有关参所谓参数传递,就是在调用子程序前,主程序应先把有关参数放到某些约定的存储器单元,进入子程序后,可以从约定数放到某些约定的存储器单元,进入子程序后,可以从约定的单元取出有关参数加以处理。待处理完之后子程序结束之的单元取出有关参数加以处理。待处理完之后子程序结束之前,同样也应把处理结果送到约定单元。在返回主程序后,前,同样也应把处理结果送到约定单元。在返回主程序后,主程序可以从这些约定单元获得所需结果。在主程序和子程主程序可以从这些约定单元获得所需结果。在主程序和子程序之间传递序之间传递8 8位参数,用工作寄存器位参数,用工作寄存器W W是理想的选择。是理想的选择。所谓现场保护,就

40、是主程序在运行过程中使用了一些寄存器所谓现场保护,就是主程序在运行过程中使用了一些寄存器来存放临时数据或中间结果,在子程序运行过程中有时也要来存放临时数据或中间结果,在子程序运行过程中有时也要用到这些寄存器,为了避免对于主程序还有用的临时数据被用到这些寄存器,为了避免对于主程序还有用的临时数据被子程序覆盖掉,就要设法保护这些临时数据。在执行完子程子程序覆盖掉,就要设法保护这些临时数据。在执行完子程序返回主程序时,还要恢复这些数据,称为现场恢复。序返回主程序时,还要恢复这些数据,称为现场恢复。第四章 PIC汇编语言程序设计基础l子程序结构子程序结构例例4.54.53 3个数最大者放个数最大者放入

41、入40H40H单元单元要点要点利用例利用例4.34.3改造改造成子程序成子程序l子程序结构子程序结构l子程序结构子程序结构第四章 PIC汇编语言程序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题PICF87XPICF87X系列单片机中,片内配置的系列单片机中,片内配置的FLASHFLASH程序存储程序存储器的容量不同,分别为器的容量不同,分别为2K2K、4K4K和和8K8K。因此,程序存。因此,程序存储器跨页跳转和跨页调用的程序设计方法,也不尽储器跨页跳转和跨页调用的程序设计方法,也不尽相同。须要视具体情况具体处理。相同。须要视具体情况具体处理。PIC16F87XPIC16F8

42、7X的指令系统中,的指令系统中,2 2条引起程序长距离跳转条引起程序长距离跳转的指令的指令GOTOGOTO和和CALLCALL,所携带的地址码仅仅有,所携带的地址码仅仅有1111位,位,也就只能在也就只能在2K2K(即为一个页面)的地址范围内跳转。(即为一个页面)的地址范围内跳转。对于只有对于只有2K2K程序存储器的单片机型号,自然就不存程序存储器的单片机型号,自然就不存在程序跨页跳转和跨页调用问题。但是对于程序存在程序跨页跳转和跨页调用问题。但是对于程序存储器容量超出储器容量超出2K2K的情况(更严格地讲,是用户程序的情况(更严格地讲,是用户程序在存储器中分布的地址范围超出在存储器中分布的地

43、址范围超出2K2K的情况),就可的情况),就可能遇到程序跨页跳转和跨页调用问题。能遇到程序跨页跳转和跨页调用问题。第四章 PIC汇编语言程序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题(1 1)对于)对于 PIC16F870PIC16F87087V87287V872而言,只有而言,只有2K2K的程序的程序存储器,不必关心程序跨页跳转和跨页调用问题。存储器,不必关心程序跨页跳转和跨页调用问题。(2 2)对于)对于 PICF873PICF873874874,实际配置的程序存储器容,实际配置的程序存储器容量为量为4K X144K X14,其地址编码长度需要,其地址编码长度需要121

44、2位,即位,即4K4K。程。程序跳转指令的地址码有序跳转指令的地址码有1111位,只能在位,只能在2K2K的地址范围的地址范围内跳转。把内跳转。把4K4K的程序空间分为的程序空间分为2 2页,每页页,每页2K2K,页面,页面0 0的地址范围为的地址范围为0000H0000H07FFH07FFH,页面,页面1 1的地址范围为的地址范围为0800H0800HOFFFHOFFFH。再把。再把PCLATHPCLATH位(即该寄存器的位(即该寄存器的bit3bit3)作为页面选择位,这样就可以在)作为页面选择位,这样就可以在4K4K的地址范的地址范围内自由跳转了。围内自由跳转了。第四章 PIC汇编语言程

45、序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题第四章 PIC汇编语言程序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题(3 3)对于)对于PIC16F876PIC16F876877877而言,有而言,有 8K8K的程序存储器,的程序存储器,存在程序跨页跳转和跨页调用问题。先把存在程序跨页跳转和跨页调用问题。先把8K8K的地址的地址空间分为空间分为4 4页,每页页,每页2K2K,页面,页面0 0的地址范围为的地址范围为 0000H0000H07FFH07FFH;页面;页面1 1的地址范围为的地址范围为0800H0800HOFFFHOFFFH;页面;页面2 2的地

46、址范围为的地址范围为1000H1000H17FFH17FFH;页面;页面3 3的地址范围为的地址范围为180OH180OH1FFFH1FFFH。再把。再把PCLATHPCLATH4 4:3 3位(即该寄存位(即该寄存器的器的bit4bit4和和bit3bit3)作为页面选择位,这样就可以在)作为页面选择位,这样就可以在8K8K的地址范围内自由跳转了。的地址范围内自由跳转了。第四章 PIC汇编语言程序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题第四章 PIC汇编语言程序设计基础l程序跨页跳转和跨页调用问题程序跨页跳转和跨页调用问题第四章 PIC汇编语言程序设计基础l延时程序设计

47、延时程序设计在编程时经常需要在程序的执行过程中插入一段延在编程时经常需要在程序的执行过程中插入一段延时时间,对此有时时间,对此有2 2种方案可供选择:种方案可供选择:利用片内的硬件资源利用片内的硬件资源可编程定时器,可编程定时器,采用软件手段采用软件手段插入一段延时程序。插入一段延时程序。如果延时时间较短,可以连续插入几条空操作指令如果延时时间较短,可以连续插入几条空操作指令NOPNOP;如果延时时间较长,可以插入一段单一循环;如果延时时间较长,可以插入一段单一循环或多重循环的循环结构延时程序。或多重循环的循环结构延时程序。第四章 PIC汇编语言程序设计基础l延时程序设计延时程序设计在在353

48、5条指令构成的指令系统中,条指令构成的指令系统中,5 5条实现无条件跳条实现无条件跳转的必然引起程序执行顺序发生改变的指令(即转的必然引起程序执行顺序发生改变的指令(即 GOTOGOTO,CALLCALL,RETURNRETURN,RETLWRETLW,RETFIERETFIE)占用)占用2 2个指个指令周期;令周期;4 4条条件跳转指令(即条条件跳转指令(即DECFSZDECFSZ,INCFSZINCFSZ,BTFSCBTFSC,BTFSSBTFSS)的执行时间随着条件而定,当条件为真发)的执行时间随着条件而定,当条件为真发生跳转时需要占用生跳转时需要占用2 2个指令周期,当条件为假不发个指

49、令周期,当条件为假不发生跳转时仅占用生跳转时仅占用1 1个指令周期;个指令周期;其余指令全部仅仅占用一个指令周期。其余指令全部仅仅占用一个指令周期。第四章 PIC汇编语言程序设计基础l延时程序设计延时程序设计对于一条指令,取指令占用一个指令周期,执行指对于一条指令,取指令占用一个指令周期,执行指令占用一个指令周期,但由于采用流水作业方式,令占用一个指令周期,但由于采用流水作业方式,即取指和执行重叠进行,这样使得每条指令占用时即取指和执行重叠进行,这样使得每条指令占用时间平均降为一个指令周期。可是在程序遇到跳转指间平均降为一个指令周期。可是在程序遇到跳转指令时,流水作业方式被打破,在执行该指令的

50、同时令时,流水作业方式被打破,在执行该指令的同时所抓取的下一条指令不再是下一步将要执行的指令,所抓取的下一条指令不再是下一步将要执行的指令,必须将其丢弃,从跳转目的地重新抓取,因此而多必须将其丢弃,从跳转目的地重新抓取,因此而多占用了一个指令周期。占用了一个指令周期。应搞清单片机时基振荡器外接晶振的频率,以便确应搞清单片机时基振荡器外接晶振的频率,以便确定时钟周期和指令周期,以及程序执行时间的累计。定时钟周期和指令周期,以及程序执行时间的累计。第四章 PIC汇编语言程序设计基础l延时程序设计延时程序设计第四章 PIC汇编语言程序设计基础l延时程序设计延时程序设计1+1+(1+2)*(X-1)+

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服