历史上的今天
返回首页

历史上的今天

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

2021年08月24日 | 51单片机-微调定时精确时间

2021-08-24 来源:eefocus

1.定时器&蜂鸣器

一般定时器中断函数里的内容最好是能够快速地去执行完,比如只执行几条简单的语句,这样与主函数配合才会使程序更加高效。前期教学里,我们只使用定时器中断负责某个IO引脚间隔跳变或者使一个变量间隔自加1的简单语句。


比如我们现在要实现间隔50ms左右的时间让流水灯左右循环移动的同时,还需要无源蜂鸣器一直响,这样的功能,思路该怎么去思考?


首先我们知道无源蜂鸣器要想鸣叫的比较尖锐,那P1.6需要一个合适的脉冲信号,这个信号笔者打算使P1.6高低电平保持的时间为300微秒不断循环。


所以我们用定时器中断实现P1.6的电平间隔跳变,主函数里负责完成流水灯的任务即可。

8.8A.png?imageView2/2/w/550


2.代码

#include  

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

 

u8 T0RH, T0RL;

void TIM0_Init(u32 us,int trim)//trim:微调

{

    u32 tmp;                       //临时变量

     

    tmp = 11059200 / 12;           //定时器计数频率

    tmp = ( tmp * (us/100) )/10000;//计算所需的计数值

    tmp = 65536 - tmp;             //计算定时器重载值

    tmp = tmp+trim;                //补偿中断响应延时造成的误差

    T0RH = (unsigned char)(tmp>>8);//定时器重载值拆分为高低字节  

    T0RL = (unsigned char)tmp;

    TMOD &= 0xF0; //清0低四位 

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

    TH0 = T0RH;   //加载T0重载值   

    TL0 = T0RL;

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

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

 

void main()

{  

    u8 i,dir;

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

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

    TIM0_Init(300,0); //用定时器0定时300us,不微调

    while(1)

    {

        if(i<8)dir=0;//向左移

        if(dir==0)P0=~(0x01< 

        if(i>=8)dir=1;//向右移 

        if(dir==1)P0=~( 0x80>>(i-7) );//当i大于等于8之后,(i-7)其实也还是在1~7之间变化

 

        i++;

        if(i>=15)i=1;//让i一直在1~14之间变化

        delay_ms(50);

    }

}

 

void TIM0_IRQHandler() interrupt 1

{

    TH0 = T0RH;   //重新加载重载值

    TL0 = T0RL;

    BEEP=!BEEP;

}


可以看到使用定时器中断比外部中断触发还要高效。


3.讲解微调


然后回到上一讲说过的怎么测试然后去微调使定时时间更精确。


拿我们这讲的代码来说,首先在不微调的情况下,也就是传入的参数trim为0,看看定时的时间是多少。


进入软件调试模式,在“BEEP=! BEEP;”设置断点,在没有微调之前观察每次执行“BEEP =! BEEP;”的间隔时间。


8.10.png?imageView2/2/w/550


按下RST复位之后,先按两次RUN

8.11.png?imageView2/2/w/550


再按一次RUN


8.12.png?imageView2/2/w/550


定时时间为0.003285-0.002979= 0.000306s

所以定时时间超了6微秒,则需要给trim一个合适的参数,这里笔者调出了最合适的数为6,所以我们初始化定时器时改为

TIM0_Init(300,6); //用定时器0定时300us,6是微调使定时时间更精确

这样每次跳转到中断函数去执行的间隔时间就为精确的300us了。


当我们要定时十毫秒或者二三十毫秒时,微调的数可能就不是6了,而是20之间或者其他数,所以每次想要精确定时就需要软件调试亲自测试。


推荐阅读

史海拾趣

Dearborn Electronics Inc公司的发展小趣事

Dearborn Electronics Inc.于1952年在芝加哥注册成立,由一群电子工程师和企业家共同创立。他们看到了当时电子行业对高性能电容器和滤波器的迫切需求,于是决定专注于这一领域。公司初期主要生产薄膜电容器和EMI/RFI滤波器,凭借卓越的产品质量和稳定的性能,逐渐在电子行业中建立了良好的声誉。

Excelsys公司的发展小趣事

在市场拓展方面,Excelsys公司采取了多元化的战略。除了深耕国内市场外,公司还积极开拓国际市场,与全球多家知名企业建立了长期稳定的合作关系。这些合作伙伴不仅为Excelsys提供了广阔的市场空间,还带来了先进的技术和管理经验,推动了公司的快速发展。

展恒电子(Broadic)公司的发展小趣事

自2010年起,展恒电子专注于智能仪表行业,凭借其核心技术和横向联合多家关键器件供应商的策略,为水、电、气、热四表市场提供整套解决方案。随着业务的不断拓展,公司逐渐积累了大量的行业知名客户,进一步巩固了其在智能仪表领域的领先地位。同时,公司还积极向新能源、物联网、安防家居等多个领域拓展,以实现业务的多元化发展。

Continental公司的发展小趣事

近年来,大陆集团在特种商用车胎领域也取得了重要突破。2014年,大陆集团在亚洲国际物流技术与运输系统展览会上发布了一款全新的产品——SC8特种商用车胎。这款产品是专门针对亚洲物料搬运业而开发出来的,适用于仓库、饮料业、造纸业等多个行业。SC8轮胎具备超深的轮胎花纹和极佳的性能,为物料搬运业提供了更高效、更安全的解决方案。这一产品的推出进一步巩固了大陆集团在商用车胎领域的市场地位。

Don Connex Electronics Co Ltd公司的发展小趣事

作为一家有着高度社会责任感的企业,Don Connex Electronics在发展的同时不忘回馈社会。公司积极参与扶贫、助学等公益活动,为贫困地区的教育事业和经济发展做出了积极贡献。此外,公司还关注员工的成长和发展,为员工提供丰富的培训机会和广阔的发展空间。这些举措不仅增强了企业的凝聚力,也提升了企业的社会形象。

固得沃克(GOODWORK)公司的发展小趣事

在追求经济效益的同时,固得沃克也高度重视环境保护和社会责任。公司所有产品均通过了美国UL、SGS欧盟ROHS及REACH环保认证,确保产品符合国际环保标准。这一举措不仅提升了公司的品牌形象,也为公司拓展国际市场提供了有力支持。近年来,固得沃克的产品已广泛应用于汽车电子、新能源、绿色照明等多个领域,并远销海外多个国家和地区。

问答坊 | AI 解惑

大家有没有“温室智能控制系统”毕业设计

大家有没有“温室智能控制系统”毕业设计 共享一下 控制量(温度,湿度,光照,co2控制,土壤,水分)…

查看全部问答>

PROTEL 99se 中走线的问题

大家好:我的protel 99se中画pcb走线时可以走15度,30度等等好像是任意角度,我不想这样改怎么设置? 正常的是可以走45度,90度,135度 谢谢大家哦!…

查看全部问答>

关于端口复用的问题(ds1302和1602)

想用ds1302和1602做一个实时时钟,但ds1302的3个口接在P1,而1602的8位数据输入也用的是P1,请问能这样能做到吗?谢谢…

查看全部问答>

简单问题:如何获取进程空间虚拟地址的实际的物理地址?

反之,如果把一个物理地址映射到进程空间虚拟地址?不是MMU那个虚拟地址…

查看全部问答>

有电力项目方面经验的朋友请进!

哪位有电力方面课题或是中小型的项目,可以谈谈想法,现成的项目也可以,我公司需要购买或者开发。希望我们能合作。我的QQ号31721739 …

查看全部问答>

高分求高手相助, 无法连通电信WAP网关

{                 }else                 {                         ConnMgrSetCon…

查看全部问答>

各位同仁,我还要继续下去吗

本人是做单片机工作的,08年金融危机被公司CUT了…

查看全部问答>

关于系统初始化

系统初始化时,怎么根据实际使用振荡器?如内部振荡器1和2。…

查看全部问答>

Verilog+HDL数字设计与综合(第二版)

设计前端的设计很不错的一本书…

查看全部问答>

你对LED恒流芯片了解多少?三代非隔离LED恒流芯片介绍

第一代LED恒流芯片:此类芯片主要的技术特点是基于固定频率的PWM芯片(如UC384X等),通过降低电感纹波电流,固定电感峰值电流来实现恒流。但由于开关频率固定,为避免次谐振荡,它的最大占空比只能用到50%,其应用范围就很受限了;再者由于电感纹 ...…

查看全部问答>