51单片机原理及应用.doc_第1页
51单片机原理及应用.doc_第2页
51单片机原理及应用.doc_第3页
51单片机原理及应用.doc_第4页
51单片机原理及应用.doc_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用单片机原理及应用 常州轻工职业技术学院常州轻工职业技术学院 1 前言前言 当今 单片微型计算机技术迅速发展 由单片机技术开发的智能化测 控设备和产品广泛应用到各个领域 单片机技术产品和设备促进了生产技 术水平的提高 企业迫切需要大量熟练掌握单片机技术 并能开发 应用 和维护管理这些智能化产品的高级工程技术人材 单片机以体积小 功能强 可靠性好 性能价格比高等特点 已成为 实现工业生产技术进步和开发机电一体化和智能化测控产品的重要手段 本教材内容分为十章 以 MCS 51 系列单片机为介绍对象 分别介绍 MCS 51 系列单片机结构原理 MCS 51 单片机指令系统 汇编语言程序 设计 并行 I O 口的使用 并行 I O 口的扩展方法及使用 中断系统 和定时 计数器 A D 转换接口和 D A 转换接口技术 键盘与显示器 接口技术等内容 本教材由杨文新 龚益民 韩迎辉老师编写 谢丽华 刘军良老 师参与本书图表的绘制 编者 2004 年 7 月 2 目目 录录 第一章 认识单片机 3 第二章 MCS 51 单片机指令系统 14 第三章 汇编语言程序设计 27 第四章 并行 I O 口 33 第五章 并行 I O 口的扩展 40 第六章 中断系统 49 第七章 定时 计数器 55 第八章 A D 转换接口 60 第九章D A 转换接口 63 第十章 键盘与显示器接口 67 附录一 WAVE 软件的操作使用 附录二 ASCII 码表 附录三 MCS 51 单片机指令系统表 附录四 单片机练习题 附录五 单片机实验指导书 1 第一章第一章认识单片机认识单片机 一 什么是单片机一 什么是单片机 单片机是将CPU 存储器 输入 输出接口 定时 计数器等集成在一块芯片上 是目前销量最 大 应用面最广 价格最便宜的微型计算机 如图1 1所示 例1 1单片机彩灯控制系统 单片机控制8个发光二极管每隔0 1秒轮流点亮 使用单片机实验板进行演示 二 典型单片机产品二 典型单片机产品 1 MCS 51系列 美国Intel公司生产的8位字长单片机 基本型产品有8051 8031 8751等 2 AT89C51系列 美国ATMEL公司生产的8位字长单片机 与MCS 51系列单片机兼容 内含4KB的flash存储器 三 三 MCS 51单片机的内部的硬件结构及引脚单片机的内部的硬件结构及引脚 一 MCS 51单片机内部的总体硬件结构 8051单片机的内部基本结构 如图1 2所示 二 MCS 51单片机的引脚 8051单片机是HMOS工艺制造 外形为40条引脚 如图1 3所示 因为受芯片引脚数量的限制 有很多引脚具有双功能 1 主电源引脚 VCC 芯片工作电源端 接 5V Vss 电源接地端 2 时钟振荡电路引脚 XTAL1 内部晶体振荡电路的反相器输入端 接法如图1 5 XTAL2 内部晶体振荡电路的反相器输出端 接法如图1 5 3 控制信号引脚 RST RST为复位信号输入端 外部接复位电路 接法如图1 4 ALE ALE为地址锁存允许信号 在不访问外部存储器时 ALE以时钟振荡频率的 I O 口CPU 程序 存储器 定时 计数器外设 取指令 图 1 1 单片机结构框图 2 1 6的固定频率输出 用示波器观察ALE引脚上的脉冲信号是判断单片机芯片是否正常工作的一种 简便方法 外部程序存储器ROM的读选通信号 到外部ROM取指令时 自动向PSENPSEN 外发送负脉冲信号 为访问程序存储器的控制信号 EA 4 并行I 端口引脚 P0口 P0 0 P0 7 P1口 P1 0 P1 7 P2口 P2 0 P2 7 P3口 P3 0 P3 7 振荡器和时钟 电路 程序存储器 4KB ROM 数据存储器 256B RAM SFR 8051 CPU 两个 16 位 定时器 计数器 中断系统 64K 字节 总线扩展控制 并行 I O 端口全双工 串行口 外部时钟源 外部计数脉冲 外中断 控制 外部设备 串行通讯 图1 2 8051单片机的内部基本结构 3 三 复位电路与时钟电路 1 复位电路 1 复位电路 单片机的RST引脚是复位信号输入端 RST引脚上保持两个机器周期 24个时钟周期 以上的 高电平时 可使单片机内部可靠复位 单片机常用的外部复位电路如图1 4 a 引脚图 b 逻辑符号 图1 3 MCS 51引脚图 4 2 复位状态 复位后 单片机内部的各寄存器的内容将被初始化 包括程序计数器PC和特殊功能寄存器 其中 PC 0000H 特殊功能寄存器的状态见表1 1 复位不影响片内RAM和片外RAM中的内容 表1 1 复位后特殊功能寄存器的初始状态 SFR名称初始状态SFR名称初始状态 ACC00HTMOD00H B00HTCON00H PSW00HTH000H SP07HTL000H DPL00HTH100H DPH00HTL100H P0 P3FFHSBUF不确定 IP 00000BSCON00H IE0 00000BPCON0 B a 上电复位电路 b 上电复位兼手动复位电路 图1 4 MCS 51的复位电路 5 2 时钟电路 时钟电路用于产生时钟信号 时钟信号是单片机内部各种微操作的时间基准 在此基础上 控制器按照指令的功能产生一系列在时间上有一定次序的信号 控制相关的逻辑电路工作 实现 指令的功能 电容容量范围为30PF 10PF 石英晶体频率的范围为1 2 12MHZ 常用6MHZ或12MHz 3 时序单位 1 时钟周期 是时钟信号频率fosc的倒数 时钟周期 1 fosc 2 机器周期 机器周期 12 时钟周期 3 指令周期 OSC 时钟 ALE 图1 6 时序图 图1 5 8051的外接石英晶体的时钟电路 6 一条指令从被读取到被执行的整个过程所需的时间称为指令周期 思考题 fosc分别为6MHZ和12MHZ时 机器周期分别为多少 四 四 MCS 51单片机的内部硬件的主要功能单片机的内部硬件的主要功能 一 中央处理单元CPU 它由运算器和控制器两部分组成 1 运算器 运算器是进行各种算术运算和逻辑运算的部件 与运算器有关的寄存器包括ACC B PSW 1 累加器 ACC 8 位寄存器 2 B 寄存器 8 位 3 程序状态字寄存器 PSW 8 位 PSW 主要用于存放程序状态信息以及运算结果的标志 所以又称标志寄存器 其格式如下 D1位没有定义 D7 D6 D5 D4 D3 D2 D1 D0 CYACF0RS1RS0OV P CY 进位标志位 AC 辅助进位标志位 F0 用户标志位 RS1 RS0 工作寄存器区选择控制位 OV 溢出标志位 P 奇偶标志位 2 控制器 1 控制器的组成 控制器是由程序计数器PC 指令寄存器 译码器 定时与控制电路等组成的 2 程序计数器PC PC是一个16位的寄存器 PC中的内容是下一条将要执行的指令代码的起始存放地址 当 单片机复位之后 PC 0000H 引导CPU到0000H地址读取指令代码 CPU每读取一个字节 的指令 PC的内容会自动加1 指向下一个地址 使CPU按顺序去读取后面的指令 从而引导 CPU按顺序执行程序 二 存储器 1 8051 的存储器分为两大存储空间 程序存储器 ROM 空间 1 片内 4KB 的程序存储器 其地址为 0000H 0FFFH 2 片外 64KB 的程序存储器 其地址为 0000H FFFFH 数据存储器 RAM 空间 1 片内 256B 的数据存储器 00H 7FH 为通用的数据存储区 80H FFH 为专用的特殊 功能寄存器区 7 2 片外 64KB 的数据存储器 其地址为 0000H FFFFH 与 8051 不同的是 8751 片内包含 4KB 的 EPROM 程序存储器 而 8031 内部不包含程序存储 器 2 程序存储器 1 程序存储器主要用于存放程序和表格常数 2 程序存储器分为片内 片外两部分 总容量最大为 64KB 地址为 0000H FFFFH 3 引脚的接法 EA 对于 8051 8751 等片内有程序存储器的芯片 引脚应该接高电平 对于 8031 这种片内 EA 无程序存储器的芯片 引脚应该接低电平 EA 3 数据存储器 数据存储器主要用于存放各种数据 以下只对内部数据存储器进行介绍 7FH 30H 2FH 20H 1FH FFFFH FFFFH 1000H 0FFFH 0FFFH FFH 80H 7FH 0000H 0000H 00H 0000H 程序存储器 内部数据存储器 外部数据存储器 60KB 外部 ROM 4KB 内部 ROM EA 1 4KB 外部 ROM EA 0 特殊功能 寄存器 内部 RAM 64KB 外部 RAM 图 1 7 8051 的存储器结构 用户区 位寻址区 位地址 00 7F 工作寄存器区3 R0 R7 工作寄存器区2 R0 R7 工作寄存器区1 R0 R7 工作寄存器区0 R0 R7 8 00H 图 1 8 内部数据存储器的结构 1 低 128B 的内部数据存储器 按其功能不同划分为三个区域 工作寄存器区 00H 1FH 该区均分为四个小区 任何时候 只有一个区的工作寄存器可以工作 称为当前工作寄存 器区 当前区的选择可通过对寄存器 PSW 中的 RS1 RS0 两个位的设置来进行 见表 1 2 表 1 2 当前工作寄存器区的选择 思考题 单片机复位时 当前工作寄存器区是哪个 位寻址区 20H 2FH 位寻址区有 16 个单元组成 共 128 个位 每个位具有位地址 表 1 3 中表格数据是每个位的 位地址 每个单元也可作一般的数据缓冲单元使用 表 1 3 片内 RAM 的位寻 址 字节地址 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H RS1RS0当前工作寄存器区 000 区 011 区 102 区 113 区 位地址映象 7FH7EH7DH7CH7BH7AH79H78H 77H76H75H74H73H72H71H70H 6FH6EH6DH6CH6BH6AH69H68H 67H66H65H64H63H62H61H60H 5FH5EH5DH5CH5BH5AH59H58H 57H56H55H54H53H52H51H50H 4FH4EH4DH4CH4BH4AH49H48H 47H46H45H44H43H42H41H40H 3FH3EH3DH3CH3BH3AH39H38H 37H36H35H34H33H32H31H30H 2FH2EH2DH2CH2BH2AH29H28H 27H26H25H24H23H22H21H20H 1FH1EH1DH1CH1BH1AH19H18H 17H16H15H14H13H12H11H10H 0FH0EH0DH0CH0BH0AH09H08H 07H06H05H04H03H02H01H00H 9 26H 25H 24H 23H 22H 21H 20H 用户区 30H 7FH 为一般数据缓冲区 堆栈区通常也设置在这个区域内 2 高 128 字节 特殊功能寄存器区 8051 内部有 21 个特殊功能寄存器 简称 SFR 它们均为 8 位的寄存器 离散分布在 80H FFH 区域 剩下 107 个单元是没有定义的 用户不能使用 见表 1 4 有 11 个 SFR 的字节地址可被 8 整除 地址以 0 和 8 结尾 可以位寻址 表中已给出它们的 位地址 表1 4 特殊功能寄存器地址对照表 SPR 名称符号D7 位地址 位定义 D0字节地址 F7F6F5F4F3F2F1F0B 寄存器B F0H E7E6E5E4E3E2E1E0累加器 AACC E0H D7D6D5D4D3D2D1D0程序状态字PSW CYACF0RS1RS0OV P D0 BFBEBDBCBBBAB9B8中断优先级控制IP PSPT1PX1PT0PX0 B8H B7B6B5B4B3B2B1B0I O 端口 3P3 P3 7P3 6P3 5P3 4P3 3P3 2P3 1P3 0 B0H AFAEADACABAAA9A8中断允许控制IE EA EAET1EX0ET0EX0 A8H I O 端口 2P2A7A6A5A4A3A2A1A0 A0H 10 P2 7P2 6P2 5P2 4P2 3P2 2P2 1P2 0 串行数据缓冲SBUF 99H 9F9E9D9C9B9A9998串行控制SCON SW0SW1SW2RENTB8RB8TIRI 98H 9796959493929190I O 端口 1P1 P1 7P1 6P1 5P1 4P1 3P1 2P1 1P1 0 90H 定时 计数器 1 高字节 TH1 8DH 定时 计数器 0 高字节 TH0 8CH 定时 计数器 1 低字节 TL1 8BH 定时 计数器 0 低字节 TL0 8A 定时 计数器方式选择TWODGATEC TW1W0GATEC TW1W0 89H 8F8E8D8C8B8A8988定时 计数器控制TCON TF1TR1TF0TR0IE1IT1IE0IT0 88H 电源控制与波特率选择PCON 87H 数据指针高字节DPH 83H 数据指针低字节DPL 82H 堆栈指针SP 81H 8786858483828180I O 端口 0P0 P0 7P0 6P0 5P0 4P0 3P0 2P0 1P0 0 80H 五 五 计算机中的数制与编码计算机中的数制与编码 一 常用数制 数制也就是进位制 计算机中常用的进位制有二进制 B字母结尾 十进制 D字母结尾 可省略 十六进制 H字母结尾 等 其中二进制是计算机内部使用的 十进制 十六进制通常 是人们书写程序或描述计算机工作过程时使用的 二 数制间的转换 三种进制的对应关系见表1 5 表1 5 三种进制数对照表 二进制 B 十六进制 H 十进制 D 二进制 B 十六进制 H 十进制 D 000000100088 000111100199 0010221010 A10 0011331011B11 0100441100C12 0101551101D13 0110661110E14 0111771111F15 11 1 十进制转换为二进制 整数部分的转换方法称为 除2取余法 小数部分的转换方法称为 乘2取整法 2 二进制转换成十进制 将二进制数的各个非零位分别乘以位权之后相加求和 3 十进制转换成十六进制 整数部分的转换方法称为 除16取余法 小数部分的转换方法称 乘16取整法 4 十六进制转换成十进制 将十六进制数的各个非零位分别乘以位权后相加求和 5 二进制与十六进制之间的转换 二进制数转换成十六进制数的方法是 4位二进制数对应于1位十六进制数 对应关系见表1 4 十六进制数转换为二进制数的方法是 将每1位十六进制数用对应的4位二进制数替换 练习 练习 1 将194转换成二进制数 2 将120转换成十六进制数 3 将10101000B转换成十进制数 4 将19BH转换成十进制数 5 将二进制数1011011 110B转换为十六进制数 6 将十六进制数 7B 25H 转换为二进制数 三 常用二进制编码 1 二进制编码的十进制数 十进制数用二进制编码的形式来表示 称为二 十进制编码 即 BCD码 Binary Code Decimal 最常用的是8421BCD码 表1 5列出了BCD码 8421码 与十进制数的对照表 互换时 可以按4位对应1位的原则 进 行转换 表1 6 BCD 8421 码与十进制数的对照表 十进制数BCD 码十进制数BCD 码 0000050101 1000160110 2001070111 3001181000 4010091001 课堂练习 课堂练习 1 将79 32转换成BCD码 2 将BCD码10000110 0101转换成十进制 2 字符编码 ASCll码 计算机中的各种字符 包括 0 9数字 大小写英文字母 标点符号及用于控制的特殊符号 12 等 也必须用二进制编码表示 在计算机中一般统一使用ASCII码来表示字符 ASCII码是美国信息交换标准代码的简称 每个字符的ASCII码是由7位二进制数构成 第八位 最高位 通常定为奇偶校验位 例如 数字 0 9的ASCII码为30H 39H 大写字母A Z的ASCII码为41H 5AH 四 带符号数的表示 在计算机中是使用数字 0 和 1 来表示数的符号的 如 号用 0 表示 号用 1 表示 一个数在计算机中有三种表示方法 原码 反码 补码 下面以8位带符号数为例进行介绍 1 原码 最高位 D7位 作符号位 用 0 或 1 表示数的正或负 其余位为数值位 用来表示该数的 大小 即绝对值 例 112 原码 01110000B 112 原码 11110000B 原码所能表示的十进制范围是 127 127 2 反码 正数的反码与原码相同 负数的反码 符号位为1 数值位是将原码的数值位按位取反 即原 来是 0 的 取为 1 原来是 1 的 取为 0 例 112 反码 01110000B 112 反码 10001111B 反码可表示的十进制范围是 127 127 3 补码表示法 正数的补码与原码相同 负数的补码 符号位为 1 数值位是将反码的数值位加1形成 例 112 补码 01110000B 112 补码 10010000B 用补码可表示的十进制范围是 128 127 因为带符号数用补码表示 可以简化运算 所以较常用 五 无符号数 无符号的8位二进制数没有符号位 8位均为数值位 即 8位无符号二进制数对应的十进制范围为 0 255 13 第二章第二章 MCS 51 单片机指令系统单片机指令系统 一 指令的表达形式一 指令的表达形式 每条指令有两种不同的表达形式 1 二进制代码 机器码 指令 2 助记符 汇编语言 指令 助记符指令 MOV A 30H 二进制代码指令 01110100 00110000 助记符指令必须转换成二进制代码指令才能存入存储器 本章仅介绍助记符指令格式 对应的机器码格式可参考附录 二 汇编语言指令格式二 汇编语言指令格式 操作码 第一操作数 第二操作数 第三操作数 1 操作码 用来规定指令进行何种操作 是指令中不能空缺的部分 2 操作数 表示参与指令操作的数据或数据所在的地址 为可选项 有两个操作数时 前一个为目的操作数 后一个为源操作数 三 指令中有关操作数符号的说明三 指令中有关操作数符号的说明 Rn 工作寄存器R0 R7 n 0 1 2 7 Ri 工作寄存器R0和R1 i 0或1 Direct 内部RAM的单元地址 地址范围为00 FFH data 8位立即数 即常数 data16 16位立即数 addr16 16位目的地址 Addrll 11位目的地址 四 四 MCS 51单片机指令系统单片机指令系统 MCS 51的指令按功能分为五大类 数据传送 算术运算 逻辑运算 控制转移和位操作 指令 一 数据传送类指令 注意 源操作数在传送前后保持不变 1 内部数据传送指令 指令 功能说明 MOV A Rn A Rn MOV A direct A direct MOV A Ri A Ri MOV A data A data MOV Rn A Rn A MOV Rn direct Rn direct MOV Rn data Rn data 14 MOV direct A direct A MOV direct Rn direct Rn MOV direct Ri direct Ri MOV direct1 direct2 direct1 direct2 MOV direct data direct data MOV Ri A Ri A MOV Ri direct Ri direct MOV Ri data Ri data MOV DPTR data16 DPTR data16 例2 1 设 30H 40H 40H 10H P1 0CAH 试判断下列程序执行后的结果 MOV R0 30H R0 30H MOV A R0 A 30H A 40H MOV R1 A R1 A R1 40H MOV B R1 B 40H B 10H MOV R1 P1 R1 P1 40H 0CAH MOV P2 P1 P2 P1 P2 0CAH 结果是 A 40H B 10H 40H 0CAH P2 0CAH 2 外部数据传送指令 此类指令完成对片外RAM单元中数据的读 写操作 1 读指令 MOVX A DPTR A DPTR MOVX A Ri A Ri 2 写指令 MOVX DPTR A DPTR A MOVX Ri A Ri A 注意注意 用R0和R1间接寻址时 要占用P2寄存器放外部RAM的高8位地址 R0和R1放低8位地 址 使用时 要先将低8位地址送入Ri R0或R1 高8位地址送入P2寄存器 然后再 用上述指令 例2 2 将片外RAM1000H单元中的内容送到2000H单元 方法一 MOV DPTR 1000H DPTR 1000H MOVX A DPTR A DPTR MOV DPTR 2000H DPTR 2000H MOVX DPTR A DPTR A 方法二 MOV P2 10H P2 10H MOV R0 00H R0 00H MOVX A R0 A R0 15 MOV P2 20H P2 20H MOVX R0 A R0 A 注意 注意 在两个片外RAM单元之间是不能直接进行数据的传送的 必须经过片内的累加器A来间接 地传送 3 访问程序存储器的传送指令 查表指令 MOVC A A PC PC PC 1 A A PC MOVC A A DPTR A A DPTR 其功能是到程序存储器中查表格数据送入累加器A 程序存储器中除了存放程序之外 还会放 一些表格数据 又称查表指令 指令中的操作数为表格数据 前一条指令将A中的内容与PC的内容相加得到16位表格地址 后一条指令是将A中的内容与 DPTR中的内容相加得到16位表格地址 4 数据交换指令 XCH A Rn A Rn XCH A direct A direct XCH A Ri A Ri XCHD A Ri A 3 0 Ri 3 0 5 堆栈操作指令 在片内RAM的00H 7FH地址区域中 可设置一个堆栈区 主要用于保护和恢复CPU的工作 现场 1 进栈指令 PUSH direct SP SP 1 SP direct 2 出栈指令 POP direct direct SP SP SP 1 二 算术运算类指令 注意大部分指令的执行结果将影响程序状态字PSW的有关标志位 一 加法指令 ADD A Rn A A Rn ADD A direct A A direct ADD A Ri A A Ri ADD A data A A data ADDC A Rn A A Rn CY ADDC A direct A A direct CY ADDC A Ri A A Ri CY ADDC A data A A data CY 16 如果把参加运算的两个操作数看作是无符号数 0 255 加法运算对CY标志位的影响如下 1 若结果的第7位向前有进位 C7 1 CY 1 2 若结果的第7位向前无进位 C7 0 CY 0 例2 3 设有两个无符号数放在A和R2中 设 A 0C6H 198 R2 68H 104 执行指令 ADD A R2 试分析运算结果及对标志位的影响 解 写成竖式 A 11000110 198 R2 01101000 104 A 1 00101110 302 结果是 A 2EH CY 1 二 加1指令 INC A A A 1 INC Rn Rn Rn 1 INC direct direct direct 1 INC Ri Ri Ri 1 INC DPTR DPTR DPTR 1 这组指令的功能是使源操作数的值加1 例2 4 设有两个16位无符号数 被加数存放在内部RAM的30H 低位字节 和 31H 高位字节 中 加数存放在40H 低位字节 和41H 高位字节 中 试写出求两数之和 并把结果存放在30H和31H单元中的程序 参考程序为 MOV R0 30H 地址指针R0赋值 MOV R1 40H 地址指针R1赋值 MOV A R0 被加数的低8位送A ADD A R1 被加数与加数的低8位相加 和送A 并影响CY标志 MOV R0 A 和的低8位存30H单元 INC R0 修改地址指针R0 INC R1 修改地址指针R1 MOV A R0 被加数的高8位送A ADDC A R1 被加数和加数的高8位与CY相加 和送A MOV R0 A 和的高8位存31H单元 三 减法指令 1 带借位减法指令 SUBB A Rn A A Rn CY 17 SUBB A direct A A direct CY SUBB A Ri A A Ri CY SUBB A data A A data CY 该组指令的功能是从累加器A减去源操作数及标志位CY 其结果再送累加器A CY位在减法 运算中是作借位标志 SUBB指令对标志位的影响如下 1 若第7位向前有借位 C7 1 则CY 1 2 若第7位向前无借位 C7 0 则CY 0 例2 5 在A和R3中存有两个无符号数 设 A 98H R3 6AH CY 1 执行指 令 SUBB A R3 分析执行结果及对标志位的影响 解 A 10011000 98H R3 01101010 6AH CY 1 1 A 00101101 2DH 结果是 A 2DH CY 0 2 减1指令 DEC A A A 1 DEC Rn Rn Rn 1 DEC direct direct direct 1 DEC Ri Ri Ri 1 这组指令的功能是使源操作数的值减1 四 十进制调整指令 DA A 指令专用于实现BCD码的加法运算 其功能是将累加器A中按二进制相加后的结果调整成BCD 码相加的结果 1 ADD或ADDC指令的结果是二进制数之和 2 DA 指令的结果是BCD码之和 十进制调整指令执行时会对Cy位产生影响 例2 6 MOV A 75H MOV R3 69H ADD A R3 A DEH CY 0 MOV B A B DEH DA A A 44H CY 1 五 乘法指令 MUL AB BA A B 18 指令的功能是把累加器A和寄存器B中两个8位无符号整数相乘 并把乘积的高8位存于寄存器B 中 低8位存于累加器A中 乘法运算指令执行时会对标志位产生影响 CY标志总是被清0 即CY 0 OV标志则反映乘积 的位数 若OV 1 表示乘积为16位数 若OV 0 表示乘积为8位数 六 除法指令 DIV AB A商 B余 A B 指令的功能是把累加器A和寄存器B中的两个8位无符号整数相除 所得商的整数部分存于累加 器A中 余数存于B中 除法指令执行过程对标志位的影响 CY位总是被清0 OV标志位的状态反映寄存器B中的除数 情况 若除数为0 则OV 1 表示本次运算无意义 否则 OV 0 三 逻辑运算类指令 在MCS 51指令系统中 逻辑运算类指令有25条 可实现与 或 异或等逻辑运算操作 这类 指令有可能会影响CY和P标志位的状态 一 累加器A的逻辑操作指令 1 累加器A清0 CLR A A 00H 2 累加器A取反 CPL A A A 例2 7 设 A 33H 执行指令 CPL A 结果是 A 0CCH 3 累加器A循环左移 RL A 利用左移指令 可实现对A中的无符号数乘2的目的 例2 8 执行下列指令后 A中的内容如何变化 MOV A 11H A 11H 17 RL A A 22H 34 RL A A 44H 68 RL A A 88H 136 RL A A 11H 17 4 累加器A带进位循环左移 RLC A 5 累加器A循环右移 RR A D7 D0 CY D7 D0 D7 D0 19 对累加器A进行的循环右移 可实现对A中无符号数的除2运算 6 累加器A带进位循环右移 RRC A 7 累加器A半字节交换 SWAP A 功能是将累加器A中内容的高4位与低4位互换 例2 9 设 A 63H 执行指令 SWAP A 结果为 A 36H 二 逻辑与指令 ANL A Rn A A Rn ANL A direct A A direct ANL A Ri A A Ri ANL A data A A data ANL direct A direct direct A ANL direct data direct direct data 功能是将目的操作数和源操作数按位进行逻辑与操作 结果送目的操作数 在程序设计中 逻辑与指令主要用于对目的操作数中的某些位进行屏蔽 清0 方法是 将 需屏蔽的位与 0 相与 其余位与 1 相与即可 三 逻辑或指令 ORL A Rn A A Rn ORL A direct A A direct ORL A Ri A A Ri ORL A data A A data ORL direct A direct direct A ORL direct data direct direct data 功能是将目的操作数和源操作数按位进行逻辑或操作 结果送目的操作数 CY D7 D0 D7 D4 D3 D0 20 逻辑或指令可对目的操作数的某些位进行置位 方法是 将需置位的位与 1 相或 其余位与 0 相或即可 常用于组合数据 四 逻辑异或指令 XRL A Rn A A Rn XRL A direct A A direct XRL A Ri A A Ri XRL A data A A data XRL direct A direct direct A XRL direct data direct direct data 功能是将目的操作数和源操作数按位进行逻辑异或操作 结果送目的操作数 逻辑异或指令可用于对目的操作数的某些位取反 而其余位不变 方法是 将要取反的这些 位和 1 异或 其余位则和 0 异或即可 例2 10 将工作寄存器R2中数据的高4位和R3中的低4位拼成一个数 并将该数存入 30H MOV R0 30H R0作地址指针 MOV A R2 ANL A 0F0H 屏蔽低4位 MOV B A 中间结果存B寄存器 MOV A R3 ANL A 0FH 屏蔽高4位 ORL A B 组合数据 MOV R0 A 结果存30H单元 例2 11 分析下列程序的执行结果 MOV A 77H A 77H XRL A 0FFH A 77H FFH 88H ANL A 0FH A 88H 0FH 08H MOV P1 64H P1 64H ANL P1 0F0H P1 64H F0H 60H ORL A P1 A 08H 60H 68H 四 控制转移类指令 转移指令的功能是通过修改程序计数器PC的值 使程序执行的顺序发生变化 从而改变程序 执行的方向 一 无条件转移指令 无条件转移指令是使程序无条件转移到指定的地址去执行 21 1 长转移指令 LJMP addr16 PC addr16 指令的功能是将指令提供的16位地址 addr16 送入PC 然后程序无条件地转向目标地址 addr16 处执行 addr16可表示的地址范围是 0000H FFFFH 2 绝对转移指令 AJMP addr11 PC PC 2 PC10 0 addr11 指令的功能是先使程序计数器PC值加2 完成取指并指向下一条指令的地址 然后将指令 提供的addrll作为转移目的地址的低11位 和PC当前值的高5位形成16位的目标地址 程序随即转 移到该地址处执行 3 相对转移指令 SJMP rel PC PC 2 rel 操作数为相对寻址方式 指令的功能是先使PC 2 完成取指并指向下一条指令地址 然后 把PC当前值与地址偏移量rel相加作为目标转移地址 即 目标地址 PC 2 rel PC rel rel是一个带符号的8位二进制数的补码 数值范围是 128 127 所以SJMP指令的转移 范围是 以PC当前值为起点 可向前 号表示 跳128个字节 或向后 号表示 跳127字 节 当满足转移范围的条件下 可采用 SJMP addr16 形式 4 间接转移指令 JMP A DPTR PC A DPTR 指令的功能是将累加器A中8位无符号数与DPTR的16位内容相加 和作为目标地址送入PC 实现无条件转移 二 条件转移指令 条件转移指令要求对某一特定条件进行判断 当满足给定的条件 程序就转移到目标地址 去执行 条件不满足则顺序执行下一条指令 可用于实现分支结构的程序 这类指令中操作数都为相对寻址方式 目标地址的形成与SJMP指令相类似 当满足转移范 围的条件下 均可用 addr16 代替 rel 1 累加器A的判零转移指令 JZ rel 若 A 0 则PC PC 2 rel 若 A 0 则PC PC 2 JNZ rel 若 A 0 则PC PC 2 rel 若 A 0 则PC PC 2 第一条指令的功能是如果累加器A的内容为零 则程序转向指定的目标地址 否则程序顺序执 行 第二条指令的功能是如果累加器A的内容不为零 则程序转向指定的目标地址 否则程序顺 序执行 例2 12 将片内RAM的40H单元开始的数据块传送到片外RAM的1000H开始的单元中 22 当遇到传送的数据为零则停止传送 START MOV R0 40H 片内RAM数据块首址 MOV DPTR 1000H 片外RAM数据块首址 LOOP MOV A R0 取数 JZ ABD 等于零 结束 MOVX DPTR A 不为零 送数 INC R0 地址指针加1 INC DPTR 地址指针加1 SJMP LOOP 转LOOP 继续取数 ABD SJMP ABD 踏步 2 比较转移指令 CJNE A data rel 若 A data 则PC PC 3 rel 若 A data 则PC PC 3 CJNE A direct rel 若 A direct 则PC PC 3 rel 若 A direct 则PC PC 3 CJNE Rn data rel 若 Rn data 则PC PC 3 rel 若 Rn data 则PC PC 3 CJNE Ri data rel 若 Ri data 则PC PC 3 rel 若 Ri data 则PC PC 3 该组指令的功能是将前两个操作数进行比较 若不相等则程序转移到指定的目标地址执行 相等则顺序执行 指令执行过程中 对两个操作数进行比较是采用相减运算的方法 因此比较结果会影响CY标 志 如前数小于后数 则CY 1 否则 CY 0 我们可以进一步根据对CY值的判断确定两个操作 数的大小 实现多分支转移功能 例2 13 当Pl口输入数据为55H时 程序继续运行 若不为55H则程序进入等待状态 程序如下 WAIT MOV A P1 A P1 CJNE A 55H WAIT A 55H 转向WAIT A 55H 则顺序执行 例2 14 某温度控制系统中 温度的测量值T存在累加器A 温度的给定值Tg存在60H单元 要求 T Tg时 程序返回 符号地址为FH T Tg时 程序转向降温处理程序 符号地址为JW T Tg时 程序转向升温处理程序 符号地址为SW 试编制程序 相应的程序如下 CJNE A 60H L00P T Tg 转向 L00P AJMP FH T Tg 转向FH LOOP JC SW TTg 转向JW 3 循环转移指令 DJNZ Rn rel 若 Rn 1 0 则PC PC 2 rel 若 Rn 1 0 则PC PC 2 DJNZ direct rel 若 direct 1 0 则PC PC 3 rel 若 direct 1 0 则PC PC 3 第一条是将Rn的内容减1后进行判断 若不为零则程序转移到目标地址处执行 若为零 则程 序顺序执行 23 第二条是将direct单元的内容减1后进行判断 若不为零 则程序转移到目标地址 若为零 则程序顺序执行 例2 15 将片内RAM的30H 39H单元置初值00H 09H MOV R0 30H 设定地址指针 MOV R2 0AH 数据区长度设定 MOV A 00H 初值装入A LOOP MOV R0 A 送数 INC R0 修改地址指针 INC A 修改待传送的数据 DJNZ R2 LOOP 未送完 转LOOP地址继续送 否则传送结束 HERE SJMP HERE 踏步 三 子程序调用和返回指令 单片机的应用程序由主程序和子程序等形式组成 主程序可通过调用指令去调用子程序 子程序执行完后再由返回指令返回到主程序 因此 调用指令应放在主程序中 返回指令应放在子程序中 放在最后一条的位置 同一个子程序可以被多次调用 子程序还可调用别的子程序 称为子程序嵌套 1 调用指令 1 长调用指令 LCALL addr16 addr16 子程序入口地址 2 绝对调用指令 ACALL addr11 addr11 子程序入口地址的低11位 高5位由PC定 2 返回指令 1 子程序返回指令 RET 指令的功能 从子程序返回到主程序的断点地址 2 中断返回指令 图 2 1 子程序的调用和返回示意图 24 RETI 指令的功能 从中断服务程序返回到主程序的断点地址 四 空操作指令 NOP PC PC 1 该指令执行时不进行任何有效的操作 但需要消耗一个机器周期的时间 所以在程序设计中 可用于短暂的延时 五 位操作指令 在MCS 51存储器中有两个可位寻址的区域 可利用位操作指令对这些位进行单独的操作 存储器中的两个位寻址区的分布是 1 片内RAM的20H 2FH区域 2 特殊功能寄存器中地址可被8整除的单元 位操作指令中 bit是位变量的位地址 可使用四种不同的表示方法 下面以CY位为例进行说 明 1 位地址 如 D7H 2 位定义名 如 CY 3 寄存器名 位 如 PSW 7 注意 累加器必须表示成 ACC 0 ACC 7 4 字节地址 位 如 D0H 7 标志位CY在位操作指令中称作位累加器 用符号C表示 一 位传送指令 MOV C bit CY bit MOV bit C bit CY 第一条指令的功能是将bit位的内容传送到CY 第二条指令是将CY的内容传送到bit位 二 置位和清零指令 CLR C CY 0 CLR bit bit 0 SETB C CY 1 SETB bit bit 1 前两条指令的功能 位清零 后两条指令的功能 位置1 例2 16 SETB RS1 CLR RS0 设定工作寄存器2区为当前工作区 三 位逻辑运算指令 ANL C bit CY CY bit ANL C bit CY CY bit 25 ORL C bit CY CY bit ORL C bit CY CY bit CPL C CY CY CPL bit bit bit 例2 17 用编程的方法实现图2 2所示电路的功能 程序清单 MOV C P1 1 ORL C P1 2 ANL C P1 0 MOV P1 3 C 四 位条件转移指令 1 判CY的条件转移指令 JC rel JNC rel 第一条指令功能是对CY进行判断 若 CY 1 则转移到目标地址去执行 若 CY 0 则程序顺序执行 第二条指令也是对CY进行判断 若 CY 0 则转移 若 CY 1 则顺序执行 若发生转移 则 目标地址 PC 2 rel 转移范围与SJMP rel 指令相同 当满足转移范围的条件下 可用 addr16 代替 rel 2 判位变量的条件转移 JB bit rel JNB bit rel JBC bit rel 第一条指令的功能是若bit位内容为1 转移到目标地址 目标地址 PC 3 rel 若为0 程 序顺序执行 第二条指令的功能是是若bit位内容为0 不为1 转移到目标地址 目标地址 PC 3 rel 若为1 程序顺序执行 第三条指令的功能是若bit位内容为1 则将bit位内容清0 并转移到目标地址 目标地址 PC 3 rel 若bit位内容为0 程序顺序执行 图 2 2 26 第三章第三章 汇编语言程序设计汇编语言程序设计 一 程序设计概述一 程序设计概述 一 程序设计语言 1 机器语言 机器语言是用机器码编写程序 能被计算机直接识别和执行 2 汇编语言 汇编语言是用助记符编写程序 汇编 计算机不能直接识别和执行汇编语言程序 而要通过 翻译 把源程序译成机器语言程序 目标程序 才能执行 这一 翻译 工作称为汇编 汇编有人工汇编和计算机汇编两种 方法 反汇编 有时需要根据已有的机器语言程序 将其转化为相应的汇编语言程序 这个过程称为 反汇编 汇编语言是面向机器的 每一类计算机分别有自己的汇编语言 汇编语言占用的内存单元少 执行效率高 广泛应用于工业过程控制与检测等场合 本章将介绍MCS 51系列单片机的汇编语言程序设计 3 高级语言 高级语言是一种面向算法和过程并独立于机器的通用程序设计语言 如BASIC C语言等 在MCS 51系列单片机开发应用中 单片机C语言 C51正得到越来越广泛的应用 二 MCS 51单片机汇编语言语句格式 标号 操作符 操作数 注释 START MOV A 30H A 30H 1 标号 标号用来标明语句地址 它代表该语句指令机器码的第一个字节的存储单元地址 标号一般规定由1 8个英文字母或数字组成 但第一个符号必须是英文字母 2 注释 注释只是对语句或程序段的含义进行解释说明 以方便程序的编写 阅读和交流 简化软件的 维护 一般只在关键处加注释 三 伪指令 伪指令 伪指令只用于汇编语言源程序中 对汇编过程起控制和指导的作用 不生成机器码 27 汇编结束 自动消失 MCS 51单片机主要有8条伪指令 1 定义起始地址伪指令ORG ORG 16位地址或标号 功能 定义以下程序段的起始地址 例3 1 地址 指令代码 源程序 ORG 0000H 0000H 022000 LJMP MAIN 上电转向主程序 ORG 0023H 串行口中断入口地址 0023H 02XXXX LJMP SERVE1 转中断服务程序 ORG 2000H 主程序 2000H 758920 MAIN MOV TMOD 20H 设T1作方式2 2003H 758DF3 MOV TH1 0F3H 赋计数初值 2006H 758BF3 MOV TL1 0F3H 2009H D28E SETB TR1 启动T1 2 汇编语言结束伪指令END END伪指令放在源程序的末尾 用来指示源程序到此全部结束 3 赋值伪指令EQU EQU用于给它左边的 字符名称 赋值 其格式为 字符 EQU 操作数 操作数可以是8位或16位二进制数 也可以是事先定义的标号或表达式 例3 2 ORG 0500H AA EQU R1 A10 EQU 10H MOV R0 A10 R0 10H MOV A AA A R1 注意 EQU伪指令中的字符必须先赋值后使用 故该语句通常放在源程序的开头 4 数据地址赋值伪指令DATA 其格式为 字符名称 DATA 表达式 DATA伪指令功能和EQU相类似 它把右边 表达式 的值赋给左边的 字符名称 这里的表 达式可以是一个数据或地址 也可以是一个包含所定义字符名称在内的表达式 DATA伪指令和EQU伪指令的

温馨提示

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

评论

0/150

提交评论