历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2020年01月30日 | PIC单片机之定时器(TMR0)

2020-01-30 来源:eefocus

什么是定时器?


定时器顾名思义就是用来定时的。在单片机应用中常常用于各种各样的定时。比如让LED灯每隔 1S 亮一次。 这个1S 就是由定时器做到的。


指令周期 


指令周期就是单片机执行一个指令所花费的时间。这也是定时器定时的最小时间单位。时钟频率/4=指令频率。1/指令频率=指令周期。


假设现在的时钟是4MHZ  ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us就是指令周期,这1us也就是定时器定时的最小单位。


定时器与预分频器


假设在没有预分频器情况下。开启定时器 每隔一个指令周期定时器就加一。假设时钟是4MHz  也就是每隔 1us 定时器加一。


如果有了预分频器假设预分频器设置成2分频,定时器就 每隔2个指令周期定时器加一。如果预分频器设置成4分频,定时器就 每隔4个指令周期定时器加一,以此类推。


定时器中断标志位


如: TMR0 这个是8位的定时器,也就是8位的寄存器。8位的寄存器能代表的数值为0~255.也就是说定时器可以从0开始加一直加到255.到255后再加一就又变成0。此时TMR0定时器中断标志位 (TMR0IF)变成 1.(如果中断没有开启,并不执行中断程序。) 


到底从时钟频率一直到定时器中断溢出之间是什么关系呢?


下面我画了一个流程图我们用频率的方式来理解这一切。假设时钟频率是4MHz ,定时器预分频值为2,定时器初始值为0.


1、首先4MHz 的时钟 4分频后变成 1MHz的指令频率;


2、然后预分频器 2 分频后变成 0.5MHz的频率供给定时器;


3、定时器经过256分频后变成约1952Hz的频率溢出中断;

然后我们再用周期的方式来理解这一切。


1、首先0.25us时钟周期4分频后变成 1us指令周期;


2、然后预分频器 2 分频后变成 2us周期 供给定时器;


3、定时器每隔2us加一 ,加到256次  256X2us=512us溢出中断 ;

希望上面的流程图能帮你梳理一下概念。


实例说明:


假设时钟周期为4MHZ,每隔50MS点亮LED,每隔50MS灭掉LED。这样的程序要如何做到呢。


这50ms如何做到.


1、得到指令周期


4MHz/4=1MHz  


1/1MHz=0.0000001s=1us


2、得到预分频


定时器定时的最大时间要超过这50mS,所以预分频器要选择256


预分频X256=最大的定时时间。256X256=65536us=65.536ms 大于50ms


3、计算定时器初始值


(定时器最大值+1)- (定时时间/预分频)=定时器的初始值。


255+1=256


50000/256=195.3125


256-195.3125=60.6875 四舍五入 定时器初始值为61.


设置相关的寄存器。


OPTION_REG寄存器中我们一般需要设置三处。


PS<2:0>设置用来设置预分频预分频范围从2 ~256


PSA设置成0   讲预分频器分配给Timer0模块


TMR0CS设置成0 内部指令周期时钟。

实例程序:


/*开发环境 MPLAB X IDE 型号PIC16LF1823*/


#include  

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF


                                                   &BOREN_ON&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);

__CONFIG(PLLEN_OFF&LVP_OFF) ;

#define LED  LATA5/*也可用 #define LED RA5,只是PIC16LF1823 输出电平的时候,直接控制LATA5执行速度更快,因为传给RA5的数据最终也是传给LATA5才执行的*/

void init_fosc(void)

{

    OSCCON= 0x68;//时钟设置为4MHz

}

void init_gpio(void)

{

    PORTA = 0;

    LATA = 0;

    ANSELA = 0;

    TRISAbits.TRISA5=0; //RA5口设置成输出 用来控制LED

}

void init_timer0(void)

{

    OPTION_REG=0x87; //预分频为256

}

int main(int argc, char** argv)

{

    init_fosc();

    init_gpio();

    init_timer0();

    TMR0IF=0;//清除TMR0中断标志位

    TMR0=61;//设置中断初始值61

    while(1)

    {

        if(TMR0IF==1)//定时时间到了吗??

        {

            LED = ~LED;//改变LED的状态

            TMR0IF=0;//清除TMR0中断标志位

            TMR0=61;//设置中断初始值61为下次50ms定时做准备


        }

    }

}

推荐阅读

史海拾趣

Daito Communication Apparatus Co Ltd公司的发展小趣事

随着微电子学的快速发展,电子设备对元器件的要求也越来越高。Daito公司敏锐地捕捉到了这一市场趋势,决定对保险丝进行进一步的创新。在1995年,他们成功开发出了适用于电路板安装的高精度小型报警保险丝。这一产品的推出,不仅满足了市场对小型化、高精度保险丝的需求,也进一步巩固了Daito公司在电子行业中的领先地位。

随后,Daito公司又针对微电子学的进一步发展,推出了可以连续自动安装的方形微型保险丝。这一产品的推出,大大提高了生产效率,降低了成本,同时也为客户提供了更加便捷的使用体验。近年来,随着面安装技术的兴起,Daito公司又迅速推出了适用于面安装技术的片状保险丝,再次展示了他们在电子行业中的创新实力。

请注意,由于篇幅限制,以上仅为两个故事示例。如果需要更多故事,可以进一步深入研究和探索Daito公司在电子行业中的发展历程和创新实践。

Hpc Technology Inc公司的发展小趣事

随着微电子学的快速发展,电子设备对元器件的要求也越来越高。Daito公司敏锐地捕捉到了这一市场趋势,决定对保险丝进行进一步的创新。在1995年,他们成功开发出了适用于电路板安装的高精度小型报警保险丝。这一产品的推出,不仅满足了市场对小型化、高精度保险丝的需求,也进一步巩固了Daito公司在电子行业中的领先地位。

随后,Daito公司又针对微电子学的进一步发展,推出了可以连续自动安装的方形微型保险丝。这一产品的推出,大大提高了生产效率,降低了成本,同时也为客户提供了更加便捷的使用体验。近年来,随着面安装技术的兴起,Daito公司又迅速推出了适用于面安装技术的片状保险丝,再次展示了他们在电子行业中的创新实力。

请注意,由于篇幅限制,以上仅为两个故事示例。如果需要更多故事,可以进一步深入研究和探索Daito公司在电子行业中的发展历程和创新实践。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

Cal Crystal Lab Inc起初是一家专注于电子晶体管研发的小型实验室。在电子行业的早期,晶体管的性能直接决定了电子设备的质量和性能。创始人张先生凭借对电子技术的深厚理解,带领团队不断攻克技术难关,成功研发出性能更稳定、寿命更长的晶体管。这一创新不仅让Cal Crystal Lab Inc在业内崭露头角,还吸引了大批合作伙伴的青睐。随着市场需求的不断增长,公司逐渐扩大规模,从一个小型实验室成长为拥有多条生产线的大型企业。

C.K Magma公司的发展小趣事

在追求经济效益的同时,C.K Magma公司也积极履行社会责任。他们注重绿色发展和可持续经营,通过采用环保材料和工艺、优化生产过程等方式,降低产品对环境的影响。此外,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展提供了有力保障。

这五个故事展示了C.K Magma公司在电子行业中的发展历程和取得的成就。通过技术突破、市场拓展、国际合作、创新产品和绿色发展等方面的努力,公司逐渐在行业中崭露头角,成为了一家具有影响力和竞争力的企业。

Digital Equipment Corp公司的发展小趣事

1998年,DEC被康柏公司以96亿美元的价格收购。这次收购标志着DEC成为康柏公司的一部分,开始了新的发展历程。在收购后,DEC的品牌和产品得到了保留和发展,同时康柏公司也为DEC带来了更多的资源和支持。通过业务整合和资源共享,DEC在康柏公司的领导下继续保持着其在计算机行业的领先地位。

B+B SmartWorx公司的发展小趣事

2016年,B+B SmartWorx与研华达成合并协议,成为研华全球大家庭的一员。这次合并是双方战略发展的重要一步,研华看中了B+B SmartWorx在物联网和工业网通领域的深厚积累,而B+B SmartWorx则借助研华在亚洲的资源与经验,进一步拓展其全球市场。合并后,双方在产品开发、业务布局等方面进行了深度融合,共同推动工业物联网领域的发展。

问答坊 | AI 解惑

用于车身控制模块的单片机和本地互连网络的作用

 随着应用的不断扩展,今天和未来的单片机普及和车辆网络正在继续。单片机是车辆内各种电子控制模块的“大脑”,而网络则是“系统互连”。本地互连网络(LIN)是业界第一个提出车内Class A开放多路复用协议标准。它定义了一个支持车辆内 ...…

查看全部问答>

马达概要

一、马达种类  依电源相数可以分成单相马达和三相马达。 (1)单相马达  ·单相电源为一般家庭用型的常用电源,以一相所组成。  ·电源本身无法运转马达,为了启动马达需要把电容器和辅助线圈连结在一起做启动。 (2)三相马达  ·三相马达 ...…

查看全部问答>

CC1100中,怎么用电磁波激活这个功能

  我现在用CC1100接收模块开发一个项目,用的单片机是MSP430F2274,但相应的电源板只能提供3mA的电流,我现在想用电磁波解决这个问题,想问哪个高手能给我些代码,非常感谢!…

查看全部问答>

求助一个信号量的问题

  程序中有两个任务,分别是收和发,收的优先级高。在接收到特写的数据后,用msgQSend()转向发任务进行相关处理。但是在发任务中又需要收任务提供一些支持,比如发了一定的数据包后需要对方回应,而这个回应是收任务处理的,收到回应后发任务才能 ...…

查看全部问答>

寻求AT440芯片的DataSheet

老大要我对比下AT440和S3C2440方案的异同,要我找AT440的DataSheet,不知道那位有,能否帮忙?…

查看全部问答>

2.4G常用通信标准有哪些?自己可以自由制定协议的芯片有哪些?

2.4G常用通信标准有哪些?自己可以自由制定协议的芯片有哪些?…

查看全部问答>

Qsys集成dsp builder高级库设计--图示

呵呵,如果哪位见识过DSP Builder高级库的朋友想必会它的功能折服!大概提供了几十个demos涵盖很多领域,几乎每个例子都可以自动生成一个用户IP下面是利用DSP Builder自动生成NCO设计的IP…

查看全部问答>

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十八章 PS2鼠标实验

第三十八章  PS2鼠标实验 PS/2作为电脑的标准输入接口,用于鼠标键盘等设备。PS/2只需要一个简单的接口(2个IO口),就可以外扩鼠标、键盘等,是单片机理想的输入外扩方式。ALIENTEK战舰STM32开发板也自带了一个PS/2接口,可以用来驱动标 ...…

查看全部问答>

求助wintech仿真器问题

手里有一块28335的板子和一个前辈留下的仿真器,各个地方都找遍了就是找不到驱动程序,求各位大侠出手相助。 我的系统是WIN7 32位,已装好CCS3.3。用过的大侠能把驱动发我邮箱么..mashaokang1111@163.com。谢谢啊! [ 本帖最后由 mashaokang 于 20 ...…

查看全部问答>