历史上的今天

今天是:2024年08月24日(星期六)

2021年08月24日 | 51单片机-定时器中断函数的使用

发布者:科技创客 来源: eefocus关键字:51单片机  定时器  中断函数 手机看文章 扫描二维码
随时随地手机看文章

1.定时器与延时的区别

大家可能会觉得我们用延时函数照样可以实现上一讲代码的实验现象,但是定时器与延时的概念不同,延时函数需要占用CPU的使用权,正在延时的时候其他任务没有CPU的使用权就会拖慢执行效率。


而定时器是不需要占用CPU的使用权的,它是独立自己运行的,就像我们在第一讲的时候提到调好5分钟的闹钟,在这5分钟里我们可以随意执行任务,也可以什么事都不做,但是5分钟过后闹钟响了就要执行相关的任务了。


所以上一讲的代码的实现原理就是每隔51微秒,有个变量会自加1,过了1000个51微秒的时候LED的状态才会改变,可以说CPU在51ms的时间里基本没什么事做,只是在51微秒到了的时候做了“cnt++;”这样简单的任务,然后又空闲地等下一个51微秒的到来再执行“cnt++;”。

 

2.定时器中断函数

与外部中断一样,定时器中断也有中断函数,同理,程序去执行中断函数就会把TF0的中断标志位自动清0,所以只要我们用了定时器中断函数,那么TF0就可以不用再出现在程序书写中了。


还记得外部中断这个图吗

8.3.png

同样定时器0的中断函数使能如下

QQ截图20200518195134.png


至于“interrupt”后面的数字为什么是1,请再看我们以前给过大家的这个图的中断函数编号就明白了

6.11.png

这些编号是为了区分哪些硬件资源的相关中断函数,如果我们同时使用两个定时器,那么只能用“interrupt 1”和“interrupt 3”来区分谁是谁的中断函数了。


使用“TIM0_IRQHandler”作为函数名也是模仿STM32定时器中断函数名的写法。

如果我们使用的是工作模式1,每次触发中断函数的执行内容首先就是再次给TH0和TL0赋初值保证下次的定时时间还是一样。


这里我们使用中断函数的执行方式来实现30ms的间隔流水灯,算出TH0和TL0合成的“16位的变量”要填充的值为37888=0x9400。


在中断函数里也是可以定义局部变量的,当然如果这个变量是用来辅助流水灯的,那么肯定是要定义成静态变量的。


3.代码

#include  

#include //详见第六章第8讲

 

void main()

{

    LED_Init();  //初始化LED硬件模块

    EA = 1;      //闭合总中断开关

    TMOD = 0x01; //设置定时器0为工作模式1

    TH0  = 0x94; //设置定时时间为30ms

    TL0  = 0x00;

    ET0  = 1;    //闭合定时器0中断的开关

    TR0  = 1;    //启动定时器0 

    while(1);

}

  

void TIM0_IRQHandler() interrupt 1

{

    static u8 i;

    TH0  = 0x94;  //重新设置定时时间为30ms

    TL0  = 0x00;

   

    P0=~(0x80>>i);//这一次让流水灯向右移

    i++;

    if(i>=8)i=0;

}

觉得30ms的流速太快,想改为300ms的话,修改一下中断函数即可,如下


void TIM0_IRQHandler() interrupt 1

{

    static u8 i,cnt;

    TH0  = 0x94;      //重新设置定时时间为30ms

    TL0  = 0x00;

    cnt++;

   

    if(cnt>=10)

    {

        cnt=0;

        P0=~(0x80>>i);//这一次让流水灯向右移

        i++;

        if(i>=8)i=0;

    }

}


关键字:51单片机  定时器  中断函数 引用地址:51单片机-定时器中断函数的使用

上一篇:51单片机-定时器工作模式2
下一篇:51单片机-定时器初始化新写法

推荐阅读

8月19日,世界机器人大会上,世界机器人大会专家委员会委员王田苗发布《机器人十大新兴应用领域2018-2019研究报告》。十大新兴应用领域分别为仓储和物流机器人、消费品加工制造、外科手术机器人、楼宇和室内配送、智能伴侣与情感交互、复杂环境与特殊对象的专业清洁、城市应急安防、影视娱乐拍摄与制作、能源与矿产开采、国防与军事。一、仓储及物流近年来...
过去一年多时间,中国安防行业谈论最多的几个热词中,“华为安防成败论”定属其一。 去年八月,一篇《做安防,华为有戏吗?》的文章,从华为为什么做安防、华为可以做好安防吗、华为怎么做安防三个角度阐释了其中的因果是非。 时隔一年,AI掘金志试图再次从这个角度切入,探询华为安防过去一年的成绩与打法,变化及远望。 反观过去一年,传统安防头部厂商...
几天前,彭博社(Bloomberg)和富士康之间打了个小口水仗,喜欢搞大新闻的海外媒体老师们发了篇报道,总结一句话就是“富士康跑了”;而富士康当即发文澄清,指责彭博不实报道。 关于富士康的传言不止一次了,早在 2019 年 6 月,就有消息称富士康高管表态“iPhone 四分之一的产能位于中国之外,如果美国市场有需求,可以转向美国”。随后,富士康通...
很多工程师常常会发现这样的一个问题,自己做好的电路板在调试过程中没有发现有任何的异常,但是却在使用不久发现各种问题或者出现故障。其最主要的原因就是异常信号在调试过程中没有正确抓出,导致错误的测量结果。那么如何让您在调试中异常信号一览无余呢?这其实考验的就是示波器的波形刷新率了。波形刷新率,即波形捕获率,指的是每秒捕获的波形次数,...

史海拾趣

问答坊 | AI 解惑

[转帖]ARM入门最好的文章

1.抓住51开发ARM  这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了,自己笨,身边的高才生又看不上51的原理,他们都比较“牛”,说51过时了,你问那个做什么???我 ...…

查看全部问答∨

一个1602LCD的问题,程序在里面

$MOD52 RS        EQU        P1.0 RW        EQU        P1.1 E        EQU        P1.2       & ...…

查看全部问答∨

用IFFT算法重建信号需不需要用到DSP的PWM引脚

本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 一、任务 测量两个正弦信号的叠加信号 , 其中,x1是主信号,幅值为 V(偏置为0V),频率为:20-20kHz; x2是次要信号,幅值为主信号的1/4-1/6,频率为:20-20kHz; 二、要求 1.基本要求 (1) ...…

查看全部问答∨

multisim中的晶振怎么改不了频率?

在multisim10中用门电路做的晶振怎么不能改变频率? 改变了晶振型号还是不管用,望高手指点…

查看全部问答∨

1.由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。

程序 如下: #include<reg52.h> #define uchar unsigned char #define uint unsigned int uint fre,a; sbit b=P2^3; void init(); void main() {   init();      while(1){   if(RI== ...…

查看全部问答∨

新手,问个时钟计算

最近看时钟有点晕。请教一下。 使用副时钟,32.768KHZ 如果设置8分频的话,得到的每次震荡的时间是多少? 答案是,7.8125ms,我怎么也算不出来啊。求教。 另外,分频是啥意思,2分频,4分频,8分频有什么区别? 谢谢…

查看全部问答∨

请教大家一个问题,做一个POS机程序的开发,一般价位都是多少?

我现在还不知道具体的内容,什么型号的POS机,也不知道开发一个什么样的程序,大概就是一个数据传输的程序,不知道你们一般都会报价多少? 多谢了    …

查看全部问答∨

在windows系统下的驱动中,可以自己创建一个线程不?

我现在想在驱动中实现802.1x,启动一个线程来处理802.1x相关的数据包,从而不影响网卡收发包。由于刚开始接触windows的驱动,不是很了解。请大侠给个建议或者给个例子的连接,不胜感激!!!…

查看全部问答∨

新年第一天,赶个早!

老生常谈:新年新迹象,祝大家身体健康,阖家欢乐!!…

查看全部问答∨

IO口问题

                                 公司打算做个通用的板子,因为我们产品是做控制盒的,就是要求IO口比较多,IO口的用处也就是键盘啊,编码器,波段 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved