PIC汇编语言程序设计.ppt_第1页
PIC汇编语言程序设计.ppt_第2页
PIC汇编语言程序设计.ppt_第3页
PIC汇编语言程序设计.ppt_第4页
PIC汇编语言程序设计.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,PIC单片机技术,电子信息与电气工程系 通信教研室,2,PIC单片机指令系统和其它单片机一样,是较为低级的语言系统,是一套控制和指挥CPU工作的编码,即机器语言。 单片机只能识别和执行由二进制数组成的机器语言,然而,这样一种二进制代码的机器语言是很难为人们直接理解和分析。 为了能较好表达人们的设计思路,便于记忆和使用,人们在低级语言之上设计出一种新的符号语言,即汇编语言。,第5章 汇编语言程序设计,3,PIC单片机指令系统和其它单片机一样,是较为低级的语言系统,是一套控制和指挥CPU工作的编码,即机器语言。 为了能较好表达人们的设计思路,便于记忆和使用,人们在低级语言之上设计出一种新的符号

2、语言,即汇编语言。,5.1 汇编语言指令格式,4,根据指令的功能和作用,只有操作码是必须存在的,它主要决定了指令的操作性质,而其它部分是指令语句的重要补充和说明,有时可以缺省。,5,标号位于指令助记符前面,它一般是用于表示指令所在的地址,例如表示主程序或子程序的起始地址、转移语句的入口地址等。,1.标号,6,标号并不是指令的必须部分,只有那些欲被其他语句引用的指令之前,才必须附加标号。标号不一定和语句同行,可以单独在语句上方作为一行使用。 标号最多可以由32个字母、数字和其它一些字符组成,但第一个字符必须是字母或下划线。标号不能用系统保留字,即系统禁用指令助记符、寄存器名、标志符等作为标号,如

3、:ADD、PCLATH等。 一个标号只能表示一个地址,不允许多个地址用一个标号重复定义。 标号的定义和引用必须一致,其中的大小写可以混写但必须相同。 标号必须顶格书写,结束不用冒号。,使用标号的要点是:,7,操作码决定着指令的操作类型和操作性质,是汇编语言语句中的核心要素,每一条汇编指令都不可缺少,而其它三部分有些指令可以缺省。,2. 操作码,8,操作码所对应的指令助记符,其中的符号大小写可以混写,而不会影响操作码的含意,这一点和标号、操作数符号变量的表达方式是有本质区别。 指令助记符不能顶格书写,当前面没有标号时,必须至少保留一个空格。 操作码核心助记符部分比较简单,初学者必须熟悉复合助记符

4、部分的功能。,有关操作码(指令助记符)的要点是:,9,在PIC汇编语言语句中,操作数的形式和内容最为丰富,它是指令助记符操作的对象,一般以数据或地址的形式出现,也可以用符号变量所表示的数据或地址。,3.操作数,10,使用操作数的要点是:,若操作数有二项,中间应该用逗号(半角)分开。 以A、B、C、D、E、F开头的数,前面应加0作为引导。 MPASM编辑环境默认进制为十六进制,也可按用户需要进行重新设置。 操作数部分的符号变量必须区分大小写。 重视d参数的应用,目标地址为: F(d=1);W(d=0)。,11,各种进制168的表示形式,12,注释内容用分号引出,是汇编语言语句功能的一种补充说明,

5、主要是便于人们阅读、分析、修改和程序的调试。,4. 注释,13,用(半角)分号引出注释内容,可以紧跟指令之后,也可以独立一行或多行书写,但每一行均需由分号引出。 注释内容可以英文书写,也能用中文书写(来源于文本编辑内容)。,使用注释的要点是:,14,各种单片机的汇编程序除了指令系统语句以外,一般都还定义许多非正式指令的语句,即伪指令。大多数伪指令汇编时并不产生机器码,仅为源程序提供汇编控制信息。,5.2 系统伪指令,15,格式:ORG nnnn 说明:地址定义伪指令 即经汇编后生成的机器码目标程序或数据块在单片机程序存储器中的起始存放地址。,1.定位伪指令:ORG(Origin),ORG 01

6、00H MOVLW 0A2H; MOVWF 20H;,16,格式:符号名 EQU nn 说明:使EQU两端的值相等。 符号名一旦被EQU赋值,其值便不能被再重新定义。这里的符号名,既可以是PIC中的特殊功能寄存器、一个常数,或者是表示一个通用数据存储器地址。,2.赋值伪指令:EQU(Equate),17,实际上对于伪指令:ABC EQU20H,其中ABC既可以认为是符号变量,因为ABC代表20H地址;又可以认为是符号常量,因为ABC可以代表符号常量20H。 所以对于一个定义的符号量,应结合引用的指令进行分析才能真正确定符号量的类型。,分析 ABC EQU 20H,18,【例题5-2】正确区别符

7、号变量和符号常量之间的关系 ABCEQU 20H;定义符号量ABC ORG 0000H NOP MOVLW 77H MOVWF 20H MOVLW 88H MOVF ABC,0;ABC为数据存储器地址20H MOVLW ABC ;ABC为常量20H NOP END,19,在符号名定义和引用过程中,必须保证大小写属性的一致性。 Abc、aBC或ABc与ABC是不一样的。,20,格式:END 说明:END伪指令表示汇编语言源程序(*.ASM)的结束,MPASM汇编器汇编时遇到END就认为程序已结束,对其后的程序段不再进行汇编。,3.程序结束伪指令:END,每个程序必须有一条END指令,在整个程序末

8、尾。,21,格式:LIST 可选项,可选项, 说明:LIST伪指令用于设置各种汇编参数,以便控制整个汇编过程或对打印输出的列表文件进行格式化。 1)P 例如:P16F877 2)R 例如:RDEC(十进制); RHEX(十六进制); RBIN(二进制); 默认为十六进制。,4.列表选项伪指令:LIST,LIST P=18F452 LIST R=DEC/HEX,22,格式:INCLUDE “文件名” 说明:INCLUDE伪指令的主要功能是将外部预先编写好的指定文件纳入本源程序的汇编内容,这样可以减少重复劳动,提高编程效率。 如:P16F877.INC为F877单片机的复位矢量、专用寄存器的地址及

9、其控制位和状态位的位地址的原始定义,有些参考书把P16F877.INC称为F877的头文件。,5.包含外部文件伪指令:INCLUDE,INCLUDE “P18f452.INC” Include “picreg.EQU” ;该文件对片内常用资源进行定义,23,格式:RADIX 说明:RADIX伪指令用于设置在MPLAB-ICD集成开发环境中采用的进制方式,如定义十进制、八进制和十六进制等参数,MPLAB-ICD集成开发系统缺省为十六进制。 例如:RADIX DEC ;定义为十进制 RADIX HEX ;定义为十六进制 RADIX OCT ;定义为八进制,6.进制定义伪指令:RADIX,24,wi

10、dth SET 9 width SET 8 注:可重新赋值,7. SET符号(变量)赋值,25,RES 10 说明:保留10个空白字节,8. RES保留某段程序存储区,26,if a=100 movlw 0 x06 movwf pclath else movlw 0 x08 movwf pclath end if,9. IF条件汇编,27,variable i , count=50 i=0 while icount movlw i i+=1 endw,10. WHILE当型循环,28,VARIABLE a,b,c 注:可以在定义时赋值,也可在以后赋值。,11. VARIABLE定义变量,29,

11、格式: #define 例如: #define control 0 x19,7 . . bsf control ;注:等价于 bsf 0 x19,7 置0 x19寄存器的位7,12. #DEFINE定义文本替换标号,30,在汇编语言编写的源程序中,往往会有一些程序段在源程序中重复出现,为了在源程序中不重复书写这些程序段,就可以使用宏指令功能,把这些程序段分别用不同的宏指令来代替。 宏指令的作用: a、使程序简洁、易读 b、宏指令中可以使用参量(直至操作代码也可以作为参量),13. MACRO宏指令,31,例如 capture macro x , y , z movwf x y z movlw

12、10 goto z endm 宏调用可以用下面的程序实现: capture indf , (incf tmr2 ,w) , loop 汇编后这句宏调用产生的源代码为: movwf indf incf tmr2 ,w loop movlw 10 goto loop,13. MACRO宏指令,32,补充:宏指令与子程序的区别 宏指令在汇编时将宏定义中的代码插入到调用宏定义的地方,因此所需的程序存储空间较大,但是执行程序时不需要保护、恢复断点和现场,所以执行速度要快一些。 子程序的调用是在目标程序执行时由CPU处理,子程序在目标程序代码中只出现一次,即所需的程序存储空间较小,但是子程序调用需要保护断

13、点、保护现场以及恢复现场、恢复断点,所以需要增加额外开销时间,必然要降低执行速度。,13. MACRO宏指令,33,数据存储器四体的体选方式 程序存储器四页的页选方式 注:在发生转移或跳转时,须密切注意是否会发生 体(页)转换。,5.3 存储器选择方式,34,5.3.1 数据存储器体选方式,根据直接寻址和间接寻址操作码携带址址信息情况,一般把512字节(包括无效地址)的数据存储器分成4个区域,在PIC中被称为“体”(BANK)。 体0(000H07FH) 体1(080H1FFH) 体2(100H17FH) 体3(180H1FFH),数据存储器体域,35,在不知道寄存器在哪个体时,可以采用BAN

14、KSEL 例: ABC EQU 35H ORG 0100H BANKSEL ABC ;选择ABC所在的数据寄存器的体 MOVLW 00H MOVWF ABC;,36,F877单片机的程序存储器(FLASH)是一个具有空间为8K14位的存储器,其中14位为单元字节长度。为了能完全选择8K的程序存储器,需要合成13根地址选择线。,5.3.2 程序存储器页选方式,37,复位地址0000H,直接给出13根地址选择线; 中断地址0004H,直接给出13根地址选择线; 指令寄存器,是在每一个指令的执行周期自动加1而形成当前程序的执行方向; 执行以PCL为目标地址的算术逻辑类指令; 调用子程序方式,即CAL

15、L语句以及相应的返回语句(RETRUN、RETFIE、RETLW)。 转移指令方式,即GOTO语句;,程序存储器指令语句的选择 主要有以下几种途径:,38,ABC EQU 20H ORG 0100H BANKSEL ABC MOVLW 00H ;常数00送入W MOVWF ABC ;W送入ABC存储器中 ORG 0100H PAGESEL ABC GOTO ABC ;转移至ABC ORG 1000H ABC MOVLW 00H;常数00送入W MOVWF 20H;W送入20H中,补充伪指令 PAGESEL、BANKSEL,39,在程序设计中,除主程序以外还有一部分很重要的内容就是关于子程序的设

16、计,它是为完成特定的目的而构成的复合程序。,5.4常用子程序的设计,40,转移和循环程序,主要是通过跳转、判断和位测试指令来构成的。 1.跳转指令 GOTO 2.判断指令 INCFSZ、DECFSZ 3.位测试指令 BTFSS、 BTFSC,5.4.1 转移和循环子程序,41,【判断指令 例题5-5】执行某个显示功能100次后结束,显示子程序为XSH。 ORG 0000H MOVLW D101 ;十进制101 MOVWF 20H ;送入20H单元中 LOOP DECFSZ 20H,F ; GOTO RRT GOTO PPY RRT PAGESEL XSH CALL XSH PAGESEL LO

17、OP GOTO LOOP PPY END,42,【位测试指令 例题5-6】比较两个数据寄存器20H和30H内容的大小,将较大的数送入40H中。 MOVF 30H,W ;30H送入W SUBWF 20H,W ;(20H)与W相减后送入W, (20H)-(30H) BTFSS STATUS,C ;判断进位(借位)标志 GOTO L20H; 无借位,(20H)(30H) MOVF 30H,W ; (20H)(30H) MOVWF 40H ;较大的数送入40H GOTO POP L20H MOVF 20H,W ; MOVWF 40H; POP END,43,单片机的延时程序,在程序设计中具有很重要的地

18、位。延时的设计,一般可以通过两种方式:硬件延时和软件延时。 所谓硬件延时,就是由单片机系统的定时器实现;而软件延时,是通过循环程序实现。一般来说,前者适用于精确定量延时,而后者常用于初略定性延时。,5.4.2 软件延时子程序,44,【例题5-7】简单循环的软件延时子程序。 COUNTTER EQU 20H; ORG 0100H CALL DELAY; ORG 1000H; DELAY MOVLW 0FFH;循环常数 MOVWF COUNTER ;循环寄存器 LOOP DECFSZ COUNTER;循环寄存器递减 GOTO LOOP ;继续循环 RETURN,45,【例题5-8】请编写10MS软

19、件延时子程序。 ORG 1000H DEL_10MS MOVLW 0DH ;外循环常数 MOVWF 20H ;外循环寄存器 LOOP1 MOVLW 0FFH; 内循环常数 MOVWF 21H; 内循环寄存器 LOOP2 DECFSZ 21H ;内循环寄存器递减 GOTO LOOP2;继续内循环 DECFSZ 20H;外循环寄存器递减 GOTO LOOP1 ;继续外循环 RETURN,46,软件延时可用MAPLAB 7.1的STOPWATCH可以估算延时时间,47,48,49,数据查表子程序在某些特殊场合是非常有用的,如共阴极LED八段显示器以及其它具有固定显示模式的场合,需根据其显示数值去查找

20、对应参考数据库编码输出。,5.4.3 数据查表子程序,50,【例题5-11】将RC端口与共阴极LED八段显示器相连,从0-9循环显示,间隔时间为1秒,请编写相应的软件程序。,八段显示数值(0-9)编码,51,00000000,XXXXXXXX,查表实例,movf DisplayValue,W callDecode movwfPORTC gotoContinue Decode addwfPCL,F retlwB00111111 ;decode 0 retlwB00000110 ;decode 1 retlwB01011011 ;decode 2 retlwB01001111 ;decode 3 retlwB01100110 ;decode 4 retlwB01101101 ;decode 5 retlwB01111101 ;decode 6 retlwB00000111 ;decode 7 retlwB01111111 ;decode 8 retlwB01101111 ;decode 9 Continue,b,e,RC0,RC1,RC2,RC3,RC4,RC5,RC6,b,c,d,e,f,g,W 寄存器,I/O C口,01101101,00000101,01101101,a,52,在PIC指令系统中并没有类似的语句,但如果借助于PIC单片机指令的特殊功能,同样可以轻松地构成分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论