已阅读5页,还剩252页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用教程 本书主要内容 单片机基础知识单片机的组成与结构分析MCS 51单片机的指令系统单片机的程序设计MCS 51单片机的中断系统定时 计数器单片机的串行通信及接口MCS 51单片机的系统扩展接口技术MCS 51兼容机及串行总线扩展 第1章单片机的基础知识 微型计算机的系统组成 单片机概述 不同计数制之间的转换 数的表示方法 思考练习题 1 1微型计算机的系统集成 1 1微型计算机的系统组成 1 1 1主机 主机一般由运算器 控制器和主存储器组成 1 运算器 运算器是进行算术和逻辑运算的部件 它由完成加法运算的加法器 存放操作数和运算结果的寄存器和累加器等组成 2 控制器它是整个计算机硬件系统的指挥中心 根据不同的指令产生不同的动作 指挥整个机器有条不紊地自动地进行工作 3 主存储器主存储器又称为内存储器 它由大量的存储单元组成 用以存储大量的数据及程序 1 1 2外部设备 1 输入设备 目前常用的有键盘 软驱 磁带机 光驱等 2 输出设备 常用的有显示器 打印机 绘图仪等 3 外存储器 常用的外存有磁带 磁盘 光盘 其中磁盘又可分为硬盘及软盘 1 2单片机概述 1 2 1单片机的发展概况 第一阶段 1971 1976 第二阶段 1976 1979 第三阶段 1979 1982 第四阶段 1982 1990 第五阶段 1990至今 1 2 2单片机的应用 1 在工业测控中的应用2 在智能产品中的应用3 在计算机网络与通信技术中的应用 1 2 3单片机的发展趋势 1 3不同计数制之间的转换 1 3 1十进制数 一个十进制数 它的数值是由数码0 1 2 8 9来表示的 数码所处的位置不同 代表数的大小也不同 例如 53478 5 104 3 103 4 102 7 101 8 100 对应于 1 3 2二进制数 二进制是按 逢二进一 的原则进行计数的 二进制数的基为 2 即其使用的数码为0 1 共两个 二进制数的权是以2为底的幂 例如 10110100 1 27 0 26 1 25 1 24 0 23 1 22 0 21 0 20 对应于 其各位的权为1 2 4 8 即以2为底的0次幂 1次幂 2次幂等 10110100 2 1 27 0 26 1 25 1 24 0 23 1 22 0 21 0 20 180 1 3 3十六进制数 十六进制数的基为16 即基数码共有l6个 0 1 2 3 4 5 6 7 8 9 A B C D E F 其中A B C D E F分别代表值为十进制数中的10 11 12 13 14 15 十六进制的权为以16为底的幂 例如 4F8E 4 163 F 162 8 161 E 160 20366 对应于 常用计数制表示数的方法比较 1 3 4不同进制数之间的转换 1 十进制数转换成二进制数的方法 就是用2去除该十进制数 得商和余数 此余数为二进制代码的最小有效位 LSB 或最低位的值 再用2除该商数 又可得商数和余数 则此余数为LSB左邻的二进制代码 次低位 依此类推 从低位到高位逐次进行 直到商是0为止 就可得到该十进制数的二进制代码 除二取余法 1 3 4不同进制数之间的转换 例如 将 67 10转换成二进制数 过程如下 即 67 10 1000011 2 1 3 4不同进制数之间的转换 1 十进制数转换成二进制数的方法 将已知十进制的小数乘以2之后 可能有进位 使整数位为1 当该小数大于0 5时 也可能没有进位 其整数位仍为零 该整数位的值为二进制小数的最高位 再将乘积的小数部分乘以2 所得整数位的值为二进制小数的次高位 依此类推 直到满足精度要求或乘2后的小数部分为0为止 乘二取整法 例如 将 0 625 10转换成二进制数 其过程如下 即 0 625 10 0 101 2 1 3 4不同进制数之间的转换 2 二进制数转换为十进制数的方法 将二进制数转换成十进制数时 只要将二进制数各位的权乘以各位的数码 0或1 再相加即可 例如 将 1101 1001 2制转换成十进制数 1101 1001 2 1 23 1 22 0 21 1 20 1 2 1 0 2 2 0 2 3 1 2 4 8 4 0 1 0 5 0 0 0 0625 13 5625 10 1 3 4不同进制数之间的转换 3 二进制与十六进制数之间的转换方法 二进制数转换成十六进制数例如 把 101101101 1100101 2转换成十六进制数 即 101101101 1100101 2 16D CA 16 1 3 4不同进制数之间的转换 2 十六进制数转换成二进制数将十六进制数转换成二进制数时 只要将每1位十六进制数用4位相应的二进制数表示即可完成转换 例如 将 ECA16 16转换成二进制数 即 ECA16 16 11101100101000010110 2 1 3 5二进制数的算术运算规则 1 二进制加法基本规则 0 0 00 1 1 0 11 1 0向邻近高位有进位1 1 1 1向邻近高位有进位 2 二进制减法基本规则 0 0 01 1 01 0 10 1 1向邻近高位有借位 3 二进制乘法基本规则 0 0 00 1 1 0 01 1 1 4 二进制除法基本规则 1 1 10 1 0 1 逻辑与运算基本规则 0 0 01 0 0 1 01 1 1 2 逻辑或运算基本规则 0 0 01 0 0 1 11 1 1 1 3 6逻辑运算 3 逻辑非运算基本规则 0 1 1 0 4 逻辑异或运算基本规则 0 0 1 1 01 0 0 1 1 1 4 1真值与机器数 单片机用来表示数的形式称为机器数 也称为机器码 而把对应于该机器数的算术值称为真值 设 N1 1010101N2 1010101这两个数在机器中表示为 N1 01010101N2 11010101 1 4数的表示方法 在计算机中还有一种数的表示方法 即机器中的全部有效位均用来表示数的大小 此时无符号位 这种表示方法称为无符号数的表示方法 1 4 2原码 反码 补码 1 原码表示法 原码表示法是最简单的一种机器数表示法 只要把真值的符号部分用0或1表示即可 例如 真值为 34与 34的原码形式为 34 原 00100010 34 原 101000100的原码有两种形式 0 原 00000000 0 原 10000000 1 4数的表示方法 8位二进制数原码的表示范围为 11111111 01111111 对应于 127 127 2 反码表示法 反码是二进制数的另一种表示形式 正数的反码与原码相同 负数的反码是将其原码除符号位外按位求反 即原来为1变为0 原来为0变为1 例如 34 反 34 原 00100010 34 原 10100010 34 反 110111010的反码也有两种形式 0 反 00000000 0 反 111111118位二进制数反码的表示范围为 10000000 01111111 对应于 127 127 1 4数的表示方法 3 补码表示法 1 4数的表示方法 正数的补码表示方法与原码相同 负数的补码表示方法为它的反码加1 例如 21 原 10010101 21 反 11101010 21 补 111010110的补码只有一种表示方法 即 0 补 0 补 00000000 8位二进制数的补码所能表示的范围为10000001 01111111 对应于 128 127 1 4 3BCD码 1 4 4ASCII码 ASCII码是一种8位代码 最高位一般用于奇偶校验 用其余的7位代码来对128个字符编码 其中32个是控制字符 96个是图形字符 1 5思考练习题 1 微型计算机由哪几部分组成 2 什么是单片机 它与一般微型计算机在结构上有什么区别 3 单片机主要应用在哪些方面 4 将下面的一组十进制数转换成二进制数 56 74 23 19 89 68 142 76 87 0 375 9 325 83 625 134 0625 5 将下面的二进制数转换成十进制数和十六进制数 10110011 10100101 11101001 10011110 10000101 11000101 11101110 10001100 11011 11 101 01101 6 原码已经在下面列出 试写出各数的反码与补码 10001101 10101100 11101011 10001001 11111111 01100001 01110001 11111001 第2章单片机的组成与结构分析 MCS 51单片机的外部引脚及功能 MCS 51单片机的并行输入输出端口 MCS 51单片机的内部结构 CPU的结构和功能 存储器的组织结构 单片机指令时序 思考练习题 一片半导体硅片集成 中央处理单元 CPU 存储器 RAM ROM 并行I O 串行I O 定时器 计数器 中断系统 系统时钟电路及系统总线的微型计算机 具有微型计算机的属性 因而被称为单片微型计算机 简称单片机 2 1MCS 51单片机的外部引脚及功能 2 1 1引脚 b 双列直插式封装 a 方形封装 2 1 2外接晶振或外部时钟信号输入端 a 内部振荡器方式 b 外部振荡器方式图2 128051单片机的振荡器方式 表2 4按不同工艺制造的单片机芯片外接振荡器时的接法 2 1 3输入输出引脚 P0 0 P0 7 通道0是一个8位漏极开路的双向输入输出通道 在外接存储器或者扩展I O接口时 P0口作为复用的低8位地址总线和双向数据总线 在不扩展存储器或者I O接口时 作为准双向输入输出接口 P1 0 P1 7 只有一种功能 即准双向I O口 P2 0 P2 7 可作为准双向I O口使用 但在接有片外存储器或扩展I O接口范围超过256B时 则该口一般只能作为高8位地址总线使用 P3 0 P3 7 该口除了作为准双向口外 还具有第二功能 2 1 4控制线 1 ALE 2 3 VPP 4 RST a 上电复位 b 电平开关复位图2 13复位电路 2 2MCS 51单片机的并行输入输出端口 2 2 1P0口结构 1 P0用作通用I O口 2 P0用作地址 数据总线分时复用方式 2 2 2P2口结构 1 P2口用作地址总线 2 P2口用作通用I O口 2 2 3P3口结构 2 2 4P1口结构 2 3MCS 51单片机的内部结构 2 3MCS 51单片机的内部结构 其基本特性如下 8位CPU 含片内振荡器 4KB的程序存储器ROM 128B的数据存储器RAM 64KB的外部程序存储器寻址能力 64KB的外部数据存储器寻址能力 32根输入输出 I O 线 2个16位定时 计数器 1个全双工异步串行口 21个特殊功能寄存器 5个中断源 2个优先级 具有位寻址功能 CPU结构 CPU是8051内部的一个字长为8位的中央处理单元 它包括三部分 运算器 控制器和专用寄存器组 2 3CPU的结构和功能 2 3 1运算器 8051单片机的运算器由算术 逻辑运算单元ALU 累加器A 寄存器B 暂存器1 暂存器2以及程序状态字寄存器PSW组成 图2 2PSW寄存器各位的标志符号 表2 1寄存器PSW各位的功能 标志符号与相应的位地址 2 3 2控制器 8051单片机的控制器由指令寄存器 IR 定时控制逻辑和振荡器 OSC 等电路组成 相关寄存器有指令译码器 堆栈指针SP 程序计数器PC 数据指针DPTR RAM地址寄存器以及16位地址缓冲器等组成 IR主要用于存放从程序存储器中取出的指令码 定时控制逻辑用于对指令寄存器的指令进行译码 在OSC的配合下产生指令的时序脉冲 完成相应指令的执行 OSC是控制器的核心 它产生矩形时钟脉冲序列 并为控制器提供时钟脉冲 时钟频率的高低是衡量单片机的重要性能指标之一 2 3 3专用寄存器组 专用寄存器主要用于存放当前要执行的命令在存储器中的存储单元地址 存放操作数和指令执行后的各种状态等 它主要由堆栈指针SP 程序计数器PC 数据指针DPTR 累加器ACC 通用寄存器B RAM地址寄存器以及16位地址缓冲器等组成 程序计数器PC 是一个16位的程序地址寄存器 用来存放将要执行下一条指令所在存储单元的地址 编码范围0000H FFFFH 寻址范围为64KB 累加器ACC 8位寄存器 主要用来存放参与运算的操作数和ALU运算的结果 数据指针DPTR 16位寄存器 主要用来存放数据存储器RAM的地址 堆栈指针SP 用户在内部RAM中专门开辟的一个专用存储区域 存储数据原则 先进后出 后进先出 通用寄存器B 8位寄存器 在执行乘除法运算时 用来存放其中一个操作数和运算结果中的一部分 2 4存储器的组织结构 存储器的功能是存储信息 即程序与数据 存储器是组成计算机的主要部件 目前所使用的存储器以半导体存储器为主 从功能上来划分 半导体存储器可分为两大类 即只读存储器 ROM 和随机存储器 RAM 它通常分为三个存储空间 1 片内 片外统一连续编址的0000H FFFFH共64KB的程序存储器空间 2 地址从0000H FFFFH的片外数据存储器空间 3 地址从00H FFH的256B的片内数据存储器空间 2 4 1MCS 51单片机的存储器结构 图2 38051存储器配置图 2 4 2程序存储器 程序是控制计算机运行的一系列命令 计算机能够识别并执行的命令是由代码 0 和 1 组成的一组机器指令 2 4 3数据存储器 单片机的数据存储器由可读可写的存储器RAM组成 最多可扩展到64KB 用于存储数据 2 4 4MCS 51单片机的内部数据存储器 MCS 51单片机的内部数据存储器由地址00H FFH共有256个字节的地址空间组成 这256个字节的地址空间被分为两部分 其中内部数据RAM地址为00H 7FH 即0 127 图2 4内部数据存储器地址空间 1 内部数据RAM单元 内部数据RAM分为工作寄存器区 位寻址区 通用RAM区三个部分 图2 5RAM位地址 低128位在00H 7FH a 系统复位后 未改变SP初值时的堆栈操作 设 A 0ABH b 系统复位后 改变SP初值为60H时的堆栈操作图2 6堆栈操作示例 2 特殊功能寄存器 特殊功能寄存器SFR的地址空间是80H FFH 表2 3特殊功能寄存器的名称 符号与地址 2 特殊功能寄存器 2 特殊功能寄存器 2 特殊功能寄存器 2 5单片机指令时序 1 时钟电路时钟电路用于产生单片机工作所需要的时钟信号 而时序研究的是指令执行中各信号之间的相互联系 因其内部有时钟电路 只需外接定时控制元件 晶体振荡器和电容 即可 见2 1 2 2 时序定时单位1个机器周期 6个状态周期 12个时钟周期当振荡脉冲频率为12MHz时 一个机器周期是1us 2 5单片机指令时序 2 6思考练习题 1 MCS 51单片机包含哪些主要逻辑功能部件 2 程序状态字寄存器PSW包含哪几个标志位 各位的含义是什么 各有何作用 3 什么叫单片机 4 MCS 51单片机的存储结构有何特点 5 单片机的端有何作用 在8031组成的单片机应用系统中 其端怎样处理 为什么 6 单片机内部RAM分为哪几个部分 各有何作用 7 MCS 51单片机的堆栈SP在操作中遵循什么原则 在开机复位时 其初值是多少 是否可以通过程序重新设置 8 怎样确定和改变单片机当前的工作寄存器组 9 简要说明单片机的位地址分配 10 试画出常用的单片机复位电路 并说明复位后各个寄存器的状态 第3章MCS 51单片机的指令系统 汇编语言的指令格式及符号简介寻址方式数据传送类指令算术运算类指令逻辑运算类指令位操作类指令控制转移类指令思考练习题 3 1汇编语言的指令格式及符号简介 3 1 1指令格式 标号 操作码助记符 第一操作数 第二操作数 第三操作数 注释 例如 LOOP MOVA 50H A 50HDECR0 R0 R0 1DJNZR0 LOOP R0 1 0 则程序转移到LOOP地址 否则顺序执行END 结束 3 1 2本章中符号的定义 3 2寻址方式 MCS 51单片机有7种寻址方式 见表3 1 表3 17种寻址方式的比较 3 2 1立即寻址 例如 MOVA 23H A 23H 即累加器A的内容被替换为立即数23H 图3 1MOVA 23H的执行示意图 该指令的功能是将8位的立即数23H传送到累加器A中 如图3 1所示 其中 目的操作数采用寄存器寻址 源操作数采用立即寻址 3 2 2直接寻址 直接寻址是指在指令中包含了操作数的地址 该地址直接给出了参加运算或传送的单元或位 直接寻址方式可访问三种地址空间 特殊功能寄存器SFR 该空间只能采用直接寻址 内部数据RAM的低128个字节单元 该空间还可以采用寄存器间接寻址 221个位地址空间 例如 MOVA 40H 把40H单元的内容送到累加器中 即 A 40H 图3 2MOVA 40H的执行示意图 3 2 3寄存器寻址 寄存器寻址是指定某一可寻址的寄存器的内容为操作数 例如 MOVA R0 A R0 该指令的功能是将R0中的数据传送到累加器A中 源操作数与目的操作数都采用了寄存器寻址 在MCS 51单片机中 能够用来间接寻址的寄存器有 用户所选定的工作寄存器组的R0 R1 堆栈指针SP和16位的数据指针DPTR 内部数据RAM的寄存器间接寻址采用寄存器R0 R1 外部数据RAM的寄存器间接寻址有两种形式 一是采用R0 R1作间址寄存器 这时R0或R1提供低8位地址 而高8位地址则由P2端口提供 二是采用16位的DPTR作间址寄存器 3 2 4寄存器间接寻址 例如 设R0的内容为60H 且 60H 10H 即60H地址单元中的内容为10H 则语句MOVA R0的执行过程如图3 3所示 执行后 A 10H 即累加器A的内容成为10H 图3 3MOVA R0的执行示意图 又如 MOVXA R0 A R0 用R0间接寻址的单元中的内容替换A的 内容 MOVXA DPTR A DPTR 用DPTR间接寻址的单元中的内容替换 A的内容 3 2 5变址寻址 这种寻址方式是以数据指针DPTR或程序计数器PC作为基址寄存器 以累加器A作为偏移量寄存器 将一个基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址 例如 MOVCA A DPTR设 A 10H DPTR 1000H 程序存储器的 1010H 45H 则上面程序语句的功能是将A的内容与DPTR的内容相加形成操作数地址 1010H 把该地址中的数据传送到累加器A 即 A A DPTR 结果 A 45H 图3 4MOVCA A DPTR的执行示意图 相对寻址是把指令中给定的地址偏移量rel与程序计数器PC的当前值 读出该双字节或三字节的跳转指令后 PC指向的下条指令的地址 相加 得到真正的程序转移地址 例如 JC80H若C 0 则PC值不变 若C 1 则以当前PC值为基地址 加上80H得到新的PC值 设该转移指令存放在1005H单元 取出操作码后PC指向1006H单元 取出偏移量后PC指向1007H单元 所以计算偏移量时PC当前地址为1007H 已经为转移指令首地址加2 这里的偏移量以补码给出 所以80H代表着 80H 补码运算后 就形成跳转地址0F87H 其过程如图3 5所示 3 2 6相对寻址 3 2 6相对寻址 图3 5JC80H的执行示意图 3 2 7位寻址 MCS 51单片机可对片内RAM的两个区域进行位寻址 一个是20H 2FH单元的128位 另一个是特殊功能寄存器的93位 在寻址时 同一个位地址可以有多种标识方式 读者可参看后面3 6节 位操作指令 的相关内容 3 3 1通用传送指令 格式 MOV目的操作数 源操作数功能 把第二操作数指定的字节内容传送到第一操作数指定的单元中 不影响源操作数内容 不影响别的寄存器和标志 1 以累加器A为目的操作数的传送类指令 3 3数据传送类指令 指令助记符及功能说明如下 例1若 50H 10H 则执行指令MOVA 50H之后 A 10H 例2若 R0 20H 20H 39H 则执行指令MOVA R0后 A 39H 例3若 R5 55H 则执行指令MOVA R5后 A 55H 2 以Rn为目的操作数的传送类指令 例1若 A 20H 则执行指令MOVR3 A后 R3 20H 例2若 30H 01H 则执行指令MOVR7 30H后 R7 01H 指令助记符及功能说明如下 例1若 30H 20H R0 30H 则执行指令MOV90H R0的结果为 90H 20H 例2若例1中的条件不变 而执行指令MOVP1 R0 则 P1 20H 3 以直接地址directX为目的操作数的传送类指令 指令助记符及功能说明如下 例1若 R0 50H 50H 20H A 10H 则执行指令 MOV R0 A 后 50H单元的内容由原来的20H变为10H 4 以寄存器间接地址 Ri为目的操作数的传送类指令 指令助记符及功能说明如下 5 16位目标地址传送指令 这条指令的功能是 把16位立即数送入DPTR中 而16位的数据指针DPTR由DPH与DPL组成 该指令执行后 16位立即数的高8位送入DPH中 低8位送入DPL中 该指令的执行 不影响程序状态寄存器PSW 指令助记符及功能说明如下 3 3 2外部数据存储器 或I O口 与累加器A传送指令 例1设 P2 20H 现将A中数据存储到20FFH单元中去 可用以下程序实现 MOVR1 0FFH R1 0FFHMOVX R1 A 20FFH A 也可采用下述程序实现 MOVDPTR 20FFH DPTR 20FFHMOVX DPTR A DPTR A 即 20FFH A 指令助记符与功能说明如下 3 3 2外部数据存储器 或I O口 与累加器A传送指令 例2将外部数据存储器7FF0H单元中的数据取出 存放到外部数据存储器2000H单元中去 MOVDPTR 7FF0HMOVXA DPTRMOVDPTR 2000HMOVX DPTR A 例1在外部程序存储器2000H单元开始存放了数字0 9的共阴极数码管的16进制数的字形代码3FH 06H 6FH 要求根据A中的值 0 9 来查找该数字所对应的代码以便显示 若用PC作基址寄存器 则需要在MOVCA A PC指令前用一加法指令对地址进行调整 ADDA dataMOVCA A PC 3 3 3程序存储器向累加器A传送数据指令 指令助记符与功能说明如下 1 字节交换指令 例1设 R1 30H 30H 45H A 7FH 则执行指令 XCHA R1结果 A 45H 而 30H 7FH 从而实现了累加器A与内部数据存储器RAM中30H单元的数据交换 3 3 4数据交换指令 指令助记符与功能说明如下 2 半字节交换指令 例1设 30H 6FH R0 30H A 0F6H 则执行指令 XCHDA Ri结果 A 0FFH 30H 66H 数据交换指令除了影响始终跟踪A中数据奇偶性的P标志外 对PSW中其他标志位均无影响 指令助记符与功能说明如下 3 累加器A中高四位与低四位交换指令 SWAPA该指令所执行的操作是累加器A中的高4位与低4位的内容互换 其结果仍存放在累加器A中 例1设 A 0A5H 10100101B 则执行指令 SWAPA结果 A 5AH 01011010B 指令SWAP交换了A中高 低半字节 3 0和7 4 结果不影响标志寄存器PSW 3 3 5堆栈操作指令 堆栈操作指令只有2条 即 压入 PUSH 和弹出 POP 压入指令 PUSHdirect SP SP 1 SP direct 弹出指令 POPdirect SP direct SP SP 1 例1PUSHA 保护A中数据PUSHPSW 保护标志寄存器中数据 执行服务程序POPPSW 恢复标志寄存器中数据POPA 恢复A中数据 例2PUSHAPUSHPSW POPAPOPPSW 例3PUSHDPHPUSHDPL POPDPLPOPDPH 3 4 1加减运算指令 1 加法指令 这类指令所完成的操作是把源操作数 立即数 直接地址单元内容 间接地址单元内容 工作寄存器内容 与累加器A的内容相加 将结果保存在累加器A中 3 4算术运算类指令 指令助记符与功能说明如下 例1执行指令 MOVA 0A9HADDA 0B8H对程序状态寄存器的影响如图3 6所示 运算结果 A 61H CY 1 AC 1 OV 1 P 1 PSW 0C5H 例28位数加法程序片断1 MOVA 23HADDA 5AH 运算结果 A 7DH CY 0 OV 0 AC 0 P 0 PSW 00H 例38位数加法程序片断2 MOVA 0ABHADDA 9AH 运算结果 A 45H CY 1 OV 1 AC 1 P 1 PSW 0C5H 带进位加法指令与前述加法指令的区别仅为考虑进位位 其他与加法指令相同 2 带进位加法指令 指令助记符与功能说明如下 例3利用ADDC指令可以进行多字节的加法运算 设有两个16位数相加 被加数的高8位放在41H 低8位放在40H 加数的高8位放在43H 低8位放在42H 和的低8位存放在50H 高8位存放在51H 进位位存放在52H 可编程序如下 例1设 A 0AAH R0 55H C 1 则执行指令 ADDCA R0运算结果 A 00000000B AC 1 CY 1 OV 1 例2设 A 35H 40H 21H C 0 则执行指令 ADDCA 40H运算结果 A 56H AC 0 CY 0 OV 0 这与执行指令 ADDA 40H 的结果是一样的 SHJ MOVA 40H A 被加数低8位ADDA 42H 与加数低8位相加MOV50H A 和的低8位存入50HMOVA 41H A 被加数高8位ADDCA 43H 被加数高8位与加数高8位以及低位来的进位相加MOV51H A 和的高8位存入51H单元MOVA 00H A 00HADDCA 00H A A 00H 高8位来的进位MOV52H A 进位位C内容存入52H单元 3 带借位减指令 指令助记符与功能说明如下 例1设 40H 0BAH 41H 98H 试编写40H内容减去41H内容后 结果再存入40H单元的程序 MOVA 40H A 40H CLRC 进位位C清0SUBBA 41H A A 41H C MOV40H A 40H A 执行以上程序后 40H 22H CY 0 OV 0 如果参与运算的两数为无符号数 则其溢出与否与OV状态无关 而是靠CY是否有借位来判断 OV仅仅表示带符号数运算时是否溢出 例2设有两个16位数相减 被减数的高8位放在41H 低8位放在40H 减数高8位放在43H 低8位放在42H 差的低8位存放在50H 高8位存放在51H 借位位存放在52H 可编程序如下 SHJIAN MOVA 40H A 被减数低8位CLRC C位清0SUBBA 42H 减去减数低8位MOV50H A 差的低8位存入50HMOVA 41H A 被减数高8位SUBBA 43H 被减数高8位减去减数高8位与借位MOV51H A 差的高8位存入51H单元MOVA 00H A 00HADDCA 00H A 高8位的借位位MOV52H A 借位位C内容存入52H单元 1 乘法指令 例1设 A 67H 103 B 0ADH 173 执行指令 MULAB运算结果 乘积为459BH 17819 A 9BH B 45H 另外 OV 1 CY 0 3 4 2乘除运算指令 MULAB A 乘积低8位 B 乘积高8位 例2设被乘数为16位无符号数 低8位存放在地址为K的单元 高8位存放在地址为K 1的单元 乘数为8位无符号数 存放在M单元 编程求出二者乘积 并将乘积的0 7位存放在R1 8 15位存放在R2 16 23位存放在R3中 分析 16位无符号数与8位无符号数相乘的步骤示意如下 程序编制如下 MOVR0 K 设置被乘数地址指针MOVA R0 被乘数送A中MOVB M 乘数送B中MULAB K M MOVR1 A 乘积的0 7位存入R1MOVR2 B 暂存积的8 15位INCR0 指向被乘数高8位地址MOVA R0 取被乘数高8位MOVB M 乘数送B中MULAB K 1 M ADDA R2 求得乘积的8 15位MOVR2 A 乘积的8 15位存入R2MOVA BADDCA 00H 求得乘积的16 23位MOVR3 A 乘积的16 23位存入R3 2 除法指令 例1设 A 9AH B 23H 执行指令 DIVAB则 A 04H B 0EH OV 00H CY 00H 3 4 2乘除运算指令 DIVAB A 商 B 余数 3 4 3增1减1指令 1 增1指令 INCA A A 1INCdirect direct direct 1INC Ri Ri Ri 1INCRn Rn Rn 1INCDPTR DPTR DPTR 1 例1设 A 40H 41H 29H 则执行下列指令 INCA A 40H 1HINC41H 41H 29H 1H结果 A 41H 41H 2AH 例2设 R0 56H 片内RAM单元 56H 0FFH 57H 50H 则执行下列指令 INC R0 56H 00HINCR0 R0 57HINC R0 57H 51H结果 56H 00H R0 57H 57H 51H 例3执行下述指令序列 MOVDPTR 2FFEH DPTR 2FFEHINCDPTR DPTR 2FFFHINCDPTR DPTR 3000HINCDPTR DPTR 3001H则 DPTR 3001H 2 减1指令 DECA A A 1DECdirect direct direct 1DEC Ri Ri Ri 1DECRn Rn Rn 1 例1设 R0 4FH 片内RAM单元 4FH 40H 4EH 00H 执行指令 DEC R0 4FH 3FHDECR0 R0 4EHDEC R0 4EH 0FFH结果 R0 4EH 4EH 0FFH 4FH 3FH 3 4 4二 十进制调整指令 DAA该指令的功能是对累加器A中的 二 十 进制 BCD码 加法结果进行调整 例1执行下面的指令 MOVA 86HADDA 47H结果 A 0CDH CY 0 AC 0所得结果并不是BCD码 若接着执行以下指令 DAA则结果 A 33H CY 1 AC 1 1 累加器A清0指令格式 CLRA功能 将00H送入累加器A中 3 5逻辑运算指令 3 5 1单操作数指令 2 累加器A取反指令格式 CPLA功能 将累加器A中内容取反 将A中内容按位取反 即逻辑非运算 后再送回累加器A中 例1设 A 98H 执行指令CLRA A 0CPLA A 0FFH结果 A 0FFH 3 累加器A内容循环左移一位指令格式 RLA功能 将累加器A中的内容循环左移一位 即 例1设 A 10001000 则执行指令 RLA 后 结果 A 00010001 4 累加器A内容带进位位CY循环左移一位 指令格式 RLCA功能 将累加器A中的内容与进位标志位CY一起循环左移一位 即 例1设 A 01010101 CY 1 则执行指令 RLCA 后 结果 A 10101011 CY 0 5 累加器A内容循环右移一位 指令格式 RRA功能 将累加器A中的内容循环右移一位 即 例1设 A 00010001 则执行指令 RRA 后 结果 A 10001000 6 累加器A内容带进位位CY循环右移一位 指令格式 RRCA功能 将累加器A中的内容与进位标志位CY一起循环右移一位 即 例1设 A 10101011 CY 0 则执行指令 RRCA 后 结果 A 01010101 CY 1 3 5 2双操作数指令 1 逻辑与指令 逻辑与的规则定义为 其中 表示逻辑与 0 0 00 1 1 0 01 1 1 例1设 A 0C3H R3 0ADH 执行指令 ANLA R3 结果 A 81H 10000001B 指令执行过程如下 2 逻辑或指令 逻辑或的规则定义为 其中 表示逻辑或 0 0 00 0 1 0 11 1 1 例1设 A 0C3H R3 0ADH 执行指令 ORLA R3 结果 A 0EFH 11101111B 指令执行过程如下 3 逻辑异或指令 逻辑异或的规则定义为 其中 表示逻辑异或 0 0 1 1 01 0 0 1 1 例1设 A 0C3H R3 0ADH 执行指令 XRLA R3 结果 A 6EH 01101110B 指令执行过程如下 例2试把分别保存在30H 31H单元中用ASCII码表示的两位数 转换成两位BCD码 并以压缩BCD码形式存入30H单元中 程序如下 ANL30H 0FH 30H单元的ASCII码转换成BCD码MOVA 31H 取31H单元的ASCII码ANLA 0FH 31H单元的ASCII码变成BCD码RLARLARLARLAORL30H A 结果存入30H单元 例1要将20H位的内容传送给23H位 不能直接用 MOV20H 23H 因为该指令执行的实际是字节传送 若要将20H位的内容传送给23H位 可用下述程序实现 MOVC 20H C 20H MOV23H C 23H C 3 6位操作类指令 3 6 1位数据传送指令 指令助记符与功能说明如下 目的操作数源操作数功能说明 MOVC bit C bit MOVbit C C bit 指令格式如下 CLRC C 0 CLRbit bit 0 以上指令可使直接寻址位 bit 或位累加器C清0 不影响其他标志 例1片内RAM单元26H的内容为0FFH 执行指令 CLR32H结果 26H 0FBH 11111011B 其中 32H为26H单元第二位的位地址 3 6 2位状态控制指令 1 位清0指令 指令格式如下 CPLC C C CPLbit bit bit 以上指令把位累加器C或者直接寻址位 bit 内容取反 不影响其他标志位 例1执行下面的指令序列 MOVP1 2FH P1 2FH即00101111B CPLP1 0 P1 0位求反CPLP1 2 P1 2位求反结果 P1 2AH 00101010B 2 位求反指令 指令格式如下 SETBC C 1SETBbit bit 1以上指令把进位标志C或者任何可直接寻址位 bit 置1 不影响其他标志位 例1假设进位标志C内容为0 输出口P1原来的内容为0FH 00001111B 则执行下面指令 SETBCSETBP1 7结果 C 1 P1 8FH 10001111B 3 位置1指令 例1当位地址 2AH 1 32H 1 同时累加器中 ACC 7 0时 进位位C 1 否则C清0 可编程序如下 MOVC 2AH C 2AH ANLC 32H C C 32H ANLC ACC 7 C C ACC 7 3 6 3位逻辑操作指令 1 位与指令 指令助记符与功能说明如下 目的操作数源操作数功能说明ANLC bit C C bit ANLC bit C C bit 指令助记符与功能说明如下 目的操作数源操作数功能说明ORLC bit C C bit ORLC bit C C bit 位或指令的功能是将直接寻址位的内容或直接寻址位内容取反后 不改变原来位的内容 和位累加器C的内容相或 结果保存在C中 例1写出位地址 2AH 1和 32H 1 累加器 ACC 7 0相或的程序 MOVC 2AH C 2AH ORLC 32H C C 32H ORLC ACC 7 C C ACC 7 结果 C 1 2 位或指令 图3 7为判C转移指令的执行过程 3 6 4位条件转移指令 1 判C转移指令 JCrel 若 C 1 则 PC PC 2 rel 若 C 0 则 PC PC 2JNCrel 若 C 0 则 PC PC rel 若 C 1 则 PC PC 2 a JCrel b JNCrel图3 7判C转移指令的执行过程 JBbit rel 若 bit 1 则 PC PC 3 rel 若 bit 0 则 PC PC 3JNBbit rel 若 bit 0 则 PC PC 3 rel 若 bit 1 则 PC PC 3JBCbit rel 若 bit 1 则 PC PC 3 rel 而且 bit 清0 若 bit 0 则 PC PC 3 2 判直接寻址位转移指令 判直接寻址位转移指令的执行过程如图3 8所示 a JBbit rel b JNBbit rel c JBCbit rel 例1假设前面的程序段一样 则分别执行下面三段程序 程序1 SETB32H 32H 1JB32H K1 32H 1转K1处执行K1 程序2 CLR32H 32H 0JNB32H K1 32H 0转K1处执行K1 程序3 SETB32H 32H 1JBC32H K1 32H 1转K1处执行K1 1 长转移指令指令格式 LJMPaddr16 PC addr0 15 3 7控制转移类指令 3 7 1无条件转移指令 例1执行下述程序段 M LJMPKK 2 绝对转移指令指令格式 3 相对短转移指令指令格式 4 间接转移指令JMP A DPTR PC A DPTR 无条件转移指令跳转范围比较 1 累加器A判零转移指令 3 7 2条件转移指令 JZrel 累加器为0转移 否则继续执行JNZrel 累加器不为0转移 否则继续执行 例1将内部RAM单元中起始地址为20H的数据传送到P1口 当RAM单元中内容为0时 不传送 接着传送下一单元内容 a JZrel b JNZrel图3 10累加器A判零转移指令的执行过程 2 比较转移指令指令格式 CJNE rel 图3 11CJNE指令的执行过程 3 循环减1转移指令指令格式 DJNZ rel 图3 12DJNZ指令的操作过程示意 例2在程序中 可以利用DJNZ指令实现软件延时 当晶振频率一定时 则延时的大小可根据程序的需要从几个微秒到几百微秒 甚至毫秒 秒等不同要求来设定 下面是一段当系统晶振频率为12MHz时 在P1 0口输出周期为1毫秒脉冲的延时程序 K2 MOVR2 0F8HK1 DJNZR2 K1CPLP1 0AJMPK2 1 长调用指令指令格式 3 7 3子程序调用和返回指令 2 绝对调用指令指令格式 3 返回指令指令格式 4 中断返回指令指令格式 RETI该指令用于中断返回 执行过程类似于RET RET与RETI指令应分别放在子程序和中断服务程序的最后 5 空操作指令指令格式 NOP PC PC 1 1 MCS 51单片机有哪几种寻址方式 各寻址方式所对应的寄存器和存储空间有何不同 2 MCS 51的指令系统按功能可分为哪几类 3 分别说明以下指令的作用 MOVA 30HMOVA R0MOVA R7MOVA 45HMOVR3 59HMOVR3 60HMOV40H AMOV55H R4MOV50H 30HMOV65H R1 4 试说明MOVX指令与MOVC指令有何区别 3 8思考练习题 5 若 R1 45H A 40H 45H 06H 40H 80H 分析下面的程序段执行后 上述各单元内容有何变化 MOVA R1MOV R1 40HMOV40H AMOVR1 35H 6 将存放在30H单元中的压缩BCD码拆分后 分别存放到31H 32H中 7 试将存放于40H单元的数据0FH乘4 并仍然存放在40H单元中 要求分别用两种方法编程 8 若 50H 40H 写出执行下面程序段后累加器A 寄存器R0 以及内部RAM的40H 41H 42H单元中的内容 MOVA 50HMOVR0 AMOVA 00HMOV R0 AMOVA 3BHMOV42H 41HMOV42H A 9 一个16位数的高字节存放在30H单元 低字节存放在31H单元 另一个16位数据的高字节存放在32H单元 低字节存放在33H单元 试编写程序完成这两个16位数据的减法运算 差的高8位存放入40H 低8位存放到41H单元 10 编写一段程序 查找存放在30H 50H单元中是否有数据34H 若有则将F0置1 否则将F0清0 11 若单片机的晶体振荡器频率为12MHz 试编写一输出到P1 0口的脉冲 脉冲周期为100 s 12 说明RET与RETI指令的区别 第4章单片机的程序设计 u伪指令u汇编语言源程序的编辑与汇编u汇编语言程序设计 有一些指令 如指定目标程序或数据存放的地址 给一些指定的标号赋值 表示源程序结束等指令 并不产生目标程序 机器码 也不影响程序的执行 仅仅产生供汇编用的某些命令 用来对汇编过程进行某种控制或操作 这类指令称为伪指令 4 1伪指令 4 1 1定义起始地址伪指令 格式 ORGaddr16功能 规定程序块或数据块存放的起始地址 addr16表示一个16位的程序存储器的空间地址 一般为一个确定的地址 也可以是事先定义的标号 例如 ORG2000HSTART MOVA 30H 4 1 2定义汇编结束伪指令 格式 END功能 表示汇编结束 4 1 3标号赋值伪指令 格式 标号EQU 表达式 功能 将表达式的值赋给本语句中的标号 又称为等值指令 4 1 4定义字节伪指令 格式 标号 DB 字节表 功能 从标号指定的地址单元开始 在程序存储器中定义字节数据 4 1 5定义字伪指令 4 1 6预留存储区伪指令 格式 标号 DS表达式功能 从标号指定的地址单元开始 定义一个存储区 以备源程序使用 存储区内预留的存储单元数由表达式的值决定 例如 ORG3030HTIMER DS10H 格式 标号 DW 字表 功能 从标号指定的地址单元开始 在程序存储器中存储字数据 4 2汇编语言源程序的编辑与汇编 4 2 1源程序的编辑 编写完成的源程序应以 ASM 的扩展名保存 以备汇编程序调用 4 2 2源程序的汇编 4 3汇编语言程序设计 4 3 1顺序程序 例1已知X Y Z分别为片内RAM30H 31H 32H单元的内容 设X Y 试编程完成下式的算术运算 S X Y Z 并将计算结果S存入片内RAM34H 高字节 35H 低字节 单元中 由于X Y 所以X Y 0 不需要借位 X Y Z的结果最多占用两个字节 实现该要求的程序流程图如图4 2所示 程序清单如下 ORG0030HSTART MOVA 30H A XSUBBA 31H A A XMOVB 32H B ZMULABMOV34H B 34H A B的高字节MOV35H A 35H A B的低字节SJMP 例2编写双字节无符号数乘法程序 被乘数高字节放在R2中 低字节存放在R3中 乘数高字节放在R6中 低字节放在R7中 乘积在R2 R3 R4 R5中 程序段如下 MOVA R3 R3 R7MOVB R7MULABMOVR4 B 暂存部分积MOVR5 AMOVA R3MOVB R6 R3 R6MULABADDA R4 累加部分积MOVR4 ACLRAADDCA BMOVR3 AMOVA R2 R2 R7MOVB R7 MULABADDA R4 累加部分积MOVR4 AMOVA R3ADDCA BMOVR3 ACLRARLCAXCHA R2 R2 R6MOVB R6MULABADDA R3 累加部分积MOVR3 AMOVA R2ADDCA BMOVR2 A 4 3 2分支程序 例1在内部RAM单元的30H和31H中各有一无符号数 试比较其大小 大数存入40H单元 小数存入41H单元 若相等则存入42H单元 程序流程框
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运营商内部体系制度
- 机关内部事务管理制度
- 伊犁师范大学《戏剧工作坊》2024-2025学年第二学期期末试卷
- 机关内部财务管理制度
- 机关科室内部安全制度
- 机构内部绩效考核制度
- 林业内部审计制度
- 检察院内部考核制度汇编
- 检测设备内部检修制度
- 民宿项目内部管理制度
- 2026年包头轻工职业技术学院单招综合素质考试题库附答案详解(基础题)
- 2026年兴安职业技术学院单招职业倾向性测试题库及答案详解(新)
- 社区健康服务与管理
- 杨胜刚版国际金融第一章课件
- XX公司面试信息登记表
- 便携式四合一气体检测仪使用说明书
- 2023年全国新高考I卷讲评课件-2024届高三英语一轮复习
- 年产10吨功能益生菌冻干粉的工厂设计改
- 主要通风机无计划停电停风应急预案
- 统筹方法平话及补充
- GB/T 10609.1-2008技术制图标题栏
评论
0/150
提交评论