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

上传人:sh****n 文档编号:6402932 上传时间:2020-02-24 格式:PPT 页数:66 大小:1.82MB
返回 下载 相关 举报
PIC汇编语言程序设计基础.ppt_第1页
第1页 / 共66页
PIC汇编语言程序设计基础.ppt_第2页
第2页 / 共66页
PIC汇编语言程序设计基础.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
第四章PIC汇编语言程序设计基础 MPASM汇编器简介汇编语言的语句格式常用伪指令程序格式和程序流程图RAM数据存储器的体选寻址问题顺序程序结构分支程序结构循环程序结构子程序结构程序跨页跳转和跨页调用问题延时程序设计查表程序设计 第四章PIC汇编语言程序设计基础 简介 人汇编语言机器语言单片机源程序汇编器目标程序 第四章PIC汇编语言程序设计基础 简介机器语言 用二进制代码表示的能为计算机直接识别和执行的指令的集合 汇编语言 采用便于人们记忆的符号或者字符串来表示操作码 操作数和地址码的符号语言 源程序 用汇编语言编写的程序 目标程序 由源程序翻译成的机器语言程序 第四章PIC汇编语言程序设计基础 MPASM汇编器简介 第四章PIC汇编语言程序设计基础 MPASM汇编器简介MPASM汇编器是美国Microchip公司为其单片机应用者 开发者提供的一套语言工具软件 功能 将汇编语言源程序翻译成机器语言目标程序代码 检察源程序中的语法错误或格式错误 第四章PIC汇编语言程序设计基础 汇编语言的语句格式 第四章PIC汇编语言程序设计基础 汇编语言的语句格式 第四章PIC汇编语言程序设计基础 汇编语言的语句格式对于PIC系列单片机 在编写源程序时必须依照所用汇编器的一些约定进行书写 例如使用Microchip公司提供的MPASM汇编器 汇编语言语句的一般格式由以下4个字段组成 标号操作码 指令助记符 操作数 注释 label opcode operand comment 这些字段不都是必需的 但其顺序是不能颠倒的 标号必须从最左边第一列开始书写 其后至少用一个空格与操作码隔离 在没有标号的语句中 指令操作码前面必须保留一个或一个以上的空格 第四章PIC汇编语言程序设计基础 汇编语言的语句格式标号操作码 指令助记符 操作数 注释 label opcode operand comment 操作码与操作数之间也必须保留一个或一个以上的空格 操作码后面如果跟随2个操作数的话 操作数之间必须用逗号 半角 隔开 在必要时可以加注释 注释可以跟在操作码 操作数或标号之后 并用分号引导 甚至可以单独占用一行且可以从任何一列开始 汇编语言源程序既可以用大写字母书写 也可以用小写字母书写 还可以大写小写混用 以便于阅读 一个语句行最多允许有225个 半角 字符 汇编语言的语句格式标号用在指令助记符之前的标号就是该指令的符号地址 在程序汇编时 它被赋以该指令在程序存储器中所存放的具体地址 并不是每一条语句都需要加标号 只有那些欲被其他语句引用的语句之前才需要加标号 标号最多可以由32个字母 数字和其他一些字符组成 且第一个字符必须是字母或下划线 标号不能用指令助记符 寄存器名称或其他在系统中已有固定用途的字符串 这些又称为系统保留字 一个标号在程序中只能定义一次 标号必须从一行的第一列开始写 后面用空格 制表符或换行符与操作码隔开 可以单独作为一行 汇编语言的语句格式操作码这个字段不能是空的 操作码就是指令助记符 它是指令功能名称的英文缩写 表示指令的操作类型和操作性质 是汇编语言语句中的关键词 因此不可缺省 指令操作码的助记符在汇编过程中 汇编器把它与一个事先建立的操作码索引表进行逐一比较 找出相应的机器码 并且取而代之 所以这一汇编过程又叫做代真 在其前面没有标号时 操作码前面至少保留一个空格 即不能顶格书写 以便与标号区别 否则 会被汇编器误认为是标号 汇编语言的语句格式操作数该部分是操作对象 也就是数据或地址 可以用数值形式或标号形式表示 数值可以是二进制 八进制 十进制 十六进制数值或者ASCll字符值 标号可以是在此之前经过定义或者赋值的代表数据或地址的标号或字符串 如果操作数有2个 中间应该用逗号分开 MPASM的默认进制不是十进制 而是十六进制 这一点与许多其他单片机的汇编器不同 需要格外注意 操作数还可以是事先经过定义的符号以及表达式 若想进一步了解 请参考附录C 第四章PIC汇编语言程序设计基础 汇编语言的语句格式十六进制数由数字0 9和字母A F组成 当在源程序中采用后缀 H 表示一个以A F打头的十六进制数时 则必须在它的前面增添一个 0 作为引导 以便于汇编器将其与标号或符号名相区别 用字符代表的常数就是该字符对应的ASCll码 即美国标准信息交换码 长度为7位 许多计算机原理书或高级语言程序设计书中都能找到ASCll表 也可以参考附录I 第四章PIC汇编语言程序设计基础 汇编语言的语句格式注释注释部分可有可无 但是最好养成附带注释的习惯 用来对程序作一些注解和说明 便于人们阅读 交流 修改和调试程序 注释不是程序的功能部分 通常用分号 半角 引导或与指令部分隔开 也可以单独书写为以分号 半角 开头的独立行 汇编器对该部分不作任何处理 加注释时 一般应该说明指令的作用和执行的条件 尤其要说明程序在做什么 在用到子程序时 要说明子程序的入口条件和出口条件以及该程序完成的功能 第四章PIC汇编语言程序设计基础 常用伪指令 第四章PIC汇编语言程序设计基础 常用伪指令汇编器能 听得懂 的语言 伪指令 要让单片机为我们服务 我们必须先学会它的语言 指令系统一样 用来编写汇编语言源程序的语句 主要是指令助记符 亦称指令性语句 其次就是伪指令 也叫指示性语句 所谓伪指令就是 假 指令的意思 不是单片机的指令系统中的真实指令 第四章PIC汇编语言程序设计基础 常用伪指令一般格式也由4个字段组成 符号名伪指令助记符操作数 注释符号名通常是代表专用寄存器名 通用寄存器变量 常数名 标志位或控制位名 复位矢量或中断矢量的一个字符串 符号名应从一行的第一列开始书写 其后至少保留一个空格与伪指令隔离 但是 不能像标号那样单独作为一行书写 与指令系统中的助记符不同 没有机器码与伪指令对应 当源程序被汇编成目标程序时 目标程序中并不出现这些伪指令的代码 它们仅在汇编过程中起作用 第四章PIC汇编语言程序设计基础 常用伪指令伪指令是程序设计人员向汇编器发出的控制命令 告诉汇编器如何完成汇编过程和一些规定的操作 以及控制汇编器的输入 输出和数据定位等 对于Microchip公司为开发PIC单片机提供的MPASM汇编器 可以使用的伪指令多达数十条 不过 初学者掌握以下几条最常用的伪指令即可满足一般编程的需要 欲想深入了解更多的伪指令可以参考附录C 第四章PIC汇编语言程序设计基础 常用伪指令1 EQU 符号名赋值伪指令格式 符号名EQUnn说明 使EQU两端的值相等 即给符号名赋予一个特定值 或者说是给符号名定义一个数值 其中 nn可以是一个长度不同的二进制数值 1位的目标寄存器指示符d的值 3位的标志位的位地址 7位的寄存器地址 8位的数据常数 13位的复位或中断矢量等 一个符号名一旦由EQU赋值 其值就固定下来了 不能再被重新赋值 第四章PIC汇编语言程序设计基础 常用伪指令2 ORG 程序起始地址定义指令格式 ORGnnnn说明 用于指定该伪指令后面的源程序存放的起始地址 也就是汇编后的机器码目标程序 在单片机的程序存储器中开始存放的首地址 其中nnnn是一个13位长的地址参数 第四章PIC汇编语言程序设计基础 常用伪指令3 END程序结束伪指令格式 END说明 该伪指令通知MPASM汇编器结束对源程序的汇编 在一个源程序中必须要有并且只有一条END指令 放在整个程序的末尾 第四章PIC汇编语言程序设计基础 常用伪指令4 LIST 列表选项伪指令格式 LIST 可选项 可选项 说明 用于设置汇编参数来控制汇编过程 或对打印输出的列表文件进行格式化 该伪指令的所有参数都必须在一行内书写完成 参数种类共有10余种 在此只介绍最常用的2种 即可满足初学者的基本需要 P 例如R DEC 十进制 R HEX 十六进制 等 第四章PIC汇编语言程序设计基础 常用伪指令5 INCLUDE 调入外部程序文件伪指令格式 INCLUDE 文件名 说明 用来告知汇编器 将一个预先编写好的外部程序文件包含进来 作为该源程序的一部分 这样可以减少重复劳动 提高编程效率 调入的外部文件 通常是定义文件 其中定义了单片机的复位矢量 专用寄存器的地址以及控制位和状态位的位地址等 第四章PIC汇编语言程序设计基础 程序格式和程序流程图 第四章PIC汇编语言程序设计基础 程序格式和程序流程图 第四章PIC汇编语言程序设计基础 程序格式和程序流程图 第四章PIC汇编语言程序设计基础 程序格式和程序流程图通常在编写程序之前 需要画程序流程图 流程图是一种图形语言 它用各种图形符号来说明程序的执行过程 常常采用的图形符号有以下几种 1 圆角矩形框 端点框 表示一个程序的开始或结束 2 矩形框 任务框 表示要处理的任务 3 菱形框 判断框 表示要判断的因素 判断结果将导致程序走入不同的分支 菱形框也有时用两端带尖的条形框代用 4 指向线 带有箭头的线段 表示程序的走向 第四章PIC汇编语言程序设计基础 RAM数据存储器的体选寻址问题PIC单片机面向字节操作和面向位操作的指令 其指令码中均包含一个7位长的数据存储器单元地址F F最多可以区分128个存储器单元 PIC16F87X内部的RAM配置了512个单元的地址空间 地址编码长度需要9位 从000H到1FFH 即000000000B 1111lllllB 如果想用7位地址码 从00H到7FH即0000000B 1111111B 实现对512个单元的寻址 就必须对长度为512的RAM均匀划分为4等份 每一等份称作一个体 按地址从小到大的顺序分别记为体0 体1 体2和体3 RAM数据存储器的体选寻址问题区分4个体需要2位地址码 00B 11B 对RAM直接寻址时 2位体选妈来自于状态寄存器STATUS的RPO和RP1位 对RAM进行间接寻址时 2位体选码来自于状态寄存器STATUS的IRP位和FSR寄存器的最高位 第四章PIC汇编语言程序设计基础 RAM数据存储器的体选寻址问题 RAM数据存储器的体选寻址问题 有些寄存器单元7位地址码能找到同一个单元 如STATUS根据 够用即可 的原则 PIC16F87X在000H IFFH的地址空间里 实际并没有配置512个真实的单元 特殊功能寄存器安排在4个体的上半部分 而通用寄存器占据着4个体的下半部分 在RAM中寻找某一单元需用2个地址码 这就像在直角坐标系表示的平面上确定一个点一样 需要用到横坐标和纵坐标2个数据 第四章PIC汇编语言程序设计基础 顺序程序结构顺序程序结构是最简单的一种结构 在流程图中表示为任务框一个一个地串行连接 在计算机执行程序时表现为 从头至尾严格按照次序一条语句一条语句地顺序执行 并且每一条语句均被执行一遍 如图所示 图中的A B和C分别代表的可以是一条语句 也可以是一段程序 第四章PIC汇编语言程序设计基础 顺序程序结构例当用LED数码管对某一RAM存储器单元的内容进行显示时 因为一位数码管一般只能显示4位二进制数 所以通常需要将被显示单元内的8位数据拆分成高4位和低4位2个 半字节 在本例中 假设将RAM中文件寄存器20H单元的数据分解后 依次将低4位和高4位分别放入21H和22H单元 并将这2个单元中空余的高4位补0 第四章PIC汇编语言程序设计基础 顺序程序结构要点 设Z是一位二进制数 同1和O进行逻辑与运算时 结果一个是保持原样而另一个是变成0 基于这一道理 采用ANDLW指令 我们可以将一个8位数据同常数0FH相与 实现清0高4位和保留低4位的目的 但这一操作只能在工作寄存器W内才能完成 第四章PIC汇编语言程序设计基础 分支程序结构分支程序流程图中都包含1个判断框 该判断框具有1个入口和2个出口B和C 语句A执行完之后通常产生一个条件码CC 当条件CC判为 是 记为YES或Y 时进入B分支 当条件CC判为 否 记为NO或N 时进入C分支 由此可见 只有一个分支中的程序被执行了一遍 而另一分支中的程序没有得到执行 在实际编程时 不仅会用到上述的二分支程序结构 还会用到分支数多于2个的多分支程序结构 不过 多分支结构可以看作由二分支结构嵌套而成 即分支中又包含分支 第四章PIC汇编语言程序设计基础 分支程序结构例4 3RAM存储器的20H和21H单元存放2个数 找出大者存入22H单元 要点两数做减法 判断标志位C的值 第四章PIC汇编语言程序设计基础 分支程序结构 第四章PIC汇编语言程序设计基础 分支程序结构对于程序中的指令运用作几点说明 1 凡是需要2个数参与的逻辑运算 与 或 异或 和算术运算 加 减 都需要事先将其中一个操作数放入W中 对于在此使用的减法指令更要格外关注 应预先把减数放人W中 或者说 预先放入W中的数 在运算中是当做减数 而寄存器中的数当做了被减数 2 一条条件跳转指令往往需要跟随一条无条件跳转指令 才能实现长距离的转移和程序的分支 3 PIC单片机的指令系统中没有设置专用的停机指令 可以用一条跳转到自身的无条件跳转指令GOTO来实现 第四章PIC汇编语言程序设计基础 循环程序结构在程序设计过程中 有时要求对某一段程序重复执行多遍 此时若用循环程序结构 有助于缩短程序 在一个循环程序的结构中包含以下4个组成部分 1 循环变量设置 在循环开始时 往往需要指定或定义一个循环变量 可以是循环次数计数器 地址指针等 并且给它设置一个初始值 2 循环体 要求重复执行的程序段 即循环程序的主体部分 3 循环变量修改 修改循环变量的值 为下一次的循环准备条件 4 循环控制 在循环程序中必须给出循环结束的条件 否则就成为死循环 第四章PIC汇编语言程序设计基础 循环程序结构 第四章PIC汇编语言程序设计基础 循环程序结构例4 4数据存储器中 从地址30H开始的50个单元都填入00H 要点间接寻址寄存器FSR当作地址指针 第四章PIC汇编语言程序设计基础 循环程序结构 第四章PIC汇编语言程序设计基础 子程序结构编制标准化的程序段 存储于程序存储器的指定区域 在每次需要时就调出使用 这种程序段就称为子程序 调用子程序的程序称为主程序或者调用程序 子程序结构是程序设计标准化和模块化的有效方法 对PIC系列单片机编程时 在主程序的适当地方放置CALL指令来实现调用 或跳转 在子程序的开头需要设置地址标号 又可兼作于程序的名称和入口地址的标志 末尾需要放置RETURN或RETLW指令 以便于主程序的调用和子程序的返回 在主程序调用子程序时 有时会遇到参数传递和现场保护这两个问题 第四章PIC汇编语言程序设计基础 子程序结构所谓参数传递 就是在调用子程序前 主程序应先把有关参数放到某些约定的存储器单元 进入子程序后 可以从约定的单元取出有关参数加以处理 待处理完之后子程序结束之前 同样也应把处理结果送到约定单元 在返回主程序后 主程序可以从这些约定单元获得所需结果 在主程序和子程序之间传递8位参数 用工作寄存器W是理想的选择 所谓现场保护 就是主程序在运行过程中使用了一些寄存器来存放临时数据或中间结果 在子程序运行过程中有时也要用到这些寄存器 为了避免对于主程序还有用的临时数据被子程序覆盖掉 就要设法保护这些临时数据 在执行完子程序返回主程序时 还要恢复这些数据 称为现场恢复 第四章PIC汇编语言程序设计基础 子程序结构例4 53个数最大者放入40H单元要点利用例4 3改造成子程序 子程序结构 子程序结构 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题PICF87X系列单片机中 片内配置的FLASH程序存储器的容量不同 分别为2K 4K和8K 因此 程序存储器跨页跳转和跨页调用的程序设计方法 也不尽相同 须要视具体情况具体处理 PIC16F87X的指令系统中 2条引起程序长距离跳转的指令GOTO和CALL 所携带的地址码仅仅有11位 也就只能在2K 即为一个页面 的地址范围内跳转 对于只有2K程序存储器的单片机型号 自然就不存在程序跨页跳转和跨页调用问题 但是对于程序存储器容量超出2K的情况 更严格地讲 是用户程序在存储器中分布的地址范围超出2K的情况 就可能遇到程序跨页跳转和跨页调用问题 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题 1 对于PIC16F870 87V872而言 只有2K的程序存储器 不必关心程序跨页跳转和跨页调用问题 2 对于PICF873 874 实际配置的程序存储器容量为4KX14 其地址编码长度需要12位 即4K 程序跳转指令的地址码有11位 只能在2K的地址范围内跳转 把4K的程序空间分为2页 每页2K 页面0的地址范围为0000H 07FFH 页面1的地址范围为0800H OFFFH 再把PCLATH位 即该寄存器的bit3 作为页面选择位 这样就可以在4K的地址范围内自由跳转了 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题 3 对于PIC16F876 877而言 有8K的程序存储器 存在程序跨页跳转和跨页调用问题 先把8K的地址空间分为4页 每页2K 页面0的地址范围为0000H 07FFH 页面1的地址范围为0800H OFFFH 页面2的地址范围为1000H 17FFH 页面3的地址范围为180OH 1FFFH 再把PCLATH 4 3 位 即该寄存器的bit4和bit3 作为页面选择位 这样就可以在8K的地址范围内自由跳转了 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题 第四章PIC汇编语言程序设计基础 程序跨页跳转和跨页调用问题 第四章PIC汇编语言程序设计基础 延时程序设计在编程时经常需要在程序的执行过程中插入一段延时时间 对此有2种方案可供选择 利用片内的硬件资源 可编程定时器 采用软件手段 插入一段延时程序 如果延时时间较短 可以连续插入几条空操作指令NOP 如果延时时间较长 可以插入一段单一循环或多重循环的循环结构延时程序 第四章PIC汇编语言程序设计基础 延时程序设计在35条指令构成的指令系统中 5条实现无条件跳转的必然引起程序执行顺序发生改变的指令 即GOTO CALL RETURN RETLW RETFIE 占用2个指令周期 4条条件跳转指令 即DECFSZ INCFSZ BTFSC BTFSS 的执行时间随着条件而定 当条件为真发生跳转时需要占用2个指令周期 当条件为假不发生跳转时仅占用1个指令周期 其余指令全部仅仅占用一个指令周期 第四章PIC汇编语言程序设计基础 延时程序设计对于一条指令 取指令占用一个指令周期 执行指令占用一个指令周期 但由于采用流水作业方式 即取指和执行重叠进行 这样使得每条指令占用时间平均降为一个指令周期 可是在程序遇到跳转指令时 流水作业方式被打破 在执行该指令的同时所抓取的下一条指令不再是下一步将要执行的指令 必须将其丢弃 从跳转目的地重新抓取 因此而多占用了一个指令周期 应搞清单片机时基振荡器外接晶振的频率 以便确定时钟周期和指令周期 以及程序执行时间的累计 第四章PIC汇编语言程序设计基础 延时程序设计 第四章PIC汇编语言程序设计基础 延时程序设计1 1 1 2 X 1 2 2 第四章PIC汇编语言程序设计基础 延时程序设计 1 1 5 1 2 100 1 2 2 798 第四章PIC汇编语言程序设计基础 延时程序设计 2 2 1 2 251 1 2 1 2 133 1 2 2 99930 第四章PIC汇编语言程序设计基础 延时程序设计 第四章PIC汇编语言程序设计基础 查表程序设计查表程序用来实现代码转换 索引或翻译 PIC单片机的查表程序可利用子程序带值返回指令RETLW来实现 采用带有入口参数和出口参数的子程序结构 用数据表来构成子程序的主体部分 在子程序的开头安放一条修改程序计数器PC值的指令 来实现子程序内部的跳转 以实现索引 第四章PIC汇编语言程序设计基础 查表程序设计例LED数码管显示驱动程序设计 第四章PIC汇编语言程序设计基础 查表程序设计 第四章PIC汇编语言程序设计基础 查表程序设计 第四章PIC汇编语言程序设计基础 查表程序设计
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!