智能定时电源开关设计office(2)

更新时间:2024-01-21 23:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

太原工业学院毕业设计

毕业设计

智能定时电源开关设计

崔亮 09203921学生姓名: 学号: 自动化 系 部: 自动化 专 业: 刘志成 指导教师:

二零一三年六月

太原工业学院毕业设计

智能定时电源开关设计

摘要

随着家用电器的越来越普及和人们生活节奏的加快,人们对电器的依赖性进一步提高,对电器的定时需求也进一步加大。智能定时电源开关可以实现人为地设置电源的开通关断时间,这样就可以实现用电设备的通电开启与关闭的人为控制,在方便人们的同时又节省了大量电能

本文介绍了一种基于STC89C52RC单片机的智能定时电源开关设计方案,该系统是通过STC89C52RC的定时器与中断设计一段时间的倒计时,当倒计时到了预设的时间继电器就会接通,相应的电器就会开始工作,时间结束继电器关闭,电器也停止工作。本设计通过程序的循环设计可以实现倒计时的无限重复,即第一次倒计时结束后会自动复位,继续下一轮的倒计时,所以一旦开始工作,无需人为的其他任何操作就可以实现时间无限制的循环工作,真正实现智能、定时。 关键词: STC89C52RC,定时器,数码管,继电器

I

太原工业学院毕业设计

A Design Of Smart Timing Power Switch

Abstract

With the increasingly popularity of the household appliances and people life rhythm speeding up, people for the dependence of the electrical appliances to further improve, further intensify the timing requirements for appliances. Smart timing power switch can be achieved artificially set the opening of the power turn off time, so that it can be opened and closed electricity of electrical equipment of artificial control, at the people at the same time convenient and saves a lot of energy.

In this paper, a intelligent timing power switch design scheme based on STC89C52RC single-chip microcomputer, the system is through the STC89C52RC countdown timer and interrupt design for a period of time, when the countdown to the appropriate relay will switch on and the corresponding electrical appliance will start to work, time relay closed the end of the electric and stop working. This design can be achieved through the program loop design infinite repetition, the countdown will automatically reset after the end of the countdown for the first time, continue to the next round of the countdown, so once you start working, without any other operation can be achieved artificially time unlimited cycle work, truly realize intelligent, timing.

Key Words: STC89C52RC, Timer,Nixie,Tube,Relay

II

太原工业学院毕业设计

目录

第1章 绪论 ...........................................................1 1.1 智能定时电源开关研究的目的和意义 ..............................1 1.2 智能定时电源开关目前国内外研究现状 ............................2 1.3 本论文研究的主要内容 ..........................................2 第2章 系统控制方案及硬件电路设计 .....................................4 2.1 采用STC89C52RC为核心的单片机控制方案 .........................4 2.2 智能定时电源开关硬件电路 ......................................4 2.2.1 智能定时电源开关总体硬件电路 ...............................4 2.2.2 数码管显示电路 .............................................5 2.2.3 继电器控制电路 .............................................6 2.2.4 晶振电路 ...................................................8 2.3 本章小结 .......................................................9 第3章 STC89C52RCRC单片机的介绍 ....................................10 3.1 STC89C52RCRC单片机的组成原理 ................................10 3.2 单片机定时/计数器的原理与应用方法 ..............................13 3.2.1定时/计数器的基本结构.......................................13 3.2.2定时/计数器的工作原理 ......................................14

3.2.3定时/计数器的方式寄存器与控制寄存器 .........................15 3.2.4定时/计数器的MODE0 ..........................................16 3.2.5定时/计数器的MODE1 ..........................................17

3.2.6定时/计数器的MODE2 ..........................................18 3.2.7定时/计数器的MODE3 ..........................................19 3.3单片机中断系统的介绍 ............................................21 3.4 本章小结 .......................................................26 第4章 软件设计 .......................................................27 4.1 软件开发环境 ...................................................27 4.2 智能定时电源开关主程序图 .......................................27 4.3 智能定时电源开关实现程序 .......................................29

III

太原工业学院毕业设计

4.4 本章小结.. .....................................................31 第5章 系统调试与仿真设计 ..............................................32 5.1 KEIL工程的建立 ...............................................32 5.2 源文件的输入 ..................................................34 5.3 硬件电路的仿真 ................................................34 5.4 本章小结 ......................................................35 结论 ..................................................................37 参考文献 ..............................................................38 致谢 ..................................................................40 附录一:智能定时电源开关的程序设计 ....................................41 附录二:智能定时电源开关硬件接线图 ....................................44

IV

太原工业学院毕业设计

第1章 绪论

1.1 智能定时电源开关研究的目的和意义

随着社会电子科学技术正在飞速地发展,电子系统的应用领域越来越广泛,电子设备的种类也越来越多,电子设备与人们的工作、生活的关系日益紧密,人们极大地享受着电子设备带来的便利,但是任何电子设备都有一个共同的电路——电源电路,大到超级计算机,小到袖珍计算器,所有的电子设备都必须在电源电路的支持下才能正常工作,因此电源也就理所当然地成了各种电子设备不可或缺的组成部分,其性能优劣直接关系到电子设备的技术指标及能否安全可靠的工作。但人们常用的电源并不具备定时开启和关闭的功能,或许就由于这个原因给人们带来了很多没必要的损失和不便,譬如:家里空调如果可以自己设置开启和关闭的时间,就可以大大减少用电量;初高中上完晚自习后,空空的教室里还是灯火通明。家中的热水器不能自由设置开启关断时间而给人们带来一时不便;学校的起床广播因值班人员睡过头而推迟广播;家中的鱼缸因太久没有供氧造成鱼儿缺氧死亡;许多球迷或新闻爱好者因错过了开机时间而与精彩球赛或新闻擦肩而过;夏天里风扇的定时时间过短(一般为一小时),不便于晚上分段定时使用;家里的空调不能实现定时控制而不能让我们体验那种下班回家就有舒服的温度的舒服感等等。

智能电源定时开关就是要实现人为的设置电源接通关断的时间,可以任意的设置24小时之内的任意一段或多段时间作为电源的开启或管段时间,这样就可以实现用电设备的通电开启与关闭的人为控制,节省大量电能,而且可以自动循环定时,只要开始工作,不需要每天设置时间,在节约用电的同时也给人们的生活带来很大的方便。所以,研究智能电源定时开关,有着非常现实的意义。当今社会,智能电源定时开关可以广泛应用于工业自动化控制、军工设备、科研设备、LED照明、通讯设备、电力设备、仪器仪表等领域。它不仅体积小重量轻,并且电源效率非常高,效率甚至能达到90%以上。迅速发展的社会,对能源的要求越来越高,智能电源定时开关的高效率不仅节省了大量电能,而且节省了大量材料,高效率的定时开关电源成为各种设备可靠工作的重要保证。调查发现,大多数设备损坏都是电源造成的,因而研究高可靠行的智能电源定时开关,对生产生活是至关重要的。

1

太原工业学院毕业设计

1.2 智能定时电源开关目前国内外研究现状

随着科学技术的进步,我国的电力电子技术和电子器件都有了很大的发展。智能定时电源开关技术的发展,可以从根本上解决由于电器的长时间待机能耗产生大量的用电的问题,也可以给人们的生活带来很大的方便。

智能定时电源开关在国内的发展还不够成熟,生活中我们还是会面临很多的不便,比如:家中的热水器不能自由设置开通关断时间而导致待机能耗的增加以及给人自身带来的不便;饮水机不能设置加热时间而造成长时间的滚水进而饮水不健康;教师的灯在没有人上自习的时候还是亮着而造成电能的浪费等等。

国外的智能电源定时开关技术也只是在某些特定地点特定场合应用的比较成熟,他们可以帮助人们实现定时智能控制家电功能,轻松实现家庭智能,质量可靠,性能稳定,无需再担心用电过多,以及由于长时间待机可能引起的财产安全,生命安全。人们可以放心的工作,安心的生活,开心的游玩。智能定式电源开关以服务人们生活为本,影响生活,改变生活,创造新的生活方式。只有更加贴近实用、易用和人性化的智能家居理念,才能真正体现智能家居的价值,这也是现代科技价值的核心理念。通过智能家居我们能更方便的生活。冬天时,在回家之前打开家中的电暖器或者空调、电饭煲,等回到家中,能感到久违的温暖。夏天时,回家之前打开空调,回到家中体验凉爽。睡觉时,按下睡眠模式,监控设备打开,灯光控制系统关闭光源,窗帘自动拉上,再体验轻松睡眠的同时也保证了家中的安全。周末了,在家中也可以体验一把电影院的乐趣,按下影院模式,窗帘拉上,家庭影院打开,投影仪开启,投影幕落下。科技改变生活,随着科技的发展,智能家居智能生活已不是个梦想。

为此,我们应该充分利用现有的技术、人才和资源优势,加强国际合作和技术交流,争取国内外各方面的有利因素,发展智能定时电源开关技术,提高家庭的生活质量,减少不必要的用电浪费,增强人类的节能意识,为我们子孙后代保留一点资源。智能定时开关电源就是为了实现节能与给人方便而诞生的技术,所以它的发展一定会给我们的生活带来不可抹灭的作用

1.3 本论文研究的主要内容

本设计研究的主要内容是智能定时电源开关,本设计首先进行了硬件电路的设计,设计的主要内容是利用STC89C52RC单片机通过锁存器74HC573由数码管显示时间,

2

太原工业学院毕业设计

另一路通过8550三极管驱动继电器吸合电路,定时时间到后,继电器能够吸合动作从而驱动电源开关,切断或通电电源。并且可以实现无限制循环倒计时。本设计以60秒为倒计时时间,倒计时到十秒时电源接通,零秒时关闭,继续下一轮倒计时。然后设计了软件部分,并对程序进行仿真,最后进行了制作和调试,而且作出了实物,效果符合预期效果,这就是本次设计的主要内容。

3

太原工业学院毕业设计

第2章 系统控制方案及硬件电路设计

2.1 采用STC89C52RC为核心的单片机控制方案

本设计采用的是STC89C52RC单片机芯片,通过+5V电源送给单片机供电,利用单片机的外围电路进行扩展,单片机芯片的引脚端口一端接锁存器74HC573到数码管上并起到显示时间的作用,单片机的另一个端口接8550三极管与继电器相接,倒计时一定的时间继电器吸合去驱动开关电源,及时通断达到节能的目的,为了可以快速演示本次设计的效果,本设计采用60秒倒计时为准。同时通过PROTEUS画出硬件电路图,并进行了电路仿真,最会一步就是根据设计做出相应的实物。这就是开关插座基本的控制方案。

采用STC89C52RCRC为核心的单片机控制方案系统结构图如图2.1所示:

路晶振电 路显数示码电管STC89C52RC

源控继电制电路电器 2.2 智能定时电源开关硬件电路 2.2.1智能定时电源开关总体硬件电路

智能定时电源开关设计的硬件电路图如图2.2所示。具体说明为:该电路原理图核心芯片为STC公司生产的STC89C52RC单片机芯片;继电器所控制的电路为一含电源的电路,其中用灯泡的亮与灭作为指示电源电路接通还是关断;由PNP型三极管8550放大电流后来驱动继电器;电路中的数码管为两位一体共阴极数码管;数码管由两个一样的锁存器74HC573驱动,数码管为60秒循环倒计时显示;晶振电路就是包含一个晶振两个电容的电路,是整个电路的心脏。

4

图2.1 系统结构图

太原工业学院毕业设计

图2.2 智能定时电源开关硬件电路

2.2.2 数码管显示电路

本设计采用两位一体共阴极数码管显示,电路图如图2.3所示。具体说明为:两个573锁存器的IO口接P0.0——P0.7对应锁存器D0——D7;数码管的段ABCDEFGH对应74HC573-1芯片;数码管的两个位选端对应74HC573-2芯片; P2.6接74HC573-1控制段选信号; P2.7接74HC573-2控制位选信号。

关于用锁存器74HC573来驱动数码管的说明:在LED和数码管显示方面,要维持一个数据的显示,往往要持续的快速的刷新。尤其是在四段八位数码管等这些要选通的显示设备上。在人类能够接受的刷新频率之内,大概每三十毫秒就要刷新一次。这就大大占用了处理器的处理时间,消耗了处理器的处理能力,还浪费了处理器的功耗。锁存器的使用可以大大的缓解处理器在这方面的压力。当处理器把数据传输到锁存器并将其锁存后,锁存器的输出引脚便会一直保持数据状态直到下一次锁存新的数据为止。这样在数码管的显示内容不变之前,处理器的处理时间和IO引脚便可以释放。可以看出,处理器处理的时间仅限于显示内容发生变化的时候,这在整个显示时间上

5

太原工业学院毕业设计

只是非常少的一个部分。而处理器在处理完后可以有更多的时间来执行其他的任务。

这就是锁存器在LED和数码管显示方面的作用:节省了宝贵的MCU(微控制单元)时间。

图2.3 数码管显示电路

2.2.3继电器控制电路

本设计采用PNP数码管驱动继电器控制外接含电源电路,这是典型的继电器驱动电路。单片机是一个弱电器件,一般情况下它们大多工作在5V甚至更低。驱动电流在mA级以下。而要把它用于一些大功率场合,比如继电器驱动,显然是不行的。所以就要有一个环节来衔接,这个环节就是所谓的“功率驱动”。继电器驱动就是一个典型的、简单的功率驱动环节。图中三极管8550有两个作用:一个是起放大作用,一个是起开关作用(严格来讲开关作用是放大作用的极限情况)。基极处连接的是单片机的P3.2口。P3.2口给出高电平时,三极管处于导通状态,并起放大作用,这样,继电器

6

太原工业学院毕业设计

就能得到足够的驱动电流来正常工作。当P3.2口给出低电平时,三极管不工作,继电器因没电流通过而不工作。灯泡用于指示继电器是处于导通状态(灯亮)还是处于断开状态(灯灭)。电路图如图2.4所示:

图2.4 继电器控制电源电路

具体说明:继电器通过PNP三极管驱动; 三极管的基极接STC89C52RC单片机的P3.2口来控制;继电器控制的电路须有电源,接一个灯泡来显示控制结果。 (1)继电器采用松乐SRD-05VDC-SL-A,具体参数如下: 触点形式:1C(SPDT)

触点负载: 3A 220V AC/30V DC

阻 抗: ≤100mΩ 额定电流: 3A 电气寿命:≥10万次 机械寿命:≥1000万次 阻值(士10%): 120Ω 线圈功耗:0.2W 额定电压:DC 5V

7

太原工业学院毕业设计

吸合电压:DC 3.75V 释放电压:DC 0.5V 工作温度:-25℃~+70℃ 绝缘电阻:≥100MΩ

线圈与触点间耐压:4000VAC/1分钟 触点与触点间耐压:750VAC/1分钟

从上面的继电器线圈参数得知,继电器工作吸合电流为0.2W/5V=40mA或5V/120Ω≈40mA。

(2)三极管的选择:

功率PCM:大于5V*继电器电流 (5*40 mA = 0.2W)的两倍; 最大集电极电流(ICM):大于继电器吸合电流的两倍以上; 耐压BV(CEO):大于继电器工作电压5V,可选10V以上; 直流放大倍数:取300。

故本次设计所选8550PNP型三极管,放大倍数约为350.它是一种低电压、大电流、小信号的PNP型三极管,具体参数如下:

集电极-基极电压:-40V 耗散功率0.625W(贴片:0.3W) 集电极电流0.5A 集电极--基极电压40V 集电极--发射极击穿电压25V 特征频率fT 最小150MHZ

2.2.4晶振电路

本设计的晶振电路如图2.5所示。晶振的基本作用是提供一个时序控制的标准时刻,根据电路设计,在某个特定的时候完成特定的任务,如果没有个时序的标准时刻,整个电路就成为一个“聋子”,不知道什么时候该做什么事情了。在单片机系统里,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快。单片机一切指令的执行都是建立在晶振所提供的晶振频率之上。单片机晶振是为系统提供基本的时钟信号,相当于一个系统的心脏,通常一个系统共用一个晶振,便于各部分保持同步, 如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环提供。

8

太原工业学院毕业设计

2.5 单片机晶振电路

2.3 本章小结

本章介绍了智能定时电源开关的定时控制的设计过程,主要讲述硬件电路设计。首先,介绍了系统总体方案的设计方案图,智能定时电源开关的定时控制系统的设计主要会用到单片机STC89C52RC、数码管显示倒计时模块、继电器控制电源模块和晶振等硬件模块,然后硬件电路设计部分对每一模块的功能和使用进行了详细的介绍,弄清楚各部分的工作方式及联系,设计出系统的总体电路图。

9

太原工业学院毕业设计

第3章 STC89C52RC单片机的介绍

3.1 STC89C52RC单片机的组成原理

STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

(1) 主要特性如下:

增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.

工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)

工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz 用户应用程序空间为8K字节 片上集成512字节RAM

通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片

具有EEPROM功能 具有看门狗功能

共3个16位定时器/计数器。即定时器T0、T1、T2

外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒

?通用异步串行口(UART),还可用定时器软件实现多个UART ?工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) ?PDIP封装

(2)STC89C52RC单片机的工作模式[3]

?掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序 ?空闲模式:典型功耗2mA

?正常工作模式:典型功耗4Ma~7mA

10

[2]

太原工业学院毕业设计

掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备 (2)STC89C52RC的引脚介绍[4]

STC89C5RC2的引脚图如图3.1所示:

图3.1 STC89C52RC引脚图

STC89C52RC引脚功能说明如下: VCC(40引脚):电源电压 VSS(20引脚):接地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。

11

太原工业学院毕业设计

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见表3.1:

在对Flash ROM编程和程序校验时,P1接收低8位地址。

表3.1 P1.0和P1.1引脚复用功能

引脚号 P1.0 P1.1 功能特性 T2(定时器/计数器2外部计数输入),时钟输出 T2EX(定时器/计数器2捕获/重装触发和方向控制) P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流()。

在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX @DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX @R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。

在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。 P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。

在对Flash ROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如表3.2所示:

引脚号 P3.0 P3.1 P3.2 表3.2 P3口引脚复用功能 复用功能 RXD(串行输入口) TXD(串行输出口) (外部中断0) 12

太原工业学院毕业设计

P3.3 P3.4 P3.5 P3.6 P3.7 (外部中断1) T0(定时器0的外部输入) T1(定时器1的外部输入) (外部数据存储器写选通) (外部数据存储器读选通) RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。

ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

(29引脚):外部程序存储器选通信号()是外部程序存储器选通信号。当AT89C51RC从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而访问外部数据存储器时,将不被激活。

/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接GND。注意加密方式1时,将内部锁定位RESET。为了执行内部程序指令,应该接VCC。在Flash编程期间,也接收12伏VPP电压。

XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。

3.2 单片机定时/计数器的原理与应用方法

3.2.1定时/计数器的基本结构

定时/计数器的基本结构如图3.2所示[5]。包括两个定时器/计数器T0和T1、工作方式寄存器TMOD和控制寄存器TCON。其中每个定时/计数器是由两个8位寄存器TH0、TL0和TH1、TH1构成,用于存放定时/计数器的计数初值和经过值;

13

太原工业学院毕业设计

工作方式寄存器TMOD用于定时/计数器的工作方式设置;控制寄存器TCON用来对定时/计数器进行启动、停止运行控制管理。

图3.2 定时/计数器的基本结构

3.2.2定时/计数器的工作原理

定时器T0和T1分别是由TH0、TL0和TH1、TL1,这两个8位计数器构成的16位计数器。两个16位计数器都可以理解为16位的加1计数器[7]。

T0和T1定时/计数器都可由软件设置为定时或计数的工作方式,其中T1还可作为串行口的波特率发生器。T0和T1这些功能的实现都由特殊功能寄存器中的TMOD和TCON进行控制

当T0或T1用作对外部事件计数的计数器时,通过89C51外部引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数。当加在T0或T1引脚上的外部脉冲信号出现一个由1到0的负跳变时,计数器加1,如此直至计数器产生溢出。

当T0或T1用作定时器时,对外接晶振产生的振荡信号进行12分频后,提供给计数器,作为计数的脉冲输入,计数器对输入的脉冲进行计数,直至产生溢出。

不论T0或T1是工作于定时方式还是计数方式,它们在对内部时钟或外部事件进行计数时,都不占用CPU时间,直到定时/计数器产生溢出。如果满足条件,CPU才会

14

太原工业学院毕业设计

停下当前的操作,去处理“时间到”或者“计数满”这样的事件。因此,定时/计数器是与CPU‘并行’工作的,除非溢出不会影响CPU的其它工作。

3.2.3定时/计数器的方式寄存器与控制寄存器

[6][7]

T0和T1由两个8位寄存器TMOD和TCON来控制,分别用来设置各个定时/计数器的工作方式、选择定时或计数功能、控制启动运行以及作为运行状态的标志等。当89C52系统复位时,TMOD和TCON所有位都清0。 (1)定时器/计数器的方式寄存器TMOD

图3.3 定时/计数器的方式寄存器

TMOD在特殊功能寄存器中,字节地址为89H。由于TMOD只能进行字节寻址,所以对T0或T1工作方式的控制只能整字节(8位)写入。在TMOD中,高4位用于对定时器T1的方式控制,而低4位用于对定时器T0的方式控制。图3.3中给出了各位的定义,各位功能简述如下:

工作方式选择位

M1M0:定时器工作方式选择位。通过对M1M0的设置,可使定时器工作于4种工作方式之一。参考表3.3

表3.3 定时器工作方式

M1 M0 0 0 0 1 1 0 1 1 方式 0 1 2 3 说 明 13 位定时器(TH的 8 位和TL的低 5 位) 16 位定时器/计数器 自动重装入初值的 8 位计数器 T0 分成两个独立的8位计数器,T1在方式3时停止工作 ① C/T定时/计数器选择位 —C/T=1,工作于计数方式; —C/T=0,工作于定时方式。

15

太原工业学院毕业设计

② GATE门控位

由GATE、软件控制位TR1/TR0和INT1/INT0共同决定定时/计数器的打开或关闭。

—GATE=0,只要用指令置TR1/TR0为1即可启动定时/计数器工作,而不管INT的 状态如何;

—GATE=1,只有INT1/INT0为高电平且用指令置TR1/TR0为1时,才能启动定时/计数器工作。

(2)定时/计数器控制寄存器(TCON)

TCON是一个特殊功能寄存器,TCON的字节地址为88H,其各位地址从88位开始分别为88H~8FH。高4位为定时/计数器的运行控制和溢出标志位,低4位与外部中断有关。其格式如下表列:

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON的高4位的功能描述如下: ① TF1/TF0 溢出标志位

当T1或T0产生溢出时,由硬件自动置位中断触发器TF1或TF0,并向CPU申请中断。如果用中断方式,则CPU在响应中断进入中断服务程序后,TF1或TF0被硬件自动清0。如果是用软件查询方式对TF1或TF0进行查询,则在定时/计数器回0后,应当用指令将TF1或TF0清0。

② TR1/TR0 运行控制位

用指令(“SETB TR1”)对TR1或TR0进行置位或清零,也可以启动或关闭T1或T0的运行。

3.2.4定时/计数器的MODE0[8]

MODE0为13位定时/计数器工作方式,其内部结构如图3.4所示。由图3.4可知,MODE0实际上是由TL0(5位)和TH0(8位)构成的13位脉冲计数器,并由TCON和TMOD控制和管理。

??设定MODE0的步骤:

(1)设定MODE0的步骤(四选1)

MOV TMOD,#00H TIMER0设定计时工作方式(内部输入)

16

太原工业学院毕业设计

MOV TMOD,#00H TIMER1设定计时工作方式(内部输入) MOV TMOD,#04H TIMER0设定计数工作方式(T0输入) MOV TMOD,#40H TIMER1设定计数工作方式(T1输入) (2)预置计数初值

MOV TLX,#(8192–COUNT) MOD/32; TLX的值为计数值除以32的余数 MOV THX,#(8192–COUNT)/32 ;THX为计数值除以32的商 (3)启动定时器 SETB TRX (4)检查TFX是否溢出

JBC TFX ;查询方式检查TFX是否溢出,溢出转移,否则等待

图3.4 方式0内部结构

3.2.5定时/计数器的MODE1[8]

方式1和方式0的工作原理基本相同,唯一不同是T0和T1工作在方式1时,计数长度M是2的16次方,内部结构参考图3.5。16位的初值直接拆成高低字节,分别送入TH和TL即可,对于实际应用比MODE0更有实际意义。

? 设定MODE1的步骤:

(1) 设定MODE1的步骤(四选1)

MOV TMOD,#01H TIMER0设定计时工作方式(内部输入) MOV TMOD,#10H TIMER1设定计时工作方式(内部输入) MOV TMOD,#05H TIMER0设定计数工作方式(T0输入) MOV TMOD,#50H TIMER1设定计数工作方式(T1输入)

17

太原工业学院毕业设计

(2) 启动定时器 SETB TRX (3) 预置计数初值

MOV TLX,#(65536–COUNT) MOD 256 MOV THX,#(65536–COUNT)/256 (4) 检查TFX是否溢出 JBC TFX

图3.5 方式1内部结构

3.2.6定时/计数器的MODE2[8]

方式1和方式0的工作原理基本相同,计数溢出后计数器清0。在循环计数或循环定时应用时就存在反复设置计数初值的问题。不仅会给程序设计带来不便,同时影响定时的精度。

针对以上问题,最好的解决办法就是使用方式2,它具有自动加载功能,即自动加载计数初值。在这种方式下,把16位计数器分为两部分,即TL作为计数器,以TH作初值预置寄存器,初始化时将计数初值分别装入TL和TH中。计数溢出后由预置寄存器TH以硬件方法自动给TL重新加载,由硬件重新赋值,所以也称为硬件自动重加载工作方式。其内部结构参考图3.6。

图3.6 方式2内部结构

18

太原工业学院毕业设计

? 设定MODE2的步骤

(1) 设定MODE2的步骤(四选1)

MOV TMOD,#02H TIMER0设定计时工作方式(内部输入) MOV TMOD,#20H TIMER1设定计时工作方式(内部输入) MOV TMOD,#06H TIMER0设定计数工作方式(T0输入) MOV TMOD,#60H TIMER1设定计数工作方式(T1输入) (2) 启动定时器 SETB TRX (3) 预置计数初值

MOV TLX,#(256–COUNT) MOV THX,#(256–COUNT) (4) 检查TFX是否溢出 JBC TFX

3.2.7定时/计数器的MODE3[8]

在工作方式3模式下,定时/计数器T0被拆成两个独立的8位计数器TL0和TH0。其结构如图3.7所示。其中TL0既可以作计数器使用,也可以作为定时器使用,定时/计数器T0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。TH0就没有那么多“资源”可利用了,只能作为简单的定时器使用,而且由于定时/计数器T0的控制位已被TL0占用,因此只能借用定时/计数器1的控制位TR1和TF1,也就是以计数溢出去置位TF1,TR1则负责控制TH0定时的启动和停止。

由于TL0既能作定时器也能作计数器使用,而TH0只能作定时器使用而不能作计数器使用,因此在方式3模式下,定时/计数器0可以构成二个定时器或者一个定时器和一个计数器。

如果定时/计数器0工作于工作方式3,那么定时/计数器1的工作方式就不可避免受到一定的限制,因为自己的一些控制位已被定时/计数器借用,只能工作在方式0、方式1或方式2下,如果设置T1工作在方式3,则T1停止工作,相当于其他方式时令TR1=0。

??设定MODE3的步骤

(1) 设定MODE3的步骤(三选1)

MOV TMOD,#03H TL0设定计时工作方式(内部输入) MOV TMOD,#03H TH0设定计时工作方式(内部输入)

19

太原工业学院毕业设计

MOV TMOD,#07H TL0设定计数工作方式(T0输入) (2) 启动定时器 SETB TRX (3) 预置计数初值

MOV TL0,#(256–COUNT) 或 MOV TH0,#(256–COUNT) (4) 检查TFX是否溢出 JBC TFX

图3.7 方式3内部结构

小结:通过定时器/计时器的结构、工作原理和应用的介绍,知道T0和T1的设置步骤几乎是相同的,分别要定义TMOD、TCON、TH0、TL0、TH1和TL1等寄存器后,定时计数器方能正确操作。在程序刚规划的阶段时,每个定时器的操作和控制模式都必须考虑清楚后才可以开始写程序,具体的操作分解为以下几步。

设置步骤1:确定是定时还是计数操作,定时TMOD中的C/T位为0,计数时C/T=1。 设置步骤2:确定定时/计数时是否受外部的硬件信号控制,若不受外部INT0或INT1引脚控制时,TMOD中的GATE位为0,否则需设成1。有关GATE的使用将在中断章节讨论。

设置步骤3:决定计数器的模式,模式0时最大计数值为8192,模式1时最大计数值为65536,两个计数器均没有自动载入的功能;模式2时最大计数值为256,且可自动载入计数值;模式3时有两个计数器,其最大计数值都是256,各种模式的选择应仔细考虑。

将前3个步骤的结果组合起来,成为一个给TMOD寄存器的设置值。

20

太原工业学院毕业设计

设置步骤4::决定计数器(TH0、TL0、TH1和TL1)的预置初值,由于MCS-51的计数器都属于可载入式的加1计数器,所以正确的预置初值应该是该计数器的最大可计数值减去欲计数值,然后将该结果分成两部分后,再送到THX和TLX两个计数器。

设置步骤5:开始启动定时器/计数器,将TCON中的TR1和TR0位设成1。 设置步骤6:查询计数是否溢出,即TFX=1,停止计数,程序转移执行主程序或分支程序。

若要正常操作所必须设置的寄存器和位,要注意的是TMOD寄存器无法进行位寻址,所以必须两个定时器模式同时设置。

3.3单片机中断系统的介绍

(1)单片机中断级别

[6][10-12]

单片机对于中断的响应级别是不同,具体参见表3.4所示:

表3.4 单片机响应中断级别

中断源 INIT0---外部中断0 T0---定时器/计数器0中断 INIT1---外部中断1 T1----定时器/计数器1中断 TI/RI---串行口中断 T2---定时器/计数器2中断 默认中断级别 最高 第2 第3 第4 第5 最低 中断序号(C语言用) 0 1 2 3 4 5 (2) 中断允许寄存器IE

单片机中断允许寄存器IE各位如下表3.5所示:

表3.5 中断允许寄存器IE

位序号 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 符号位 EA ------- ET2 ES ET1 EX1 ET0 EX0 对各位的具体说明如下:

21

太原工业学院毕业设计

1 EA---全局中允许位。 ○

EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。

EA=0,关闭全部中断。 2 -------,无效位。 ○

3 ET2---定时器/计数器2中断允许位。 ○

ET2=1,打开T2中断。 ET2=0,关闭T2中断。

4 ES---串行口中断允许位。 ○

ES=1,打开串行口中断。 ES=0,关闭串行口中断。

5 ET1---定时器/计数器1中断允许位。 ○

ET1=1,打开T1中断。 ET1=0,关闭T1中断。

6 EX1---外部中断1中断允许位。 ○

EX1=1,打开外部中断1中断。 EX1=0,关闭外部中断1中断。

7 ET0---定时器/计数器0中断允许位。 ○

ET0=1,打开T0中断。 ET0=0,关闭T0中断。

8 EX0---外部中断0中断允许位。 ○

EX0=1,打开外部中断0中断。 EX0=0,关闭外部中断0中断。 (3) 中断优先级寄存器IP

中断优先级寄存器IP各位如下表3.6所示,具体各位说明如下: 1 -------,无效位。 ○

22

太原工业学院毕业设计

2 PS---串行口中断优先级控制位。 ○

PS=1,串行口中断定义为高优先级中断。 PS=0,串行口中断定义为低优先级中断。 3 PT1---定时器/计数器1中断优先级控制位。 ○

PT1=1,定时器/计数器1中断定义为高优先级中断。 PT1=0,定时器/计数器1中断定义为低优先级中断。 4 PX1---外部中断1中断优先级控制位。 ○

PX1=1,外部中断1中断定义为高优先级中断。 PX1=0,外部中断1中断定义为低优先级中断。

表3.6 中断优先级寄存器

位序号 位地址 DB7 --- DB6 --- DB5 --- DB4 PS DB3 PT1 DB2 PX1 DB1 PT0 DB0 PX0 5 PT0---定时器/计数器0中断优先级控制位。 ○

PT0=1,定时器/计数器0中断定义为高优先级中断。 PT0=0,定时器/计数器0中断定义为低优先级中断。 6 PX0---外部中断0中断优先级控制位。 ○

PX0=1,外部中断0中断定义为高优先级中断。 PX0=0,外部中断0中断定义为低优先级中断。 (4) 定时器/计数器工作模式寄存器TMOD

定时器/计数器工作模式寄存器TMOD各位如下表3.7所示:

表3.7 定时器/计数器工作模式寄存器TMOD

位序号 位符号 DB7 GATE DB6 C/T\\ DB5 M1 DB4 M0 DB3 DB2 DB1 M1 DB0 M0 GATE C/T\\ 对各位的说明如下:

1 GATE---门控制位。 ○

23

太原工业学院毕业设计

GATE=0,定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制。 GATE=1,定时器计数器启动与停止由TCON寄存器中TRX(X=0,1)和外部中断引脚(INT0或INT1)上的电平状态来共同控制。

2 C/T\\---定时器和计数器模式选择位。 ○

C/T\\=1,为计数器模式;C/T\\=0,为定时器模式。 3 M1M0---工作模式选择位。 ○

根据M1、M0值的不同,单片机有四种工作模式,具体如下表3.8所示:

表3.8 单片机四种不同工作模式

M1 0 0 1 1 M0 0 1 0 1 工作模式 方式0,为13位定时器/计数器 方式1,为16位定时器/计数器 方式2,8位初值自动重装的8位定时器/计数器 方式3,仅适用于T0,分成两个8位计数器,T1停止工作 (5) 定时器/控制器控制寄存器TCON

定时器/控制器控制寄存器TCON各位如表3.9所示:

表3.9 定时器/控制器控制寄存器TCON

位序号 符号位 DB7 TF1 DB6 TR1 DB5 TF0 DB4 TR0 DB3 IE1 DB2 IT1 DB1 IE0 DB0 IT0 对各位的具体说明如下:

1 TF1---定时器1溢出标志位。 ○

当定时器1记满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。

2 TR1---定时器1运行控制位。 ○

由软件清0关闭定时器1。当GATE=1,且INIT为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。

24

太原工业学院毕业设计

3 TF0---定时器0溢出标志,其功能及其操作方法同TF1。 ○

4 TR0---定时器0运行控制位,其功能及操作方法同TR1。 ○

5IE1---外部中断1请求标志。 ○

当IT1=0时,位电平触发方式,每个机器周期的S5P2采样INT1引脚,若NIT1脚为定电平,则置1,否则IE1清0。

当IT1=1时,INT1为跳变沿触发方式,当第一个及其机器周期采样到INIT1为低电平时,则IE1置1。IE1=1,表示外部中断1正向CPU中断申请。当CPU响应中断,转向中断服务程序时,该位由硬件清0。

6 IT1外部中断1触发方式选择位。 ○

IT1=0,为电平触发方式,引脚INT1上低电平有效。

IT1=1,为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变有效。 7 IE0---外部中断0请求标志,其功能及操作方法同IE1。 ○

8 IT0---外部中断0触发方式选择位,其功能及操作方法同IT1。 ○

从上面的知识点可知,每个定时器都有4种工作模式,可通过设置TMOD寄存器中的M1M0位来进行工作方式选择。

方式1的计数位数是16位,对T0来说,由TL0寄存器作为低8、TH0寄存器作为高8位,组成了16位加1计数器。

关于如何确定定时器T0的初值问题。定时器一但启动,它便在原来的数值上开始加1计数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为12MHz,12个时钟周期为一个机器周期,那么此时机器周期为1us,记满TH0和TL0就需要216 -1个数,再来一个脉冲计数器溢出,随即向CPU申请中断。因此溢出一次共需65536us,约等于65.6ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上记50000个数后,定时器溢出,此时刚好就是50ms中断一次,当需要定时1s时,写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。

25

太原工业学院毕业设计

以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为TCY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/TCY ,装入THX和TLX中的数分别为:

THX=(65536-N)/256 , TLX=(65536-N)%6

在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: (1)对TMOD赋值,以确定T0和

T1的工作方式。

(2)计算初值,并将初值写入TH0、TL0或TH1、TL1。 (3)中断方式时,则对IE赋值,开放中断。

(4)使TR0和TR1置位,启动定时器/计数器定时或计数。

3.4 本章小结

本章主要介绍了本次设计需要用到的单片机的部分原理。第一,介绍了单片机芯片STC89C52RC的基本组成原理以及40个引脚功能;第二,介绍了单片机定时/计数器的结构及工作原理和方式;第三,介绍了单片机中断系统的原理以及工作方式。

在对系统所用核心芯片STC89C52RC单片机基本原理以及定时中断工作方式介绍的基础上,接下来就是系统的软件程序设计部分,以完成本次的设计。

26

太原工业学院毕业设计

第4章 软件设计

4.1 软件开发环境

STC89C52RC单片机软件开发平台为Keil uvision4 C51,仿真环境为Protues,下载软件为STC_ISP。

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。[16]

Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。[16]

STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。

4.2 智能定时电源开关主程序图

在本次设计中,主程序是在单片机的控制下进行60秒循环倒计时,当时间倒计时到10秒时,继电器有电流通过进而接通被控电源电路,灯泡发光,当倒计时到0秒时,继电器没有电流通过进而断开被控电源电路,灯泡熄灭,与此同时,时间又从60秒开始倒计时,进行如上的动作,如此无限循环往复的进行下去。具体流程图如图4.1所示:

27

太原工业学院毕业设计

开始

图4.1 系统主程序图

28

系统初始化 60秒倒计时开始 倒计时过程 倒计时到10秒? N Y 继电器通,灯泡亮 N 倒计时到0秒? Y 继电器断,灯泡灭 太原工业学院毕业设计

4.3 智能定时电源开关实现程序

由于学过C语言的编程方法,而且C语言编程既简洁又方便,所以本次设计选择利用C语言编写程序来实现智能定时电源开关的功能,具体程序如下: #include sbit dula=P2^6;//位选十位 sbit wela=P2^7;//位选个位 sbit JDQ=P3^2;

unsigned char j,k,a1,a0,s=60; unsigned int m;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(unsigned char i) {

for(j=i;j>0;j--) for(k=125;k>0;k--); }

void display(unsigned char sh_c,unsigned char g_c)//个位与十位数字的显示 {

dula=0;

P0=table[sh_c]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[g_c]; dula=1;

29

太原工业学院毕业设计

dula=0; P0=0xfd; wela=1; wela=0; delay(5); }

void main() {

TMOD=0x01;//选择中断类型为定时器中断 TR0=1;//总中断打开

TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器

每隔50000微秒发起一次中断。

TL0=(65536-46080)%6;//46080的来历,为50000*11.0592/12 ET0=1;//定时器中断0打开 EA=1;//使能中断打开 while(1) {

if(m==20) { m=0; } a0=s; a1=s/10; display(a1,a0); if(s==10) {

// TR0=0;//时间到,定时器关闭

JDQ=0;//继电器打开,灯泡亮。 s--;

} if(s == 0)

30

太原工业学院毕业设计

}

}

{

JDQ = 1;//继电器关断,灯泡灭。 s = 60;

// break; }

void time0() interrupt 1 {TH0=(65536-46080)/256; }

TL0=(65536-46080)%6; m++;

4.4 本章小结

本章主要介绍了智能定时电源开关设计的软件开发环境以及系统主流程图,最后介绍了用C语言编写的实现定时智能定时电源开关控制的程序。接下来就是系统的调试与实物的制作,以完成本次设计。

31

太原工业学院毕业设计

第5章 系统调试与仿真设计

5.1 KEIL工程的建立

Keil单片机模拟调试软件对MCS51单片机应用系统的软件开发过程采用工程(Project)管理。工程保存着程序编辑的信息和程序调试的环境。在开始编写程序之前首先应该建立一个工程。新建一个工程之前通常还需要建立一个文件夹,后面产生的工程文件和源程序文件等都将存储在这个文件夹之中。在如图所示的集成开发环境的口中选择Project→New Project命令将打开建立新工程的对话框,如图5.1所示:

图5.1 工程的建立

在“保存在”下拉列表框中选择新建工程将要存储的文件夹名,在“文件名”文本框中输入工程的名称,注意对于工程不要添加扩展名,单击“保存”按钮即可完成一个工程的创建。单击“保存”按钮在完成一个工程创建的同时也打开了单片机芯片型号选择的对话框。如图5.2所示的对话框已经完成了芯片型号的选择。由于在所用Proteus软件中没有找到STC89C52RC单片机,故以AT89C52为例说明。

32

太原工业学院毕业设计

图5.2 芯片的选择

Keil单片机模拟调试软件支持许多公司生产的MCS51单片机兼容产品。如前所述,本书应用电路中采用STC公司的STC89C52RC芯片,由于Proteus没有这款芯片,下面以这AT89C52芯片为例介绍如何实现选择。在图所示的对话框中的Data base列表框中首先选择生产芯片的公司名称Atmel,双击这个公司名称即可打开Atmel公司目前生产的所有芯片型号。接着在列出的产品清单中选择将使用的AT89C52芯片,如图5-2所示。最后单击“确定”按钮即可完成芯片的选择。完成芯片的选择后又回到如图所示的集成开发环境的窗口,但是这时该窗口中的工程管理窗口不再是空白,在它的文件选项卡中出现目录列表Target 1和它的子目录Source Group 1。集成开发环境中的菜单Project内还包含Open Project和Close Project等选项。Open Project选项用来以后再次进入已经建立的工程,选择Project→OpenProject命令将打开选择工程的对话框。在“查找范围”下拉列表框中选择欲打开的工程所在的文件夹,列表框中将出现该文件夹中的所有工程,选择将要打开的工程,单击“打开”按钮即可打开一个工程。选择Project→Close Project命令将关闭当前的工程。

33

太原工业学院毕业设计

5.2 源文件的输入

Keil单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。如图5.3所示。在图5.3中已经完成了汇编语言源文件的输入,并且完成了源程序向当前工程的添加。

图5.3 源文件输入

完成汇编语言源文件的输入后,在集成开发环境中选择File→Save As命令可以完成文件的第一次存储。注意,汇编语言源文件的扩展名应该是ASM,它应该与工程文件存储在同一文件夹内。在完成文件的第一次存储后,当对汇编语言源文件又进行了修改,再次存储文件时则应该选择File→Save命令、单击保存工具按钮或者按快捷键Ctrl+S实现文件的保存。需要注意的是,当把汇编语言源文件加入工程但还没有关闭加入文件对话框时,有可能被误认为文件没有成功地加入工程而再次进行加入操作,系统将显示所需的文件已经加入的提示。在这种情况下,单击提示框中的“确定”按钮,再单击Close按钮可以关闭加入文件对话框。

5.3 硬件电路的仿真

在设置好工程后就可以进行编译、连接。选择Project中的Build target,对当前工程进行连接,编译过程中会出现很多语法错误,会有错误报告出现,双击该行,

34

太原工业学院毕业设计

可以定位到出错的位置,对源程序反复新盖之后,最终会得到如图所示的结果,获得了名为Hex的文件,该文件即可被编程器读入写到芯片中,同时还会产生一些其它的相关文件。如图5.4所示:

图5.4 调试后的结果

写到芯片中的程序,可以用Proteus中进行仿真,仿真结果如下图5.5所示。仿真过程中出现很多的错误,仿真部分采用protus 7 professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。

首先打开protus 7 professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。

5.4 本章小结

本章主要介绍了在智能定时电源开关软件程序编写结束之后通过KEIL软件进行编译没有错误的情况下生成HEX文件,然后将此HEX文件导入PROTEUS已画好的硬件电路的AT89C52(由于在所用Proteus软件中未能找到STC89C52RC芯片,故用AT89C52来代替)单片机芯片中就可以进行系统仿真了,经过调试,仿真结果完全符合预期效果,接下来就是实物的制作了。

35

太原工业学院毕业设计

图5.5 仿真的结果

36

太原工业学院毕业设计

结论

经过三个多月的设计时间,本次毕业设计:智能定时电源开关设计已经基本完成了。通过这次毕业设计,我掌握了一些实践性质的设计的基本步骤:首先,明确设计任务,并且要对市场上的电源开关的定时控制要有初步了解,还要知道前人做了哪些工作,本设计方案的可利用程度等等。其次,要对整个设计系统做深入的方案论证、计算并且结合现有实际条件,确立自己的设计方案,进而,就是对自己确立的方案进行硬件实现,包括所用原器件选型,以及控制部分整个单片机系统的硬件选型与设计,并用Proteus绘制出整个系统总体电路图。接着就进入到软件编程设计了,要画出系统的主流程图,弄清楚各个部分实现的功能,最后对整个系统进行软件编程实现。到此为止,这个系统的设计基本上已经完成了,最后就是要经过生产实践的检验,确定我们的设计是否符合实际要求,具有可利用价值。

本系统采用的STC89C52单片机控制,实现能定时给电器供电或断电的控制,操作使用方便。用单片机C语言编程,采用模块化的结构设计,提高了可靠性和可扩展性。 整个设计过程同时也是一个很好的学习机会,例如以前自己学习过运用Proteus绘图,但不是很通透,经过这次设计后自己在这方面有很大地进步;当然整个设计过程学到的知识和经验远远比运用Proteus、学会查找多方资料多得多,这些对于自己以后的学习和工作将受益匪浅。但必须认识到的是,在设计中也存在着不足之处,例如单片机控制系统在可靠性方面相对于可编程控制器(PLC)控制系统略为欠缺,并且自己深入实践不够,所做的系统也不是很完善。但是我想通过以后的学习和努力一定会有所提高,能够做出更好的设计。所设计系统不仅只适用于对电器开关的控制还要向外部扩展,做到较强的通用性和适应性。最后我觉得一个人的成功,无论什么事,都少不了身边的人的支持,这次设计,指导老师和同学都给了我很大帮助,让我学到了很多东西,我会在将来把这些东西,更重要的是这种精神永远记住,进一步取得更大的成就。

37

太原工业学院毕业设计

参考文献

[1] 张毅坤.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社. [2] 童一帆.单片机测控技术[M].北京:北京航空航天大学出版社. [3] 石从刚.MCS-51实训教程[M].北京:北京航空航天大学出版社.

[4] 李华,孙晓民等.MCS-51系列单片机实用接口技术[M].北京:北京航空航天大学

出版社,1995.

[5] 何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,1999. [6] 李全利.单片机原理及接口技术[M].第二版.北京:高等教育出版社,2009. [7] 江晓安,董秀峰.模拟电子技术[M].第三版.西安:西安电子科技大学出版社,

2008.

[8] 江晓安等.数字电子技术[M].第三版.西安:西安电子科技大学出版社,2008. [9] 谭浩强.C语言程序设计[M].第三版.北京:清华大学出版社,2005. [10] 戴佳等.51单片机实例精讲[M].第三版.北京:电子工业出版社,2008. [11] 张鑫. 单片机原理及应用[M].第二版.北京:电子工业出版社,2010. [12] 张迎新.单片机初级教程—单片机基础[M].第二版.北京:北京航空航天大学出

版社,2006.

[13] 张俊谟.单片机中级教程—原理与应用[M].第二版.北京:北京航空航天大学出

版社,2006.

[14] 何立民.单片机高级教程—应用与设计[M].第二版.北京:北京航空航天大学出

版社,2007.

[15] 雷升印,周元志.X5045芯片在单片机系统中应用的研究[J].武汉理工大学学报,

2003,25(3):28-29.

[16] 罗冬,赵海刚等.基于单片机的红外遥控定时开关装置的设计[J].机电工程技术

2010,39(3):14-18.

[17] Allan R.Hambley.Electronics Second Edition[M].Publishing House of

Electronics Industry,2005,21(4):12-14.

[18] Bates,Martin.Interfacing PIC microcontrollers:embedded design by

interactive simulation[J].Godin Lyttle press,2009,5(1):6-9.

[19] Yang.Y.,Yi.J.,Woo,Y.Y.,and Kim.B.:‘Optimum design for linearityand

38

太原工业学院毕业设计

efficiency of microwave Doherty amplifier using a new loadmatching technique’,Microw[J].2001,44(12):20–36.

[20] Vizimuller,P.:‘RF design guide-systems,circuits,and equations’

(ArtechHouse,Boston,MA,1995)[6]R.Dye,“Visual Object-Orientated Programming,”[J]Dr.Dobbs MacintoshJournal,Sept.1st1991,32(16):12-16.

39

太原工业学院毕业设计

致谢

通过本次设计,让我认识并了解到了基本的设计开发过程,在这过程中,刘老师给了我很多指点和帮助,我身边的同学也给了我很多的启示和帮助,而且我觉的对以前不了解的单片机知识有了一个更高更深的了解,也学会了PROTEUS软件画硬件电路以及仿真的方法,中途遇见很多困难,我都经过努力克服掉了,最终取得成功。我相信我所学的东西在以后的工作学习中会起更大的作用。

在本次设计中得到了指导老师刘志成老师的大力支持,在此表示衷心的感谢!!感谢各位老师多年来的教诲与帮助,也感谢各位同学在学习上的帮助!我会再接再厉,不让大家失望的。

40

太原工业学院毕业设计

附录一:智能定时电源开关的程序设计

#include sbit dula=P2^6;//位选十位 sbit wela=P2^7;//位选个位 sbit JDQ=P3^2;

unsigned char j,k,a1,a0,s=60; unsigned int m;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(unsigned char i) {

for(j=i;j>0;j--) for(k=125;k>0;k--); }

void display(unsigned char sh_c,unsigned char g_c)//个位与十位数字的显示 {

dula=0;

P0=table[sh_c]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[g_c]; dula=1; dula=0; P0=0xfd;

41

太原工业学院毕业设计

wela=1; wela=0; delay(5); }

void main() {

TMOD=0x01;//选择中断类型为定时器中断 TR0=1;//总中断打开

TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器

每隔50000微秒发起一次中断。

TL0=(65536-46080)%6;//46080的来历,为50000*11.0592/12 ET0=1;//定时器中断0打开 EA=1;//使能中断打开 while(1) {

if(m==20) { m=0; } a0=s; a1=s/10; display(a1,a0); if(s==10) {

// TR0=0;//时间到,定时器关闭

JDQ=0;//继电器闭合,灯泡亮。 s--;

} if(s == 0) {

JDQ = 1;//继电器断开,灯泡灭。

42

太原工业学院毕业设计

s = 60;

// break; }

}

}

void time0() interrupt 1 {TH0=(65536-46080)/256; TL0=(65536-46080)%6; m++;

}

43

太原工业学院毕业设计

附录二:智能定时电源开关硬件接线图

44

本文来源:https://www.bwwdw.com/article/16ro.html

Top