【单片机】【710】定时器

摘要:
现在,从710开始,我认为我们应该从计时器、振荡器、中断和设备配置开始。首先,最重要的一点是,如果选择系统时钟作为计时器,分频比为1,那么F=1/40Mhz,每0.025us计时器的累加器加上一个710计时器可以分为三类,这可能比分为几类还要多。它有九个计时模块:A类:Timer1B:Timer2、4、6、8C:Timer3、5、7、9B和C。它们可以组成一个32位计时器,每个都是16位。

现在开始看710,我觉得看一个单片机还是先从定时器、振荡器、中断和器件配置这些基础的部分入手。

首先最应该知道的内容就是定时器如果选择了系统时钟,且分频比为1,则F = 1/40Mhz,每0.025us定时器的累加器加一

710的定时器分了3类,大概是有点多才分了类吧,它有9个定时模块

A类:Timer1

B类:Timer2、4、6、8

C类:Timer3、5、7、9

B类和C类可以组成32位的定时器,它们单独每个都是16位的。

大家都知道定时器里面主要的寄存器有三个

TMRx:16位定时器计数器

PRx:与定时器相关的16位定时器周期寄存器(和TMRx配合来控制定时的长短)

TxCON:与定时器相关的16位定时器控制寄存器

上面的这些寄存器里面有很多细分的设置位,这里就不写了啊,哈哈哈哈

这里还需要介绍几个控制位

TxIE:允许控制位()

TxIF:状态控制位()

TxIP<2:0> : 优先级控制位

A类定时器

只有一个Timer1,它的独特性是

可以依靠期间上的低功耗32KHz晶振工作

可以依靠外部时钟源以异步计数器模式工作

初始化代码如下

 1 #include"Timer1.h"
 2 void Timer1()
 3 {
 4     
 5     T1CONbits.TON=0;        //禁止16位定时器    
 6     T1CONbits.TGATE=0;        //禁止门控时间累加    
 7     T1CONbits.TCKPS=0b00;    //预分频比256
 8     
 9     T1CONbits.TSIDL=0;        //在空闲模式下定时器继续工作//
10     T1CONbits.TCS=0;        //内部时钟40MHZ
11     T1CONbits.TSYNC=0;        //不同步外部时钟
12     
13     TMR1=0;                    //时钟周期15625
14     PR1=40000;
15 
16     IPC0bits.T1IP=0B110;        //中断优先级1
17     IFS0bits.T1IF=0;        
18     IEC0bits.T1IE=1;
19     
20 //    T1CONbits.TON=1;          //启动16位定时器
21 
22 }
23 /*void __attribute__((__interrupt__, __shadow__)) _T1Interrupt(void)
24 {
25         IFS0bits.T1IF=0;
26 }*/

B类定时器

Timer2、4、6、8

可以通过与C类定时器组合成32位定时器

 1 #include "Timer2.h"       
 2   void Init_Timer2()
 3 {   T2CONbits.TON=0;    //禁止16位定时器
 4     T2CONbits.T32=0;    //选择16位定时器
 5     T2CONbits.TCS=0;    //时钟源40MHZ    
 6     T2CONbits.TSIDL=0;    //在空闲模式下继续工作
 7     T2CONbits.TGATE=0;    //禁止门控
 8     T2CONbits.TCKPS=0B01;    //预分频比为8
 9     
10     TMR2=0;
11     PR2=50000; //比较值                
12         
13     IPC1bits.T2IP=0B111;//中断优先级
14     IFS0bits.T2IF=0;//中断标志位清零
15     IEC0bits.T2IE=1;    //开启中断
16 
17     T2CONbits.TON=1;    //开启16位定时器
18 }
19 void __attribute__((__interrupt__, __shadow__)) _T2Interrupt(void)
20 {        if( IFS0bits.T2IF ==1 )
21     {
22         IFS0bits.T2IF=0;
}
23 }

C类定时器

Timer3、5、7、9

可以通过与B类定时器组合构成32位定时器

至少有一个C类定时器能够触发模数(A/D)转换

 1 void Init_Timer3() {
 2     T3CONbits.TON = 0;      //停止16位Timer3
 3     T3CONbits.TSIDL = 0;        //在空闲模式下继续工作
 4     T3CONbits.TGATE = 0;        //禁止门控时间累加
 5     T3CONbits.TCKPS = 0B01;     //预分频比为8
 6     T3CONbits.TCS = 0;      //选择内部时钟
 7         
 8     TMR3=0;
 9     PR3=50000; //比较值                
10         
11     IPC2bits.T3IP=0B111;//中断优先级  
12     IFS0bits.T3IF=0;//中断标志位清零
13     IEC0bits.T3IE=1;    //开启中断
14 
15     T3CONbits.TON=1;    //开启16位定时器
16 }
17 void __attribute__((__interrupt__, __shadow__)) _T2Interrupt(void)
18 {        if( IFS0bits.T3IF ==1 )
19     {
20         IFS0bits.T3IF=0;
21     }
22 }

上面的初始化代码中,有一个地方不是按规律来的,那就是设置中断优先级的时候,例如上面的IPC2bits.T3IP = 0B111;就是设置Timer3的优先级的,不按规律是指前面的IPCxbits.TyIP里的x和y(y = Timer后面的数字)不是相等的,即我设置Timer4的优先级的时候前面不一定是IPC4。明白了吧,あほ!

至于代码中其它地方的数字是和Timerx的x相等的。

免责声明:文章转载自《【单片机】【710】定时器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCV —— 轮廓CentOS 多版本 GCC 共存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于WinForm/Web如何使用缓存Cach

Cache 的绝对到期与滑动到期 绝对到期:设置绝对过期时间 到了指定时间以后会失效。(类似Cookie机制) 相对到期也称滑动到期:设置相对过期时间 指定时间内无访问会失效。(类似Session机制) HttpRuntime.Cache与HttpContext.Current.Cache 为同一个对象HttpRuntime.Cache.Add 存在相同...

使用boost的deadline_timer实现一个异步定时器

概述 最近在工作上需要用到定时器,然后看到boost里面的deadline_timer可以实现一个定时器,所以就直接将其封装成了ATimer类,方便使用,ATimer有以下优点: 可以支持纳秒、毫秒、秒、分、小时定时。 可以随时停止定时器。 支持单次调用。 因为使用了deadline_timer,所以定时比较准确。 ATimer和Qt的QTimer使用...

第11章 PADS功能使用技巧(2)-最全面

原文链接点击这里 七、Flood与Hatch有什么区别?        我们先看看PADS Layout Help 文档是怎么说的,如下图所示: 从检索到的帮助信息,我们可以得到Hatch与Pour的区别,原文如下: Flooding recalculates the pour areaand recreates all clearances for t...

ucos(八)软件定时器

一、概述   内核提供了一个模拟定时器的机制,类似于任务,但是占用资源少,只能做一些简单的定时控制,如可以定时的喂狗、控灯。在软件定时器,不能添加时间管理函数、阻塞等待函数(等待互斥锁/信号量/事件标志组/消息队列)。 1.创建软件定时器 void OSTmrCreate (OS_TMR *p_tmr, CPU_CHAR *p_name, OS_TIC...

0508操作系统

课后题:https://wenku.baidu.com/view/40a1cb3a3968011ca300919c.html 1.操作系统的定义 操作系统是运行在计算机硬件上的第一层软件,它是用户和计算机硬件系统之间的接口,用户通过os来使用计算系统,是计算机系统资源的管理者,实现了对计算机资源的抽象。计算机资源的抽象:OS在裸机上覆盖了I/O设备管理软件...

定时器QTimer

1 importsys 2 from PyQt5.QtCore importQTimer, Qt 3 from PyQt5.QtWidgets importQApplication, QWidget, QPushButton, QLabel, QVBoxLayout 4 5 classDemo(QWidget): 6 def __ini...