学习笔记 从零开始学单片机(3) 定时器

定时器在单片机应用中非常的重要,单片机可以对外部脉冲计数和精确定时。51有两个定时器T0T1,有四种工作模式,它们分别使用TH0TL0TH1TL1作为特殊功能寄存器。TMOD用于设置工作方式,TCON控制启动和停止计数器。单片机复位时它们都是0

 

定时器原理

 

 

 

TCON

TF1 TR1 TF0 TR0 IE1  IT1  IE0  IT0

TF1TF0-溢出标志位,=溢出时置1

TR1TR0-计数运行控制,=1 启动

 

 

TMOD

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

高4位定时器1,低4位定时器0

GATE门控位

GATE=0时,由TR0/TR1启动计数器;GATE=1时,有TR0/TR1INT0/INT1共同启动定时器

C/T计数和定时模式选择

C/T=0 定时器;C/T=1 计数外部引脚(T0 P3.4 T1 P3.5)脉冲(负跳变)计数

M1 M0 工作方式选择(0-4

 

方式0 M1=0M0=0

13位计数器(THx5位和TLx8位),0~8191

溢出后需要软件设置计数初值

 

方式1 M1=0M0=1

16位计数器(THx8位和TLx8位),0~65535

溢出后需要软件设置计数初值

 

方式2 M1=1M0=0

8位计数器(THx8位和TLx8位),0~255

溢出后自动恢复计数初值(THx存放初值)

 

方式3 M1=1M0=1

仅适用于T0,把T0当成两个8位计数器

TLx8位,类似方式0

THx8位,占用T1TR1TF0

 

 

机器周期T=12/fosc

定时器/计数器的初始化

由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始货的步骤一般如下:

1、确定工作方式(即对TMOD赋值);

2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);

3、根据需要开放定时器/计数器的中断(直接对IE位赋值);

4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

 

例:定时器C程序举例


#include <reg52.h>

unsigned int t0=0;
unsigned int t1=0;

sbit l0=P1^0;//发光二极管0
sbit l1=P1^1;//发光二极管1


void main()
{
   TMOD = 0x02;//t0 工作方式2 ;T1 工作方式1

   TH0=0x00;
   TL0=0x00;
   TH1=0x00;
   TL1=0x00;

   EA=1;//开中断
   ET0=1;//T0中断允许
   ET1=1;//T1中断允许
   TR0=1;//启动T0
   TR1=1;//启动T1

   l0=0;
   l1=0;

   while(1)
   {

      //空转,等待中断
   }
}

void timer0() interrupt 1 using 2//定时器0中断,使用寄存器组2
{

   //方式2 处置在TH中,不用再赋初值了

   t0++;

   //太快了,需要延时
   if(t0>=100)
   {
      t0=0;
      l0=~l0;
   }
}

void timer1() interrupt 3 using 3//定时器1中断,使用寄存器组2
{
   TH1=0;
   TL1=0;
   t1++;
   if(t1>=100)
   {
      t1=0;
      l1=~l1;
   }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值