1、基于单片机的数字电子秒表的设计与实现69资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。沈阳理工大学应用技术学院毕业设计( 论文) 题 目: 基于单片机的数字电子秒表的设计与实现 系 别: 信息工程系 专 业: 自动化 学生姓名: 胡 培 指导教师: 唐朝仁 年 月 日摘 要近年来随着科技的飞速发展, 单片机的应用正在不断的走向深入。本文阐述了基于单片机的数字电子秒表设计。本设计主要特点是计时精度达到0.001s, 解决了传统的由于计时精度不够造成的误差和不公平性, 是各种体育竞赛的必备设备之一。另外硬件部分设置了查看按键, 能够对秒表上一次计时时间进行保存, 供使用者查询。本设计
2、的数字电子秒表系统采用AT89C52单片机为中心器件, 利用其定时器/计数器定时和记数的原理, 结合显示电路、 LED数码管以及外部中断电路来设计计时器。将软、 硬件有机地结合起来, 使得系统能够实现五位LED显示, 显示时间为099.999秒, 计时精度为0.001秒, 能正确地进行计时, 同时能记录一次时间, 并在下一次计时后对上一次计时时间进行查询。其中软件系统采用汇编语言编写程序, 包括显示程序, 定时中断服务, 外部中断服务程序, 延时程序等, 并在WAVE中调试运行, 硬件系统利用PROTEUS强大的功能来实现, 简单切易于观察, 在仿真中就能够观察到实际的工作状态。 关键字: 单
3、片机; 数字电子秒表; 仿真 AbstractWith the rapid development of science and technology in recent years, SCM applications are constant-depth manner. In this paper, based on single chip design of digital electronic stopwatch. The main characteristics of this design timing accuracy of 0.001s, to solve the traditi
4、onal result of a lack accuracy due to timing errors and unfair, and is a variety of sports competitions, one of the essential equipment. In addition the hardware part of the set View button on the stopwatch can be the last time to save time for user queries.The design of the multi-function stopwatch
5、 system uses STC89C52 microcontroller as the central device, and use its timer / counter timing and the count principles, combined with display circuit, LED digital tube, as well as the external interrupt circuit to design a timer. The software and hardware together organically, allowing the system
6、to achieve two LED display shows the time from 0 to 99.999 seconds, Timing accuracy of 0.001 seconds, Be able to correctly time at the same time to record a time, and the next time after the last time the time to search.automatically added a second in which software systems using assembly language p
7、rogramming, including the display program, timing, interrupt service, external interrupt service routine, delay procedures, key consumer shaking procedures, and WAVE in the commissioning, operation, hardware system uses to achieve PROTEUS powerful, simple and easy to observe the cut in the simulatio
8、n can be observed on the actual working condition.Keyword: LED display; High-precision stopwatch; STC89C52目 录绪 论11 硬件设计41.1 总体方案的设计41.2 单片机的选择51.3 显示电路的选择与设计81.4 按键电路的选择与设计111.5 时钟电路的选择与设计121.6 复位电路的选择与设计141.7 系统总电路的设计162 软件设计192.1 程序设计思想192.2 系统资源的分配192.3 主程序设计202.4 中断程序设计213 数字电子秒表的安装与调试263.1 软件的仿
9、真与调试263.2 硬件的安装与调试263.3 系统程序的烧录273.4 数字电子秒表的精度调试28结 论29致 谢30参考文献31附录A 资料翻译32A.1 英文原文32A.2 中文翻译39附录B 程序44附录C 电路原理图51附录D 硬件实物图52绪 论秒表计时器是电器制造, 工业自动化控制、 国防、 实验室及科研单位理想的计时仪器, 它广泛应用于各种继电器、 电磁开关, 控制器、 延时器、 定时器等的时间测试。奥运男子百米飞人大战中, 牙买加飞人博尔特以9秒69的成绩夺得冠军。而博尔特冲过终点的瞬间, 荧屏显示其成绩为9秒68。相差的这个0.01秒, 系由电子计时系统确认。奥运会男子10
10、0米蝶泳决赛上, 美国选手菲尔普斯以50秒58的成绩惊险夺冠, 距离”八金梦想”仅一步之遥。塞尔维亚选手查维奇以50.59秒获得银牌, 只比菲尔普斯慢0.01秒。这种细微的差距, 即使是现场大屏幕用经典超慢镜头回放, 也无法分辨。 8月28日15点15分, 中国选手孟关良/杨文军在雅典奥运会男子500米划艇决赛中, 以1分40秒278的成绩获得中国在雅典奥运会的第28金。这是中国皮划艇项目的第一枚奥运金牌, 也是中国水上项目在历届奥运会上所获得的第一枚金牌。孟关良/杨文军的成绩比获得银牌的古巴选手只快了 0.072秒, 以至于两人在夺冠之后还不敢相信。自首届现代奥运会在希腊雅典举办以来, 奥运
11、计时技术一直在不断地向前发展。一百多年过去了, 首届现代奥运会上计时所用的跑表如今换成了一系列高科技计时装 置, 如高速数码摄像机、 电子触摸垫、 红外光束、 无线应答器等等。鉴于当今计时技术的快速发展, 即便千分之一秒(为眨眼的40倍)的毫微差距, 也决定着冠军的归属。在现在的体育竞技比赛中, 随着运动员的水平不断提高, 差距也在不断缩小。有些运动对时间精度的要求也越来越高, 有时比赛冠亚军之间的差距只有几毫秒, 因此就需要高精度的秒表来记录成绩。有关计时钟表的发展历史, 大致能够分为三个演变阶段。一、 从大型钟向小型钟演变。二、 从小型钟向袋表过渡。三、 从袋表向腕表发展。每一阶段的发展都
12、是和当时的技术创造分不开的。1088年, 当时中国宋朝的科学家苏颂和韩工廉等人制造了水运仪象台, 它是把浑仪、 浑象和机械计时器组合起来的装置。它以水力作为动力来源, 具有科学的擒纵机构, 虽然几十年后毁于战乱, 但它在世界钟表史上具有极其重要的意义。1656年, 荷兰的科学家惠更斯应用伽利略的理论设计了钟摆, 第二年, 在她的指导下年轻钟匠S.Coster制造成功了第一个摆钟。1675年, 她又用游丝取代了原始的钟摆, 这样就形成了以发条为动力、 以游丝为调速机构的小型钟, 同时也为制造便于携带的袋表提供了条件。18世纪期间创造了各种各样的擒纵机构, 为袋表的进一步产生与发展奠定了基础。英国
13、人George Graham在1726年完善了工字轮擒纵机构, 它和之前创造的垂直放置的机轴擒纵机构不同, 因此使得袋表机芯相对变薄。20世纪初, 特别是第一次世界大战的爆发, 袋表已经不能适应作战军人的需要, 腕表的生产成为大势所趋。许多新的设计和技术也被应用在腕表上, 成为真正意义上的带在手腕上的计时工具。紧接着的二战使腕表的生产量大幅度增加, 价格也随之下降, 使普通大众也能够拥有它。腕表的年代到来了! 1998年: 建立超冷铯原子钟, 比微微秒又要精确10万倍。 从中国水运仪像台的创造到现在各国都在研制的原子钟这几百年的钟表演变过程中, 我们能够看到, 各个不同时期的科学家和钟表工匠用
14、她们的聪明的智慧和不断的实践融合成了一座时间的隧道, 同时也为我们勾勒了一条钟表文化和科技发展的轨迹。本设计利用AT89C52单片机的定时器/计数器定时和记数的原理, 使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据, P2.0-P2.4口作列扫描输出, P1.1、 P3.2、 P3.3、 P2.5分别接四个按钮开关, 分别实现开始、 暂停、 清零和查看上次时间的功能。显示电路由五位共阴极数码管组成。初始状态下计时器显示00.000, 当按下开始键时, 外部中断INT1向CPU发出中断请求, CPU转去执行外部中断1服务程序, 即开启定时器T0。计时采用定时器T0中断完
15、成, 定时溢出中断周期为1ms, 当一处中断后向CPU发出溢出中断请求, 每发出一次中断请求就对毫秒计数单元进行加一, 达到10次就对十毫秒位进行加一, 依次类推, 直到99.999秒重新复位。在计时过程中, 只要按下暂停键, 外部中断INT0向CPU发出中断请求, CPU转去执行外部中断0服务程序,即关闭定时器T0, 调用显示程序, 实现暂停功能, 同时将此次计时时间存入寄存区。然后对P1.1进行扫描。当P1.1按下时就跳转回主程序。等待下一次计时开始。在按下暂停键时, 将此时的计时时间存入中间缓存区, 当再次按下开始键时, 则讲中间缓存区的数据转入最终缓存区。秒表停止后对查看键P2.5进行
16、扫描, P2.5按下为低电平时, 调用最终缓存区的数据进行显示, 即显示上一次计时成绩。当P2.5位高电平时, 调用显示缓存区的数据进行显示, 即显示当此计时的成绩。根据以上设计思路从而实现数字电子秒表的计时和查看上一次计时时间的功能。本文主要内容包括三部分: 第一部分介绍硬件部分设计思路及方案; 第二部分介绍了软件部分的设计思路和设计; 最后一部分则是整个系统的安装与调试过程。1 硬件设计1.1 总体方案的设计数字电子秒表具有显示直观、 读取方便、 精度高等优点, 在计时中广泛使用。本设计用单片机组成数字电子秒表, 力求结构简单、 精度高为目标。设计中包括硬件电路的设计和系统程序的设计。其硬
17、件电路主要有主控制器, 计时与显示电路和回零、 启动和停表电路等。主控制器采用单片机AT89C52, 显示电路采用共阴极LED数码管显示计时时间。本设计利用AT89C52单片机的定时器/计数器定时和记数的原理, 使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据, P2.0-P2.4口作列扫描输出, P1.1、 P3.2、 P3.3、 P2.5口接四个按钮开关, 分别实现开始、 暂停、 清零和查看上次计时时间功能。电路原理图设计最基本的要求是正确性, 其次是布局合理, 最后在正确性和布局合理的前提下力求美观。硬件电路图按照图1.1进行设计。图1.1 数字秒表硬件电路基本原
18、理图根据要求知道秒表设计主要实现的功能是计时和显示。因此设置了四个按键和五位数码管显示时间, 三个按键分别是开始, 停止、 复位和查看上次计时时间按键。利用这四个建来实现秒表的全部功能, 而五位数码管则能显示最多99.999秒的计时。本设计中, 数码管显示的数据存放在内存单元79H7DH中。其中79H存放毫秒位数据, 7AH存放十毫秒位数据, 7BH存放百毫秒位数据, 7CH存放秒位数据, 7DH存放十秒位数据, 每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能, 显示用十进制BCD码数据的对应段码存放在ROM表中。显示时, 先取出79H-7dH某一地址中的数据, 然后查
19、得对应的显示用段码, 并从P0口输出, P2口将对应的数码管选中供电, 就能显示该地址单元的数据值。最终缓存区则设置为59H-5DH, 数据存放规则和79H-7DH一样。分别对应存放毫秒位至十秒位数据。与79H-7DH存储区不一样的是: 59H-5DH存储的内容为数字秒表上一次计时显示的时间。而79H-7DH为当前计时时间存储区。计时采用定时器T0中断完成, 定时溢出中断周期为1ms, 当一处中断后向CPU发出溢出中断请求, 每发出一次中断请求就对毫秒计数单元进行加一, 达到10次就对十毫秒位进行加一, 依次类推, 直到99.999秒重新复位。 再看按键的处理。这四个键能够采用中断的方法, 也
20、能够采用扫描的方法来识别。复位键和查看主要功能在于数值复位和查询上次计时时间, 对于时间的要求不是很严格。而开始和停止键则是用于对时间的锁定, 需要比较准确的控制。因此能够对复位和查看按键采取扫描的方式。而对开始和停止键采用外部中断的方式。设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器, 显示电路和回零、 启动、 查看、 停表电路等。主控制器采用单片机AT89C52, 显示电路采用共阴极LED数码管显示计时时间, 四个按键均采用触点式按键。1.2 单片机的选择本课题在选取单片机时, 充分借鉴了许多成形产品使用单片机的经验, 并根据自己的实际情况, 选择了ATMEL公司的AT
21、89S51。ATMEL公司的89系列单片机以其卓越的性能、 完善的兼容性、 快捷便利的电擦写操作, 低廉的价格、 超强的加密功能, 完全替代87C51/62和8751/52, 低电压、 低电源、 低功耗, 有DIP、 PLCC、 QFP封装, 有民用型、 工业级、 汽车级、 军品级等多种温度等级, 是当今世界上性能最好、 价格最低、 最受欢迎的八位单片机3。AT89C52P为40 脚双列直插封装的8 位通用微处理器, 采用工业标准的C51内核, 在内部功能及管脚排布上与通用的8xc52 相同, 其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、 数据RAM及外部接口等功能部件的
22、初始化, 会聚调整控制, 会聚测试图控制, 红外遥控信号IR的接收解码及与主板CPU通信等。单片机的外部结构AT89S52单片机采用40引脚的双列直插封装方式。图1.2为引脚排列图, 40条引脚说明如下: 主电源引脚Vss和Vcc Vss接地 Vcc正常操作时为+5伏电源外接晶振引脚XTAL1和XTAL2 XTAL1内部振荡电路反相放大器的输入端, 是外接晶体的一个引脚。当采用外部振荡器时, 此引脚接地。 XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时, 此引脚接外部振荡源。图1.2 单片机引脚图控制或与其它电源复用引脚RST/VPD, ALE/, 和/Vpp
23、 RST/VPD 当振荡器运行时, 在此引脚上出现两个机器周期的高电平( 由低到高跳变) , 将使单片机复位在Vcc掉电期间, 此引脚可接上备用电源, 由VPD向内部提供备用电源, 以保持内部RAM中的数据。 ALE/正常操作时为ALE功能( 允许地址锁存) 提供把地址的低字节锁存到外部锁存器, ALE 引脚以不变的频率( 振荡器频率的1/6) 周期性地发出正脉冲信号。因此, 它可用作对外输出的时钟, 或用于定时目的。但要注意, 每当访问外部数据存储器时, 将跳过一个ALE脉冲, ALE 端能够驱动( 吸收或输出电流) 八个LSTTL电路。对于EPROM型单片机, 在EPROM编程期间, 此引
24、脚接收编程脉冲( 功能) 外部程序存储器读选通信号输出端, 在从外部程序存储取指令( 或数据) 期间, 在每个机器周期内两次有效。同样能够驱动八LSTTL输入。 /Vpp、 /Vpp为内部程序存储器和外部程序存储器选择端。当/Vpp为高电平时, 访问内部程序存储器, 当/Vpp为低电平时, 则访问外部程序存储器。对于EPROM型单片机, 在EPROM编程期间, 此引脚上加21伏EPROM编程电源( Vpp) 。输入/输出引脚P0.0 - P0.7, P1.0 - P1.7, P2.0 - P2.7, P3.0 - P3.7。 P0口( P0.0 - P0.7) 是一个8位漏极开路型双向I/O口
25、, 在访问外部存储器时, 它是分时传送的低字节地址和数据总线, P0口能以吸收电流的方式驱动八个LSTTL负载。 P1口( P1.0 - P1.7) 是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。 P2口( P2.0 - P2.7) 是一个带有内部提升电阻的8位准双向I/O口, 在访问外部存储器时, 它输出高8位地址。P2口能够驱动(吸收或输出电流)四个LSTTL负载。 P3口( P3.0 - P3.7) 是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载6。AT89C52具有以下标准功能: 8k字节Flash, 2
26、56字节RAM, 32 位I/O口线, 看门狗定时器, 2个数据指针, 三个16位定时器/计数器, 一个6向量2级中断结构, 全双工串行口, 片内晶振及时钟电路。另外, AT89C52可降至0Hz 静态逻辑操作, 支持2种软件可选择节电模式。空闲模式下, CPU停止工作, 允许RAM、 定时器/计数器、 串口、 中断继续工作。掉电保护方式下, RAM内容被保存, 振荡器被冻结, 单片机一切工作停止, 直到下一个中断或硬件复位为止。CPU是单片机的核心部件。它由运算器和控制器等部件组成2。( 1) 运算器运算器的功能是进行算术运算和逻辑运算。能够对半字节( 4位) 、 单字节等数据进行操作。例如
27、能完成加、 减、 乘、 除、 加1、 减1、 BCD码十进制调整、 比较等算术运算和与、 或、 异或、 求补、 循环等逻辑操作, 操作结果的状态信息送至状态寄存器。89C52运算器还包含有一个布尔处理器, 用来处理位操作。它是以进位标志位C为累加器的, 可执行置位、 复位、 取反、 等于1转移、 等于0转移、 等于1转移且清0以及进位标志位与其它可寻址的位之间进行数据传送等位操作, 也能使进位标志位与其它可移位寻址的位之间进行逻辑与、 或操作5。( 2) 程序计数器PC程序计数器PC用来存放即将要执行的指令地址, 共16位, 可对64K程序存储器直接寻址。执行指令时, PC内容的低8位经P0口
28、输出, 高8位经P2口输出。( 3) 令寄存器指令寄存器中存放指令代码。CPU执行指令时, 由程序存储器中读取的指令代码送入指令寄存器, 经译码后由定时与控制电路发出相应的控制信号, 完成指令功能。本设计采用ATMEL的AT89C52微处理器, 主要基于以下几个因素: AT89C52为51内核, 仿真调试的软硬件资源丰富。 性价比高, 货源充分。 功耗低, 功能强, 灵活性高。 DIP40封装, 体积小, 便于产品小型化。 为EEPROM程序存储介质, 1000次以上擦写周期, 便于编程调试。 工作电压范围宽: 2.7V6V, 便于交直流供电。1.3 显示电路的选择与设计对于数字显示电路, 一
29、般采用液晶显示或数码管显示。对于一般的段式液晶屏, 需要专门的驱动电路, 而且液晶显示作为一种被动显示, 可视性差, 不适合远距离观看; 对于具有驱动电路和单片机接口的液晶显示模块(字符或点阵), 一般多采用并行接口, 对单片机的接口要求较高, 占用资源多; 另外, AT89S52单片机本身无专门的液晶驱动接口。而数码管作为一种主动显示器件, 具有亮度高、 响应速度快、 防潮防湿性能好、 温度特性极性、 价格便宜、 易于购买等优点, 而且有远距离视觉效果, 很适合夜间或是远距离操作。因此, 本设计的显示电路采用7段数码管作为显示介质。数码管显示能够分为静态显示和动态显示两种。由于本设计需要采用
30、五位数码管显示时间, 如果静态显示则占用的口线多, 硬件电路复杂。因此采用动态显示。图1.3 显示电路基本原理图动态显示是一位一位地轮流点亮各位数码管, 这种逐位点亮显示器的方式称为位扫描。一般各位数码管的段选线相应并联在一起, 由一个8位的I/O口控制; 各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时, 各数码管分时轮流选通, 要使其稳定显示必须采用扫描方式, 即在某一时刻只选通一位数码管, 并送出相应的段码, 在另一时刻选通另一位数码管, 并送出相应的段码, 依此规律循环, 即可使各位数码管显示将要显示的字符, 虽然这些字符是在不同的时刻分别显示, 但由于人眼存在视觉暂留效应,
31、 只要每位显示间隔足够短就能够给人同时显示的感觉。数码显示管分为共阳数码管和共阴数码管两种共阳极数码管的8个发光二极管的阳极( 二极管正端) 连接在一起, 如图1.4( b) , 一般, 公共阳极接高电平( 一般接电源) , 其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时, 则该端所连接的字段导通并点亮, 根据发光字段的不同组合可显示出各种数字或字符。此时, 要求段驱动电路能吸收额定的段导通电流, 还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管的8个发光二极管的阴极( 二极管负端) 连接在一起, 如图( c) , 一般, 公共阴极接低电平( 一般接地) , 其
32、它管脚接段驱动电路输出端, 当某段驱动电路的输出端为高电平时, 则该端所连接的字段导通并点亮, 根据发光字段的不同组合可显示出各种数字或字符。此时, 要求段驱动电路能提供额定的段导通电流, 还需根据外接电源及额定段导通电流来确定相应的限流电阻。 图1.4 ( a) 数码管引脚图 ( b) 共阳极内部结构图 ( c) 共阴极内部结构图本设计采用共阴极数码显示管做显示电路, 由于采用的是共阴的数码显示管, 因此只要数码管的a、 b、 c、 d、 e、 f、 g、 h引脚为高电平, 那么其对应的二极管就会发光, 使数码显示管显示09的编码见表1.1。表1.1 共阴极数码显示管字型代码字型共阴极代码字
33、型共阴极代码03FH56DH106H67DH25BH707H34FH87FH466H96FH动态显示电路由显示块、 字形码驱动模块、 字位驱动模块三部分组成。如图1.3所示为本系统的5位LED动态显示器接口电路。图中, 5个数码管的8段段选线分别与外接上拉电阻的单片机P0口对应相连, 而5个数码管的位控制端则和NPN型三极管的集电极相连接。单片机的P2.0P2.4口则分别对应数码显示管的最低位到最高位, P2.0P2.4口分别和五个NPN型三极管的基极相连, 做三极管导通的控制端, 而NPN型三极管选用9013型三极管。根据9013的资料显示: 其耐压值为40V, 最大功率为0.65W, 最大
34、电流为0.5A, 电气性能完全满足本设计的要求。另外数码管显示是采用动态显示, 因此对三极管的开关频率有一定的要求。根据电子秒表的设计计算可知动态显示的频率最高为3KHz, 而9013的导通频率为150MHz, 完全能满足本设计的要求, 因此最终选取9013三极管最为位控制开关。由于数码管是有P0口来驱动, 它内部没有上拉电阻, 作为输出口时驱动能力比较弱, 不能点亮数码显示管, 因此P0口必须接上拉电阻来提高驱动能力。另外一位共阴数码管的驱动电流一般为20mA左右, 如果电流太大容易造成数码管损坏, 因此也需要根据电源的电压值来确定上拉电阻的大小。如果电阻过小, 势必会形成灌电流过大, 造成
35、单片机IO的损坏, 如果电阻过大, 那么对拉电流没有太大的影响。电源供电电压为5V, 当上拉电阻选用220电阻时灌电流为22mA。不会损坏单片机的I/O口, 同时也能够为数码显示管起到限制电流的保护作用。 1.4 按键电路的选择与设计本设计中有四个按键, 分别实现开始、 暂停、 复位和查看功能。这三个键能够采用中断的方法, 也能够采用查询的方法来识别。对于复位键和查看键, 主要功能在于数值复位和对上次计时时间的查看, 对于时间的要求不是很严格, 而开始和暂停键主要用于时间的锁定, 需要比较准确的控制。因此能够考虑, 对复位键和查看键采用查询的方式, 而对于开始和暂停键采用外部中断。四个按键均采
36、用低电平有效, 具体电路连接图如图1.5所示。当按键没有按下时, 单片机的I/O口直接连接电源, 因此需要接上拉电阻来进行限流, 本设计中选取阻值为2k 的电阻作为上拉电阻, 根据计算可知此时的灌电流为2.5mA, 查看AT89C52的资料得知次电流在安全范围内, 符合安全设计要求。图1.5 按键电路按键电路中由于采用了外部中断, 因此需要用到P3口的第二功能。P3口引脚的第二功能如表1.2表1.2 P3口引脚第二功能表 P3口引脚特殊功能P3.0RXD( 串行输入口) P3.1TXD( 串行输出口) P3.2INT0( 外部中断0请求输入端) P3.3INT1( 外部中断1请求输入端) P3
37、.4 T0( 定时器/计数器0计数脉冲输入端) P3.5 T1( 定时器/计数器1计数脉冲输入端) P3.6WR(片外数据存储器写选通信号输出端)P3.7 RD( 片内数据存储器读选通信号输出端) 1.5 时钟电路的选择与设计单片机的时钟信号用来提供单片机内各种微操作的时间基准, 89S52片内设有一个由反向放大器所构成的振荡电路, XTAL1和 XTAL2分别为振荡电路的输入和输出端, 89S52单片机的时钟信号一般见两种电路形式得到: 内部振荡方式与外部振荡方式。外部方式的时钟很少用, 若要用时, 只要将XTAL1接地, XTAL2接外部振荡器就行。对外部振荡信号无特殊要求, 只要保证脉冲
38、宽度, 一般采用频率低于12MHz的方波信号。时钟发生器把振荡频率两分频, 产生一个两相时钟信号P1和P2供单片机使用。P1在每一个状态S的前半部分有效, P2在每个状态的后半部分有效。本设计采用的内部振荡方式, 内部振荡方式所得的时钟信号比较稳定, 实用电路中使用较多。本设计系统的时钟电路如图1.4所示。只要按照图1.6所示电路进行设计连接就能使系统可靠起振并能稳定运行。图中, 电容器C1、 C2起稳定振荡频率、 快速起振的作用, 电容值一般为533pF。但在时钟电路的实际应用中一定要注意正确选择其大小, 并保证电路的对称性, 尽可能匹配, 选用正牌的瓷片或云母电容, 如果可能的话, 温度系
39、数尽可能低。本设计中采用大小为30pF的电容和12MHz的晶振8。图1.6 内部振荡电路( 4) 时序AT89S52典型的指令周期( 执行一条指令的时间称为指令周期) 为一个机器周期, 一个机器周期由六个状态( 十二振荡周期) 组成。每个状态又被分成两个时相P1和P2。因此, 一个机器周期能够依次表示为S1P1, S1P2, S6P1, S6P2。一般算术逻辑操作在P1时相进行, 而内部寄存器传送在P2时相进行。图1.7 89S52时序图1.7给出了AT89S52单片机的取指和执行指令的定时关系。这些内部时钟信号不能从外部观察到, 所用XTAL2振荡信号作参考。在图中可看到, 低8位地址的锁存
40、信号ALE在每个机器周期中两次有效: 一次在S1P2与S2P1期间, 另一次在S4P2与S5P1期间。对于单周期指令, 当操作码被送入指令寄存器时, 便从S1P2开始执行指令。如果是双字节单机器周期指令, 则在同一机器周期的S4期间读入第二个字节, 若是单字节单机器周期指令, 则在S4期间仍进行读, 但所读的这个字节操作码被忽略, 程序计数器也不加1, 在S6P2结束时完成指令操作。图1.7的(a)和(b)给出了单字节单机器周期和双字节单机器周期指令的时序。89S52指令大部分在一个机器周期完成。乘( MUL) 和除( DIV) 指令是仅有的需要两个以上机器周期的指令, 占用4个机器周期。对于
41、双字节单机器周期指令, 一般是在一个机器周期内从程序存储器中读入两个字节, 唯有MOVX指令例外。MOVX是访问外部数据存储器的单字节双机器周期指令。在执行MOVX指令期间, 外部数据存储器被访问且被选通时跳过两次取指操作。图1.7中(c)给出了一般单字节双机器周期指令的时序9。1.6 复位电路的选择与设计关于单片机的置位和复位, 都是为了把电路初始化到一个确定的状态, 一般来说, 单片机复位电路作用是把一个例如状态机初始化到空状态, 而在单片机内部, 复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值, 复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的, 必须配合相应
42、的外部电路才能实现。当AT89C52单片机的复位引脚RST( 全称RESET) 出现2个机器周期以上的高电平时, 单片机就完成了复位操作。如果RST持续为高电平, 单片机就处于循环复位状态, 而无法执行程序。因此要求单片机复位后能脱离复位状态。而本系统选用的是12MHz的晶振, 因此一个机器周期为1s, 那么复位脉冲宽度最小应为2s。在实际应用系统中, 考虑到电源的稳定时间, 参数漂移, 晶振稳定时间以及复位的可靠性等因素, 必须有足够的余量。根据应用的要求, 复位操作一般有两种基本形式: 上电复位、 手动复位。上电复位要求接通电源后, 自动实现复位操作。80C51单片机的上电复位POR( P
43、ower On Reset) 实质上就是上电延时复位, 也就是在上电延时期间把单片机锁定在复位状态上。在单片机每次初始加电时, 首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上而且维持一个延时( 记作TRST) , 以便给予电源电压从上升到稳定的一个等待时间; 在电源电压稳定之后, 再插入一个延时, 给予时钟振荡器从起振到稳定的一个等待时间; 在单片机开始进入运行状态之前, 还要至少推迟2个机器周期的延时。上述一系列的延时, 都是利用在单片机RST引脚上外接一个RC支路的充电时间而形成的。典型复位电路如图1.8( a) 所示, 其中的阻容值是原始手册中提供的。在经历了一系列延
44、时之后, 单片机才开始按照时钟源的工作频率, 进入到正常的程序运行状态。在电源电压以及振荡器输出信号稳定之后, 又等待了一段较长的延时才释放RST信号, 使得CPU脱离复位锁定状态; 而RST信号一旦被释放, 马上在ALE引脚上就可检测到持续的脉冲信号8。图1.8 上电复位延时电路由于标准80C51的复位逻辑相对简单, 复位源只有RST一个( 相对新型单片机来说, 复位源比较单一) , 因此各种原因所导致的复位活动以及复位状态的进入, 都要依靠在外接引脚RST上施加一定时间宽度的高电平信号来实现。标准80C51不但复位源比较单一, 而且还没有设计内部上电复位的延时功能, 因此必须借助于外接阻容
45、支路来增加延时环节, 如图1.8(a)所示。其实, 外接电阻R还是能够省略的, 理由是一些CMOS单片机芯片内部存在一个现成的下拉电阻Rrst。例如, AT89系列的Rrst阻值约为50200 k; P89V51Rx2系列的Rrst阻值约为40225 k, 如图1.9所示。因此, 在图1.8(a)基础上, 上电复位延时电路还能够精简为图1.8(b)所示的简化电路( 其中电容C的容量也相应减小了) 。图1.9 复位引脚RST内部电路在每次单片机断电之后, 须使延时电容C上的电荷马上放掉, 以便为随后可能在很短的时间内再次加电作好准备。否则, 在断电后C还没有充分放电的情况下, 如果很快又加电,
46、那么RC支路就失去了它应有的延迟功能。因此, 在图1.8(a)的基础上添加一个放电二极管D, 上电复位延时电路就变成了如图1.8(c)所示的改进电路。也就是说, 只有RC支路的充电过程对电路是有用的, 放电过程不但无用, 而且会带来潜在的危害。于是附加一个放电二极管D来大力缩短放电持续时间, 以便消除隐患。二极管D只有在单片机断电的瞬间( 即VCC趋近于0 V, 能够看作VCC对地短路) 正向导通, 平时一直处于反偏截止状态。手动复位要求在电源接通的条件下, 在单片机运行期间, 如果发生死机, 用按钮开关操作使单片机复位。单片机要完成复位, 必须向复位端输出并持续两个机器周期以上的高电平, 从
47、而实现复位操作。本设计采用上电且开关复位电路, 如图1.10所示上电后, 由于电容充电, 使RST持续一段高电平时间。当单片机已在运行之中时, 按下复位键也能使RST持续一段时间的高电平, 从而实现上电且开关复位的操作。一般选择C=1030F, R=1K, 本设计采用的电容值为22F的电容和电阻为1K的电阻。图1.10 单片机复位电路1.7 系统总电路的设计系统总电路由以上设计的显示电路, 时钟电路, 按键电路和复位电路组成, 只要将单片机与以上各部分电路合理的连接就组成了系统总电路。系统总电路图如图1.11所示。AT89C52单片机为主电路的核心部分, 各个电路均和单片机相连接, 由单片机统筹和协调各个电路的运行工作。AT89C52单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路, 因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲, 但在焊接晶振电路时要尽量使晶振电路靠近单片机,