您的当前位置:首页实验三 定时器实验

实验三 定时器实验

2020-07-14 来源:乌哈旅游
一、实 验 目 的:

熟悉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 1 1 0 1 0 1 方式0,为13位的定时/计数器 方式1,为16位的定时/计数器 方式2,为常数自动重装入的8位定时/计数器 方式3,T0分为两个8位定时/计数器, T1在该方式时停止

3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。

第 1 页 共 5 页

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 方式1 方式2 16.384ms 131.072ms 0.512ms 12.288ms 98.304ms 0.384ms 9.83ms 78.643ms 0.307ms 8.192ms 65.536ms 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

第 2 页 共 5 页

{

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、BUTTON、LED-BLUE、RES、CRYSTAL、画出仿真图

Protues 仿真图

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

第 3 页 共 5 页

仿真结果图 程序:

#include

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

unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; unsigned char a; TH1=-50000/256; unsigned char i=0; TL1=-50000%256; EA=1;ET1=1;TR1=1; void delay(char z) while(1) {char x,y; {P2=0xfe; for(x=z;x>0;x--) P0=tab[i/10]; for(y=123;y>0;y--); delay(5); } P2=0xfd; main() P0=tab[i%10]; {TMOD=0x10; delay(5);

第 4 页 共 5 页

} {a=0; } void time() interrupt 3 i++; {TH1=-50000/256; if(i==60) TL1=-50000%256; {i=0; a++; } if(a==10) }}

五、实 验 心 得:

通过实验熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。

第 5 页 共 5 页

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