当前位置:文档之家› PIC汇编语言程序设计基础

PIC汇编语言程序设计基础


3. 4.
(三)操作数
• 操作数是指令操作的对象,是数据或数据的地址。它们 可以使用数值或标号形式表示。 • 其中,数值可以使用二进制、八进制、十进制和十六进 制或ASCII字符值(参见讲义88页表4.2);而标号可以 是在此前定义或赋值的代表数字或地址标号或字符串。 • 如果操作数有两个,中间应由逗号隔开。
(二)ORG --- 程序起始地址定义伪指令
• 格式:
ORG nnnn
• 说明:用于指定该伪指令后面的源程序在ROM中存放 的起始地址。 • nnnn 为13位长的地址参数。
• 举例: ORG 0005H MAIN CLRW CALL SUB
:
MAIN是标号,也就是本行指令的符号地址。ORG伪指 令又将该符号地址定义为单片机内部RAM的0005H单 元,即CLRW的机器码存储在程序存储器ROM的0005H 开始的单元中。
( label ) ( opcode ) ( operand ) (commend)
1. 2.
标号必须从左面第1列开始,后面至少用1个空格与操 作码隔离(注意:标号后面没有冒号); 在无标号时,操作码前至少要保留一个或一个以 上的空格(建议使用“Tab”键分割标号列);
3.
操作码与操作数之间至少要保留一个或一个以上的 空格,如果有两个操作数时两者之间要由逗号(半 角)隔开(建议使用“Tab”键分割) ; 注释由分号(英文半角)引导,在标号、操作码和 操作数之后。标号也可以单独占一行单必需由分号 引导。
指令的可选项共有十余种,这里仅介绍2种。
① P=〈设定单片机型号〉。 例如:P = 16F877
② R=〈定义默认的数值进制〉。例如:R=DEC(十进制) 或:R=HEX(十六进制)
(五)INCLUDE --- 调入外部程序文件伪指令
• 格式 :INCLUDE “文件名” • 说明:用来告知汇编器,将一个预先编制好的外部程序文 件包含进来。这样做可以减少重复劳动,提高编程效率。 调入的外部程序文件通常是“定义文件”,即定义单片机 的复位矢量、专用寄存器的地址及控制位和状态为地址等。
第四章 PIC汇编语言程序设计基础
• • • • • • • • • • • • • 4.0 序论 4.1 MPASM汇编器的使用 4.2 汇编语言的语句格式 4.3 常用伪指令 4.4 程序格式和程序流程图 4.5 RAM数据存储器的体选寻址问题 4.6 顺序程序结构 4.7 分支程序结构 4.8 循环程序结构 4.9 子程序结构 4.10 程序的跨页跳转和跨页调用问题 4.11 延时程序设计 4.12 查表程序设计
• 伪指令只在汇编的过程中进行一些辅助工作,是程序设计 人员向编译器发出的控制命令,告诉汇编器如何完成汇编 过程和一些规定的操作,以及控制汇编的输入、输出和数 据定位等。一旦汇编完成,伪指令就不存在了。
• 与指令类似,伪指令的格式也是由4个字符段组成。
符号名 伪指令助记符 操作数 ;注释
符号名:通常为寄存器名、变量名、常数名、标志位名或控制 位名、复位矢量或中断矢量的一个字符串。同标号一 样符号名必须从一行的第1列开始,后面与伪指令应至 少保留一个空格。但不能向标号那样独占一行。
• 汇编语言的使用为我们提供了一种可以不涉及机器指令码 和实际存储器地址的便捷条件。 但是要想正确使用汇编语言编程必须了解“编译器” 所约定的内容,掌握如:语句格式、标号格式、数据进制 的表示方法、伪指令和汇编器的使用等等。 • 在下面的章节中将介绍MPASM编译器的使用、汇编语言 的语句格式、几种常用伪指令、程序格式和流程图。
;------------------------------------------------------------;复位矢量和中断矢量的安排(PIC16F87X) 注释 ;------------------------------------------------------------ORG 0000H ;复位矢量入口 GOTO MAIN ;转跳到主程序 ORG 0004H ;中断矢量入口 GOTO INT_BODY ;跳转到中断服务程序 ;--------------------------------------------------------------;主程序区 ;--------------------------------------------------------------ORG 0005H ;主程序从0005H开始存放 MAIN CLRW CALL SUB „ „ 标号 GOTO MAIN
(一)EQU --- 符号名赋值伪指令
• 格式: 符号名 EQU nn

• 说明:使 EQU 两边的值相等。其中 nn 是长度不同的二进制数(可 以分别作为寄存器名、位地址、8位的数据或常数、13位的复位或 中断矢量等 )。一旦符号名被EQU赋值,其值就固定下来不能再 重新改变。
• 举例:
STATUS RP0 EQU EQU 03H 05H ;定义寄存器名 ;定义位地址
3. 4.
5.
一个标号在系统中只能定义一次。
(二)操作码
1. 2. 在汇编语言语言源程序中,尽管其它3个字段有时是空的, 但操作码字段无论在何时都不能是空的。 操作码是指令的助记符,是指令功能的英文缩写,表示指 令的操作类型、性质,是汇编语言语句中的“关键字”, 因此是不能省略的。 汇编器将操作码进行汇编时,将其与一个预先建立的操作 码索引表相比较找出对应的机器码取而代之,这叫“代真” 当操作码前无标号时,操作码前至少要留有一个空格以防 汇编器将其误认为标号。
TMR0_b
EQU
00H
;定义定时器的初值常数
• 【举例】:在PIC指令系统中,没有寄存器寻址的方式,汇 编程序也不允许直接使用寄存器的名字。所以与寄存器相关 的操作只能通过“直接寻址”方式完成。 【如】:将W中的数据送PORTC寄存器: MOVWF 07H 因此,编写PIC的程序清单时,在程序的开头可以使用QEU 伪指令现将相关的寄存器名进行定义,然后在程序中就可以 直接引用寄存器的名字。 PORTC EQU 07H ∶ ;定义寄存器名
返回
4.4 程序格式和程序流程图
• 虽然书写源程序时没有统一的要求,但是一个良好的格式 风格非常重要。在此推出一种风格的格式供参考:
;------------------------------------------------------;符号定义和变量定义 ;------------------------------------------------------INDF EQU 00H ;把后面程序指令要用到的 TMR0 EQU 01H ;寄存器单元地址用表义性很 PCL EQU 02H ;强的符号名预先定义 STATUS EQU 03H FSR EQU 04H PORTA EQU 05H TRISA EQU 85H X EQU 20H ;对程序所需的变量预先定义 Y EQU 21H
(四)注释
• 注释部分用于对指令进行注解和说明。虽然注释可有可无, 但对于一个编程者来说,为了便于程序的阅读、交流、修 改和调试,在一些关键的语句上加标注释是一种好的编程 习惯;
• 注释由半角的引号“;”开始,它不是程序的功能部分,编 译器对该部分不做任何处理。
返回
4.3 常用伪指令
• 所谓伪指令就是“假指令”的意思,它不是为CPU识别的 指令、没有对应的机器码。它是为编译器服务的指令,如 确定指令的存储地址,为标号、字符串赋值等。 • 伪指令的使用使程序在书写、阅读上更方便。对于一些没 有说明意义的数字、RAM地址可以通过伪指令换为有意义 的字符来取代,使程序具有很好的可读性。如:在PIC的 指令中不能直接引用寄存器的名字取代地址,只能通过 EQU伪指令定义后引用其寄存器的符号。
;---------------------------------------------------;子程序区和中断服务程序区 ;---------------------------------------------------SUB MOVLW 01H ;子程序 „ „ RETURN ;子程序返回 ; INT_BODY ;中断服务程序 MOVLW 0FFH … … RETFIE ;中断服务程序返回 ;----------------------------------------------------END ;全部程序结束
返回
4.2 汇编语言的语句格式
• 为了使编译器能够顺利的对用户编制的汇编语言源程序进 行代码转换,在编制源程序时必须依照汇编器的约定进行 书写。 • microchip公司提供的MPASM汇编器其汇编语言格式的一 般格式由4个字段组成,这4个段不都是必要的,但顺序不 能颠倒。 标 号 操作码 操作数 ;注 释
2.
3.
4.
尽管C语言已经成为各类单片机重要的开发手段,但是 汇编语言永远不会被淘汰,只有将汇编语言和C语言有 机的结合起来才能高效的实现应用软件的设计。
4.0 序论
• CPU所能识别的是由 “0”或“1”组成的二进制的 “机器语 言”。如: “SLEEP”指令的机器语言: “00000001100011” 。但机器语言不便于人们编写、阅读。 • 汇编语言是对机器语言的改进。使用了便于记忆、阅读的符 号、字符串来表示指令的操作码、操作数和操作数地址。是 一种符号语言,它与机器语言一一对应。 • 汇编语言CPU是不能识别的,因此必须使用一种工具将其 “翻译”为机器语言,这个工具叫“汇编器”或“汇编程 序”。使用“汇编器”或“汇编程序”帮助将汇编语言的源 程序转换为机器语言,这一过程称之为“汇编”。
4.
(一)标号
1.
2.
在指令前的标号实际上就是该指令的符号地址。
并不是每条指令都需加标号的,只有那些欲被其它语句引 用的语句之前才需要加标号。子程序第一条语句的标号实 际上就是该子程序的名称; 标号可以单独作为作为一行; 标号的第1个字符必须由字母或下划线 “_” 开始,并且从 每一行的第1列开始写。标号最多可由32个字母、数字和 其它符号组成。标号不能使用指令的助记符、寄存器名、 或其它系统中已有固定用途的字符串(系统的保留字)。
相关主题