AT89C51定时器

本文详细介绍了如何使用AT89C51微控制器配置定时器0进行1ms定时,并实现1秒中断功能。通过设置TMOD寄存器选择定时器模式,计算合适的初值,以及编写中断服务函数来计数和控制LED翻转。在主函数中初始化定时器并开启中断,从而实现定时任务。
摘要由CSDN通过智能技术生成




GATE0 为定时器控制器,当置1时,只有在外部中断INT0引脚为高电平及TR0控制位置1时,才打开定时或计数,GATE1同理

C/T :定时或计数

M1 M0 定时器/计数器模式选择


若工作在定时器0:(不采用外部中断,且不采用计时,而采用定时,定时器模式选择:00:模式0,01:模式1)

TMOD &= 0xf0;

TMOD |= 0x01;


定时时间计算:

若定时1ms,晶振FOSC为11.0592MHz ,也就是11059200Hz,则晶振周期为1/11059200

一个单指令的时间是12个晶振周期,也就是1/11059200*12,若要定时1ms,则(1/1000)/(1/11059200*12),也就是11059200/12/1000

当m1为0,m0为1时,既模式1,它是16位定时器,也就是最大值为2^16等于65536,也就是TH0和TL0的最大值为65536

65536是定时器的溢出值,当定时器达到这个 值时就产生中断,表示时间到。

所以要产生1ms的定时,就定义:

#define FOSC 11059200L          (这是晶振频率)

#define TIMES (65536-FOSC/12/1000)         (这是定时时间器定时1ms,定时器所对应 的初值)

下面是定时器中断函数:定时1秒

bit time_1_s;

uint8 cnt=0;

void timer0_isr() interrupt 1 using 1

{

TL0 = TIMES;

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值