C51单片机定时器

  一、

与以前的软件延迟做对比:软件延迟利用若干次空循环实现,占用CPU

1、定时器的构成

定时器:硬件  ;

此件利用 T0定时器,可在四种模式下工作

实质是加1计数器(16位计数器),由高8位TH0和低8位TL0两个寄存器组成,TMOD是工作方式寄存器,TCON是控制寄存器

分开赋初始值
TH0=0x??;
TL0=0x??;

2、定时器溢出

任何一个计数范围有限的系统,都存在溢出现象。系统可表达数的个数,称为模。溢出时,会导致定时器溢出中断请求(发出中断请求),与此时是否使能无关。但是有发生中断请求,不一定会被收到

溢出=总数为11,10+5时,等于15>11,无法表示,就溢出

3、计数器的控制

TMOD是工作方式寄存器,TCON是控制寄存器(控制启动和中断申请)

①TMOD   低四位用于T0,高四位用于T1   

GATE:门控位

GATE=0时,令TR0=1,可以启动工作;

GATE=1时,令TR0=1,和外部中断引脚也为高电平,才可以启动工作

C/T:模式选择位

=0为定时模式;=1为计数模式

M1M0:工作方式设置位

自动重装定时:在溢出后,发出中断请求,会自动回零

     //前三个步骤
TMOD=0x01;//0x01=0000 0001,在低四位,分别为gate,c/t,m1m0

TCON是控制寄存器(高四位进行控制)

TR1&TR0:运行控制位,=1,开始工作,=0,停止工作

TF1&TF0:中断请求标志位,溢出时硬件会自动将其置于“1”

TR0=1;//运行控制位,置1位为工作

③中断的开启

EA=1 总中断开启

ET0=1 ET0是T0的中断允许位,ET1是T1的

EA=1;//开大门
	ET0=1;//定时器0的中断运行

通过公式进行计算,得到初始值,将其附上,就可以得到想要的延迟时间

 

//简单的利用定时器控制LED的延迟闪烁

#include <reg52.h>
#include"bstv51.h"

void dsq()
{
  	TMOD|=0x01;//0000 0001,最后2位-工作方式的选择,这里选择16位定时器‘01’
	TH0=0X00;//给高、低四位都赋初值=0
	TL0=0X00;
	EA=1;//开大门
	ET0=1;//定时器0的中断运行
	TR0=1;//运行控制位,置1位为工作
}


void main()
{
	bstv51_init();
	while(1);
}			

void ab(void)interrupt 1  //中断的时间在大约65ms ,但是中断函数一般不要写太多东西
{
	TH0=0x00;
	TL0=0x00;
	L0=~L0;
}						 

 

C51单片机有两个定时器,分别为Timer 0和Timer 1。定时器的主要功能是计时和延时,可以用于控制程序执行的时间。 以下是C51单片机定时器的基本操作步骤: 1. 设置定时器模式:选择定时器工作模式,如定时器模式或计数器模式。 2. 设置定时器计数值:确定计数器的初始值,即计时的时间。 3. 启动定时器:启动定时器开始计时。 4. 等待定时器计时结束:等待定时器计时结束,即达到设定的计数值。 5. 停止定时器:停止定时器计时。 以下是一个简单的C51单片机定时器示例程序: ``` #include<reg52.h> #define uint unsigned int #define uchar unsigned char void timer0_init(); //定时器0初始化函数 void main() { timer0_init(); //调用定时器0初始化函数 while(1) { //程序执行任务 } } void timer0_init() { TMOD &= 0xF0; //设置定时器0为模式1 TH0 = 0x3C; //给定时器赋初值,定时1ms TL0 = 0xAF; ET0 = 1; //打开定时器0中断允许 EA = 1; //打开总中断允许 TR0 = 1; //启动定时器0 } void timer0() interrupt 1 using 1 { TH0 = 0x3C; //给定时器赋初值,定时1ms TL0 = 0xAF; //中断执行任务 } ``` 在上面的程序中,timer0_init()函数用于初始化定时器0,设置为模式1,计时1ms;timer0()函数是定时器0的中断处理函数,当定时器0计时结束后,会自动进入此函数进行中断处理。在这个函数中,可以编写相应的任务执行代码。在主函数中,通过while(1)循环不停地执行程序任务,而定时器0会在后台进行计时和中断处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值