51单片机基础之定时器中断(一)

TH和TL定时换算:

定时器说白了倒数的,时间到了触发一次中断,那么必须设置倒数时间,

TH0和TL0就是高八位和第八位

假设定时1ms一次,那么2的16次方等于65536,定时1ms,就等于65536-1000=64536,再把十进制换成十六进制,如下图的例子。

代码:

#include <reg51.h>

sbit LED=P2^0;        //等下要用到,会看到LED闪烁,闪烁一次说明定时器中断触发了100次

typedef unsigned char u8;//typedef关键字的作用是自己重定义数据类型
typedef unsigned int u16;

u16 i=0;            //定义一个全局变量,有的时候一个函数会被执行很多次,如果要让变量的值保存或者累加,则不要定义局部变量。

//配置定时器的基本操作
void time0_init(void)
{
        TMOD|=0X01;//选择为定时器0模式,工作方式1
        TH0=0XFC;    //给定时器赋初值,定时1ms
        TL0=0X18;    
        ET0=1;//打开定时器0中断允许
        EA=1;//打开总中断
        TR0=1;//打开定时器        
}

void main(void)
{
        time0_init();            //初始化定时器
        while(1)
        {
        
        }
}

void time0(void) interrupt 1    //中断服务函数
{    
        TH0=0xFC;        //这里为什么重新赋值呢。因为已经触发了一次,TH0和TL0已经变成了0,想要再次实现定时器中断,必须重新赋值
        TL0=0x18;
        i++;
        if(i==1000)    //假设触发了一千次,也就是1s,LED就闪烁一次
        {
                i=0;
                LED=!LED;
        }    
}

运行结果:

因为不能上传视频,所以拍两个图片,效果就是1秒左右闪烁一次。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值