51单片机之定时器篇

首先,学好单片机必须要搞懂定时器,定时器是单片机重要的组成部分之一,总之,学不好定时器,单片机相当于没学,下面就让我介绍如何学好单片机定时器。

学习单片机首先要明白的:

1,51单片机有两组定时器/计数器,既可以定时,又可以计数,总称之定时器

2,单片机内的定时器和CPU是相互独立的,互不影响。

3,有了定时器可以增加单片机的效率。

4,51单片机中的定时器是根据机器内部的时钟或者是外部的脉冲信号实现对寄存器的自加一。

定时器的工作原理:

1,CPU时序问题

振荡周期:为单片机提高定时信号的振荡源周期。

状态周期:2个振荡周期为一个状态周期。

机器周期:一个机器周期包含六个状态周期,十二个振荡周期。

指令周期:完成一条指令所占用的全部时间。

2,定时器内部结构

 定时/计数器的实质是加一计数器(16位),由高8位和低八位两个寄存器TH和TL组成,TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TMON是控制寄存器,控制T0,T1的启动和停止及设置溢出标志位。

3,定时器的控制

1,工作方式寄存器TMOD

    工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1,格式如下:

工作方式寄存器TMOD
76543210
字节地址:89HGATEC/TM1M0GATEC/TM1M0TMOD

GATE:门控位,GATE=0时,用于控制定时器的启动是否受外部中断源信号的影响,只要用软件使TCON中的TR0或者TR1为1,就可以启动定时器;而当GATE=1时,要用软件使TCON中的TR0或者TR1为1,同时外部中断INT0/1也为高电平,才能启动定时器。

C/T:定时/计数模式选择位。C/T=0时,为定时模式;C/T=1时,为计数模式;

M1M0:为工作方式设置位。

工作方式设置表
M1M0工作方式说明
00方式013位定时/计数器
01方式116位定时/计数器
10方式28位自动重装定时/计数器
11方式3T0分为两个独立的8位定时/计数器

2,工作方式寄存器TCON

     TCON的低四位用于外部中断,暂时不用了解,高四位用于定时/计数器的启动和和中断申请

4

工作方式寄存器TCON
76543210
字节地址:88HTF1TR1TF0TR0TCON

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由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。

定时器/计数器的工作方式:

方式1:

计数个数与计数初值的关系为:X=2^16-N 

方式2:

计数个数与计数初值的关系为:X=2^8-N 

方式三:

T0分为两个独立的8位计数器TL0和TH0

始化程序应完成如下工作:
1,对TMOD赋值,以确定T0和T1的工作方式。


2,计算初值,并将其写入TH0、TL0或TH1、TL1。


3,中断方式时,则对EA赋值,开放定时器中断。


4,使TR0或TR1置位,启动定时/计数器定时或计数。

定时0实现LED一秒亮灭闪烁程序:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P1^1;
void timer0Init();
void timer0() interrupt 1        
{ 
	static u16 count;
    TH0=0xfc;
	TL0=0x18;
	//count++;
	if(count-- ==0)     //LED一秒闪烁亮灭
		{
		count=1000;
		led=~led;
		}
	

}
int main()
{
 timer0Init();
  while(1);
}

void timer0Init()      //定时器的初始化
{
    TMOD=TMOD|0X01;      //对TMOD赋值
	TH0=0xfc;          //高位赋值
	TL0=0x18;          //低位赋值
	ET0=1;            //定时器中断允许位
	EA=1;             //总中断开关
	TR0=1;            //开始计数控制位
}

如果不懂,可以随时解答,谢谢支持!

  • 25
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@鹤辞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值