找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2900|回复: 0
收起左侧

51单片机定时器/计数器中断代码理解 用比喻通俗讲解

[复制链接]
ID:700494 发表于 2020-3-1 10:41 | 显示全部楼层 |阅读模式
初入论坛,在这里写一下我对51单片机定时器的一些东西。
先放代码:
void InitTimer0(void) //定时器T0
{
    TMOD = 0x01;  //TMOD为模式控制寄存器,这里选择的是定时计数器0
    TH0 = 0x0FC;
    TL0 = 0x18; //这两行设置初值
    EA = 1;  //开启总中断
    ET0 = 1; //开启定时器0中断
    TR0 = 1; //开始计时
}
void InitTimer1(void) //定时器T1,里面配置的内容与上面的类似
{
    TMOD = 0x10;
    TH1 = 0x0FC;
    TL1 = 0x18;
    EA = 1;
    ET1 = 1;
    TR1 = 1;
}
/*void Timer0Interrupt(void) interrupt 1 //T0溢出中断服务函数
{
    TH0 = 0x0FC;
    TL0 = 0x18; //回调初值,与初始化中的初值保持一致
}
*/
/*void Timer1Interrupt(void) interrupt 3 //T1溢出中断服务函数
{
    TH1 = 0x0FC;
    TL1 = 0x18;
    //add your code here!
}

首先我想说一些东西,我们在学习单片机的时候一定要先去搞清楚某一部分它的功能是什么,比如这里的定时计数器,顾名思义,就是定时或计数(下面计数先不提),那么为什么要定时呢?就是要产生中断,然后去处理一些东西,那么说到底,费了这么大劲,我们的目的是为了得到这么一个中断的触发。那现在我们就清楚了,我们要学习51的定时计数器,就是要利用它来产生中断。下面来看:
51单片机内部有两个16位定时计数器,采用的中断方式是溢出中断,那么什么是溢出中断,打个比方,有一桶水,你一开始给里面倒了半桶水,然后不去管它了,桶里的水以某种方式自动增加,直到桶被装满,这时候水就溢出了。单片机中的溢出中断道理也是如此,在定时计数器溢出之后,就触发了一个中断,程序这时候就自动跳入到我们的中断服务程序之中,进去之后一定要先把水再次恢复为半桶,也就是把单片机定时计数器的初值回调,以便下一次中断的产生,进而我们就可以写自己的代码了。
第一次发帖,如有不当之处,还望大家多多包涵,谢谢!

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表