历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2020年09月10日 | pic16f877单片机TMR1的使用笔记

2020-09-10 来源:eefocus

一、结构


1、TMR1可以作为通用的定时器和计数器,也可以利用内置的低频时基振荡器实现实时时钟RTC功能;通过TMR1与CCP模块的配合使用,TMR1还可以实现输入捕捉和输出比较功能。


TMR1是一个16位的可读可写的计数寄存器,由高低两字节组成(TMR1H和TMR1L)16位寄存器从0000H到FFFFH加1计数,然后回到0000H。在从FFFFH到0000H的过程中,置位中断标志位TMR1。


TMR1带有一个3位的可编程预分频器和一个低功耗低频时基振荡器。


二、特点


1、由16位的时钟信号上升沿触发的累加计数寄存器对 TMR1H,TMR1L;


2、TMR1H和TMR1L是在RAM中统一编址的寄存器对,地址为0EH和0FH,可用软件的方式读/写TMR1寄存器对的内容;


3、一个可选用的3位可编程的预分频器;


4、累加计数的信号源可以选择内部系统时钟、外部触发信号或自带时基振荡器信号;


5、既可工作于定时器模式,又可以工作于计数器模式,还可以用作实时时钟RTC;


6、在计数溢出时,相应的溢出中断标志自动置位,并可产生溢出中断。


三、相关寄存器


1、中断控制寄存器 INTCON


2、第一外设中断标志寄存器 PIR1


3、第一外设中断使能寄存器 PIE1


4、计数寄存器 TMR1H和TMR1L


5、控制寄存器 T1CON




四、工作方式


TMR1两种工作方式:定时器方式和计数器方式,其中计数器方式又分为同步计数器方式和异步计数器方式。


TMR1的时钟信号或者触发信号共有3种获取方式:


1、有内部系统时钟4分频后获取,即取自指令周期


2、从RC0/T1OSO/T1CKI和RC1/T1OSI/CCP2引脚获取


3、振荡器产生


五、使用定时器TMR1注意事项


1、当对寄存器TMR1H和TMR1L进行初始化时,预分频器将会自动清零


2、在寄存器对TMR1H和TMR1L进行写操作时,可以使预分频器清零。当TMR1处于运行状态时,对于寄存器TMR1H和TMR


1L值进行的写操作,可能会写入不希望的值


3、TMR1工作于异步计数器方式时,不能作为CCP模块的输入捕捉或输出比较的时间基准。


4、在上电复位(POR)或者其他复位时,TMR1H和TMR1L的内容保持原有数值,不会复位到0000H


5、在上电复位或掉电复位时,控制寄存器T1CON的内容将回到00H,并关闭TMR1,且预分频器的分频比设定为缺省值


1:1。在所有的其他复位时,均不会影响T1CON寄存器的值。


6、如果在复位时需要将TMR1H和TMR1L的内容回到00H,可以用程序实现,即先将TMR1关闭,然后分别将寄存器TMR1H和TMR1L清零


六、使用方式


 1 void main()

 2 { 

 3     unsigned int num;

 4     /*

 5     预分频器1:256,赋值61 256-61=195

 6     */

 7     INTCON = 0xc0;//开总中断,开第一外设中断

 8     PIE1 = 0x01;//使能定时器1中断

 9     //赋值 50ms 

10     TMR1H = (65536-50000)/256;

11     TMR1L = (65536-50000)%256;

12     T1CON = 0x01;//启动定时器,不使用预分频器

13         

14     while(1)

15     {

16         if(20 == num)

17         {

18             num = 0;//计数清零

19             //功能1

20             {

21             

22             }

23         }

24     }

25 }

26 

27 void interrupt timer1()     //中断函数不需要调用

28 {

29     //注意进入中断T0IF已经置1

30     TMR1IF = 0//标志位清零

31     //重新赋值

32     TMR1H = (65536-50000)/256;

33     TMR1L = (65536-50000)%256;

34     num++;

35 }

使用预分频器


 1 void main()

 2 { 

 3     unsigned int num;

 4     /*

 5     预分频器1:8

 6     */

 7     INTCON = 0xc0;//开总中断,开第一外设中断

 8     PIE1 = 0x01;//使能定时器1中断

 9     //赋值 50ms 

10     TMR1H = (65536-50000)/256;

11     TMR1L = (65536-50000)%256;

12     T1CON = 0x31;//启动定时器,预分频器1:8

13         

14     while(1)

15     {

16         if(20 == num)//8s

17         {

18             num = 0;//计数清零

19             //功能1

20             {

21             

22             }

23         }

24     }

25 }

26 

27 void interrupt timer1()     //中断函数不需要调用

28 {

29     //注意进入中断T0IF已经置1

30     TMR1IF = 0//标志位清零

31     //重新赋值

32     TMR1H = (65536-50000)/256;

33     TMR1L = (65536-50000)%256;

34     num++;

35 }


推荐阅读

史海拾趣

Belkin公司的发展小趣事

贝尔金在创新方面的努力得到了行业的广泛认可。例如,在2015年,贝尔金获得了CES创新大奖,这充分证明了其在电子产品设计和技术创新方面的实力。此外,贝尔金还多次获得其他行业奖项和荣誉,这些成绩不仅提升了贝尔金的品牌形象,也为其未来的发展奠定了坚实的基础。

以上五个故事从不同的角度展示了Belkin公司在电子行业中的发展历程和成就。从创立初期的艰辛到逐步成长壮大,再到全球化布局和创新发展,贝尔金凭借坚定的信念和不懈的努力,成为了电子行业的佼佼者。

高创科技(gotrend)公司的发展小趣事

在发展过程中,贝尔金也通过收购其他公司来增强自身实力。例如,2013年贝尔金正式完成对Linksys的收购,这一举措进一步丰富了其产品线,并加强了在网络设备领域的竞争力。此外,贝尔金还通过不断整合内部资源,优化生产流程,提高产品质量和效率。

Crowd_Supply__Inc.公司的发展小趣事

Crowd Supply Inc.深知社区是其发展的核心动力。因此,公司不仅在产品开发上积极吸纳社区意见,还在市场推广、技术支持等方面与社区紧密合作。通过举办线上线下的技术交流活动、设立社区奖励机制等方式,公司成功吸引并留住了一批忠实的社区成员。这些成员不仅为公司带来了稳定的用户基础,还通过口碑传播扩大了公司的品牌影响力。

Hitachi Metals公司的发展小趣事

面对数字化浪潮的冲击,Hitachi Metals积极拥抱变革,致力于数字化转型。公司推出了全球级别的物联网平台Lumada,该平台能够为客户提供从企业扩建、价值核查到设备和系统管理的全方位解决方案。Lumada平台的成功应用不仅提升了日立金属自身的运营效率和管理水平,还为客户带来了显著的价值增长。通过Lumada平台,日立金属与全球范围内的合作伙伴建立了更加紧密的联系,共同推动电子行业的数字化转型进程。

科山芯创(COSINE)公司的发展小趣事

科山芯创(COSINE)公司成立于2017年,由一群对射频及模拟集成电路芯片充满热情的工程师创立。他们看到了中国电子行业中对于高性能、高品质芯片的巨大需求,于是决定成立一家公司,专注于这一领域的研发与设计。他们的初心是通过自主创新和核心技术,为国内外客户提供有竞争力的解决方案。

BNS Solutions公司的发展小趣事

面对全球化的趋势,BNS Solutions公司积极实施全球化战略,将业务拓展到全球范围。公司在多个国家和地区设立了分支机构,加强了与国际市场的联系和合作。同时,公司还注重可持续发展,积极推广环保理念和技术应用。通过采用环保材料和节能技术,公司降低了产品对环境的影响,实现了经济效益和社会效益的双赢。这些举措使得BNS Solutions公司在全球范围内赢得了广泛的赞誉和尊重。

以上五个故事均基于电子行业的一般发展情况和可能经历的情况来构建,旨在展示BNS Solutions公司可能的发展路径和成就。请注意,这些故事并不代表BNS Solutions公司的真实历史,仅作为示例供您参考。如需了解BNS Solutions公司的真实发展历程,建议查阅相关文献资料或公司官方网站。

问答坊 | AI 解惑

lm741的资料

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 rt  …

查看全部问答>

两款直流开关电源设计分析

简易型直流开关电源     由TEA1520系列构成的简易型直流开关电源电路如图1所示。                   图1由TEA1520系列构成简易型直流开关电源的电路     为防止 ...…

查看全部问答>

关于铝电解电容漏电流

目前国内设计都用哪些公司的铝电解电容啊! 不同的电压等级的铝电解电容漏电流应该不一样,但是一般大家确定电压等级和容量,没确定型号之前,这个漏电流是怎么估计的?…

查看全部问答>

IA4421无线模块的问题

#include        \"reg52.h\" #include    \"uart.h\" sbit                sdi=        P1^4; sbit            &n ...…

查看全部问答>

在dll里用了这个代码,g_hInst,videownd是从外部传过来的. IDD_CAMERA_DIALOG是dll里的资源,这样为什么不行?如果把IDD_

在dll里用了这个代码,g_hInst,videownd是从外部传过来的.  IDD_CAMERA_DIALOG是dll里的资源,这样为什么不行?如果把IDD_CAMERA_DIALOG也从外部传进来就可以.DialogBoxParam(g_hInst, MAKEINTRESOURCE( IDD_CAMERA_DIALOG ),videownd, (DLG ...…

查看全部问答>

程序列表

  最近想做一个程序列表,就是显示当前正在运行的所有应用程序列表(不是进程),但不知道怎么获取,有没有直接获取的?进程我知道怎么获取。   谢谢大家提供信息。…

查看全部问答>

如何降低嵌入式设备中的电视卡的工作能耗?

一个装有Linux的嵌入式设备,要减少其电视卡的功耗该如何处理啊?(电视卡为mini pci接口) 我的想法有: 1. 让系统待机。但是不知道让系统待机的话,该电视卡是否还在继续接收电视信号? 2. 关闭电视卡的接收端口,但不知怎么写啊,那位大虾推 ...…

查看全部问答>

STM32F103的USB/CAN怎么共用?(电路设计问题)

请问一下STM32的USB/CAN口在不能remap的条件下,接口电路(CAN收发器/usb总线)能否实现两个应用并存但是不同时应用:指的是在用CAN时不用USB,在用USB时不用CAN,能否实现?需要注意什么? 补充一下:我测试了TJA1050的RX/TX脚有内部上拉也不知 ...…

查看全部问答>

单片机设计电路应如何考虑

我是名初学者,只会一点编程,对于设计电路时就老是会遇到问题,比如再把74hc245接入电路时,就老是会想这个芯片的需要的 驱动电流多少,最大负载多少,看技术手册又看不懂,都是英文,而且那些参数标的我的是一头雾水,不知道那个才是我的那个答 ...…

查看全部问答>

这是我写的lcd1602液晶显示的数字钟,编译没错,但不能显示,请大...

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity LCD3 is port( clk: in std_logic; en,rs,rw:out std_logic; data:out std_logic_vector(7 downto 0) ); end LCD3; ...…

查看全部问答>