51单片机C编程.pdf

上传人:西安人 文档编号:3632617 上传时间:2019-09-19 格式:PDF 页数:165 大小:1.02MB
返回 下载 相关 举报
51单片机C编程.pdf_第1页
第1页 / 共165页
51单片机C编程.pdf_第2页
第2页 / 共165页
51单片机C编程.pdf_第3页
第3页 / 共165页
51单片机C编程.pdf_第4页
第4页 / 共165页
51单片机C编程.pdf_第5页
第5页 / 共165页
亲,该文档总共165页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《51单片机C编程.pdf》由会员分享,可在线阅读,更多相关《51单片机C编程.pdf(165页珍藏版)》请在三一文库上搜索。

1、广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 1 第一章 介绍 这是一本关于 Intel 80C51 以及广大的 51 系列单片机的书这本书介绍给读者一些 新的技术使你的 8051 工程和开发过程变得简单请注意这本书的目的可不是教你各种 8051 嵌入式系统的解决方法 为使问题讨论更加清晰在适当的地方给出了程序代码我们以讨论项目的方法来说 明每章碰到的问题所有的代码都可在附带的光盘上找到你必须熟系 C 和 8051 汇编因 为本书不是一本C和汇编的指导书 你可以买到不少关于ANSI C的书 最佳选择当

2、然是Intel 的数据书可从你的芯片供应商处免费索取和随编译工具附送的手册 附送光盘中有我为这本书编写和收集的程序这些程序已经通过测试这并不意味着 你可以随时把这些程序加到你的应用系统或工程中有些地方必须首先经过修改才能结合 到你的程序中 这本书将教你充分使用你的工具如果你只有 8051 的汇编程序你也可以学习该书和 使用这些例子但是你必须把 C 语言的程序装入你的汇编程序中这对懂得 C 语言和 8051 汇编程序指令的人来说并不是一件困难的事 如果你有 C 编译器的话那恭喜你使用 C 语言进行开发是一个好的决定你会发现 使用 C 进行开发将使你的工程开发和维护的时间大大减少如果你已经拥有 K

3、eil C51那 你已经选择了一个非常好的开发工具我发现 Keil 软件包能够提供最好的支持本书支持 Keil C 的扩展如果你有其它的开发工具像 Archimedes 和 Avocet这本书也能很好地为 你服务但你必须根据你所用的开发工具改变一些 Keil 的特殊指令 在书的一些地方有硬件图实例程序在这些硬件上运行这些图绘制地不是很详细 主要是方框图但足以使读者明白软件和硬件之间的接口 读者应该把这本书看成工具书而不是用来学习各种系统设计通过本书你可以了 解给定一定的硬件和软件设计之后 8051 的各种性能希望你能从本书中获取灵感并有助 于你的设计使你豁然开朗当然我希望你也能够从本书中学到有

4、用的知识使之能够 提升你的设计 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 2 第二章 硬件 1 概述 8051 系列微处理器基于简化的嵌入式控制系统结构被广泛应用于从军事到自动控制 再到 PC 机上的键盘上的各种应用系统上仅次于 Motorola 68HC11 在 8 位微控制器市场 上的销量很多制造商都可提供 8051 系列单片机像 IntelPhilipsSiemens 等这些 制造商给 51 系列单片机加入了大量的性能和外部功能像 I2C 总线接口模拟量到数字量 的转换看门狗PWM 输出等不

5、少芯片的工作频率达到 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取倒数然后指令执行所

6、须的周期数 因此 如果你的系统时钟是 11.059MHz 除以 12 后就得到了每秒执行的指令个数 为 921583 条指令取倒数将得到每条指令所须的时间1.085ms 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 3 2 存储区结构 8051 结构提供给用户 3 个不同的存储空间如图 A-1每个存储空间包括从 0 到最大 存储范围的连续的字节地址空间通过利用特定地址的寻址指令解决了地址重叠的问题 三个地址空间的功能如图所示 图 A-1-8051 存储结构 2.1 CODE 区 第一个存储空间是代码段

7、用来存放可执行代码被 16 位寻址空间可达 64K代码 段是只读的当要对外接存储器件如 EPROM 进行寻址时处理器会产生一个信号但这并 不意味着代码区一定要用一个 EPROM目前一般使用 EEPROM 作为外接存储器可以被外 围器件或 8051 进行改写这使系统更新更加容易新的软件可以下载到 EEPROM 中而不 用拆开它然后装入一个新的 EEPROM另外带电池的 SRAMs 也可用来代替 EPROM他可 以像 EEPROM 一样进行程序的更新并且没有像 EEPROM 那样读写周期的限制但是当电 源耗尽时存储在 SRAMs 中的程序也随之丢失使用 SRAMs 来代替 EPROM 时允许快速下

8、 载新程序到目标系统中这避免了编程/调试/擦写这样一个循环过程不再需要使用昂贵 的在线仿真器 除了可执行代码还可在代码段中存储查寻表为达此目的8051 提供了通过数据指 针 DPTR 或程序计数器加上由累加器提供的偏移量进行寻址的指令这样就可以把表头地址 装入 DPTR 中把表中要寻址的元素的偏移量装入累加器中8051 在执行指令时的过程中 把这两者相加由此可节省不少指令周期在以后的例子中我们会看到这点 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 4 2.2 DATA 区 第二个存储区是 8051

9、内 128 字节的内部 RAM或 8052 的前 128 字节内部 RAM这部分 主要是作为数据段称为 DATA 区指令用一个或两个周期来访问数据段访问 DATA 区比 访问 XDATA 区要快因为它采用直接寻址方式而访问 XDATA 须采用间接寻址必须先初 始化 DPTR通常我们把使用比较频繁的变量或局部变量存储在 DATA 段中但是必须节省 使用 DATA 段因为它的空间毕竟有限 在数据段中也可通过 R0 和 R1 采用间接寻址R0 和 R1 被作为数据区的指针将要恢 复或改变字节的地址放入 R0 或 R1 中根据源操作数和目的操作数的不同执行指令需要 一个或两个周期 数据段中有两个小段第

10、一个子段包含四组寄存器组每组寄存器组包含八个寄存器 共 32 个寄存器可在任何时候通过修改 PSW 寄存器的 RS1 和 RS0 这两位来选择四组寄存器 的任意一组作为工作寄存器组8051 也可默认任意一组作为工作寄存器组工作寄存器组 的快速切换不仅使参数传递更为方便而且可在 8051 中进行快速任务转换 另外一个子段叫做位寻址段BDATA包括 16 个字节共 128 位每一位都可单独寻 址8051 有好几条位操作指令这使得程序控制非常方便并且可帮助软件代替外部组合 逻辑这样就减少了系统中的模块数位寻址段的这 16 个字节也可像数据段中其它字节一 样进行字节寻址 2.3 特殊功能寄存器 中断系

11、统和外部功能控制寄存器位于从地址 80H 开始的内部 RAM 中这些寄存器被称 做特殊功能寄存器简称 SFR其中很多寄存器都 可位寻址可通过名字进 行引用如果要对中断使 能寄存器中的 EA 位进行 寻址可使用 EA 或 IE.7 或 0AFHSFRs 控制定时/ 计数器串行口中断源 及中断优先级等这些寄 存器的寻址方式和 DATA 取中的其它字节和位一样 可位寻址 SFR 如表 A-1 所示可进行位寻址的 SFR 表 A-1 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 5 2.4 IDATA 区 8

12、051 系列的一些单片机如 8052 有附加的 128 字节的内部 RAM位于从 80H 开始的地址 空间中被称为 IDATA因为 IDATA 区的地址和 SFRs 的地址是重叠的通过区分所访问的 存储区来解决地址重叠问题因为 IDATA 区只能通过间接寻址来访问 2.5 XDATA 区 8051 的最后一个存储空间为 64K和 CODE 区一样采用 16 位地址寻址称作外部数 据区简称 XDATA 区这个区通常包括一些 RAM如 SRAM或一些需要通过总线接口的外 围器件对 XDATA 的读写操作需要至少两个处理周期使用 DPTRR0 或 DPTRR1对 DPTR 来说至少需要两个处理周期来

13、装入地址而读写又需要两个处理周期同样 对于 R0 或 R1 装入需要一个以上的处理周期而读写又需两个周期由此可见处理 XDATA 中的数 据至少要花 3 个指令周期因此使用频繁的数据应尽量保存在 DATA 区中 如果不需要和外部器件进行 I/O 操作或者希望在和外部器件进行 I/O 操作时开关 RAM 则 XDATA 可全部使用 64K RAM关于这方面的应用将在以后介绍 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 6 3 位操作和布尔逻辑 8051 可分别对 BDATA 和 SFRs 中 128

14、个可寻址位32 个 I/O 口进行位逻辑操作可对 这些位进行与或异或求补置位清零等操作并可像转移字节那样转移位 列表 A-1 MOV C22H 把位地址 22H 中的数移入进位位中 ORL C23H 把位地址 23H 中的数和进位位中的数相或 MOV 24HC 把进位位中的数移入位地址 24H 中 可寻址位也可作为条件转移的条件一条很有用的指令就是 JBC通过判断可寻址位 是否置位来决定是否进行转移如果该位置位则转移并清零该位这条指令能够在两个 处理周期中完成比在两个代码段中分别使用跳转和清零指令要节省一到两个处理周期 比如说你要编写一个过程等待 P0.0 置位然后跳转但是等待有时间限制这样就

15、需 要设置一个时间时间到达后跳出查询检测到 P0.0 置位后跳出并清零 P0.0一般的 逻辑流程如下 例 A-2 MOV timeout#TO_VALUE 设置查询时间 L2 JB P0.0L1 P0.0 置位则跳转 DJNZ timeoutL2 查询时间计数 L1 CLR P0.0 P0.0 清零 RET 退出 当使用 JBC 时程序如下 例 A-3 MOV timeout#TO_VALUE 设置查询时间 L2 JBC P0.0L1 P0.0 置位则跳转并清零 DJNZ timeoutL2 查询时间计数 L1 RET 退出 利用 JBC 不但节省了代码长度而且使程序更加简洁美观以后在编制代码

16、时要习惯 使用这条指令 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 7 4 寻址方式 8051 可对存储区直接或间接寻址这些是典型的寻址方式直接寻址是在指令中直接 包含所须寻址的字节地址直接寻址只能在 DATA 区和 SFR 中进行如下例 列表 A-4 MOV A03H 把地址 03H 中的数移入累加器 MOV 43H22H 把地址 22H 中的数移入地址 43H 中 MOV 02HC 把 C 中的数移入位地址 02H 中 MOV 42H#18 把立即数 18 移入地址 42H 中 MOV 09HS

17、BUF 把串行缓冲区中的数移入地址 09H 中 间接寻址要使用 DPTRPCR0R1 寄存器用来存放所要访问数据的地址指令使用 指针寄存器而不是直接使用地址用间接寻址方式可访问 CODEIDATAXDATA 存储区 对 DATA 存储区也可进行间接寻址只能用直接寻址方式对位地址进行寻址 在进行块移动时用间接寻址十分方便能用最少的代码完成操作可以利用循环过 程使指针递增对 CODE 区进行寻址时将基址存入 DPTR 或 PC 中把变址存入累加器中 这种方法在查表时十分有用举例如下 例 A-5 DATA 和 IDATA 区寻址 MOV R1#22H 设置 R1 为指向 DATA 区内的地址 22H

18、 的指针 MOV R0#0A9H 设置 R0 为指向 IDATA 区内的地址 0A9H 的指针 MOV AR1 读入地址 22H 的数据 MOV R0A 将累加器中的数据写入地址 A9H INC R0 RO 中的地址变为 AAH INC R1 R1 中的地址变为 23H MOV 34HR0 将地址 AAH 中的数据写入 34H MOV R1#67H 把立即数写入地址 23H XDATA 区寻址 MOV DPTR#3048H DPTR 指向外部存储区 MOVX ADPTR 读入外部存储区地址 3048H 中的数 INC DPTR 指针加一 MOV A#26H 立即数 26H 写入 A 中 MOV

19、X DPTRA 将 26H 写入外部存储区地址 3049H 中 MOV R0#87H R0 指向外部存储区地址 87H MOVX AR0 将外部存储区地址 87H 中的数读入累加器中 代码区寻址 MOV DPTR#TABLE_BASE DPTR 指向表首地址 MOV Aindex 把偏移量装入累加器中 MOVC AA+DPTR 从表中读入数据到累加器中 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 8 5 处理器状态 处理器的状态保存在状态寄存器 PSW 中状态字中包括进位位用于 BCD 码处理的辅

20、助进位位奇偶标志位溢出标志位还有前面提到的用于寄存器组选择的 RS0 和 RS10 组从地址 00H 开始1 组从地址 08H 开始2 组从地址 10H 开始3 组从地址 18H 开始这 些地址都可通过直接或间接方式进行寻址PSW 的结构如下 CYACF0RS1RS0OVUSRP CY 进位标志位 AC 辅助进位标志位 F0 通用标志位 RS1 寄存器组选择位高位 RS0 寄存器组选择位低位 OV 溢出标志位 USR 用户定义标志位 P 奇偶标志位 6 电源控制 8051 的 CHMOS 版本可通过软件设置两种节电方式空闲模式和低功耗模式设置电源 控制寄存器 PCON 的相应位来进入节电方式置

21、位 IDLE 进入空闲模式空闲模式将停止程 序执行RAM 中的数据仍然保持晶振继续工作但与 CPU 断开定时器和串行口继续工 作发生中断将退出中断模式执行完中断程序后将从程序停止的地方继续指令的执行 通过置位 PDWN 位来进入低功耗模式低功耗模式中晶振将停止工作因此定时器和 串行口都将停止工作至少有两伏的电压加在芯片上因此RAM 中的数据仍将保存退 出低功耗模式只有两种方式上电或复位 SMOD 位可控制串行通信的波特率将使由定时器 1 的溢出率或晶振频率产生的波特率 翻倍置位 SMOD 可使工作于方式 123 定时器产生的波特率翻倍当使用定时器 2 产生 波特率时SMOD 将不影响波特率 电

22、源控制寄存器不可位寻址 SMOD-GF1GF0PDWNIDLE SMOD 串行口通信波特率控制位置位使波特率翻倍 - 保留 - 保留 - 保留 GF1 通用标志位 GF0 通用标志位 PDWN 低功耗标志位置位进入低功耗模式 IDLE 空闲标志位置位进入空闲模式 表 A-3 6 中断系统 基本的 8051 支持 6 个中断源两个外部中断两个定时/计数器中断一个串行口输 入/输出中断中断发生后处理器转到将五个中断入口处之一执行中断处理程序中断向 量位于代码段的最低地址出串行口输入输出中断共用一个中断向量中断服务程序必 须在中断入口处或通过跳转分支转移到别处8051/8052 的中断向量表 A-4

23、 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 9 8051 支持两个中断优先级有标准的中 断机制低优先级的中断只能被高优先级的 中断所中断而高优先级的中断不能被中断 6.1 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存 器 IP 来单独设置中断优先级如果每个中断 源的相应位被置位则该中断源的优先级为高 如果相应的位被复位则该中断源的优先级为低如果你觉得两个中断源不够用别急 以后我会教你如何增加中断优先级表 A-5 示出了 IP 寄存器的各位此寄存器可位寻址 IP 寄存器可位寻址 -PT2P

24、SPT1PX1PT0PX0 - 保留 - 保留 PT2 定时器 2 中断优先级 PS 串行通信中断优先级 PT1 定时器 1 中断优先级 PX1 外部中断 1 优先级 PT0 定时器 0 中断优先级 PX0 外部中断 0 优先级 表 A-5 6.2 中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位使能所有中断每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断中断使能寄存器 IE 的各 位如下所示 中断使能寄存器 IE可位寻址 EA-ET2ESET1EX1ET0EX0 EA 使能标志位置位则所有中断使能复位则禁止所有中断 - 保留 ET2 定时器

25、2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器 0 中断使能 EX0 外部中断 0 使能 6.3 中断延迟 8051 在每个处理周期查询中断标志确定是否有中断请求当发生中断时置位相应 的标志处理器将在下个周期查询到中断标志位这样从发生中断到确认中断之间有一 个指令周期的延时这时处理器将用两个周期的时间来调用中断服务程序总共要花 3 个时钟周期在理想情况下处理器将在 3 个指令周期内响应中断这使得用户能很快响 应系统事件 不可避免地系统有可能在 3 个处理周期能不能响应中断请求特别是当有同级或更 中断源中断向量 上电复位0000H

26、外部中断 0 0003H 定时器 0 溢出000BH 外部中断 1 0013H 定时器 1 溢出001BH 串行口中断0023H 定时器 2 溢出002BH 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 10 高级的中断服务程序正在执行的时候因此中断的延迟主要取决于正在执行的程序 另外一种大于 3 个周期的中断延迟是程序正在执行一条多周期指令要等到当前的 指令执行完后处理器才会处理中断事件这将在原来的基础上至少增加一个周期的延时 假设在执行完多周期指令的第一个周期后发现中断除被其它中断所阻的情况中断不

27、 被响应的最长延时为 6 个处理周期3 个周期的多周期指令执行时间3 个周期的指令响应 时间 4 最后一种大于 3 个指令周期的中断延迟是 当检测到中断时 正在执行写 IP IE 或 RETI 指令 6.4 外部中断信号 8051 支持两个外部中断信号这使外部器件能请求中断从而得到相应的服务外部 中断由外部中断引脚外部中断 0 为 P3.2外部中断 1 为 P3.3电平为低或电平由高到低 跳变引起由电平触发还是跳变触发取决于寄存器 TCON 的 ITX位见 A-7 电平触发时当检测到中断引脚电平为低时将产生中断低电平应至少保持一个指 令周期或 12 个时钟周期因为处理器每个指令周期检测一次引脚

28、跳变触发时当在连 续的两个周期中检测到由高到低的电平跳变时将产生中断而电平的 0 状态应至少保持 一个周期 7 内置定时/计数器 标准的 8051 有两个定时/计数器每个定时器有 16 位定时/计数器既可用来作为定 时器 对机器周期计数也可用来对相应 I/0 口 TO T1 上从高到低的跳变脉冲计数 当 用作计数器时脉冲频率不应高于指令的执行频率的 1/2因为每周期检测一次引脚电平 而判断一次脉冲跳变需要两个指令周期如果需要的话当脉冲计数溢出时可以产生一 个中断 TCON 特殊功能寄存器timer controller用来控制定时器的工作起停和溢出标志位 通过改变定时器运行位 TR0 和 TR

29、1 来启动和停止定时器的工作TCON 中还包括了定时器 T0 和 T1 的溢出中断标志位当定时器溢出时相应的标志位被置位当程序检测到标志位从 0 到 1 的跳变时如果中断是使能的将产生一个中断注意中断标志位可在任何时候 置位和清除因此可通过软件产生和阻止定时器中断 定时器控制寄存器TCON 可位寻址 TF1TR1TF0TR0IE1IT1IE0IT0 TF1 定时器 1 溢出中断标志响应中断后由处理器清零 TR1 定时器 1 控制位置位时定时器 1 工作复位时定时器 1 停止工作 TF0 定时器 0 溢出标志位定时器 0 溢出时置位处理器响应中断后清除该位 TR0 定时器 0 控制位置位时定时器

30、 0 工作复位时定时器 0 停止工作 IE1 外部中断 1 触发标志位当检测到 P3.3 有从高到低的跳变电平时置位处 理器响应中断后由硬件清除该位 IT1 中断 1 触发方式控制位置位时为跳变触发复位时为低电平触发 IE0 外部中断 1 触发标志位当检测到 P3.3 有从高到低的跳变电平时置位处 理器响应中断后由硬件清除该位 IT0 中断 1 触发方式控制位置位时为跳变触发复位时为低电平触发 表 A-7 定时器的工作方式由特殊功能寄存器 TMOD 来设置通过改变 TMOD软件可控制两个 定时器的工作方式和时钟源是 I/0 口的触发电平还是处理器的时钟脉冲TMOD 的高四 广州周立功单片机发展

31、有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 11 位控制定时器 1低四位控制定时器 0TMOD 的结构如下 定时器控制寄存器 TMOD-不可位寻址 GATEC/TM1M0GATEC/TM1M0 定时器 1 定时器 0 GATE 当 GATE 置位时定时器仅当 TR=1 并且 INT=1 时才工作如果 GATE=0 置位 TR 定时器就开始工作 C/T 定时器方式选择如果 C/T=1定时器以计数方式工作C/T=0 时以 定时方式工作 M1 模式选择位高位 M0 模式选择位低位 表 A-8 可通过 C/T 位的设置来选择定

32、时器的时钟源C/T=1定时器以计数方式工作对 I/0 引脚脉冲计数C/T=0 时以定时方式工作对内部时钟脉冲计数当定时器用来对内 部时钟脉冲计数时可通过硬件或软件来控制GATE=0 为软件控制置位 TR 定时器就开 始工作GATE=1 为硬件控制当 TR=1 并且 INT=1 时定时器才工作当 INT 脚给出低电平 时定时器将停止工作这在测量 INT 脚的脉冲宽度时十分有用当然INT 脚不作为外 部中断使用 7.1 定时器工作方式 0 和方式 1 定时器通过软件控制有四种工作方式方式 0 为十三位定时/计数器方式定时器溢出 时置位 TF0 或 TF1并产生中断方式 1 将以十六位定时/计数器方

33、式工作除此之外和方 式 0 一样 7.2 定时器工作方式 2 方式 2 为 8 位自动重装工作方式 定时器的低 8 位 TL0 或 TL1 用来计数 高 8 位 TH0 或 TH1用来存放重装数值当定时器溢出时TH 中的数值被装入 TL 中定时器 0 和定时 器 1 在方式 2 时是同样的定时器 1 常用此方式来产生波特率 7.3 定时器工作方式 3 方式 3 时定时器 0 成为两个 8 位定时/计数器TH0 和 TL0TH0 对应于 TMOD 中定 时器 0 的控制位而 TL0 占据了 TMOD 中定时器 1 的控制位这样定时器 1 将不能产生溢出 中断了但可用于其它不需产生中断的场合如作为

34、波特率发生器或作为定时计数器被软 件查询当系统需要用定时器 1 来产生波特率而又同时需要两个定时/计数器时这种工 作方式十分有用当定时器 1 设置为工作方式 3 时将停止工作 7.4 定时器 2 51 系列单片机如 8052 第三个定时/计数器定时器 2他的控制位在特殊功能寄存器 T2CON 中结构如下 定时器 2 控制寄存器可位寻址 TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2 TF2 定时器 2 溢出标志位定时器 2 溢出时将置位当 TCLK 或 RCLK 为 1 时 将不会置位 EXF2 定时器 2 外部标志当 EXEN2=1并在引脚 T2EX 检测到负跳变时置位

35、如果定时器 2 中断被允许将产生中断 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 12 RCLK 接收时钟标志当串行口以方式 1 或 3 工作时将使用定时器 2 的溢出 率作为串行口接收时钟频率 TCLK 发送时钟标志位当串行口以方式 1 或 3 工作时将使用定时器 2 的溢出率作为串行口接收时钟频率 EXEN2 定时器 2 外部允许标志当 EXEN2=1 时在 T2EX 引脚出现负跳变时将造 成定时器 2 捕捉或重装并置位 EXF2产生中断 TR2 定时器运行控制位置位时定时器 2 将开始工作否则

36、定时器 2 停 止工作 C/T2 定时器计数方式选择位如果 C/T2=1定时器 2 将作为外部事件计数器 否则对内部时钟脉冲计数 CP/RL2 捕捉/重装标志位当 EXEN2=1 时如果 CP/RL2=1T2EX 引脚的负跳变 将造成捕捉如果 CP/RL2=0T2EX 引脚的负跳变将造成重装 通过由软件设置 T2CON可使定时/计数器以三种基本工作方式之一工作第一种为捕 捉方式设置为捕捉方式时和定时器 0 或定时器 1 一样以 16 位方式工作这种方式通过 复位EXEN2来选择 当置位EXEN2时 如果T2EX有负跳变电平 将把当前的数 锁存在 RCAP2H 和 RCAP2L中这个事件可用来产

37、生中断 第二种工作方式为自动重装方式其中包含了两个子功能由 EXEN2 来选择当 EXEN2 复位时16 位定时器溢出将触发一个中断并将 RCAP2H 和 RCAP2L 中的数装入定时器中当 EXEN2 置位时除上述功能外T2EX 引脚的负跳变将产生一次重装操作 最后一种方式用来产生串行口通讯所需的波特率 这通过同时或分别置位 RCLK 和 TCLK 来实现在这种方式中每个机器周期都将使定时器加 1而不像定时器 0 和 1 那样需 要 12 个机器周期这使得串行通讯的波特率更高 8 内置 UART 8051 有一个可通过软件控制的内置全双工串行通讯接口由寄存器 SCON 来进行设 置可选择通讯

38、模式允许接收检查状态位SCON 的结构如下 串行控制寄存器SCON-可位寻址 SM0SM1SM2RENTB8RB8TIRI SM0 串行模式选择 SM1 串行模式选择 SM2 多机通讯允许位当模式 0 时此位应该为 0模式 1 时当接收到停止位时 该位将置位模式 2 或模式 3 时当接收的第 9 位数据为 1 时将置位 REN 串行接收允许位 TB8 在模式 2 和模式 3 中将被发送数据的第 9 位 RB8 在模式 0 中该位不起作用在模式 1 中该位为接收数据的停止位在模 式 2 和模式 3 中为接收数据的第 9 位 TI 串行中断标志位由软件清零 RI 接收中断标志位有软件清零 表 A-

39、10 UART 有一个接收数据缓冲区当上一个字节还没被处理下一个数据仍然可以缓冲区 接收进来但如果接收完这个字节如果上个字节还没被处理上个字节将被覆盖因此 软件必须在此之前处理数据当连续发送字节时也是如此 8051 支持 10 位和 11 位数据模式11 数据模式用来进行多机通讯并支持高速 8 位移 位寄存器模式模式 1 和模式 3 中波特率可变 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 13 8.1 UART 模式 0 模式 0 时UART 作为一个 8 位的移位寄存器使用波特率为 fosc/1

40、2数据由 RXD 从 低位开始收发TXD 用来发送同步移位脉冲因此方式 0 不支持全双工这种方式可用 来和像某些具有 8 位串行口的 EEPROM 之类的器件通讯 当向 SBUF 写入字节时开始发送数据数据发送完毕时TI 位将置位置位 REN 时 将开始接收数据接收完 8 位数据时RI 位将置位 8.2 UART 模式 1 工作于模式 1 时传输的是 10 位1 个起始位8 个数据位1 个停止位这种方式 可和包括 PC 机在内的很多器件进行通讯这种方式中波特率是可调的而用来产生波特率 的定时器的中断应该被禁止PCON 的 SMOD 位为 1 时可使波特率翻倍 TI 和 RI 在发送和接收停止位

41、的中间时刻被置位这使软件可以响应中断并装入新的 数据数据处理时间取决于波特率和晶振频率 如果用定时器 1 来产生波特率应通过下式来计算 TH1 的装入值 TH1=256-K*OscFreq/384*BaudRate K=1 if SMOD=0 K=2 if SMOD=1 重装值要小于 256非整数的重装值必须和下一个整数非常接近通常产生的波特率 都能使系统正常的工作这点需要开发者把握 这样 如果你使用 9.216M 晶振 想产生 9600 的波特率 第一步 设 K=1 分子为 9216000 分母为 3686400相除结果为 2.5不是整数设 K=2分子为 18432000分母为 368640

42、0 相除结果为 5可得 TH1=251 或 0FBH 如果用 8052 的定时器 2 产生波特率RCAP2H 和 RCAP2L 的重装值也需要经过计算根 据需要的波特率用下式计算 RCAP2HRCAP2L=65536-OsFreq/32*BaudRate 假设你的系统使用 9.216M 晶振你想产生 9600 的波特率用上式产生的结果必须是 正的而且接近整数最后得到结果 30重装值为 65506 或 FFE2H 8.3 UART 模式 2 模式 2 的数据以 11 位方式发送1 位起始位8 位数据位第九位1 位停止位发 送数据时第九位为 SCON 中的 TB8接收数据的第九位保存在 RB8 中

43、第九位一般用来多 机通信仅在第九位为 1 时单片机才接收数据多机通信用 SCON 的 SM2 来控制当 SM2 置位时仅当数据的第九位为 1 时才引发通讯中断当 SM2 为 0 时只要接收完 11 位就产 生一次中断 第九位可在多机通讯中避免不必要的中断在传送地址和命令时第九位置位串行 总线上的所有处理器都产生一个中断处理器将决定是否继续接收下面的数据如果继续 接收数据就清零 SM2否则SM2 置位以后的数据流将不会使他产生中断 SMOD=O 时模式 2 的波特率为 1/64OscSMOD=1 时波特率为 1/32Osc因此使用 模式 2当晶振频率为 11.059M 时将有高达 345K 的波

44、特率模式 3 和模式 2 的差别在于 可变的波特率 9 其它功能 很多 51 系列的单片机有了许多新增加的功能使之更适合于嵌入式应用51 系列的 其它功能如下 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 14 9.1 I2C I2C 是一种新的芯片间的通讯方式由 PHILIPS 开发和推广I2C 通讯采用两条线进行 通讯一条数据线一条时钟线可进行多器件通讯总线上的每个器件都有自己的地址 数据传送是双向的总线支持多主机8051 上 I2C 总线的接口为 P0 端口的两根线有专门 的特殊功能寄存器来控制

45、总线的工作和执行传输协议 9.2 A/D 转换 并不是所有 51 系列单片机都带 A/D 转换但 A/D 转换的使用非常普遍A/D 转换一般 由寄存器 ADCON 来控制用户通过 ADCON 来选择 A/D 转换的通道开始转换检查转换状 态一般 A/D 转换的过程不多于 40 个指令周期转换完成后产生中断中断程序将处理转 换结果A/D 转换需要处理器一直处于工作状态转换结果保存于特殊功能寄存器中 9.3 看门狗 大多数 51 系列单片机都有看门狗当看门狗没有被定时清零时将引起复位这可防 止程序跑飞设计者必须清楚看门狗的溢出时间以决定在合适的时候清看门狗清看门 狗也不能太过频繁否则会造成资源浪费

46、 51 系列有专门的看门狗定时器对系统频率进行分频计数定时器溢出时将引起复 位看门狗可设定溢出率也可单独用来作为定时器使用 10 设计 51 系列单片机有着各种具有不同的外设功能的成员可适用于各方面的应用选择一 款合适的单片机是十分重要的考虑到电路板空间和成本应使外围部件尽可能少51 系 列最多 512 字节的 RAM 和 32K 字节的 EPROM有时只要使用系统内置的 RAM 和 EPROM 就 可以了应充分利用这些部件不再需要外接 EPROM 和 RAM这样就省下了 I/0 口可用 来和其它器件相连当不需要扩展 I/0 口并且程序代码较短时使用 28 脚的 51 单片机可 节省不少空间

47、但很多应用需要更多的 RAM 和 EPROM 空间 这时就要用外围器件 SRAM EPROM 等许多外围器件能被 51 系列的内部功能和相应的软件代替这将在以后讨论 经常要考虑系统的功耗问题如果处理器有很多工作要做而不能进入低功耗和空闲 模式应选择 3.6V 的工作电压以降低功耗如果有足够的空闲时间的话可以考虑关闭晶 振降低功耗 设计者必须仔细选择晶振频率确保标准的通讯波特率12004800960019.2K 等你不妨先列出可供选择的晶振所能产生的波特率然后根据需要的波特率和系统要求 选择晶振有时也不必过分考虑晶振问题因为可以定制晶振当晶振频率超过 20M 时 必须确保总线上的其它器件能够在这

48、种频率下工作一般EPROMSRAM高速 CMOS 版的 锁存器都支持 51 的工作频率当工作频率增加时功耗也会增加这点在使用电池作为电 源的系统中应充分考虑 11 实现 当选择好单片机和外围器件后下一步就是设计和分配系统 I/O 地址代码段在从地 址零开始的连续空间内外部数据存储空间地址一般和 RAM 和器件地址相连RAM 一般在 从地址 0000H 或 8000H 开始的连续空间内一种比较有用的处理方法是 SRAM 的地址也从 0000H 开始用 A15 使能 RAMRAM 的 0E 和 WE 线分别和单片机的 RD 和 WR 线相连这种方 法可使 RAM 区超过 32K这足够嵌入式系统使用此外32K 的地址也可分配给 I/O 器件 大多数情况下I/O 器件是比较少的所以地址线的高位可接解码器工作给外围器件提 广州周立功单片机发展有限公司 Tel02038730916 38730917 38730976 38730977 Fax:38730925 15 供使能信号一个为系统 I/O 分配地址的例子如 A-2-8051 总线 I/O 所示可以看到通 过减少地址解码器的数量简化了硬件设计因为在 I/O 操作中不用装载 DPTR 的低 8 位使 软件设计也得到简化 图 A-2-8051 总线

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1