MSP430定时器A_第1页
MSP430定时器A_第2页
MSP430定时器A_第3页
MSP430定时器A_第4页
MSP430定时器A_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上次Cloud和大家一起学习完了 单片机的TimerA (定时/计数器A) 关的寄存器配置也相当复杂,Cloud 相关描述。在这里Cloud提醒大家, MSP430的时钟配置,这一篇,我们来学习MSP430 。MSP430单片机的TimerA具有非常强大的功能,相 花了好久才逐步理清学习思路,尤其是学习数据手册的 虽然现在网上有中文汉化版的数据手册,但Cloud阅读 英文原版后对比发现还是英文原版对器件特性描述得更加清楚, 些内容。好吧,扯远了。下面进入正题: 而中文汉化版的省略掉了一 一、MSP430 的 Timer 结构 首先让我们通过官方描述来初步了解一下MSP430单片机的Timer资

2、源: 定时器A是一个16位的定时/计数器。定时器 A支持多重捕获/比较,PWM输出和内 部定时。定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。 定时器A的特性包括: 四种运行模式的异步 16位定时/计数器 可选择配置的时钟源 可配置的PWM输出 异步输入和输出锁存 对所有TA中断快速响应的中断向量寄存器 MSP430G255单片机共有两个 TimerA,分别是 Timer0A 和TimerlA。 OK零零总总说了这么多,大家一定带有很多的疑惑,比如什么叫“捕获/比较”等, 这里Cloud先不作解释,会用才是王道。我们呢先找来定时器A的结构图给大家初步了解 一下定时器

3、A的结构: 我们先从上面部分开始解释。中间红色的是一个16位的TimerA , TAR,这其实就是 MSP430单片机内部的一个定时计数器了,类似于51中的TH0和TL0的合体。既然可以拿 来计时,那么肯定可以有时钟信号输入,让我们最左边黄色的框,是一个选择器,由上面的 TASSEL来选择TACLK、ACLK、SMCLK、INCLK的其中一种时钟。上次我们已经学习过 ACLK和SMCLK,也知道如何配置这两个时钟了(这也是为什么先学习时钟的原因),另 外两个是外部时钟源,其中TACLK可以由P1.0输入。跟在时钟源后面的是一个分频器, 由ID来控制,将时钟源的时钟信号1、2、4、8分频后作为定

4、时/计数器的时钟源。TAR右 边的蓝色框代表 TimerA在计数模式下由 MC来控制TAR的四种计数方式。同时我们还注 意到TAR的左下方有一个 TACLAR连接至TAR的Clear端,显然是清零作用的,数据手 册还告诉我们置位 TACLAR,不但会清零TAR的计数值还会清除时钟分频信息。TACLAR 一旦置1,会自动归零,所以可以当做是TimerA的复位按钮。 0 TASSELx N TACLK ACLK oil 一 SMCLK 10 INCLK 11 II Dx 斗I r i/2/4;8 f -Z-JI |c Timer Clock Tin 115 Clear 16*bit Timer T

5、AR MCx 11 RC Count Mode TACLR ( CCI2A :CISx TimerA的TAR会自动从0开始一直计数 TA0CCR0比较特殊,将不作为捕获/比较的 TAR 值比 TACCR0 大, 2、MC=1 : Up (增模式),在这个模式下, 至TA0CCR0,并不断重复计数,注意,此时的 作用,和TA0CCR1、TA0CCR2起不同作用。如果在设置增模式时 那么TAR会立刻重新从0开始计数,其波形如图所示: 在增模式下,TACCR0 CCIFG 中断标志将在 TAR计数至TACCR0时被置1。TAIFG 中断标志将在TAR从TACCR0跳至0时被置1,下图描述了这两个标志

6、位的置位时序: Timer Clock Timer CCRO-iyCCRQ i Qh X 1h 席X CCRO- Set TAI FG SetTACCROCCIFG 和CCIFG何时置位问题,这里Cloud的解读是,TAIFG是在TAR 对于如何理解TAIFG 归零的时候置 1的,而CCIFG是在TAR计数至TA0CCR0时置1的。 另外,当TA0CCR0在TimerA运行过程中发生改变时(Timer工作在增模式下),如 果新的TA0CCR0的值比当前TAR计数的值要大,则TAR继续向上计数至新的 TA0CCR0, 反之,TAR将立即归零; 3、MC=2 : Continuous (连续模式)

7、,在这个模式下, TimerA的TAR会自动从0开始 计数至0 xFFFF然后归零,并不断重复计数。此时的 TA0CCR0将和TA0CCR1、TA0CCR2 一样起到捕获/比较的作用。连续模式下的 TAR计数波形如下图所示: X FFFEh 与中断响应没有冲突: 在连续模式下,TAIFG中断标志将在 TAR从OxFFFF溢出至0的时候置1,如下图(由 于这里没有专门用到 TA0CCR0所以就不关心 CCIFG,这里同样符合我们前面对中断标志置 位问题的分析): Timer Clock Timer FFFErT、FFFFh Oh Hh Set TAI FG 连续模式可以用于产生独立的时间间隔和输

8、出 官方手册还对连续模式的应用作了介绍: 频率。当每个时间间隔完成时就产生一个中断。下一个时间间隔的值在进入中断服务子程序 时写入TAOCCRx。下图显示了 2个独立的而时间间隔 to和t1写入捕获/比较寄存器。在该 应用中,时间间隔由硬件而不是软件控制, 这里,稍微解释一下上面的图,锯齿波是TAR产生的,从0增至OxFFFF单调循环。 TACCROa和TACCRIa分别是两个捕获/比较寄存器的值(初始值),为了产生t0和t1两 个时间间隔,我们可以让中断响应我们的CCIFGx中断响应(因为 CCIFGx是和TA0CCRx 相关联的)。这里例子的做法是在每次由于CCIFGx中断响应的时候,相应

9、的将TACCRx 加上tx (比如TACCR0a + t0得到TACCR0b ),然后TAR继续计数(不管是否退出中断), 然后计数到下一个周期的时候自然又产生的TA0CCRx的CCIFGx中断,由此我们得到了连 的TAR会自动从0开始计 (可以看出,此时TA0CCR0 TA0CCR0值的2倍。下 续时间间隔; 4、MC=3 : Up/Down (增减模式),在这个模式下,TimerA 数至TA0CCR0然后从TA0CCR0-1自动减至0,并不断重复计数 又作为了周期寄存器来使用而不是捕获/比较寄存器)。其周期是 该模式下,计数方向是固定的,即让定时器停止后再重新启动定时器, 的计数方向和数值

10、开始计数。如果不希望这样,可以将 会清除TAR的值和定时器的时钟分频)。 在增减模式,在 TA0CCR0中,CCIFG中断标志和 置位一次,由1/2定时器周期隔开。当定时器计数到由 CCIFG置位;而定时器完成减计数从 的分析一致),下图描述了这个过程: 它就沿着停止时 TA0CLR置位来清除方向(同时也 TAIFG中断标志在一个周期中只能 TA0CCR0 1 变至U TA0CCR0 时, 0 x0001到0 x0000时,TAIFG置位(依然和我们前面 Bmer Clock Timer Up/Down Set TAIFG Set TACCRO CCIFG $ If CCRO-ICCR0 X

11、CCRO-lXcCRO-2 1h 或比当前计数值要大, 定时器 在定时器开始减计数之前会多 当定时器运行时,改变 TA0CCR0的值,如果正处于减计数的情况,定时器会继续减到 0,新的周期在减到0后开始。 如果正处于增计数状态, 新周期大于等于原来的二周期, 会增计数到新的周期。反之,定时器立刻开始减计数,但是, 计一个数。 同样的,官方数据手册也给出了一个增减模式的使用例子: 2个输出驱 增减模式支持在输出信号之间有死时间的应用。例如,避免出现过载情况, 动一个H桥不能同时为高电平。下图显示了这个过程: 这里的Out put Mode 6、2在后面将会讲到其输出波形特性,现在大家只要知道这些

12、波 形都是可以通过我们的IO 口输出来的(想起IO那篇IO具有第二功能的特性了么?)。 其中 Tdead = ttimer * (TACCR1 - TACCR2) Tdead 同时输出时必须没有反应的时间段 Ttimer 定时器时钟周期 TACCR捕获比较寄存器x的内容 TACCRx寄存器并不是缓冲,写入时立即更新,因此,任何所要求的死去时间不会自动 保留。 由于上面的例子使用了 TimerA的比较捕获模块,这里我们还没有讲到,大家如果暂时 理解不了这个例子可以跳过它继续往后面学习,等到学习完比较捕获模块再回过头来看这个 例子。 五、Timer的捕获比较/模块 前面我们已经讲完了定时器的4种计

13、数模式以及每种技术模式中TAR的计数特点和相 关中断标志位的置位时序,另外还初步学习了相关的应用。下面我们来一起学习下一个重要 内容,捕获/比较模块: TimerA中有3个相同的捕获比较模块 TAOCCRx,其中的任何一个模块可以用于定时器 数据的捕获或时间间隔。 比如速度估计或时间测量。 捕获模块:(以下内容可以配合定时器内部结构图来学习分析) 当CAP=1时,选择捕获模式。捕获模式用于记录时间事件, 捕获输入CCIXA和CCIXB连接外部的引脚或内部的信号,这通过CCIS来选择。CM选择 捕获输入信号触发沿: 上升沿、下降沿或者两者都捕获。捕获事件发生于所选择的的输入信 号的触发沿。如果发

14、生了捕获事件: 定时器TAR的值复制到TAOCCRx寄存器中 中断标志位CCIFG置位 内部信号可以在任一时间通过 CCI位来读取捕获信号可能会和定时器时钟不同步,并 导致竞争条件(这是数电用语)的发生。将 SCS置1可以在下个定时器时钟使捕获同步, 下图描述了这个过程: CCI Capture SelTACCRx CCIFG 如果一个第二次捕获动作在第一次捕获的值被读取之前发生, 捕获比较寄存器就会产生 通过软件初始化捕获 捕获可以由软件初始化。CM可以配置捕获的触发沿。CCIS1=1和CCISO可以捕获电 压在Vcc和GND之间的信号。 比较模块:(以下内容可以配合定时器内部结构图来学习分

15、析) CAP=0时选择比较模式。比较模式用于选择PWM输出信号或在特定的时间间隔中断。 当TAR计数到TACCRx的值时: 中断标志CCIFG置位 内部信号 EQUx=1 EQUx根据输出模式来影响输出信号 输入信号CCI锁存到SCCI 每个捕获比较模块(分别用各自的TA0CCRX来配置)包含一个输出单元。输出单元用 于产生如PWM这样的信号。每个输出单元可以根据EQU0和EQUx产生8中模式的信号。 输出模式: 输出模式由OUTMOD来确定,如下表。对于所有模式来说(模式0除外),OUTx信 号随着定时器时钟的上升沿而改变。输出模式2、3、6、7对输出单元0无效,因为在这些 模式下,EQUx

16、=EQU0 : OUTMODx 模式 说明 二进制 十进制 000 0 输出 输出信号 OUTx由OUTx位定义。当OUTx位更新时, OUTx信号立刻更新 001 1 置位 当计时器计数到TA0CCRx值时,输出置位,并保持置 位直到定时器复位或选择了另一个输出模式 010 2 翻转/复位 当定时器计数到TA0CCRx值时,输出翻转。当定时器 计数到TA0CCR0值时,输出复位 011 3 置位/复位 当定时器计数到TA0CCRx值时,输出置位。当定时器 计数到TA0CCR0值时,输出复位 100 4 翻转 当定时器计数到TA0CCRx值时,输出翻转。输出信号 的周期是定时器的2倍 101

17、5 复位 当定时器计数到TA0CCRx值时,输出复位,并保持复 位直到选择了另一个输出模式 110 6 翻转/置位 当定时器计数到TA0CCRx值时,输出翻转。当定时器 计数到TA0CCR0值时,输出置位 111 7 复位/置位 当定时器计数到TA0CCRx值时,输出复位。当定时器 计数到TA0CCR0值时,输出置位 看了上面的表,是不是有些云里雾里的赶脚?没事, 下面,我们将以定时器计数的三种 模式(这里因为停止模式没有意义所以不举例) 下看一下OUTMOD不同而导致输出不同的 输出波形(以使用 TA0CCR0和TA0CCR1为例): 1、增模式下: 大家可以看到,上面的时序图中有两种线,一

18、种虚线,一种实线,分别来表示输出在不 同初始状态下的时序变化。有些时序前面有虚线后面没有了说明后面的实线和虚线重合了。 下面图也都是类似的,后面就不再赘述。 2、连续模式下: 3、增减模式下: 六、Timer的中断 终于要说到中断了, TAOCCRO CCIFG 所有其他CCIFG 如果你要在不同输出模式之间进行切换,OUTMODx的第一个位必须在过渡时保持置 位(切换至模式0除外),否则会由于或非门解码输出模式 0而导致出现脉冲干扰。输出模 式切换之间的安全切换的方法之一是用输出模式7作为过渡状态。 16位TimerOA有两个中断向量: 的TACCRO中断向量 和TAIFG的TAIV中断向量

19、 在捕获模式下,当一个定时器的值捕获到相应的 TACCRx寄存器时,CCIFG标志置位。 在比较模式下,如果TAR计数到相应的TACCRx值时,CCIFG标志置位。软件可以清除或 置位任何一个 CCIFG标志。当相应的CCIE和GIE置位时,CCIFG标志就会产生一个中断。 TACCR(中 断: 标志自动复位。 TACCR0 CCIF衍志拥有定时器 A的最高中断优先级,并有一个专用的中断向量,如图 所示。当进入 TACCR0中断后,TACCR0 CCIFG Capture EQUO 一 CAP CCIE IRQ, Interrupt Service Request* Timer Clock R

20、eset POR IIRACC Interrupt RequestAccepte TAIV,中断向量发生器: TACCR的CCIFG、TACCR2的CCIFG和TAIFG 标志共用一个中断向量。中断向量寄 存器TAIV用于确定他们中的那个要求响应中断。最高优先级的中断在 TAIV寄存器中产生 一个数字,这个数字是规定的数字, 可以在程序中识别并自动进入相应的子程序。定时器A 中断不会影响TAIV的值。对TAIV的读写会自动复位最高优先级的挂起中断标志。如果另 一个中断标志置位,该中断将在结束原先的中断响应后立即发生。例如,当中断服务子程序 访问TAIV 时,如果 TACCR1和TACCR2的C

21、CIFG标志置位,TACCR1的CCIFG自动复 位。在中断服务子程序的 RETI命令执行后,TACCR2的CCIFG标志会产生另一次中断。 在实际使用中,如果是TAIV中断中断向量,我们需要在中断服务函数中用选择分支语 句对中断进行分别处理。下表表示了TAIV的详细中断源: TAIV 值 中断源 中断标志 中断优先级 0 x00 无中断 - 0 x02 捕获/比较1 TACCR1 CCIFG 最高 0 x04 捕获/比较2 TACCR2 CCIFG 0 x06 - - 0 x08 - - 0 x0A 定时器溢出 TAIFG 0 x0C - - 0 x0E - - 最低 七、编程实例 经过上面

22、的理论学习,我们基本上掌握了 TimerA的所有的知识点,现在我们开始在IAR 中进行实际编程。 1、编写一个最基本的定时器定时溢出中断的程序: 这是我们写的第一个定时器相关的程序,我们需要让定时器隔一段时间就产生一次溢出 中断,这和我们学习 51单片机时的定时器工作方式差不多。我们假设500ms定时一次,同 时让P1 口的电平翻转一次(也就是1秒为周期)。 让我们配置一下 TA0CTL寄存器。首先分析一下应该让定时器工作在什么模式下。我 们已经知道定时器计数模式可以是增模式、连续模式、增减模式。这里,我们可以使用增模 我们这里可以 DCO的时钟 我们还可 式,因为在增模式下,我们可以通过控制

23、 TA0CCR0的值来直接控制我们定时器的定时时间。 所以我们配置 MC=1。然后我们选择一下定时器的时钟源,由TASSEL决定。 直接使用SMCLK,即TASSEL=2。SMCLK由DCO产生,所以我们还要配置 频率。当然,配置时钟的问题我们已经在上一篇中详细介绍了,这里就不再赘述。 ID控制。我们可以进行 8分频即ID=3。我们这里用到 以对输出的时钟信号进行分频,由 Timer0A的溢出归零中断,所以需要开启TA0IFG中断,则使TAIE=1。另外我们要让 TACLR=1,这样可以在配置完成定时器时同时将Timer0A复位,TAR清零。 然后我们配置TA0CCR0寄存器,通过控制它来控制

24、定时时长。定时器定时时长为 TA0CCR0个定时器A的时钟周期,由此我们可以计算: TA0CCR0=500m5 ( 1 -( 1MHz - 8) =62500=0 xF424 另外我们还要开启总中断: _en able_i nterru pt(); /注意前面是两个下划线 网上对开启总中断往往使用的是: _eint(); MSP430单片机在IAR集成开发环境中书写中断的方法: 【中断向量】 【中断服务函数名】(void) 但其实_EINT()调用了 _enable_interrupt(),由于我们所包含的头文件为“ io430.h”,它 会根据编译器自动包含 “io430g2553.h”这个

25、头文件,而在这个文件里面没有对 _EINT()进行 定义,所以不能使用_EINT()。如果想要使用_EINT()可以将“ io430.h”改为“ msp430g2553.h”。 然后我们学习一下 #p ragma vector = _interrupt void TA0CTL / 清空 TAIFG 中断标志 /在这里书写中断服务函数代码 上面的函数体是一个模板,【中断向量】表示中断服务函数的中断来源,可以参照数据 手册或者 io430g2553.h 头文件中“ In terru pt Vectors (offset from OxFFEO) */ (2 * 2u) /* 0 xFFE4 Por

26、t 1 */ (3 * 2u) /* 0 xFFE6 Port 2 */ (5 * 2u) /* 0 xFFEA ADC10 */ #defi ne USCIAB0TX_VECTOR (6 * 2u) /* 0 xFFEC USCI A0/B0 Tran smit */ Interrupt Vectors (offset from 0 xFFE0) ” 的定义如下: #defi ne P ORT1_VECTOR #defi ne P ORT2_VECTOR #define ADC10 VECTOR /* #defi ne USCIABORX_VECTOR #defi ne TIMER0_A1_

27、VECTOR #defi ne TIMER0_A0_VECTOR #define WDT VECTOR (7 * 2u) /* OxFFEE USCI AO/BO Receive */ (8 * 2u) /* OxFFFO TimerO)A CC1, TAO */ (9 * 2u) /* OxFFF2 TimerO_A CCO */ _(1O * 2u) /* OxFFF4 Watchdog Timer */ #define COMP ARATORA_VECTOR (11 * 2u) /* OxFFF6 Comp arator A */ #define TIMER1_A1_VECTOR (12

28、 * 2u) /* OxFFF8 Timer1_A CC1-4, TA1 */ #define TIMER1_AO_VECTOR (13 * 2u) /* OxFFFA Timer1_A CCO */ #define NMI_VECTOR (14 * 2u) /* OxFFFC No n-maskable */ #define TIMERO_A1_VECTOR #define TIMERO_AO_VECTOR #define TIMER1_A1_VECTOR #define TIMER1_AO_VECTOR #define RESET_VECTOR (15 * 2u) /* OxFFFE Re

29、set Highest Priority */ 上面定义了 MSP43OG2553的所有中断向量,有 AD中断、看门狗中断、定时器中断、 复位中断等等等等。我们这里看到有几条是关于定时器的: (8 * 2u) /* OxFFFO TimerO)A CC1, TAO */ (9 * 2u) /* OxFFF2 TimerO_A CCO */ (12 * 2u) /* OxFFF8 Timer1_A CC1-4, TA1 */ (13 * 2u) /* OxFFFA Timer1_A CCO */ 由上面我们可以知道 2条是TimerO的,2条是Timer1的,分别有AO和A1。其中AO 是TAC

30、CRO的中断,A1含有CCR1、CCR2和TAIFG中断。这里我们使用 TAIFG中断, 所以我们的中断向量为 TIMERO_A1_VECTOR 细心读者会发现在中断服务函数中有这样一句: TAOCTL 这是为了将TAOCTL的TAIFG这一位清零。因为当 TAIFG中断标志不会自动清零, 所以我们需要加上这一句防止中断标志一直处于置位状态而导致中断服务函数死循环。 好了,由此我们可以写出一下的全部代码: *代码开女始 * *以下代码请重新排版、替换相关符号后再复制到IAR编译,或者直接手动输入IAR* #inelude io430.h #p ragma vector = TIMERO_A1_

31、VECTOR _in terru pt void TimerO_A1_ISR(void) TA0CTL P1OUT = P 1OUT; void mai n(void) /停用看门狗 WDTCTL = WDTPW + WDTHOLD; /配置IO 口 P1DIR = OxFF; P1OUT = 0 xFF; /配置时钟 DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; /配置定时器 TA0CCR0 = 0XF424; TA0CTL = TASSEL_2 + ID_3 + MC_1 + TACLR + TAIE; / 分频、增模式、允许 TAIFG 选择S

32、MCLK时钟、8 _en able_i nterrup t(); / while(1) * 中断 开启总中断 代码纟结* 2、把时钟源改为外部 32768Hz的时钟: 上次我们没有解释为啥外接晶振为32768Hz,如果大家没有百度,这里Cloud给大家解 释一下,因为32768正好为2的15次方,所以可以通过很简单的逻辑电路就能够产生精确 的1秒。现在我们利用外部这个慢速的32.768KHZ的晶振作为时钟源,并且产生0.5S的时 钟周期。 让我们来分析一下,我们需要产生0.5S的时长。我们先假设不分频,那么一次计数就 是1/32768秒,现在需要0.5秒,两者相除,得出定时器周期应该是1638

33、2个计数。我们再 看看定时器是不是能够计到这个数,由于定时器是16位的,正好2的16次方,大于16382, 所以可以用这套方案,同时我们可以换算一下16382=0 x3FFE。 然后我们要考虑时钟源的问题。定时器的时钟源可以是SMCLK、ACLK等。我们可以 利用ACLK来选择外部晶振的时钟输入,因为时钟那一篇我们了解到ACLK时钟默认就是 外部晶振驱动的。 我们只要把原来的程序拷贝过来然后修改一下时钟源和分 频系数,再修改一下 TA0CCR0的值就好了。代码修改后如下: * OK我们现在已经有思路了, 代码开女始 * *以下代码请重新排版、替换相关符号后再复制到IAR编译,或者直接手动输入I

34、AR* #in clude io430.h #p ragma vector = TIMERO_A1_VECTOR _in terru pt void TimerO_A1_ISR(void) TA0CTL P1OUT = P 1OUT; void main (void) /停用看门狗 WDTCTL = WDT PW + WDTHOLD; /配置10 口 P1DIR = OxFF; P10UT = 0 xFF; /配置时钟 DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; /配置定时器 TA0CCR0 = 0 x3FFE; TA0CTL = TASSEL_1

35、 + ID_0 + MC_1 + TACLR + TAIE; / 频、增模式、允许 TAIFG中断 选择ACLK时钟、1分 _en able jn terru pt(); / while(1) * 开启总中断 代码纟结* 3、利用定时器 A的比较输出功能来实现 LED灯的PWM亮度控制: 前面我们已经了解了定时器A有8中比较输出模式,禾U用它可以输出不同的矩形波至 IO 口,我们知道想要控制 LED的亮度可以通过 PWM输出的形式来实现, 而定时器A的比 较输出模式正好是为输出PWM波而设计的。现在我们只要稍微灵活应用,让定时器输出 PWM波至我们的IO 口,就可以控制IO 口上连接的LED的

36、亮度了。 首先,我们要找到我们想要控制的LED。在LaunchPad的板子上有两个 LED是可以通 过IO 口控制的,分别连接着 P1.0和P1.6。现在,让我们看看这两个IO能否支持定时器 A 的比较输出,我们找来数据手册,查看得知P1.0可以用来作为TACLK的输入、ACLK信 号的输出、ADC10的模拟输入、比较器 A的CA0输入以及通用数字IO 口,但不支持定时 器A的比较输出,所以不行。再看看P1.6,我们发现它可以作为 好的,就决定是它了。我们通过控制 P1SEL.6和P1DIR.1都为 式下。 现在我们知道 P1.6可以用来输出Timer0A的Out1,那么 TimerOA的比较Out1输出。 1使P1.6工作在Out1输出模 0ut1是什么?通过查看定时 器A的结构图(参看本篇第一张图),我们看到右下角有一个 Out2 Signal,说明这是TA0CCR2 的比较输出信号。于是我们明白, 现在我们选择一下定时器的三种计数模式, 单,而且还可以通过控制 TA0CCR0来控制 然后我们要选择合适的比较输出方式了: Out1也就是TA0CCR1的比较输出信号了。 这里为了简单我们直接使用增模式, PWM波的频率。 0模式显然不行,因为我们想要自动输出 控制简 PWM 波,而0模式下需要手动去控制 OUT才能输出;1模式也不行,因为只要输出过一次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论