51单片机8-定时器计数器

1.定时器和计数器

可以用来,程序的延时的实现,以前的延时方法仅仅通过循环语句实现,严重浪费CPU资源。
c51单片机有两个16位的定时器/计数器(T0和T1),

2.我的单片机的定时器的结构

定时/计数器的实质是加1计数器(16位),组成高8位寄存器THx和低8位TLx寄存器组成。其中,TMOD是设置工作方式和功能寄存器;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
51单片机8-定时器计数器_第1张图片
51单片机8-定时器计数器_第2张图片

3.与此主题相关的寄存器

TMOD用于设置其工作方式;TCON寄存高4位用于控制其启动和中断申请。

(1)寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:51单片机8-定时器计数器_第3张图片

  • GATE是门控位, 用于控制定时器的启动是否受外部中断源信号的影响。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作(常用);GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。
  • C/T :选择定时/计数模式。C/T =0为定时模式;C/T =1为计数模式。
  • M1M0:工作方式设置位。定时/计数器有四种工作方式。方式1和2(常用于串口)比较常用51单片机8-定时器计数器_第4张图片
    说明:自动重装就是,器件执行了一个周期后会回到初始的赋值大小。
(2)控制寄存器TCON

TCON的低4位用于控制外部中断,TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
在这里插入图片描述

  • TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
  • TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。所以,软件控制定时/计数器的启动与停止通过控制TR1来实现。
  • TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
  • TR0(TCON.4):T0运行控制位,其功能与TR1类同。

4.编程思路

  1. TMOD赋值,以确定T0和T1的工作方式,是定时还是计数。
  2. 计算初值,并将其写入TH0、TL0或TH1、TL1。
  3. 中断方式时,则对EA赋值,开放定时器中断。
  4. 使TR0或TR1置位,启动定时/计数器定时或计数

5.编程实现

TH0=0xfc;TL0=0x18;初始值怎么计算可以通过此软件计算得到。

/**********************************
计时器定时器实现小灯每个一秒亮一次
***********************************/
#include <reg51.h>
sbit LED=P2^0;
#define uint unsigned int
uint count;
void main(void)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;  //定时1ms
TR0=1;
while(1)
{
if(TF0==1){
		TF0=0;
		count++;
		TH0=0xfc;
		TL0=0x18;
}
if(count==1000)				 
{
LED=~LED;
count=0;
}
}
}

你可能感兴趣的:(单片机)