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

2019-08-30 12:59

太原工业学院毕业设计

以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式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


智能定时电源开关设计office(2)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:五年级数学下册分数的意义和性质练习题精选102

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: