广州周立功单片机发展有限公司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 关于这方面的应用将在以后介绍