51单片机第24步_定时器1工作在模式1(16位定时器)

重点学习51单片机定时器1工作在模式1的应用

在51单片机中,定时器1工作在模式1,它和定时器0一样,TL1占低8位,TH1占高8位,合计16位,也是向上计数。

1、定时器1工作在模式1

1)、定时器1工作在模式1的框图:

2)、定时器1输入时钟:

TMOD寄存器的bit6(C/T)=0,定时器输入时钟为CPU时钟经过12分频后得到的。

TMOD寄存器的bit6(C/T)=1,定时器输入时钟为来自T1引脚(P3.5),我们也可以理解为计数脉冲。

3)、定时器1启动:

、当TMOD寄存器的bit7(GATE)=0时,将TR1=1,则会启动定时器1

、当TMOD寄存器的bit7(GATE)=1时,给INT1引脚(P3.3)施加高电平,同时TR1=1,则会启动定时器1

4)、定时器1溢出标志TF1建立的条件

TH1和TL1从装载的初始值开始计数,直到TH1和TL1从0xFFFF变成0x10000时产生溢出,此时定时器1的溢出标志TF1=1;

5)、定时器1产生中断条件

定时器1的溢出标志TF1=1

定时器1的中断使能位ET1=1

总中断使能位EA=1

只有这3个条件同时满足,定时器1才会进入到中断服务程序。

6)、定时器1工作在模式1的初始化程序

#define T1_Load_Value  (0x10000-50000)  //配置T0为50000us(50ms)中断一次;

//函数功能: 定时器1工作在模式1的初始化;

void timer1_initializtion(void)

{

TMOD &= 0x0F;//清除高4位

TMOD |= 0x10;

//TMOD寄存器的bit6(C/T)=0,定时器输入时钟为CPU时钟经过12分频后得到的。

//配置Timer1为方式1(16位定时器)

//设置GATE1=0,即不允许外部INT1脚控制Timer1;

  TL1=T1_Load_Value&0xFF;     //手动装载最低8位值;

  TH1=T1_Load_Value>>8;       //手动装载剩下的8位值;

  TR1=1;                //当GATE1=0时,TR1=1,表示启动T1开始工作;

  ET1=1;                //允许Timer1中断;

  EA=1;                 //开总中断允许位;

}

//函数功能: Timer1的中断服务函数,每5ms中断一次;

void timer1_interrupt_program() interrupt 3 using 1

{

TL1=T1_Load_Value&0xFF;  //手动装载最低8位值;

  TH1=T1_Load_Value>>8;    //手动装载剩下的8位值;

  ///其它处理程序///

}

void main(void)

{ timer1_initializtion(); //定时器1工作在模式1的初始化;

  while(1);

{

}

}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值