51单片机定时器(T0/T1)的使用与配置流程

第一步:配置工作方式寄存器—TMOD

TMOD寄存器的字节地址为89H,不能位寻址。一般采用整体赋值的方式进行配置;如:TMOD=0x01 // 0000 0001在这里插入图片描述   GATE=0,定时器仅受TCON寄存器中TRx(x=0,1)来控制
  GATE=1,定时器TCON寄存器中TRx(x=0,1)和外部中断引(INT0或INT1)上的电平状态来共同控制。
  C/T=1,为计数器模式;
  C/T=0,为定时器模式。
  M1M0一工作方式选择位;一共有4种工作方式,通常选择 方式1 和 方式2;即M1M0 = 0 1 或M1M0 = 1 0
定时计数器的4种工作方式

第二步:赋初值 —— THx、TLx

注意:
(1) 51单片机定时器常常方式1或者方式2
(2)方式1可以装入的总数是65536
(3)方式2可以转入的总数是256
赋值举例(以方式1和方式2):
 1、采用方式1
 使用定时器0的方式1,定时1ms。因为1ms = 1000us。故,65536 - 1000=64536 。即为16进制的0xfc18。
 方法一:

TH0 = (65536 - 1000) / 256
TL0 = (65536 - 1000) % 256

方法二

TH0 = 0xfc
TL0 = 0x18

2、采用方式2定时
  使用定时器0的方式2,定时0.1ms。因为0.1ms = 100us。故,256 - 100 = 246 。即为16进制的 0xf6 。

TH0 = TL0 = 0xf6
或者:
TH0 = 0xf6
TL0 = 0xf6

第三步:配置控制寄存器——TCON

控制寄存器(TCON)在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)分别是88H~8FH,该寄存器可进行位寻址。可采用TRO=1,IT0=1的方式进行配置启动
  
在这里插入图片描述
TF1一定时器1溢出标志位。
  当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器的中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。
TR1-定时器1运行控制位。
  由软件清0关闭定时器1。当GATE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。
TFO-定时器0溢出标志,其功能及操作方法同TF1。
TRO-定时器0运行控制位,其功能及操作方法同TR1.
IE1-外部中断1请求标志
  当IT1=0时,为电平触发方式,每个机器周期的S5P2采样lNT1引脚,若INT1脚为低电平,则置1,否则IE1清0。
  当IT1=1时,INT1为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,则IE1置1。IE1=1,表示外部中断1正在向CPU申请中断。当CPU响应中断,转向中断服务程序时,该位由硬件清0。
IT1-外部中断1触发方式选择位。
IT1=0,为电平触发方式,引脚INT1.上低电平有效。
IT1=1,为跳变沿触发方式,引脚INT1.上的电平从高到低的负跳变有效。
IE0一外部中断0请求标志,其功能及操作方法同IE1。
IT0–外部中断0触发方式选择位,其功能及操作方法同IT1。

第四步:开总中断——EA = 1;

定时器0方式1的逻辑框图

在这里插入图片描述

程序示例

(1)使用定时器0、方式1
  定时 1ms(500HZ),使LED闪烁
  1ms = 1000us ;65536 - 1000 = 64536。 64536的十六进制为 0xfc18

 #include<reg51.h>
sbit LED = P1^0;

int main(void)
{
	TMOD = 0x01;		//第一步:配置TMOD		//  0000 0001 ; 选择方式1
	TH0 = 0xfc;
	TL0 = 0x18;		// 第二步:赋初值 		//  0xfc18 = 64536.  定时1000us = 1ms (500HZ)
	TR0 = 1;			//第三步:配置TCON		// 定时方式,选择定时器 T0
	ET0 = 1;									// 定时器/计数器0中断允许位,打开T0中断
	EA = 1;			//第四步:开总中断	

	while(1);
}


void timer0() interrupt 1
{

	TH0 = 0xfc;
	TL0 = 0x18;		// 方式1 在中断中需要重新赋初值
	LED = ~LED;
		
}

(1)使用定时器0、方式2
  定时 0.1ms(5000HZ),使LED闪烁
  0.1ms = 100us ; 256 - 100 = 156; 十六进制为0x9c

#include<reg51.h>
sbit LED = P1^0;

int main(void)
{
	TMOD = 0x02;		//第一步:配置TMOD		//  0000 0002 ; 选择方式2
	TH0=TL0=0x9c;		// 第二步:赋初值 		//  0x9c = 156.  定时100us = 0.1ms (5000HZ)
	TR0 = 1;			//第三步:配置TCON		// 定时方式,选择定时器 T0
	ET0 = 1;									// 定时器/计数器0中断允许位,打开T0中断
	EA = 1;			//第四步:开总中断	

	while(1);
}


void timer0() interrupt 1
{
	LED = ~LED;				//方式2不需要重新赋初值
}

【参考文档】
《51单片机C语言教程(郭天祥)》

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值