广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 第一章介绍 这是一本关于 Intel80C51以及广大的51系列单片机的书。这本书介绍给读者一些 新的技术,使你的8051工程和开发过程变得简单。请注意,这本书的目的可不是教你各种 8051嵌入式系统的解决方法。 为使问题讨论更加清晰,在适当的地方给出了程序代码。我们以讨论项目的方法来说 明每章碰到的问题。所有的代码都可在附带的光盘上找到。你必须熟系C和8051汇编,因 为本书不是一本C和汇编的指导书。你可以买到不少关于 ANSIC的书,最佳选择当然是 Intel 的数据书(可从你的芯片供应商处免费索取)和随编译工具附送的手册。 附送光盘中有我为这本书编写和收集的程序,这些程序已经通过测试,这并不意味着 你可以随时把这些程序加到你的应用系统或工程中,有些地方必须首先经过修改才能结合 到你的程序中 这本书将教你充分使用你的工具,如果你只有8051的汇编程序,你也可以学习该书和 使用这些例子,但是你必须把C语言的程序装入你的汇编程序中,这对懂得C语言和8051 汇编程序指令的人来说并不是一件困难的事 如果你有C编译器的话,那恭喜你。使用C语言进行开发是一个好的决定,你会发现 使用C进行开发将使你的工程开发和维护的时间大大减少。如果你己经拥有 Keil c51,那 你已经选择了一个非常好的开发工具,我发现Keil软件包能够提供最好的支持,本书支持 Keil c的扩展。如果你有其它的开发工具像 Archimedes和 Avocet,这本书也能很好地为 你服务,但你必须根据你所用的开发工具改变一些Keil的特殊指令 在书的一些地方有硬件图,实例程序在这些硬件上运行。这些图绘制地不是很详细 主要是方框图,但足以使读者明白软件和硬件之间的接口。 读者应该把这本书看成工具书,而不是用来学习各种系统设计。通过本书,你可以了 解给定一定的硬件和软件设计之后8051的各种性能,希望你能从本书中获取灵感,并有助 于你的设计,使你豁然开朗。当然,我希望你也能够从本书中学到有用的知识,使之能够 提升你的设计
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 1 第一章 介绍 这是一本关于 Intel 80C51 以及广大的 51 系列单片机的书 这本书介绍给读者一些 新的技术 使你的 8051 工程和开发过程变得简单 请注意 这本书的目的可不是教你各种 8051 嵌入式系统的解决方法 为使问题讨论更加清晰 在适当的地方给出了程序代码 我们以讨论项目的方法来说 明每章碰到的问题 所有的代码都可在附带的光盘上找到 你必须熟系 C 和 8051 汇编 因 为本书不是一本C和汇编的指导书 你可以买到不少关于ANSI C的书 最佳选择当然是Intel 的数据书 可从你的芯片供应商处免费索取 和随编译工具附送的手册 附送光盘中有我为这本书编写和收集的程序 这些程序已经通过测试 这并不意味着 你可以随时把这些程序加到你的应用系统或工程中 有些地方必须首先经过修改才能结合 到你的程序中 这本书将教你充分使用你的工具 如果你只有 8051 的汇编程序 你也可以学习该书和 使用这些例子 但是你必须把 C 语言的程序装入你的汇编程序中 这对懂得 C 语言和 8051 汇编程序指令的人来说并不是一件困难的事 如果你有 C 编译器的话 那恭喜你 使用 C 语言进行开发是一个好的决定 你会发现 使用 C 进行开发将使你的工程开发和维护的时间大大减少 如果你已经拥有 Keil C51 那 你已经选择了一个非常好的开发工具 我发现 Keil 软件包能够提供最好的支持 本书支持 Keil C 的扩展 如果你有其它的开发工具像 Archimedes 和 Avocet 这本书也能很好地为 你服务 但你必须根据你所用的开发工具改变一些 Keil 的特殊指令 在书的一些地方有硬件图 实例程序在这些硬件上运行 这些图绘制地不是很详细 主要是方框图 但足以使读者明白软件和硬件之间的接口 读者应该把这本书看成工具书 而不是用来学习各种系统设计 通过本书 你可以了 解给定一定的硬件和软件设计之后 8051 的各种性能 希望你能从本书中获取灵感 并有助 于你的设计 使你豁然开朗 当然 我希望你也能够从本书中学到有用的知识 使之能够 提升你的设计
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 第二章硬件 1概述 8051系列微处理器基于简化的嵌入式控制系统结构,被广泛应用于从军事到自动控制 再到PC机上的键盘上的各种应用系统上。仅次于 Motorola68HC11在8位微控制器市场 上的销量,很多制造商都可提供8051系列单片机,像 Intel, Philips, Siemens等。这些 制造商给51系列单片机加入了大量的性能和外部功能,像Iξ℃总线接口,模拟量到数字量 的转换,看门狗,PW输出等,不少芯片的工作频率达到40M,工作电压下降到1.5V。基 于一个内核的这些功能使得8051单片机很适合作为厂家产品的基本构架,它能够运行各种 程序,而且开发者只需要学习这一个平台。 8051系列的基本结构如下: 1.一个8位算术逻辑单元 2,32个I/0口(4组8位端口),可单独寻址 两个16位定时计数器 4.全双工串行通信 5,6个中断源,两个中断优先级 6.128字节内置RAM 7.独立的64K字节可寻址数据和代码区 每个8051处理周期包括12个振荡周期,每12个振荡周期用来完成一项操作,如取指 令和?。计算指令执行时间可把时钟频率除以12,取倒数,然后指令执行所须的周期数 因此,如果你的系统时钟是11.059MHz,除以12后就得到了每秒执行的指令个数,为921583 条指令,取倒数将得到每条指令所须的时间(1.085ms)
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 2 第二章 硬件 1 概述 8051 系列微处理器基于简化的嵌入式控制系统结构 被广泛应用于从军事到自动控制 再到 PC 机上的键盘上的各种应用系统上 仅次于 Motorola 68HC11 在 8 位微控制器市场 上的销量 很多制造商都可提供 8051 系列单片机 像 Intel Philips Siemens 等 这些 制造商给 51 系列单片机加入了大量的性能和外部功能 像 I2 C 总线接口 模拟量到数字量 的转换 看门狗 PWM 输出等 不少芯片的工作频率达到 40M 工作电压下降到 1.5V 基 于一个内核的这些功能使得 8051 单片机很适合作为厂家产品的基本构架 它能够运行各种 程序 而且开发者只需要学习这一个平台 8051 系列的基本结构如下 1 一个 8 位算术逻辑单元 2 32 个 I/O 口 4 组 8 位端口 可单独寻址 3 两个 16 位定时计数器 4 全双工串行通信 5 6 个中断源 两个中断优先级 6 128 字节内置 RAM 7 独立的 64K 字节可寻址数据和代码区 每个 8051 处理周期包括 12 个振荡周期 每 12 个振荡周期用来完成一项操作 如取指 令和 计算指令执行时间可把时钟频率除以 12 取倒数 然后指令执行所须的周期数 因此 如果你的系统时钟是 11.059MHz 除以 12 后就得到了每秒执行的指令个数 为 921583 条指令 取倒数将得到每条指令所须的时间 1.085ms
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 2存储区结构 8051结构提供给用户3个不同的存储空间,如图A-1。每个存储空间包括从0到最大 存储范围的连续的字节地址空间。通过利用特定地址的寻址指令,解决了地址重叠的问题。 三个地址空间的功能如图所示 图A-1-8051存储结构 2. 1 CODE 区 第一个存储空间是代码段,用来存放可执行代码。被16位寻址,空间可达64K。代码 段是只读的,当要对外接存储器件如 EPROM进行寻址时,处理器会产生一个信号。但这并 不意味着代码区一定要用一个 EPROM。目前,一般使用 EEPROM作为外接存储器,可以被外 围器件或8051进行改写。这使系统更新更加容易,新的软件可以下载到 EEPROM中,而不 用拆开它,然后装入一个新的 EEPROM。另外,带电池的 SRAMs也可用来代替 EPROM,他可 以像 EEPROM一样进行程序的更新,并且没有像 EEPROM那样读写周期的限制。但是,当电 源耗尽时,存储在 SRAMs中的程序也随之丢失。使用 SRAMs来代替 EPROM时,允许快速下 载新程序到目标系统中,这避免了编程/调试/擦写这样一个循环过程,不再需要使用昂贵 的在线仿真器 除了可执行代码,还可在代码段中存储查寻表,为达此目的,8051提供了通过数据指 针DPTR或程序计数器加上由累加器提供的偏移量进行寻址的指令,这样就可以把表头地址 装入DPTR中,把表中要寻址的元素的偏移量装入累加器中,8051在执行指令时的过程中 把这两者相加,由此可节省不少指令周期。在以后的例子中我们会看到这点
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 3 2 存储区结构 8051 结构提供给用户 3 个不同的存储空间 如图 A-1 每个存储空间包括从 0 到最大 存储范围的连续的字节地址空间 通过利用特定地址的寻址指令 解决了地址重叠的问题 三个地址空间的功能如图所示 图 A-1-8051 存储结构 2.1 CODE 区 第一个存储空间是代码段 用来存放可执行代码 被 16 位寻址 空间可达 64K 代码 段是只读的 当要对外接存储器件如 EPROM 进行寻址时 处理器会产生一个信号 但这并 不意味着代码区一定要用一个 EPROM 目前 一般使用 EEPROM 作为外接存储器 可以被外 围器件或 8051 进行改写 这使系统更新更加容易 新的软件可以下载到 EEPROM 中 而不 用拆开它 然后装入一个新的 EEPROM 另外 带电池的 SRAMs 也可用来代替 EPROM 他可 以像 EEPROM 一样进行程序的更新 并且没有像 EEPROM 那样读写周期的限制 但是 当电 源耗尽时 存储在 SRAMs 中的程序也随之丢失 使用 SRAMs 来代替 EPROM 时 允许快速下 载新程序到目标系统中 这避免了编程/调试/擦写这样一个循环过程 不再需要使用昂贵 的在线仿真器 除了可执行代码 还可在代码段中存储查寻表 为达此目的 8051 提供了通过数据指 针 DPTR 或程序计数器加上由累加器提供的偏移量进行寻址的指令 这样就可以把表头地址 装入 DPTR 中 把表中要寻址的元素的偏移量装入累加器中 8051 在执行指令时的过程中 把这两者相加 由此可节省不少指令周期 在以后的例子中我们会看到这点
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 2.2DATA区 第二个存储区是805内128字节的内部RAM,或8052的前128字节内部RAM。这部分 主要是作为数据段,称为DATA区。指令用一个或两个周期来访问数据段。访问DATA区比 访问ⅫATA区要快,因为它采用直接寻址方式,而访问ⅫDATA须采用间接寻址,必须先初 始化DPTR。通常我们把使用比较频繁的变量或局部变量存储在DATA段中,但是必须节省 使用DATA段,因为它的空间毕竟有限。 在数据段中也可通过R0和R1采用间接寻址,R0和R1被作为数据区的指针,将要恢 复或改变字节的地址放入R0或RⅠ中,根据源操作数和目的操作数的不同,执行指令需要 个或两个周期。 数据段中有两个小段,第一个子段包含四组寄存器组,每组寄存器组包含八个寄存器 共32个寄存器,可在任何时候通过修改PSW寄存器的RS1和RS0这两位来选择四组寄存器 的任意一组作为工作寄存器组,8051也可默认任意一组作为工作寄存器组。工作寄存器组 的快速切换不仅使参数传递更为方便,而且可在8051中进行快速任务转换 另外一个子段叫做位寻址段( BDATA),包括16个字节,共128位,每一位都可单独寻 址。8051有好几条位操作指令,这使得程序控制非常方便,并且可帮助软件代替外部组合 逻辑,这样就减少了系统中的模块数。位寻址段的这16个字节也可像数据段中其它字节 样进行字节寻址。 2.3特殊功能寄存器 中断系统和外部功能控 做特殊功能寄存器,简称 SFR。其中很多寄存器都 可位寻址,可通过名字进 行引用。如果要对中断使 RCAP2L RCAP2H TL2TH2 能寄存器中的EA位进行 寻址,可使用EA或IE.7 或OAFH。SFRs控制定时/ SBU 计数器,串行口,中断源 及中断优先级等。这些寄 存器的寻址方式和DATA 取中的其它字节和位一样。□ 可位寻址SFR如表A-1所示。 可进行位寻址的SFR
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 4 2.2 DATA 区 第二个存储区是 8051内128 字节的内部 RAM 或 8052 的前 128 字节内部 RAM 这部分 主要是作为数据段 称为 DATA 区 指令用一个或两个周期来访问数据段 访问 DATA 区比 访问 XDATA 区要快 因为它采用直接寻址方式 而访问 XDATA 须采用间接寻址 必须先初 始化 DPTR 通常我们把使用比较频繁的变量或局部变量存储在 DATA 段中 但是必须节省 使用 DATA 段 因为它的空间毕竟有限 在数据段中也可通过 R0 和 R1 采用间接寻址 R0 和 R1 被作为数据区的指针 将要恢 复或改变字节的地址放入 R0 或 R1 中 根据源操作数和目的操作数的不同 执行指令需要 一个或两个周期 数据段中有两个小段 第一个子段包含四组寄存器组 每组寄存器组包含八个寄存器 共 32 个寄存器 可在任何时候通过修改 PSW 寄存器的 RS1 和 RS0 这两位来选择四组寄存器 的任意一组作为工作寄存器组 8051 也可默认任意一组作为工作寄存器组 工作寄存器组 的快速切换不仅使参数传递更为方便 而且可在 8051 中进行快速任务转换 另外一个子段叫做位寻址段 BDATA 包括 16 个字节 共 128 位 每一位都可单独寻 址 8051 有好几条位操作指令 这使得程序控制非常方便 并且可帮助软件代替外部组合 逻辑 这样就减少了系统中的模块数 位寻址段的这 16 个字节也可像数据段中其它字节一 样进行字节寻址 2.3 特殊功能寄存器 中断系统和外部功能控制寄存器位于从地址 80H 开始的内部 RAM 中 这些寄存器被称 做特殊功能寄存器 简称 SFR 其中很多寄存器都 可位寻址 可通过名字进 行引用 如果要对中断使 能寄存器中的 EA 位进行 寻址 可使用 EA 或 IE.7 或 0AFH SFRs 控制定时/ 计数器 串行口 中断源 及中断优先级等 这些寄 存器的寻址方式和 DATA 取中的其它字节和位一样 可位寻址 SFR 如表 A-1 所示 可进行位寻址的 SFR 表 A-1
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 2.41DATA区 8051系列的一些单片机如8052有附加的128字节的内部RAM,位于从8OH开始的地址 空间中,被称为 IDATA。因为 IDATA区的地址和SFRs的地址是重叠的,通过区分所访问的 存储区来解决地址重叠问题,因为 IDATA区只能通过间接寻址来访问。 2.5 XDATA区 8051的最后一个存储空间为64K,和CODE区一样,采用16位地址寻址,称作外部数 据区,简称ⅫDATA区。这个区通常包括一些RAM(如SRAM)或一些需要通过总线接口的外 围器件。对 XDATA的读写操作需要至少两个处理周期,使用DPTR,RO或DPTR,R1。对DPTR 来说,至少需要两个处理周期来装入地址,而读写又需要两个处理周期。同样,对于RO 或RI装入需要一个以上的处理周期,而读写又需两个周期,由此可见,处理 XDATA中的数 据至少要花3个指令周期,因此,使用频繁的数据应尽量保存在DATA区中 如果不需要和外部器件进行I/O操作或者希望在和外部器件进行I/0操作时开关RAM, 则 XDATA可全部使用64KRAM。关于这方面的应用将在以后介绍
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 5 2.4 IDATA 区 8051 系列的一些单片机如 8052 有附加的 128 字节的内部 RAM 位于从 80H 开始的地址 空间中 被称为 IDATA 因为 IDATA 区的地址和 SFRs 的地址是重叠的 通过区分所访问的 存储区来解决地址重叠问题 因为 IDATA 区只能通过间接寻址来访问 2.5 XDATA 区 8051 的最后一个存储空间为 64K 和 CODE 区一样 采用 16 位地址寻址 称作外部数 据区 简称 XDATA 区 这个区通常包括一些 RAM 如 SRAM 或一些需要通过总线接口的外 围器件 对 XDATA 的读写操作需要至少两个处理周期 使用 DPTR R0 或 DPTR R1 对 DPTR 来说 至少需要两个处理周期来装入地址 而读写又需要两个处理周期 同样 对于 R0 或 R1 装入需要一个以上的处理周期 而读写又需两个周期 由此可见 处理 XDATA 中的数 据至少要花 3 个指令周期 因此 使用频繁的数据应尽量保存在 DATA 区中 如果不需要和外部器件进行 I/O 操作或者希望在和外部器件进行 I/O 操作时开关 RAM 则 XDATA 可全部使用 64K RAM 关于这方面的应用将在以后介绍
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 3位操作和布尔逻辑 8051可分别对 BDATA和SFRs中128个可寻址位,32个I/0口进行位逻辑操作。可对 这些位进行与,或,异或,求补,置位,清零等操作,并可像转移字节那样转移位 列表A-1 把位地址22H中的数移入进位位中 C,23H 把位地址23H中的数和进位位中的数相或 24H,C ;把进位位中的数移入位地址24H中 可寻址位也可作为条件转移的条件,一条很有用的指令就是JBC,通过判断可寻址位 是否置位来决定是否进行转移,如果该位置位则转移,并清零该位。这条指令能够在两个 处理周期中完成,比在两个代码段中分别使用跳转和清零指令要节省一到两个处理周期 比如说,你要编写一个过程,等待P0.0置位,然后跳转,但是等待有时间限制。这样就需 要设置一个时间,时间到达后跳出查询,检测到P0.0置位后跳出,并清零P0.0。一般的 逻辑流程如下。 例A-2 Mov timeout,# TO VALUE;设置查询时间 P0.0,L1 ;P0.0置位则跳转 DJNZ timeout, L2 查询时间计数 LI: CLR P0. 0 P0.0清零 RET 退出 当使用JBC时程序如下 例A-3 Mov timeout,# TO VALUE;设置查询时间 P0.0,L1 P0.0置位则跳转并清零 DJNZ timeout, L 查询时间计数 LI: RET 退出 利用JBC不但节省了代码长度,而且使程序更加简洁美观。以后在编制代码时要习惯 使用这条指令
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 6 3 位操作和布尔逻辑 8051 可分别对 BDATA 和 SFRs 中 128 个可寻址位 32 个 I/O 口进行位逻辑操作 可对 这些位进行与 或 异或 求补 置位 清零等操作 并可像转移字节那样转移位 列表 A-1 MOV C 22H 把位地址 22H 中的数移入进位位中 ORL C 23H 把位地址 23H 中的数和进位位中的数相或 MOV 24H C 把进位位中的数移入位地址 24H 中 可寻址位也可作为条件转移的条件 一条很有用的指令就是 JBC 通过判断可寻址位 是否置位来决定是否进行转移 如果该位置位则转移 并清零该位 这条指令能够在两个 处理周期中完成 比在两个代码段中分别使用跳转和清零指令要节省一到两个处理周期 比如说 你要编写一个过程 等待 P0.0 置位 然后跳转 但是等待有时间限制 这样就需 要设置一个时间 时间到达后跳出查询 检测到 P0.0 置位后跳出 并清零 P0.0 一般的 逻辑流程如下 例 A-2 MOV timeout #TO_VALUE 设置查询时间 L2 JB P0.0 L1 P0.0 置位则跳转 DJNZ timeout L2 查询时间计数 L1 CLR P0.0 P0.0 清零 RET 退出 当使用 JBC 时程序如下 例 A-3 MOV timeout #TO_VALUE 设置查询时间 L2 JBC P0.0 L1 P0.0 置位则跳转并清零 DJNZ timeout L2 查询时间计数 L1 RET 退出 利用 JBC 不但节省了代码长度 而且使程序更加简洁美观 以后在编制代码时要习惯 使用这条指令
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 4寻址方式 8051可对存储区直接或间接寻址。这些是典型的寻址方式。直接寻址是在指令中直接 包含所须寻址的字节地址,直接寻址只能在DATA区和SFR中进行。如下例: 列表A-4 mov A, 03H 把地址O3H中的数移入累加器 MOV 43H, 22H 把地址22H中的数移入地址43H中 Mov 02H, C ;把C中的数移入位地址02H中 MoV42H,#18 把立即数18移入地址42H中 MOv 09H, SBUF 把串行缓冲区中的数移入地址09H中 间接寻址要使用DPTR,PC,RO,R1寄存器,用来存放所要访问数据的地址,指令使用 指针寄存器,而不是直接使用地址。用间接寻址方式可访问CODE, IDATA,ⅫDATA存储区 对DATA存储区也可进行间接寻址。只能用直接寻址方式对位地址进行寻址 在进行块移动时,用间接寻址十分方便,能用最少的代码完成操作。可以利用循环过 程使指针递增。对CODE区进行寻址时,将基址存入DPTR或PC中,把变址存入累加器中, 这种方法在查表时十分有用,举例如下: 例A-5 DATA和 IDATA区寻址 Mov RI, #22H 设置RI为指向DATA区内的地址22H的指针 Mov RO, #0A9H ;设置RO为指向 IDATA区内的地址OA9H的指针 Mov A ;读入地址22H的数据 ;将累加器中的数据写入地址A9H ;RO中的地址变为A INC RI ;R1中的地址变为23H Mov 34H, GRO 将地址AAH中的数据写入34H MOV @RI, #67H 把立即数写入地址23H XDATA区寻址 MOV DPTR,#3048H;DPTR指向外部存储区 MoVX A, ODPTR ;读入外部存储区地址3048H中的数 INC DPTR 指针加 MOv A, #26H ;立即数26H写入A中 MOVX ODPTR, A ;将26写入外部存储区地址3049H中 Mov RO, #87H R0指向外部存储区地址87H MovX A, ORO 将外部存储区地址87H中的数读入累加器中 代码区寻址 MOV DPTR,# TABLE BASE;DPTR指向表首地址 Mov A, index 把偏移量装入累加器中 MOVC A, A+DPTR 从表中读入数据到累加器中 7
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 7 4 寻址方式 8051 可对存储区直接或间接寻址 这些是典型的寻址方式 直接寻址是在指令中直接 包含所须寻址的字节地址 直接寻址只能在 DATA 区和 SFR 中进行 如下例 列表 A-4 MOV A 03H 把地址 03H 中的数移入累加器 MOV 43H 22H 把地址 22H 中的数移入地址 43H 中 MOV 02H C 把 C 中的数移入位地址 02H 中 MOV 42H #18 把立即数 18 移入地址 42H 中 MOV 09H SBUF 把串行缓冲区中的数移入地址 09H 中 间接寻址要使用 DPTR PC R0 R1 寄存器 用来存放所要访问数据的地址 指令使用 指针寄存器 而不是直接使用地址 用间接寻址方式可访问 CODE IDATA XDATA 存储区 对 DATA 存储区也可进行间接寻址 只能用直接寻址方式对位地址进行寻址 在进行块移动时 用间接寻址十分方便 能用最少的代码完成操作 可以利用循环过 程使指针递增 对 CODE 区进行寻址时 将基址存入 DPTR 或 PC 中 把变址存入累加器中 这种方法在查表时十分有用 举例如下 例 A-5 DATA 和 IDATA 区寻址 MOV R1 #22H 设置 R1 为指向 DATA 区内的地址 22H 的指针 MOV R0 #0A9H 设置 R0 为指向 IDATA 区内的地址 0A9H 的指针 MOV A @R1 读入地址 22H 的数据 MOV @R0 A 将累加器中的数据写入地址 A9H INC R0 RO 中的地址变为 AAH INC R1 R1 中的地址变为 23H MOV 34H @R0 将地址 AAH 中的数据写入 34H MOV @R1 #67H 把立即数写入地址 23H XDATA 区寻址 MOV DPTR #3048H DPTR 指向外部存储区 MOVX A @DPTR 读入外部存储区地址 3048H 中的数 INC DPTR 指针加一 MOV A #26H 立即数 26H 写入 A 中 MOVX @DPTR A 将 26H 写入外部存储区地址 3049H 中 MOV R0 #87H R0 指向外部存储区地址 87H MOVX A @R0 将外部存储区地址 87H 中的数读入累加器中 代码区寻址 MOV DPTR #TABLE_BASE DPTR 指向表首地址 MOV A index 把偏移量装入累加器中 MOVC A @A+DPTR 从表中读入数据到累加器中
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 5处理器状态 处理器的状态保存在状态寄存器PSW中,状态字中包括进位位,用于BCD码处理的辅 助进位位,奇偶标志位,溢出标志位,还有前面提到的用于寄存器组选择的RS0和RS1。0 组从地址00H开始,1组从地址08H开始,2组从地址10H开始,3组从地址18H开始。这 些地址都可通过直接或间接方式进行寻址。PSW的结构如下 CY AC FO RS1 RSO OV USR P CY进位标志位 AC辅助进位标志位 通用标志位 寄存器组选择位高位 RS0寄存器组选择位低位 溢出标志位 用户定义标志位 奇偶标志位 6电源控制 8051的 CHMOS版本可通过软件设置两种节电方式,空闲模式和低功耗模式。设置电源 控制寄存器PC0N的相应位来进入节电方式。置位IDLE进入空闲模式,空闲模式将停止程 序执行,RAM中的数据仍然保持,晶振继续工作,但与CPU断开。定时器和串行口继续工 作。发生中断将退出中断模式。执行完中断程序后,将从程序停止的地方继续指令的执行。 通过置位PDWN位来进入低功耗模式,低功耗模式中晶振将停止工作,因此,定时器和 串行口都将停止工作。至少有两伏的电压加在芯片上,因此,RAM中的数据仍将保存。退 出低功耗模式只有两种方式,上电或复位。 SMOD位可控制串行通信的波特率,将使由定时器1的溢出率或晶振频率产生的波特率 翻倍。置位SMD可使工作于方式1,2,3定时器产生的波特率翻倍。当使用定时器2产生 波特率时,SMOD将不影响波特率 电源控制寄存器(不可位寻址) LSMD---cF】 GFOPDaNIDLE sJoD串行口通信波特率控制位,置位使波特率翻倍 保留 保留 保留 通用标志位 GFO通用标志位 PDWN低功耗标志位,置位进入低功耗模式 IDLE空闲标志位,置位进入空闲模式 表A-3 6中断系统 基本的8051支持6个中断源,两个外部中断,两个定时/计数器中断,一个串行口输 入/输出中断。中断发生后,处理器转到将五个中断入口处之一执行中断处理程序。中断向 量位于代码段的最低地址出(串行口输入,输出中断共用一个中断向量)。中断服务程序必 须在中断入口处或通过跳转,分支转移到别处。8051/8052的中断向量表A-4 8
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 8 5 处理器状态 处理器的状态保存在状态寄存器 PSW 中 状态字中包括进位位 用于 BCD 码处理的辅 助进位位 奇偶标志位 溢出标志位 还有前面提到的用于寄存器组选择的 RS0 和 RS1 0 组从地址 00H 开始 1 组从地址 08H 开始 2 组从地址 10H 开始 3 组从地址 18H 开始 这 些地址都可通过直接或间接方式进行寻址 PSW 的结构如下 CY AC F0 RS1 RS0 OV USR P CY 进位标志位 AC 辅助进位标志位 F0 通用标志位 RS1 寄存器组选择位高位 RS0 寄存器组选择位低位 OV 溢出标志位 USR 用户定义标志位 P 奇偶标志位 6 电源控制 8051 的 CHMOS 版本可通过软件设置两种节电方式 空闲模式和低功耗模式 设置电源 控制寄存器 PCON 的相应位来进入节电方式 置位 IDLE 进入空闲模式 空闲模式将停止程 序执行 RAM 中的数据仍然保持 晶振继续工作 但与 CPU 断开 定时器和串行口继续工 作 发生中断将退出中断模式 执行完中断程序后 将从程序停止的地方继续指令的执行 通过置位 PDWN 位来进入低功耗模式 低功耗模式中晶振将停止工作 因此 定时器和 串行口都将停止工作 至少有两伏的电压加在芯片上 因此 RAM 中的数据仍将保存 退 出低功耗模式只有两种方式 上电或复位 SMOD 位可控制串行通信的波特率 将使由定时器 1 的溢出率或晶振频率产生的波特率 翻倍 置位 SMOD 可使工作于方式 1 2 3 定时器产生的波特率翻倍 当使用定时器 2 产生 波特率时 SMOD 将不影响波特率 电源控制寄存器 不可位寻址 SMOD - - - GF1 GF0 PDWN IDLE SMOD 串行口通信波特率控制位 置位使波特率翻倍 - 保留 - 保留 - 保留 GF1 通用标志位 GF0 通用标志位 PDWN 低功耗标志位 置位进入低功耗模式 IDLE 空闲标志位 置位进入空闲模式 表 A-3 6 中断系统 基本的 8051 支持 6 个中断源 两个外部中断 两个定时/计数器中断 一个串行口输 入/输出中断 中断发生后 处理器转到将五个中断入口处之一执行中断处理程序 中断向 量位于代码段的最低地址出 串行口输入 输出中断共用一个中断向量 中断服务程序必 须在中断入口处或通过跳转 分支转移到别处 8051/8052 的中断向量表 A-4
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:3873092 8051支持两个中断优先级,有标准的中 断机制,低优先级的中断只能被高优先级的上电复位 0000H 中断所中断,而高优先级的中断不能被中断。「外部中断0 0003H 定时器0溢出 000BH 6.1中断优先级寄存器 外部中断1 0013H 每个中断源都可通过设置中断优先级寄存定时器1溢出00BH 串行口中断 0023H 源的相应位被置位,则该中断源的优先级为高。[定时器2溢出0B 如果相应的位被复位,则该中断源的优先级为低。如果你觉得两个中断源不够用,别急 以后我会教你如何增加中断优先级。表A-5示出了IP寄存器的各位,此寄存器可位寻址 IP寄存器(可位寻址) P2「sP「Px1P0Px 保留 保留 PT2定时器2中断优先级 PS串行通信中断优先级 PT1定时器1中断优先级 PX1外部中断1优先级 PT0定时器0中断优先级 PXO外部中断0优先级 6.2中断使能寄存器 通过设置中断使能寄存器IE的EA位,使能所有中断。每个中断源都有单独的使能位 可通过软件设置E中相应的使能位在任何时候使能或禁能中断。中断使能寄存器IE的各 位如下所示 中断使能寄存器IE(可位寻址) LEA- ET2 ES ETI EXI ETO EXO EA 使能标志位,置位则所有中断使能,复位则禁止所有中断 保留 ET2 定时器2中断使能 串行通信中断使能 ETI 定时器1中断使能 EX1 外部中断1使能 ETO 定时器0中断使能 外部中断0使能 6.3中断延迟 8051在每个处理周期查询中断标志,确定是否有中断请求。当发生中断时,置位相应 的标志,处理器将在下个周期查询到中断标志位,这样,从发生中断到确认中断之间有一 个指令周期的延时。这时,处理器将用两个周期的时间来调用中断服务程序,总共要花 个时钟周期。在理想情况下,处理器将在3个指令周期内响应中断,这使得用户能很快响 应系统事件 不可避免地,系统有可能在3个处理周期能不能响应中断请求,特别是当有同级或更
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 9 8051 支持两个中断优先级 有标准的中 断机制 低优先级的中断只能被高优先级的 中断所中断 而高优先级的中断不能被中断 6.1 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存 器 IP 来单独设置中断优先级 如果每个中断 源的相应位被置位 则该中断源的优先级为高 如果相应的位被复位 则该中断源的优先级为低 如果你觉得两个中断源不够用 别急 以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 可位寻址 - - PT2 PS PT1 PX1 PT0 PX0 - 保留 - 保留 PT2 定时器 2 中断优先级 PS 串行通信中断优先级 PT1 定时器 1 中断优先级 PX1 外部中断 1 优先级 PT0 定时器 0 中断优先级 PX0 外部中断 0 优先级 表 A-5 6.2 中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器 IE 可位寻址 EA - ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断 - 保留 ET2 定时器 2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器 0 中断使能 EX0 外部中断 0 使能 6.3 中断延迟 8051 在每个处理周期查询中断标志 确定是否有中断请求 当发生中断时 置位相应 的标志 处理器将在下个周期查询到中断标志位 这样 从发生中断到确认中断之间有一 个指令周期的延时 这时 处理器将用两个周期的时间来调用中断服务程序 总共要花 3 个时钟周期 在理想情况下 处理器将在 3 个指令周期内响应中断 这使得用户能很快响 应系统事件 不可避免地 系统有可能在 3 个处理周期能不能响应中断请求 特别是当有同级或更 中断源 中断向量 上电复位 0000H 外部中断 0 0003H 定时器 0 溢出 000BH 外部中断 1 0013H 定时器 1 溢出 001BH 串行口中断 0023H 定时器 2 溢出 002BH
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 高级的中断服务程序正在执行的时候。因此,中断的延迟主要取决于正在执行的程序 另外一种大于3个周期的中断延迟是,程序正在执行一条多周期指令,要等到当前的 指令执行完后,处理器才会处理中断事件,这将在原来的基础上至少增加一个周期的延时 (假设在执行完多周期指令的第一个周期后发现中断)。除被其它中断所阻的情况,中断不 被响应的最长延时为6个处理周期(3个周期的多周期指令执行时间,3个周期的指令响应 时间4)。 最后一种大于3个指令周期的中断延迟是,当检测到中断时,正在执行写IP,IE或RETI 指令 64外部中断信号 8051支持两个外部中断信号,这使外部器件能请求中断,从而得到相应的服务。外部 中断由外部中断引脚(外部中断0为P3.2,外部中断1为P3.3)电平为低或电平由高到低 跳变引起。由电平触发还是跳变触发取决于寄存器TC0N的ITx位,见A-7 电平触发时,当检测到中断引脚电平为低时,将产生中断。低电平应至少保持一个指 令周期或12个时钟周期。因为,处理器每个指令周期检测一次引脚。跳变触发时,当在连 续的两个周期中检测到由高到低的电平跳变时,将产生中断,而电平的0状态应至少保持 个周期。 7内置定时/计数器 标准的8051有两个定时/计数器,每个定时器有16位。定时/计数器既可用来作为定 时器(对机器周期计数),也可用来对相应I/0口(T0,T1)上从高到低的跳变脉冲计数。当 用作计数器时,脉冲频率不应高于指令的执行频率的1/2,因为每周期检测一次引脚电平, 而判断一次脉冲跳变需要两个指令周期。如果需要的话,当脉冲计数溢出时,可以产生一 个中断 TCON特殊功能寄存器( timer controller)用来控制定时器的工作起停和溢出标志位。 通过改变定时器运行位TRO和TR1来启动和停止定时器的工作。TC0N中还包括了定时器T0 和T1的溢出中断标志位。当定时器溢出时,相应的标志位被置位,当程序检测到标志位从 0到1的跳变时,如果中断是使能的,将产生一个中断。注意,中断标志位可在任何时候 置位和清除,因此,可通过软件产生和阻止定时器中断。 定时器控制寄存器(TCON可位寻址) TF1 TRI TFO IE1 ITI IEO ITO TF1 定时器1溢出中断标志。响应中断后由处理器清零 定时器1控制位,置位时定时器1工作,复位时定时器1停止工作 定时器0溢出标志位。定时器0溢出时置位,处理器响应中断后淸除该位 定时器0控制位,置位时定时器0工作,复位时定时器0停止工作 外部中断1触发标志位,当检测到P3.3有从高到低的跳变电平时置位,处 理器响应中断后,由硬件清除该位。 IT1 中断1触发方式控制位,置位时为跳变触发,复位时为低电平触发 外部中断1触发标志位,当检测到P3.3有从高到低的跳变电平时置位,处 理器响应中断后,由硬件清除该位。 ITO 中断1触发方式控制位,置位时为跳变触发,复位时为低电平触发 表A-7 定时器的工作方式由特殊功能寄存器TMOD来设置。通过改变TMOD,软件可控制两个 定时器的工作方式和时钟源(是I/0口的触发电平还是处理器的时钟脉冲)。TMOD的高四
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 10 高级的中断服务程序正在执行的时候 因此 中断的延迟主要取决于正在执行的程序 另外一种大于 3 个周期的中断延迟是 程序正在执行一条多周期指令 要等到当前的 指令执行完后 处理器才会处理中断事件 这将在原来的基础上至少增加一个周期的延时 假设在执行完多周期指令的第一个周期后发现中断 除被其它中断所阻的情况 中断不 被响应的最长延时为 6 个处理周期 3 个周期的多周期指令执行时间 3 个周期的指令响应 时间 4 最后一种大于 3 个指令周期的中断延迟是 当检测到中断时 正在执行写 IP IE 或 RETI 指令 6.4 外部中断信号 8051 支持两个外部中断信号 这使外部器件能请求中断 从而得到相应的服务 外部 中断由外部中断引脚 外部中断 0 为 P3.2 外部中断 1 为 P3.3 电平为低或电平由高到低 跳变引起 由电平触发还是跳变触发取决于寄存器 TCON 的 ITX 位 见 A-7 电平触发时 当检测到中断引脚电平为低时 将产生中断 低电平应至少保持一个指 令周期或 12 个时钟周期 因为 处理器每个指令周期检测一次引脚 跳变触发时 当在连 续的两个周期中检测到由高到低的电平跳变时 将产生中断 而电平的 0 状态应至少保持 一个周期 7 内置定时/计数器 标准的 8051 有两个定时/计数器 每个定时器有 16 位 定时/计数器既可用来作为定 时器 对机器周期计数 也可用来对相应 I/0 口 TO T1 上从高到低的跳变脉冲计数 当 用作计数器时 脉冲频率不应高于指令的执行频率的 1/2 因为每周期检测一次引脚电平 而判断一次脉冲跳变需要两个指令周期 如果需要的话 当脉冲计数溢出时 可以产生一 个中断 TCON 特殊功能寄存器 timer controller 用来控制定时器的工作起停和溢出标志位 通过改变定时器运行位 TR0 和 TR1 来启动和停止定时器的工作 TCON 中还包括了定时器 T0 和 T1 的溢出中断标志位 当定时器溢出时 相应的标志位被置位 当程序检测到标志位从 0 到 1 的跳变时 如果中断是使能的 将产生一个中断 注意 中断标志位可在任何时候 置位和清除 因此 可通过软件产生和阻止定时器中断 定时器控制寄存器 TCON 可位寻址 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TF1 定时器 1 溢出中断标志 响应中断后由处理器清零 TR1 定时器 1 控制位 置位时定时器 1 工作 复位时定时器 1 停止工作 TF0 定时器 0 溢出标志位 定时器 0 溢出时置位 处理器响应中断后清除该位 TR0 定时器 0 控制位 置位时定时器 0 工作 复位时定时器 0 停止工作 IE1 外部中断 1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位 处 理器响应中断后 由硬件清除该位 IT1 中断 1 触发方式控制位 置位时为跳变触发 复位时为低电平触发 IE0 外部中断 1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位 处 理器响应中断后 由硬件清除该位 IT0 中断 1 触发方式控制位 置位时为跳变触发 复位时为低电平触发 表 A-7 定时器的工作方式由特殊功能寄存器 TMOD 来设置 通过改变 TMOD 软件可控制两个 定时器的工作方式和时钟源 是 I/0 口的触发电平还是处理器的时钟脉冲 TMOD 的高四