定时器实验
一、实验目的
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软件进行仿真了。