《MSP430 TIMER_A》

合集下载

MSP430 定时器A的使用

MSP430 定时器A的使用

第四讲定时器A的使用MSP430F413芯片中含有TimerA3模块,如图1-2所示。

其常用的外引线有三条:TACLK、TA1和TA2。

TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。

TA1:定时器_A的第一通道输入、输出引脚(51脚)。

捕获方式:CCI1A输入;比较方式:OUT1输出。

TA2:定时器_A的第二通道输入、输出引脚(45脚)。

捕获方式:CCI2A输入;比较方式:OUT2输出。

1.定时器A功能及结构定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。

图4-1 定时器A结构图定时器A具有多种功能,其特性如下:(1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。

(2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。

定时器A功能模块主要包括:(1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。

(2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力和速度。

不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。

(3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。

2.定时器工作模式(1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。

当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。

【MSP430入门例程】:Timer A

【MSP430入门例程】:Timer A

MSP430F1系列定时器A结构图[1]TimerA模块结构组成在MSP430F1XX-TimerA的结构中,分别由TA基础模块、CCR0、CCR1、CCR2子模块。

TA基础模块:[1]TA基础子模块主要完成定时器时钟源的输入(时钟源的选择、分频)。

[2]TA定时器计数。

[3]定时器的工作模式设置。

CCR0、CCR1、CCR2子模块:CCRx全称为Capture Compare Register-捕获比较寄存器,这些子模块有着捕获和比较的功能。

捕获、比较信号的触发源可以从芯片的外部引脚、CPU的外围模块输入来。

同时CCRx子模块也有其输出信号OUT.x ,此OUT.x可以输出到芯片的外部引脚、或输入到CPU的外围模块中。

CCRx与TAR(Timer A Register - 简称:TAR )结合使可以实现特定的的功能。

常用TimerA可以实现功能:PWM信号输出功能:通过设置TA的工作模式,结合CCR0、CCR1或CCR2计数。

直从CCR0、CCR1或CCR2中子模块的OUT.x端输出。

Slope AD转换功能:利用定时器A与比较器A结合设计成斜边数模转换器。

实现软USART功能:利用CCR0子模块中的捕获输入功能,结合TAR实现通用串行异步通讯功能(USART)。

ADC12模块的采样信号:利用定时器的TAR或CCR0实现OUT.x输出得到ADC12模块所需要的采样触发信号。

其它应用...。

[2]TimerA 模块工作模式[TA工作模式]TA定时器的工作模式有4种,这4种模式由TACTL寄存器的MC1、MC0位控制:模式 MC1 MC0 功能说明停止0 0 TA为停止(上电状态)增计数0 1 TAR增计数至CCR0,然后回到0。

连续计数 1 0 TAR连续计数至FFFFH,然后回到0。

增/减计数 1 1 TAR增计数至CCR0,然后减计数至0。

[时钟输入]定时器A时钟源有4种选择,分别为外部时钟TACLK、辅助时钟ACLK、子系统时钟SMCLK及INCLK。

[MSP430学习笔记] MSP430单片机RTC操作-TimeA实现的实时时钟

[MSP430学习笔记] MSP430单片机RTC操作-TimeA实现的实时时钟
一、学习要点:MSP430单片机中断编程;RTC(实时时钟)的实现;MSP430单片机低功耗控制(休眠)
二、程序执行效果:
观察MSP430F135核心实验板上的LED灯,每秒闪烁一次,实现RTC。如下图所示效果:
三、原理讲解:
详细介绍请看MSP430功能模块详解系列之——TimerA。
四、操作步骤:
P1DIR |= 0x20;// P1.5为输出口
TACTL |= MC0;// Timer_a为增量计数模式
_EINT();//开中断
for (;;)
{
_BIS_SR(LPM3_bits);//进入LPM3
}
}
#pragmavector=TIMERA0_VECTOR//Timer_A中断函数
__interruptvoidTimerA_ISR()
#include<msp430x13x.h>
voidmain(void)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗
TACTL = TASSEL0 + TACLR;// ACLK,清TAR
CCTL0 = CCIE;// CCR0中断使能
CCR0 = 16384;//设定中断间隔,32768Hz晶振,0.5s
//硬件连接:
//
//调试器:MSP430FET全系列JTAG仿真器
//调试软件:IAR Embedded Workbench Version:3.41A编译
//******************************************************************************
{
P1OUT ^= 0x20;//通过异或取反P1.5

第5章 MSP430单片机片内外设及其应用[3]_timer_A

第5章 MSP430单片机片内外设及其应用[3]_timer_A
31
3. 定时器模式

定时器A共有4种工作模式:停止模式、增计数模式、连续计数模式 和增/减计数模式,由控制寄存器TACTL中MC0和MC1两位决定。
32
(1) 停止模式

当MC1=0,MC0=0时,定时器工作在停 止模式。定时器暂停,但并不复位,所有 寄存器现行的内容在停止模式结束后都可 用。当定时器暂停后重新计数时,计数器 将从暂停时的值开始,以暂停前的计数模 式继续计数。如果不需要这样,则可通过 TACTL中的CLR控制位来清除定时器的方 向记忆特性。
21


CCIFGx 捕获/比较中断标志。捕获模式时, CCIFGx置位表示在寄存器CCRx中捕获了定时器 TAR的值;比较模式时,CCIFGx置位表示定时 器TAR的值等于寄存器CCRx中的值。 而在3个中断标志中,CCIFG0在被中断服务时能 自动复位;CCIFG1和CCIFG2在读中断向量字 TAIV后,自动复位。如果不访问TAIV寄存器, 须用户软件清零;如果相应的中断允许位不允许 中断,则不会产生中断请求,但中断标志位仍存 在(CCIFGx=1),这时须用户软件清除。
20

CCIEx 中断允许位。该位决定相应的捕获/比较模块是否允许中断 。

0 禁止; 1 允许。


CCIx 捕获/比较模块的输入信号。 捕获模式:由CCIS0和CCIS1选择的输入信号可通过该位读出。 比较模式:CCIx复位。 OUT 输出信号。如果OUTMODx选择输出模式0,则该位即为输出 到OUTx的信号。 COV 捕获溢出标志。在比较模式下,捕获信号复位,捕获事件不会 使COV置位。在捕获模式下,如果捕获寄存器的值被读出前再次发 生捕获事件,则COV置位。程序可通过检测COV来判断原值读出前 是否发生捕获事件。COV在读捕获值时不会使溢出标志复位,须用 软件复位。

MSP430 定时器Timer_A

MSP430 定时器Timer_A

电子设计大赛准备之msp430单片机定时器Timer_ATimer_A定时器:注:MSP430有两个16位定时器Timer_A和Timer_B.二者基本相同。

主要有TACTL,TAR,CCTL0,CCR0,CCTL1,CCR1,CCTL2,CCR2,TAIV几个寄存器。

其中最主要的是TACTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止,中断的申请等。

定时器A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比较/捕获寄存器1、比较/捕获寄存器2.计数器是主体,它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢出中断,也就是当计数由0xffff到0时会产生一个中断。

那怎么实现定时功能呢?这就要靠三个比较/捕获寄存器了以后用CCRx表示。

CCR0比较特殊,通过他可以改变计数器的最大计数值,也就是当计数器计数到CCR0的值时自动会将计数器清零。

但这需要设置相应的工作模式,模式列表如下:0——停止模式,用于定时器的暂停1——增计数模式,计数器计数到CCR0,再清零计数2——连续计数模式,计数器增计数到0xffff,再清零计数3——增/减计数模式,增计数到CCR0,再减计数到0当计数器计数到CCR0时,CCR0单元会产生一个中断。

同样当计数器计数到CCR1和CCR2时,两个单元也都会个产生一个中断。

这样我们可以通过定时器A得到三个定时时间了。

看程序中的定时器初始化模块。

CCTLx是相应比较/捕获寄存器的控制寄存器。

它可对比较/捕获寄存器进行设置,在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx 默认的是比较功能,所以一般也就只用到CCIE这个控制字,就是开启相应比较器的中断。

CCRx就是相应比较器的值。

下面介绍几个Timer_A的重要寄存器:TACTL寄存器:15~109876543210未用SSEL1 SSEL0 ID1 ID0 MC1 MC0 未用CLR TAIE TALFGSSEL_1 SSEL_0 是时钟源的选择0——TACLK,使用外部引脚信号作为输入 1——ACLK,辅助时钟2——SMCLK,子系统主时钟 3——INCLK,外部输入时钟对TACTL进行模式设置的同时也开启了定时器,要停止只需把MC_0赋值给TACTL就可以。

MSP430 定时器A

MSP430 定时器A

上次Cloud和大家一起学习完了MSP430的时钟配置,这一篇,我们来学习MSP430单片机的TimerA (定时/计数器A)。

MSP430单片机的TimerA具有非常强大的功能,相关的寄存器配置也相当复杂,Cloud花了好久才逐步理清学习思路,尤其是学习数据手册的相关描述。

在这里Cloud提醒大家,虽然现在网上有中文汉化版的数据手册,但Cloud阅读英文原版后对比发现还是英文原版对器件特性描述得更加清楚,而中文汉化版的省略掉了一些内容。

好吧,扯远了。

下面进入正题:一、MSP430的Timer结构首先让我们通过官方描述来初步了解一下MSP430单片机的Timer资源:定时器A是一个16位的定时/计数器。

定时器A支持多重捕获/比较,PWM输出和内部定时。

定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。

定时器A的特性包括:??·四种运行模式的异步16位定时/计数器??·可选择配置的时钟源??·可配置的PWM输出??·异步输入和输出锁存??·对所有TA中断快速响应的中断向量寄存器MSP430G2553单片机共有两个TimerA,分别是Timer0A和Timer1A。

OK,零零总总说了这么多,大家一定带有很多的疑惑,比如什么叫“捕获/比较”等,这里Cloud 先不作解释,会用才是王道。

我们呢先找来定时器A的结构图给大家初步了解一下定时器A的结构:我们先从上面部分开始解释。

中间红色的是一个16位的TimerA,TAR,这其实就是MSP430单片机内部的一个定时计数器了,类似于51中的TH0和TL0的合体。

既然可以拿来计时,那么肯定可以有时钟信号输入,让我们最左边黄色的框,是一个选择器,由上面的TASSEL来选择TACLK、ACLK、SMCLK、INCLK的其中一种时钟。

上次我们已经学习过ACLK和SMCLK,也知道如何配置这两个时钟了(这也是为什么先学习时钟的原因),另外两个是外部时钟源,其中TACLK可以由P1.0输入。

MSP430_定时器A的使用(含OUTMOD模式详解及运用)

MSP430_定时器A的使用(含OUTMOD模式详解及运用)

第四讲定时器A的使用MSP430F413芯片中含有TimerA3模块,如图1-2所示。

其常用的外引线有三条:TACLK、TA1和TA2。

TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。

TA1:定时器_A的第一通道输入、输出引脚(51脚)。

捕获方式:CCI1A输入;比较方式:OUT1输出。

TA2:定时器_A的第二通道输入、输出引脚(45脚)。

捕获方式:CCI2A输入;比较方式:OUT2输出。

1.定时器A功能及结构定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。

图4-1 定时器A结构图定时器A具有多种功能,其特性如下:(1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。

(2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。

定时器A功能模块主要包括:(1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。

(2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力和速度。

不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。

(3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。

2.定时器工作模式(1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。

当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。

个人学习总结:MSP430_TimerA

个人学习总结:MSP430_TimerA

【8种输出模式】 OUTMOD_0:立即,直接输出OUT位 OUTMOD_1:CCRx置位;CCR0保持(all) OUTMOD_2:CCRx翻转;CCR0复位(all) OUTMOD_3:CCRx置位;CCR0复位 OUTMOD_4:CCRx翻转;CCR0保持(all) OUTMOD_5:CCRx复位;CCR0保持(all) OUTMOD_6:CCRx翻转;CCR0置位 OUTMOD_7:CCRx复位;CCR0置位 输出单元只工作于比较模式,捕获时不会产生输出。 输出单元0不能输出2,3,6,7模式 输出是自动而独立的,和中断使能、中断标志都无关。 产生TA中断的原则:只要计数归零就产生TA中断
SCS
捕获与 定时器同步
SCCI
锁定的 捕获信号
未使用
CAP
捕获/比较 选择位
捕获方式
捕获信号输入源
7.rw-(0) OUTMOD2
6.rw-(0) OUTMOD1 输出模式选择
5.rw-0 OUTMOD0
4.rw-(0)
3.rw-(0)
2.rw-(0)
1.rw-(0)
0.rw-(0)
CCIE
中断使能
ID1
ID0
MC1
MC0
未使用
TACLR
TAIE
TAIFG
选择分频因子
选择计数方式
TAR复位清零 TA中断使能 TA中断标志
【计数时钟源】 TASSEL_0:TACLK外部引脚P1.0/TACLK(12脚)信号 TASSEL_1:ACLK内部辅助时钟 TASSEL_2:SMCLK内部子系统时钟 TASSEL_3:INCLK外部P2.1/TAINCLK(21脚)时钟 【TIMER_A的再次分频】 ID_0:1分频 ID_1:2分频 ID_2:4分频 ID_3:8分频 【计数模式】 MC_0:暂停计数,计数停止,但内容不清零,将继续计数。 MC_1:0~CCR0增计数,到达CCR0后归零,重新计数。先CCR0中断,后TA中断。 MC_2:0~FFFFH连续计数,到达TAR最大值后归零,重新计数。归零时产生TA中断。 MC_3:0~CCR0~0增减计数,到达CCR0后开始减1(产生CCR0中断),减至0时重新 计数,并产生TA中断。 【TACLR置位】 1:TAR清零 2:ID1,ID0复位 3:计数方向为增方向( 比如正由CCR0~0减计数,TACLR后会变为从0~CCR0方向增计数) 产生TA中断的原则: 只要计数归零就产生TA中断
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430单片机TIMER_A 在产品设计中的应用梁 源杭州鹏远电子有限公司摘要:16-bit MCU MSP430 of Texas Instruments produced since 1996, its powerful function and well performance have been known by all of people. Its Flash MCU is grow fast at present and its memory and other resource have characteristics different from other MCU. TIMER_A is an important module in MSP430 Flash. This article combines some detailed examples to explain TIMER_A application in temperature measure, PWM generates, serial communcation. It has some research value.关键字TIMER_A, Compare, Capture美国德州仪器的MSP430十六位单片机产生于1996自该单片机问世以来以其强大的功能和优良的性能逐步被中国人所认识已经打入中国市场但由于其产生的较晚还有许多开发人员不知道或不了解其独到功能虽然许多单片机设计工程师对MOTOROLA MICROCHIPINTEL 等单片机已比较熟悉但当MSP430单片机以全新的姿态出现后以老的办法对MSP430单片机进行设计是对这种单片机资源的浪费一概述目前美国德州仪器所出的所有FLASH 单片机都含有TIMER_A 它是程序设计的核心它由一个十六位定时器和多路比较/捕获通道组成每一个比较/捕获通道都可以以十六位定时器的定时功能为核心进行单独的控制具体可参照MSP430X1XX Family User’s Guide 一书同其它各类型单片机相比MSP430单片机的定时器A 有以下特点1 输入时钟可以有多种选择可是是慢时钟快时钟以及外部时钟2虽然没有自动重载时间常数功能但产生的定时脉冲或PWM信号没有软件带来的误差3不仅能捕获外部时间发生的时间还可锁定外部时间发生时的高低电平给我们的使用带来了很大的方便4有适用于串行通讯的功能特征二在产品设计中的应用TIMER_A 有4种工作方式停止上升连续上升下降方式其中上升和上升下降方式需要和比较/捕获通道CCR0共同使用我们可以根据实际的需要灵活选用当多个捕获/比较通道都以16位的定时时间作为时标时TIMER_A 定时器采用连续方式的比较多这里以MSP430F1121单片机为例阐述几个应用的实例1.测量阻性传感器图1在采用廉价的单片机进行产品设计时用RC充放电原理测量已是很平常的事然而由于单片机比较廉价往往分辨率很低MSP430的FLASH型单片机中采用16位的TIMER_A定时器再加上内部的比较器至少能达到10位的AD测量精度传统的办法采用充电的办法测量为增加分别率我们取内部的0.25Vcc作为阈值电压采用放电的办法可分别测出参考电阻Rref的放电时间Tref,传感器电阻Rsensor的放电时间Tsensor.则有下面的公式Rsensor Tsensor Rref / Tref下面的程序定时器A的输入频率采用约1MHz左右的DCO由于电阻大小和放电时间成正比对测得的时间进行比较就可以确定温度传感器的范围如图1所示当温度电阻大于参考电阻时P1.0输出低电平反之P1.0输出高电平如果我们温度传感器采用负温度系数的103A T参考电阻取10K 那末当温度大于25度时LED亮小于25度时LED灭如果我们要测量具体的温度数值可以在下面的程序基础上增加温度传感器电阻值计算和查表程序就可以了#include "msp430x11x1.h"Ref equ001h; P2.0 接参考电阻Sensor equ002h; P2.1接温度传感器ORG0F000h;程序开始RESET mov#300h,SP;初始化堆栈指针Init_Sys mov#WDTPW+WDTHOLD,&WDTCTL;停看门狗SetupP1bic.b#001h,&P1OUT; P1.0输出低电平bis.b#001h,&P1DIRSetupP2bic.b#Sensor+Ref,&P2OUT; 传感器参考电阻输出低电平bis.b#Sensor+Ref,&P2DIRSetupCA mov.b#CARSEL+CAREF0+CAON,&CACTL1;比较器的参考电压0.25Vcc mov.b#P2CA0,&CACTL2; P2.3比较器SetupTA mov#TASSEL1+TACLR,&TACTL; SMCLK作为TAR输入eintMainloop mov.b#Sensor,R14; R14为放电引脚call#Measuremov R14,R15; R15保存传感器放电时间mov.b#Ref,R14; R14为放电引脚call#Measurecmp R14,R15; R14保存参考电阻的放电时间jlo ON; 比较是否温度大于25度OFF bic.b#001h,&P1OUT;小于等于25度,P1.0输出低jmp MainloopON bis.b#001h,&P1OUT;大于25度P1.0输出高jmp MainloopCharge bis#MC1,&TACTL; TIMER_A工作在连续方式bis.b#Ref,&P2OUT;P2.0(Ref)输出高电平bis.b#Ref,&P2DIRmov#TAR,&CCR1;充电5msadd.#5000,&CCR1mov#CCIE,&CCTL1;允许中断bis#LPM0,SR;等待中断唤醒bic.b#Ref,&P2DIR;P2.0( Ref)进入高阻态bic.b#Ref,&P2OUTDischarge mov #CM1+CCIS0+CAP+CCIE,&CCTL1;TIMER_A 工作于捕获方式push &TAR ;保存现行的定时器数值bis.b R14,&P2DIR ;开始放电bis #LPM0,SR ;进入睡眠等待中断mov &CCR1,R14;计算放电时间sub @SP+,R14bic.b #Sensor+Ref,&P2DIR ;进入高阻态clr &CCTL1;禁止捕获bic #MC1,&TACTL ;停定时器retTAX_ISR add &TAIV ,PC ;中断服务reti; CCR0没有时钟源CCR1_ISR bic#LPM0,0(SP);返回时退出低功耗retiORG 0FFFEh ;中断向量地址DW RESET ORG 0FFF0h ;Timer_A 中断向量地址DW TAX_ISR END2.用作PWM 控制利用TIMER_A 做成的PWM 能用软件任意改变占空比和周期当不需要修改占空比和时间时不需要利用中断维持PWM 输出TIMER_A 能自动输出PWM.这里TIMER_A 工作在上升方式捕获/比较通道CCR0控制PWM 周期捕获/比较通道CCR1控制PWM 的占空比CCR0和CCR1均工作在比较模式P2.0接占空比寄存减按键P2.1接占空比寄存加按键(具体见图2)程序如下#include "msp430x11x1.h"#define Duty_cycle R6;PWM 占空比控制寄存器PWM_OUT equ 004h ;P1.2口/ TA1输出PWM Period equ 0ffh ;周期寄存器RSEG CODE ;定义程序代码段RESET mov #300h,SP ;定义堆栈指针call #Init_Sys ;初始化程序Mainloopbit.b #BIT0,&P2IN ;核对P2.0减按键是否按下jz Next1bit.b #BIT1,&P2IN ;核对P2.1加按键是否按下jz Next2jmpMainloop ;循环等待键按下Next1cmp #0,Duty_cycle ;核对Duty_cycle 是否为0jz Mainloop ;如果为0,则循环等待dec Duty_cycle ;PWM 占空比减一个步长jmpSendPWM Next2cmp #0ffh,Duty_cycle ;核对步长是否达到最大值jzMainloop;如果为最大值则不加一个步长图2incDuty_cycle ;PWM 占空比增加一个步长SendPWMmov Duty_cycle,&CCR1;送PWM 输出call #Delay ;键盘防抖动延时jmpMainloop;主程序继续循环Init_Sys ;模块和寄存器初始化子程序StopWDT mov #WDTPW+WDTHOLD,&WDTCTL ;停看门狗SetupBC mov.b #XTOFF+RSEL2+RSEL1+RSEL0,&BCSCTL1mov.b #0ffh,&DCOCTL ;DCO 选用最高频率作为主频.SetupP1mov.b #0,&P1OUT ;P1OUT 置0bis.b #PWM_OUT,&P1SEL ;P1.2/TA1做PWM 输出bis.b#0ffh,P1DIR SetupP2mov.b #03ch,&P2DIR ;P2.0,P2.1按键输入mov #Period,&CCR0;PWM 周期mov #0,&CCR1;PWM 输出初始值mov#OUTMOD_7,&CCTL1; TA1输出方式7,复位/置位SetupTAmov #TASSEL1+MC0,&TACTL ;TimerA 升方式,SMCLK 为 TACLKmov #0,Duty_cycle ;复位占空比寄存器ret;子程序返回Delay push #03FFFh ;软件延时L1dec 0(SP)jnz L1incd SPret COMMON INTVEC ;中断向量段ORGRESET_VECTOR ;中断向量起始地址RESET_VECDW RESET;复位入口END3.用作串行通讯如图3所示晶振采用32768Hz,用TIMER_A 产生2400波特率并收发数据支持232通讯P2.2作为接收数据口P1.1为发送数据口数据格式采用1个起始位8个数据位1个停止位没有奇偶校验位利用定时器A 具有在达到比较时间后可对端口置位输出方式1和复位的特性输出方式5具体程序如下#include"msp430x11x1.h"RXD equ 004h ;P2.2作为数据接收口RXD TXD equ 002h ;P1.1作为发送数据口TXD RXTXData equ 0200h ;收发数据缓冲器BitCnt equ 0202h ;位计数器Bitime_5equ 6;0.5数据位长度Bitime equ 14;位长度427us 约为2341 baud ORG 0F000h ;程序开始RESET mov.w #300h,SP ;初始化堆栈指针call #Init_Sys ;初始化系统模块Mainloopcall #RX_Ready ;准备接收1个字节数据Bis#LPM3,SR;进入低功耗,直到有接收数据图3Call#TX_Byte;将接收到的数据再发送出去Jmp Mainloop;程序不断循环Init_Sys;初始化程序StopWDT mov#WDTPW+WDTHOLD,&WDTCTL; 停止看门狗SetupTA mov#TASSEL0+MC1,&TACTL;输入ACLK,连续工作方式SetupC0mov#OUT,&CCTL0; TXD=1,发送空闲SetupP1_2bis.b#TXD,&P1SEL; P1.1/TA0 为发送TXDbis.b#TXD,&P1DIRbis.b#RXD,&P2SEL; P2.2/TA0为接收RXDeintretTX_Byte;发送一个字节数据mov&TAR,&CCR0;确定第一位的时间长度add#Bitime,&CCR0bis#0100h, &RXTXData; 数据中增加起始和停止位rla&RXTXDatamov#10,&BitCnt;8个数据位+1个起始位+1个停止位mov#OUTMOD0+CCIE,&CCTL0;输出方式1,TXD = 1,仍未发送数据TX_Wait bit#CCIE,&CCTL0;等待数据全部发送完毕Jnz TX_WaitretRX_Ready mov#08,&BitCnt;装载位计数器SetupRX mov#CCIS0+OUTMOD0+CM1+CAP+CCIE,&CCTL0 ; 下降沿捕获retTA0_ISR;CCR0数据收发中断服务程序add#Bitime,&CCR0;发送下一位数据的时间bit#CCIS0,&CCTL0;比较方式吗jnz UART_RX;捕获方式转接收程序UART_TX bic#OUTMOD2,&CCTL0;输出方式2,中断输出1rra&RXTXData;最低有效位移入Cjc TX_Test; Jump --> bit = 1TX_Space bis#OUTMOD2,&CCTL0;输出方式5,中断输出0TX_Test dec&BitCnt;所有的数据位都收发完毕jnz TX_Next;没有,准备收发下一位bic#CCIE,&CCTL0;所有的位都收发完毕关闭TIMER_A中断TX_Next retiUART_RX bit#CAP,&CCTL0;捕获方式jz RX_Bit;不是转读数据位RX_Edge bic#CAP,&CCTL0; 捕获方式转比较方式add#Bitime_5,&CCR0;1.5个数据位后为真正的数据retiRX_Bit bit#SCCI,&CCTL0;得到接收到的数据位rrc.b&RXTXData;保存接收到的数据位RX_Test dec&BitCnt;所有的位都接收到了?jnz RX_Next;没有接收下一位RX_Comp bic#CCIE,&CCTL0;接收完毕禁止CCR0中断mov#GIE,0(SP);程序返回时允许总中断RX_Next retiORG0FFFEh;复位入口地址DW RESETORG0FFF2h;Timer_A0向量地址DW TA0_ISREND三结束语MSP430单片机的TIMER_A结构复杂,功能强大,它给开发人员提供了较多的灵活的选择余地.上面仅是少数的几个例子,开发人员只要深入理解了TIMER_A的原理,就可以根据自己的产品的实际情况发现更多的应用方法参考文献1. MSP430X1XX Family User’s Guide TEXAS INSTRUMENTS.。

相关文档
最新文档