嵌入式学习笔记6——定时器/计数器

1.为什么要用计时器?
延时过程中,CPU时间被占用,无法进行其他任务,导致系统效率降低。延时时间越长,该
缺点便越明显,因此软件延时只适用于短暂延时,或简单项目。

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

2.定时器操作步骤:
1.选择工作方式(设置M1,M0)
2.选择控制方式(设置GATE)
3.选择定时器还是计数器模式(设置C/T)
4.给定时/计数器赋初值(设置THx和TLx)
5.开启定时器中断(设置ET0或ET1)
6.开启总中断(设置EA)
7.打开计数器(设置TR1或TR0)
定时/计数器的作用
1、进行延时。
2、对外部信号的时间间隔进行精确测量。
3、对外部脉冲信号进行计数。
/*********************************************************************************
*实验名   :定时器实验
*实验效果	:第一个LED以定时器0设定的时间周期闪烁
*
*********************************************************************************/
#include<reg52.h>
#include "bstv51.h"

void Init_timer0(void)
{
    TMOD |= 0X01;                      //工作方式1 内部寄存器控制的定时功能
	TH0=0X00;                         //高八位的初值
	TL0=0X00;                         //低八位初值
	EA=1;                            //开启整体中断允许
	ET0=1;                           //开启定时器0中断允许
	TR0=1;							 //开始计数
}

void main()
{
    bstv51_init();
	Init_timer0();

	while(1)
	{
	;
	}

}

void Timer0_isr(void)interrupt 1
{
    TH0=0x00;
	TL0=0x00;
	L0=~L0;
}
/*********************************************************************************
*实验名   :定时器实验
*实验效果	:第一个LED灯以一秒一次的准确频率开始闪烁
*
*********************************************************************************/
#include<reg52.h>
#include "bstv51.h"

uint i=0;
void Init_timer0(void)
{
    TMOD |= 0X01;         //工作方式1 内部寄存器控制的定时功能
	TH0=0X4C;             //高八位的初值
	TL0=0X00;             //低八位初值
	EA=1;                  //整体中断允许
	ET0=1;                 //定时器0中断允许
	TR0=1;                 //开启定时器0
}

void main()
{
    bstv51_init();	       //初始化
	Init_timer0();		   //定时器配置函数

	while(1)
	{
	    if(i==10)			 //查询是否计够10次,相当于0.5秒闪烁一次
		{
		    L0=~L0;
			i=0;		//注意清0全局变量
		}
	}

}

void Timer0_isr(void)interrupt 1
{
    TH0=0x4C;	  //50ms=(12/11059200)(65535-初值)  初值=19456——————0x4C00
	TL0=0x00;
	i++;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值