定时器实验报告_定时器实验keil实验报告

  电子信息工程学系实验报告

 课程名称:单片机原理及接口应用

 成 绩: 实验项目名称: 51 定时器实验 实验时间: 2011.12.16

 指导教师(签名) :

 班级: 姓名: 学号:

 一、实 验 目 的:

 熟悉 keil 仿真软件、 protues仿真软件的使用和单片机定时程序的编写。了解 51 单片机中定时、计数的概念,熟悉 51 单

 片机内部定时 / 计数器的结构与工作原理。掌握中断方式处理定时 / 计数的工作过程,掌握定时 / 计数器在 C51中的设置与程

 序的书写格式以及使用方法。

 二、实 验 环 境:

 软件: KEIL C51 单片机仿真调试软件, proteus 系列仿真调试软件

 三、实 验 原 理:

 1、51 单片机定时计数器的基本情况

 8051 型有两个十六位定时 / 计数器 T0、T1,有四种工作方式。

 MCS-51 系列单片机的定时 / 计数器有几个

 相关的特殊功能寄存器:

 方式控制寄存器 TMOD;

 加法计数寄存器 TH0 、TH1 (高八位) ;TL0、TL1 (低八位);

 定时/ 计数到标志 TF0、TF1(中断控制寄存器 TCON )

 定时/ 计数器启停控制位 TR0、TR1(TCON )

 定时/ 计数器中断允许位 ET0、ET1(中断允许寄存 IE )

 定时/ 计数器中断优先级控制位 PT0、PT1(中断优 IP)

 2、51 单片机的相关寄存器设置

 方式控制寄存器 TMOD:

 D7 D6 D5 D4 D3 D2 D1 D0

 GATE C/T M1 M0 GATE C/T M1 M0

 TMOD 的低四位为 T0 的方式字,高四位为 T1 的方式字。

 TMOD 不能位寻址,必须整体赋值。

 TMOD 各位的含义如下 :

 1. 工作方式选择位 M1、M0

 M1、M0 的状态决定定时器的工作方式:

 M1 M0 功 能 说 明

 0 0 方式 0,为 13 位的定时/计数器

 0 1 方式 1,为 16 位的定时/计数器

 1 0 方式 2,为常数自动重装入的 8 位定时/计数器

 1 1 方式 3,T0 分为两个 8 位定时/计数器,

 T1 在该方式时停止

 3、51 单片机定时器的工作过程(逻辑)方式一

 方式 1:当 M1M0=01 时,定时器工作于方式 1。

 T1 工作于方式 1 时,由 TH1 作为高 8 位,TL1 作为低 8 位,构成一个十六位的计数器。若 T1 工作于

 定时方式 1,计数初值为 a,晶振频率为 12MHz,则 T1 从计数初值计数到溢出的定时时间为 t =(216-a)

 μS。

 4、51 单片机的编程

 使用 MCS-51单片机的定时 / 计数器的步骤是:

 4.1.设定 TMOD ,确定:

 工作状态 (用作定时器 / 计数器 );

 工作方式;

 控制方式。

 如:T1 用于定时器、方式 1,T0 用于计数器、方式 2,均用软件控制。则 TMOD 的值应为: 0001 0110,

 即 0x16。

 4.2.设置合适的计数初值,以产生期望的定时间隔。由于定时 / 计数器在方式 0、方式 1 和方式 2 时的最大

 计数间隔取决于使用的晶振频率 fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将

 定时间隔分段处理。

 p129 6MHz 8MHz 10MHz 12MHz

 方式 0 16.384ms 12.288ms 9.83ms 8.192ms

 方式 1 131.072ms 98.304ms 78.643ms 65.536ms

 方式 2 0.512ms 0.384ms 0.307ms 0.256ms

 计数初值的计算方法如下,设晶振频率为 fosc,则定时 / 计数器计数频率为 fosc/12 ,定时 / 计数器的计数总

 次数 T_all 在方式 0、方式 1 和方式 2 时分别为 213 = 8192、216 = 65536 和 28 = 256,定时间隔为 T,计数

 初值为 a,则有

 T = 12 × (T_all – a)/fosc

 a = T_all – T× fosc/12

 a = – T× fosc/12 (注意单位

 THx = a / 256; TLx = a % 256;

 4.3.确定定时 / 计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时 / 计数器

 的中断及总中断:

 ET0 = 1; EA = 1;

 还需要编写中断服务函数:

 void T0_srv(void) interrupt 1 using 1

 {

 TL0 = a % 256;

 TH0 = a / 256;

 中断服务程序段 }

 4.4.启动定时器: TR0(TR1)= 1。

 四、实 验 内 容 过 程 及 结 果 分 析:

 利用 protues 仿真软件设计一个可以显示秒表时间的显示电路。

 利用实验板上的一位 led 数码管做显示, 利用中断法编

 写定时程序,控制单片机定时器进行定时,所定时间 为 1s。刚开始 led 数码管显示 9,每过一秒数码管显示值减一,当显

 示到 0 时返回 9,依此反复。然后设计 00-59 的两位秒表显示程序。

 (1)实现个位秒表, 9-0

 用 protues 进行流水灯的仿真需要的元件有 AT89C51、CAP、BUTTO、N LED-BLUE、RES、CRYSTA、L 画出

 仿真图

 Protues 仿真图

 使用 keil 仿真软件编写程序和使用 c51 编写并进行调试。仿真结果如下图所示

 仿真结果图

 程序:

 #include<reg51.h>

 unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

 unsigned char a; void time() interrupt 3

 unsigned char i=0; {TH1=-50000/256;

 void delay(char z) TL1=-50000%256;

 {char x,y; a++;

 for(x=z;x>0;x--) if(a==10)

 for(y=123;y>0;y--); {a=0;

 } P2=0xfe;

 main() P0=tab[9-i];

 {TMOD=0x10; i++;

 TH1=-50000/256; if(i==10)

 TL1=-50000%256; i=0;

 EA=1;ET1=1;TR1=1; }

 while(1); }

 }

 (2)实现两位秒表, 00-59

 使用 keil 仿真软件编写程序和使用 c51 编写并进行调试。仿真结果如下图所示

 仿真结果图

 程序:

 #include<reg51.h>

 unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

 unsigned char a; EA=1;ET1=1;TR1=1;

 unsigned char i=0; while(1)

 {P2=0xfe;

 void delay(char z) P0=tab[i/10];

 {char x,y; delay(5);

 for(x=z;x>0;x--) P2=0xfd;

 for(y=123;y>0;y--); P0=tab[i%10];

 } delay(5);

 main() }

 {TMOD=0x10; }

 TH1=-50000/256; void time() interrupt 3

 TL1=-50000%256; {TH1=-50000/256;

 TL1=-50000%256; i++;

 a++; if(i==60)

 if(a==10) {i=0;

 {a=0; }

 }}

 五、实 验 心 得:

 通过实验熟悉 keil 仿真软件、 protues 仿真软件的使用和单片机定时程序的编写。了解 51 单片机中定时、计数的概念,

 熟悉 51 单片机内部定时 / 计数器的结构与工作原理。

 掌握中断方式处理定时 / 计数的工作过程, 掌握定时 / 计数器在 C51中的设置与程序的书写格式以及使用方法

推荐访问:定时器 实验 报告