定时器实验报告_定时器实验keil实验报告
时间:2020-07-22 12:53:27 来源:天一资源网 本文已影响 人
电子信息工程学系实验报告
课程名称:单片机原理及接口应用
成 绩: 实验项目名称: 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中的设置与程序的书写格式以及使用方法。
相关关键词: 定时器