C51学习笔记(二)

定时器/计数器

概念

定时器不是像LED、按键一样摆在外面实实在在可以看见,它是在芯片内部,依赖晶振产生固定的时间间隔。
它用于计时系统,实现软件计时,或每隔一段固定的时间间隔后引发中断完成一项操作。可以替代长时间的Delay,提高CPU运行效率和处理速度。因为Delay会让CPU一直在那个地方停滞,直到Delay结束CPU才继续其它操作,定时器就可以让CPU同时执行别的操作。
定时器每隔一个时间段,计数单元的值就增加,增加到预设值时,计数单元就会向中断系统发出中断申请,让程序跳转到中断服务函数中执行。这个中断就类似于你在睡觉,闹钟响了提醒你去上课,这时就要停止睡觉,执行完上课这一事件后再回来接着睡觉。
STC89C52系列单片机内部设置的两个16位定时器/计数器T0、T1都具有计数方式和定时方式两种工作方式。在特殊功能寄存器TMOD中都有一控制位C/T来选择T0或T1为定时器还是计数器。
定时器/计数器本质是对脉冲进行计数。如果计数脉冲来自系统时针,则为定时方式,每12个时钟或者每6个时钟得到一个计数脉冲,计数值加一;如果来自外部引脚(如图),则为计数方式,每来一个脉冲加一。
在这里插入图片描述

寄存器

在这里插入图片描述

工作模式寄存器TMOD

高4位配置T1、低4位T0。TMOD不能位寻址。
GATE是门控位,等于0时TR0/TR1通过软件置1即可启动定时器,等于1时TR0/TR1要置1还要让INT0/INT1高电平时才启动定时器0/1。M1/M0就是控制定时器/计数器的工作模式,共四种。

控制寄存器TCON

用来控制两个定时器的启动、停止,锁存定时器溢出中断源和外部请求中断源等。可以位寻址,系统复位时所有位清零。
在这里插入图片描述
它的低四位与中断有关。IE0/IE1是外部中断0/1请求源(INT0/INT1)标志,等于1时外部中断向CPU请求中断,CPU响应该中断时由硬件自动置零。IT0/IT1选择外部中断触发方式,为1是脉冲触发,为0是低电平触发。
TF0/TF1就是定时器溢出标志,计满自动置1,向CPU请求中断,一直保持到CPU响应中断,才由硬件置零,也可由程序查询置零。

工作模式

一般大部分情况都是使用模式1即16位定时器/计数器。
在这里插入图片描述
此模式下,时钟给计数器提供脉冲,每来一个脉冲加一,TL0溢出向TH0进位,加到65535时产生溢出,TH0溢出置位TCON中的溢出标志位TF0,有这个标志位就会向中断系统申请中断。
SYSclk是系统时钟,即晶振周期,本板晶振为11.0592MHz。T0 Pin接外界引脚的。C/T为0接的是系统时钟,C/T为1接的是外部引脚,由此来选择是定时器功能还是计数器功能。

中断系统

概念

实现中断的部件叫中断系统,请示CPU中断的请求源叫中断源。
当同时有多个中断源时,规定每个中断源的优先级别,CPU会响应优先级别最高的中断请求。
当CPU正在处理一个中断源时,发生了另一个优先级更高的中断源请求,CPU暂停当前中断源的服务程序,处理完新的中断请求,再继续原来中断服务程序,这就是中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的系统就是单极中断系统
当两个相同优先级的中断同时产生,将由查询次序来决定系统先响应哪个。
在这里插入图片描述
STC89C52中断源有8个,外部中断INT0/1/2/3、定时器0/1/2中断、串口UART中断。
中断系统结构图:
在这里插入图片描述

寄存器

在这里插入图片描述

应用

晶振11.0592MHz每秒可以产生11.0592/12 = 0.9216M个机器周期
一个机器周期就是1s/0.9216M = 1.085us
1ms就需要922个机器周期
设初值64614——FC66

#include <REGX52.H>
void Timer0_Init()  //定时器0
{
	TMOD = 0x01;//0000 0001前面四位控制T1的置零不管。GATE=0,让TR0来控制启动定时器,C/T=0选择定时器功能,M1=0、M0=1选择工作模式1。
	TF0 = 0;
	TR0 = 1;//启动定时器
	TH0 = 0xFC;//设置初值高位
	TL0 = 0x66;//设置初值低位
	ET0 = 1;
	EA = 1;//启动中断
	PT0 = 0;
}
void main()
{
	Timer0_Init();
	while(1)
	{
		
	}
}
unsigned int T0Count;
void Timer0_Routine() interrupt 1  //中断函数
{
	TH0 = 0xFC;
	TL0 = 0x66;
	TOCount++;
	if(TOCount>=1000)//每一秒改变一次
	{
		T0Count = 0;
		P2_0 = ~P2_0;
	}
}

这段程序呈现现象就是LED灯闪一秒灭一秒。
生成定时器可以直接在STC-ISP上生成。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值