足球比分直播

定时器84659.doc

返回
定时器84659.doc_第1页
第1页 / 共4页
定时器84659.doc_第2页
第2页 / 共4页
定时器84659.doc_第3页
第3页 / 共4页
定时器84659.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述:
第 1 页 共 4 页电子信息工程学系实验报告课程名称单片机原理与接口 实验项目名称实验 5 51 定时器实验 实验时间2011-12-15 班级电信 091 姓名谢亮东 学号910706140 实 验 目 的 熟悉 keil 仿真软件、伟福仿真器的使用和 C51 定时程序的编写。了解 51 单片机中定时、计数的概念,熟悉 51 单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程。实 验 环 境Windows 7 旗舰版 PC 机Keil C51 单片机仿真调试软件,Proteus 7.5 SP3。实 验 原 理51 型单片机有两个十六位定时/计数器 T0、T1,有四种工作方式,由特殊功能寄存器中的定时计数方式控制寄存器 TMOD 控制表 1 方式控制寄存器D7 D6 D5 D4 D3 D2 D1 D0GATE C/T M1 M0 GATE C/T M1 M01、M0 的状态决定定时器的工作方式,定时和外部事件计数方式选择位 C/T,GATE 与 TR0、TR1 配合决定定时/计数器的启停。加法计数寄存器 TH0、TH1 (高八位)TL0、TL1(低八位) ;定时/计数到标志 TF0、TF1(中断控制寄存器 TCON) ;定时/计数器启停控制位 TR0、TR1(TCON) ;定时/计数器中断允许位 ET0、ET1(中断允许寄存 IE) ;定时/计数器中断优先级控制位 PT0、PT1(中断优 IP) 。MCS-51 单片机定时计数器的工作原理如下图 1 所示,÷12振 荡 器T1端TR1GATEINT1端 C/T 0C/T 1 TL18位 TH18位 TF1中 断控 制定 时 / 计 数 器振 荡 器端 端 位 位 中 断控 制定 时 / 计 数 器振 荡 器端 端 位 位 中 断控 制定 时 / 计 数 器图 1 定时器结构单片机内部的定时计数模块,在定时时,对工作频率的 12 分频进行计数,先记入 TL 后记入 TH,直成 绩指导教师(签名)第 2 页 共 4 页到溢出为止,根据 TL、TH 内的初值不同可以定出不同的时间;在计数工作方式时,对 T0(T1)引脚的输入脉冲进行计数,将计数值记入 TL、TH。当定时/计数溢出时,会引起中断。计数初值与定时时间的关系为T 12T_all – a/fosc 定时间隔为 T,计数初值为 a。所以有计数初值 a –Tfosc/12, THx a / 256,TLx a 256。定时器均有一个最大定时时间,对于长时间的定时需要,可以将定时间隔为固定的较小时间,通过另设一全局变量 ah1 用于计数,累加固定的较小定时时间来进行。使用 MCS-51 单片机的定时/计数器的步骤是设定 TMOD,确定工作状态用作定时器/计数器、工作方式、控制方式。2.设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式 0、方式 1 和方式 2 时的最大计数间隔取决于使用的晶振频率 fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。3.确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断实 验 内 容 及 过 程 绘制电路图,根据实验的目的进行 Proteus 仿真制图,结果显示在图 2。 图 2 所需电路图二、编写程序代码1、八位数码管第几位 09 的计数实验,根据题意在 keil 中编写如下代码includeunsigned char tab[]{0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f};int i,b,a;main{TMOD0 x01;a-50*0.001*12000000/12;TH0a/256;TL0a256;P20 xfb;P0tab[i];EA1;ET01;TR01;while1;}void t00 interrupt 1{TH0a/256;TL0a256;b;ifb20{i;第 3 页 共 4 页b0;ifi10{i0;}P0tab[i]; }}编译之后就可以下载到 proteus 的仿真图中就可以看到结果了。2、第三、四位 059 的计数实验,在 keil 中新建工程并编写如下程序includeunsigned char tab[]{0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f};int i,b,a;void delayint;main{TMOD0 x01;a-50*0.001*12000000/12;TH0a/256;TL0a256;EA1;ET01;TR01;while1{P20 xfb;P0tab[i10];delay10;P20 xfd;P0tab[i/10];delay10;}}void t00 interrupt 1{TH0a/256;TL0a256;b;ifb20{i;b0;ifi60{i0;}}}void delayint z{int i,j;forjz;j0;j--fori110;i0;i--;}至此,代码输入完毕,同样的道理根据计数原理可以进行数码管的以秒为单位的计数。3、在第一步基础上 加拨码开关实现暂停,编写程序。运行测试无误,生成 hex 格式文件。下面为主要部分程序内容includeunsigned char tab[]{0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f};sbit kP37;int i,b,a;void delayint;main{TMOD0 x01;a-50*0.001*12000000/12;TH0a/256;TL0a256;EA1;ET01;TR01;EX01;IT01;while1{P20 xfb;P0tab[i10];delay10;P20 xfd;P0tab[i/10];delay10;}}void t00 interrupt 1{TH0a/256;TL0a256;b;ifb20{i;b0;第 4 页 共 4 页ifi60{i0;}}}void delayint z{int i,j;forjz;j0;j--fori110;i0;i--;}void kaiguan interrupt 0{TR0TR0;}实 验 结 果 及 分 析1、八位数码管的第三位显示 09 的实验,编译调试后可看到如下结果如图 3。数码管的第三位从 09 地计数,每秒钟增加一个数也就是计时了,这样反复循环。 2 在个位的计数基础上增加十位,就这样可以计时 99 秒了,不过本次试验只针对 60 秒进制的,因此,在整个过程中,只要分别对个位以及十位分别赋值即可。由于是两位数在数码管的额动态显示中一定要把握好延时的时间,多了或者是少都不行。 3、这次加了个开关,所以我就加了个外部中断 0INT0.只要开关按钮一按下,定时器的开关 TR0 就会一次,由此可以暂停计时。下面分别为按钮被按下的前后两个状态 图 3 个位计数方式 图 4 60 秒计数方式图 5 按键两次按下前后改变的计数结果没按下之前显示“13”按下第一次按钮后收到一个中断请求暂停,把按键放开来,之后再第二次按下按钮,CPU 收到第二次中断请求,因此有改变 TR0 的值,又启动计数,因此编程了 14,依次循环下去。实 验 心 得本实验通过使用单片机定时器。了解并熟悉 51 单片机定时器的概念,定时器的工作原理。在学习中断以及计数的同时也复习了数码管的额动态显示原理,学习怎么编写 51 单片机中里的定时时间的设置为以后利用中断编写程序打下了良好的基础。
展开阅读全文
收藏
下载资源

加入会员免费下载





足球比分直播