搜索
您的当前位置:首页正文

定时器课程设计

来源:哗拓教育


摘要:

本设计通过使用89C52RC芯片核心,通过P3.4-P3.7口控制按键录入时间,P0.0-P0.7控制LED数码显示器时间,P2.3控制蜂鸣器定时器到达指定时间报警,XTAL1、XTAL2口连接晶体振荡电路,RST连接复位电路,最终通过编程的程序实现定时器功能。

关键词:89C52RC芯片、按键、LED数码管、蜂鸣器、晶体振荡

电路、复位电路、定时器

1

目录

一、定时器设计分析................................................................................3

1.1设计要求............................................................................................3 1.2设计目的............................................................................................3 1.3总体设计............................................................................................3

二、硬件电路设计及实现.......................................................................3

2.1设计原理图........................................................................................3 2.2 AT89C52芯片....................................................................................4 2.2.1芯片端口.......................................................................................5 2.2.2芯片资源.......................................................................................7 2.3锁存器74HC573.................................................................................8 2.4蜂鸣器...............................................................................................9 2.5晶振电路........................................................................................10 2.6复位电路.........................................................................................10

三、软件设计...........................................................................................10

3.1程序流程图设计............................................................................10 3.2程序..................................................................................................11

四、实物图展示........................................................................................15 五、设计总结.............................................................................................16 六、参考文献.............................................................................................16

2

一、定时器设计分析

1.1设计要求及要求

目的:

利用8253等接口芯片设计定时器(或51单片机),要求通过键盘输入计时时间,并提供一种以上的报警方式。 要求:

1)概述所作题目的意义、本人所做的工作及系统的主要功能; 2)进行硬件电路设计及描述; 3)进行软件设计流程及描述;

4)给出源程序代码及注释;

5)画出硬件电路图,给出主流程及流程框图; 6)写出课程设计体会;

1.2设计目的

1)通过课程设计,要求学生熟练和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。

2)让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。

3)熟悉编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。

1.3总体设计

设计编写一个合适的程序并且通过使用89C52RC芯片完成通过键盘输入设定倒数计时时间、自动倒数计时、暂停计时以及复位的功能。

二、硬件电路设计及实现

2.1设计原理图

3

2.2 AT89C52芯片

AT89C52芯片引脚图

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),

4

器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

2.2.1芯片端口

P0口

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

P1口

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

P2口

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

P3口

5

P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

RST

复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP

外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2

振荡器反相放大器的输出端。

6

2.2.2芯片资源

定时器2

定时器2是一个16位定时/计数器。它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄存器T2CON(如表3)的C/T2位选择。定时器2有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON的控制位来选择。定时器2由两个8位寄存器TH2和TL2组成,在定时器工作方式中,每个机器周期TL2寄存器的值加1,由于一个机器周期由12个振荡时钟构成,因此,计数速率为振荡频率的1/12。在计数工作方式时,当T2引脚上外部输入信号产生由1至0的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2期间,对外部输入进行采样。若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1期间寄存器加1。由于识别1至0的跳变需要2个机器周期(24个振荡周期),因此,最高计数速率为振荡频率的1/24。为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。 时钟振荡器

AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图10。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF。用户也可以采用外部时钟。采用外部时钟的电路如图10右图所示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。

中断

AT89C52共有6个中断向量:两个外中断(INT0和INT1),3个定时器中断(定时器0、1、2)和串行口中断。所有这些中断源如图9所示。这些中断源可通过分别设置专用寄存器IE的置位或清0来控制每一个中断的允许或禁止。IE也有一个总禁止位EA,它能控制所有中断的允许或禁止。注意表5中的IE.6为保留位,在AT89C51中IE.5也是保留位。程序员不应将“1”写入这些位,它们是将来AT89系列产品作为扩展用的。定时器2的中断是由T2CON中的TF2和EXF2

7

逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,事实上,服务程序需确定是TF2或EXF2产生中断,而由软件清除中断标志位。定时器0和定时器1的标志位TF0和TF1在定时器溢出那个机器周期的S5P2状态置位,而会在下一个机器周期才查询到该中断标志。然而,定时器2的标志位TF2在定时器溢出的那个机器周期的S2P2状态置位,并在同一个机器周期内查询到该标志。

2.3锁存器74HC573

74HC573引脚图

特点:

·三态总线驱动输出

·置数全并行存取 ·缓冲控制输入

·使能输入有改善抗扰度的滞后作用

原理说明:

74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。

8

74HC573逻辑图

真值表:

INPUTS输入 H L L L LE X L H H D X X L H Outputs输出 Q(HC573) Z L H (HC563) Z H L NO CHANGE NO CHANGE

2.4蜂鸣器

图2.4蜂鸣器驱动电路

三极管用来做驱动。单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,当输出高电平时,三极管导通,集电极电流通过蜂鸣器使蜂鸣器发出声音;当输出低电平时,三极管截止,没有电流流过蜂鸣器,蜂鸣器不会发出声音。

9

2.5晶振电路

图2.5晶振电路

晶振产生时钟周期执行程序代码使单片机工作。选用石英晶体振荡器,此电路在加电大约延迟10ms后振荡器起振,在XATL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要有石英晶振的频率决定的。在电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。

2.6复位电路

采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段高电平时间,当单片机正在运行时,按下复位键即可使RST上持续高电平,从而可以实现开关的复位操作,同时,这不仅可以使单片机复位而且还能使单片机外围电路复位,在程序出错时即可以随时进行按键复位。

三、软件设计

3.1程序流程图设计

10

开始 定义键盘 按键X 数码管显示 数码管显示 按下+键 Y X+1→X N X+1→X Y 按下—键 N 按下开始 倒计时 X=0? N Y 蜂鸣器响 数码管亮 结束

3.2程序

#include //52系列单片机头文件 #define uchar unsigned char #define uint unsigned int sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7;

11

sbit dula=P2^6; //申明U1锁存器的锁存端

sbit wela=P2^7; //申明U2锁存器的锁存端 sbit beep=P2^3; sbit led1=P1^0;

uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint); uchar numt0,num;

void display(uchar numdis) //显示子函数 {

uchar shi,ge; //分离两个分别要显示的数 shi=numdis/10; ge=numdis%10;

dula=1;

P0=table[shi]; //送十位段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0xfe; //送位选数据 wela=0;

delayms(5);

//延时

dula=1;

P0=table[ge]; //送个位段选数据 dula=0; P0=0xff; wela=1; P0=0xfd; wela=0;

delayms(5);

}

void delayms(uint xms)

{

uint i,j;

12

for(i=xms;i>0;i--) //i=xms即延时约xms毫秒

for(j=110;j>0;j--); }

void init() //初始化函数 {

TMOD=0x01;//设置定时器0为工作方式1(0000 0001) TH0=(65536-45872)/256;//装初值50ms一次中断 TL0=(65536-45872)%256; EA=1; //开总中断

ET0=1; //开定时器0中断 beep=1;

Led1=1;

}

void keyscan() { if(key1==0) {

delayms(10); if(key1==0) {

num++;

if(num==60)//当到60时重新归0 num=0;

while(!key1);//等待按键释放 } }

if(key2==0) {

delayms(10); if(key2==0) { if(num==0)//当到0时重新归60 num=60; num--;

while(!key2);

} }

if(key3==0)

13

{

delayms(10); if(key3==0) {

num=0; //清0 while(!key3); } }

if(key4==0) {

delayms(10); if(key4==0) {

while(!key4);

TR0=~TR0;//启动或停止定时器0 } } }

void main() { init();//初始化函数 while(1) {

keyscan(); display(num); if(num==0) {

beep=0;

delayms(10); beep=1;

}

if(num==0) {

led1=0;

delayms(10);

led1=1; }

}

14

}

void T0_time() interrupt 1 {

TH0=(65536-45872)/256;//重装初值 TL0=(65536-45872)%256; numt0++;

if(numt0==20) //如果到了20次,说明1秒时间到 {

numt0=0; //然后把num清0重新再计20次 num--; if(num==0) } }

TR0=0;

四、实物图展示

15

五、设计总结

本次的课程设计历时两周,时间相对充裕但是对于第一次做课程设计的我们来说这个时间还是有点紧,毕竟是我们第一次做课程设计有许多的东西不知道从哪里下手,遇到一些问题不知道从哪里找到问题的根源也不清楚如何去完善和解决问题。通过这次课程设计后,我深刻的理解了理论与实际的差异,许多看似简单的问题但在实际做起来的时候是个很大问题和难题。在经过我们两个人的不懈努力之后终于做出了结果这是对我们的努力的回报,这其中的喜悦真的只有真正付出过的人才能体会的到。从课程设计中我认识到这个课程设计不单单是我们的一项任务也是我们迈向社会从事职业工作前一个必不少的过程,只有自己做过了才知道这个设计到完成的步骤,只有亲身经历过才能了解到其中的乐趣。通过这次课程设计我深深体会到”千里之行始于足下”这句千古名言的真正含义,只有脚踏实地的向前迈步才能在以后的学习生活中稳步前进,还懂得了理论知识与实践结合的重要意义,光有理论知识是不够的还需要在学会灵活的实践,在实践中融入理论知识。这将会为自己今后的学习和工作做好榜样。

六、参考文献

张鑫.单片微机原理及应用.电子工业出版社 2005.8 张毅刚.单片微机原理及应用.高等教育出版社 2003.12 薛晓书.单片微机原理及接口技术.西安石油大学 2002.3 黄智伟、朱卫华.单片机与嵌入式系统应用.西华大学 2005.3 付浩.AT89C51单片机高速串行输出口设计.阴师范学院 2004.10

16

因篇幅问题不能全部显示,请点此查看更多更全内容

Top