定时器实验
一、实验目的
1、了解定时器的工作原理。
2、学会设计定时器实现秒计数长时间定时。
二、实验内容
编写并调试一个程序,用定时器T0定时中断控制软件计数器计数
三、实验原理及说明
使用定时器T0的中断来控制P2引脚LED的闪烁,可设定定时器T0工作方式1,最大可计脉冲次数为65536,对于1.0592MHZ的时钟频率,一个脉冲的宽度为1.085us,则则最大计时长度只有大约71ms。所以要计时1S或更长时间,需要采用一种软件计数方法,设置一个变量Countor来存存储定时器TO的中断次数,即没产生1次中断,使变量Countor 自加1,如果T0每50ms中断1次,那么当Countor自加20次时,所计时间就是1S。
四、实验设备
PC机
五、实验方法
1.在Proteus ISIS工作环境中绘制好图1仿真电路图。

图1 仿真电路图
2..在keil软件中编写下列程序。
#include<reg51.h> // 包含51单片机寄存器定义的头文件
sbit D1=P2^0; //将D1位定义为P2.0引脚
unsigned char Countor; //设置全局变量,储存定时器T0中断次数
void main(void)
{
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TMOD=0x01; //使用定时器T0的模式2
TH0=(65536-46083)/256; //定时器T0的高8位赋初值
TL0=(65536-46083)%256; //定时器T0的高8位赋初值
TR0=1; //启动定时器T0
Countor=0; //从0开始累计中断次数
while(1)//无限循环等待中断
;
}
void Time0(void) interrupt 1 using 0
{
Countor++; //中断次数自加1
if(Countor==20) //若累计满20次,即计时满1s
{
D1=~D1; //按位取反操作,将P2.0引脚输出电平取反
Countor=0; //将Countor清0,重新从0开始计数
}
TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值
TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值
}
3.程序经Keil软件编译通过后,就可以利用Proteus软件进行仿真了。