当前位置:文档之家› MSP430时钟设置及应用总结

MSP430时钟设置及应用总结

MSP430时钟设置及应用总结
MSP430时钟设置及应用总结

MSP430时钟设置及应用总结

*******************基于MSP430F1612************************** 在MSP430单片机中,一个时钟周期= MCLK晶振的倒数。如果MCLK是8MHz,则一个时钟周期为1/8us。

一个机器周期= 一个时钟周期,即430每个动作都能完成一个基本操作。

一个指令周期= 1~6个机器周期,具体根据具体指令而定。

另外,指令长度只是一个存储单位,与时间没有必然的关系。

MSP430单片机的时钟模块主要包括:

三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK

三个振荡器:低频时钟源LFXT1 、高频时钟源XT2 、数字控制RC振荡器DCO

而MSP430单片机工作所需时钟就是由这些振荡器振荡后经处理产生的。

(1)ACLK:是LFXT1CLK信号经1/2/4/8分频后得到的,主要用作低速外围的时钟

(2)MCLK:是LFXT1CLK,XT2CLK,DCOCLK的三者之一决定,由软件选择,然后经1/2/4/8分频后得到,主要用于CPU和系统

(3)SMCLK:可由LFXT1CLK和DCOCLK,或者XT2CLK与DCOCLK决定,然后经1/2/4/8分频后得到,主要用于高速外围模块

MSP430的时钟模块由DCOCTL,BCSCTL1,BCSCTL2,IE1,IFG1这五个寄存器来确定,具体的功能如下所示:

DCOCTL:控制DCO振荡器

BCSCTL1:控制XT2,LFXT1,DCO振荡,并控制ACLK的分频情况

BCSCTL2:设置三个时钟源分别选择什么振荡器

我们在程序里对寄存器的设置,也就是对三个振荡器进行设置,时钟振荡器设置好了,还要对时钟模块进行设置,也就是让三个时钟模块MCLK SMCLK ACLK选择相应的时钟振荡器以得到不同频率的时钟。

PUC信号后,系统选择内部电阻以实现频率的输出。RSELx = 4 与DCOx = 3,开始时使DCO有一个适中的频率。MCLK与SMCLK的时钟信号全部来自DCO,约为800KHz(芯片手册)。PUC信号后将LFXT1设置到LF模式(XTS=0),并且关断HF模式(XTS=1)与关断XT2振荡器。

(1)DCOCTL:DCO控制寄存器,地址为56H,初始值为60H

// 7 6 5 4 3 2 1 0

// DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0

//

// DCO0~DCO2:DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义

// MOD0~MOD4:Modulation Bit,频率的微调

//

// DCO的设置:通过设置DCOCTL和BCSCTL1,设置DCO的频率

// (1)DCO的调节:

设置DCOR比特来选择是外部电阻还是内部电阻,以确定一个基准频率

通过BCSCTL1寄存器的RSELx来进行分频,确定时钟频率;

通过DCOCTL寄存器中DCOx在标称频率基础上分段粗调,选择频率;

通过DCOCTL寄存器中MODx的值对频率进行细调,选择DCOx 与DCOx+1 之间的频率

// 注意:DCO工作在最高频率时,内部电阻正常值大约为200k,此时DCO的工作频率大约为5MHz。

例子:

//DCOCTL初始值为60H,即DCOCTL |= DCO1 + DCO2;

DCOCTL |= DCO0 + DCO1 + DCO2; // Max DCO

//MOD0~MOD4:Modulation Bit,频率的微调一般保持默认即可

//系统默认情况下,RSELx=4

(2)BCSCTL1(ACLK):Basic Clock System Control 1,地址为58H,初始值为84H // 7 6 5 4 3 2 1 0

// XT2OFF XTS DIV A1 DIV A0 XT5V RSEL2 RSEL1 RSEL0

//

// RSEL2~RSEL0:选择某个内部电阻以决定标称频率(0最低,7最高)

// XT5V:1,该比特未用,必须选择复位

// DIV A0~DIV A1:选择ACLK的分频系数。

// DIV A=0,1,2,3(DIVA_0,DIV A_1...),ACLK的分频系数分别为:1,2,4,8

// XTS:选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1) // XT2OFF:控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)

// BCSCTL1的设置:初始值为84H

//使用XT2振荡器

//控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)

BCSCTL1 &= ~XT2OFF;//清OSCOFF/XT2

do

{

IFG1 &= ~OFIFG;//清OFIFG

OSC_Delay = 255;

while(OSC_Delay --);//延时等待

}

while(IFG1 & OFIFG);//直到OFIFG=0为止

//RSEL2~RSEL0:选择某个内部电阻以决定标称频率(0最低,7最高)BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;// XT2on,max RSEL

//选择ACLK的分频系数:DIVA=0,1,2,3,ACLK的分频系数分别为:1,2,4,8

//BCSCTL1 |= DIV A_2;//对ACLK进行2分频

//(3)BCSCTL2(SMCLK,MCLK):Basic Clock System Control 2,地址为58H,初始值为00H

// 7 6 5 4 3 2 1 0

// SELM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR

//

// DCOR:Enable External Resister,0—选择内部电阻,1—选择外部电阻

// DIVS0~DIVS1:DIVS=0,1,2,3,对应SMCLK的分频因子为1,2,4,8

// SELS:选择SMCLK的时钟源,0:DCOCLK,1:XT2CLK/LFXTCLK

// DIVM0~DIVM1:选择MCLK的分频因子,DIVM=0,1,2,3,对应MCLK的分频因子为1,2,4,8

// SELM0~SELM1:选择MCLK的时钟源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK //

// BCSCTL2的设置:初始值为00H

//设置BCSCTL2,选定MCLK和SMCLK的时钟源XT2,并可以设置其分频因子

//注意:ACLK只能来源于LFXT1,可以在BCSCTL1里设置ACLK的分频,就是说ACLK最大只能为32768Hz(XIN 与XOUT间接32.768KHz晶振)

//DCOR一般设置为默认值

//设置SMCLK的分频因子,DIVS0~DIVS1:DIVS=0,1,2,3,对应SMCLK的分频因子为1,2,4,8

//BCSCTL2 = DIVS_0;

//BCSCTL2 = DIVS_1;

//BCSCTL2 = DIVS_2;

//BCSCTL2 = DIVS_3;

//设置MCLK的分频因子,DIVM0~DIVM1:DIVM=0,1,2,3,对应MCLK的分频因子为1,2,4,8

//BCSCTL2 = DIVM_0;

//BCSCTL2 = DIVM_1;

//BCSCTL2 = DIVM_2;

//BCSCTL2 = DIVM_3;

//BCSCTL2:设置三个时钟源分别选择什么振荡器

//SELM0~SELM1:选择MCLK的时钟源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK //选择MCLK 时钟源为XT2,

//BCSCTL2 = SELM_2 ;

//SELS:选择SMCLK的时钟源,0:DCOCLK,1:XT2CLK/LFXTCLK

//选择SMCLK 时钟源为XT2

//BCSCTL2 = SELS ;

//选择MCLK 与SMCLK为XT2

BCSCTL2 = SELM_2 + SELS;

//(4)IE1,Interrupt Enable Register 1

// 7 6 5 4 3 2 1 0

// OFIE

// 7~2 and 0 : These bits may be used by other modules

// OFIE:Oscillator fault interrupt enable. 0---Interrupt not enabled

// 1---Interrupt enabled

//(5)IEG1,Interrupt Flag Register 1

// 7 6 5 4 3 2 1 0

// OFIFG

// 7~2 and 0 : These bits may be used by other modules

// OFIE:Oscillator fault interrupt flag. 0 No interrupt pending

// 1 Interrupt pending

//

在PUC信号后,默认情况下由DCOCLK作MCLK与SMCLK的时钟信号,由于DCOCTL初始值为60H,根据需要可将MCLK的时钟源另外设置为LFXT1或者XT2,设置顺序如下:

//(1)清OSCOFF/XT2

//(2)清OFIFG

//(3)延时等待至少50us

//(4)再次检查OFIFG,如果仍置位,则重复(1)~(4)步,直到OFIFG=0为止//(5)设置BCSCTL2的相应SELM

MSP430 定时器TB中断应用实例

MSP430 定时器TB中断应用实例 msp430定时器中断,实现功能:利用定时器TB0的中断实现板上led灯得闪烁。 TA和TB的设置相似,需要设置的寄存器有: 1、TBR:定时计数器主体,对定时计数器进行初始值设置。 2、TBCTL:控制寄存器,对定时器的各个属性进行设置,各位如图所示,(图中是TA的控制寄存器,把A改成B就是了) TBSSELx是选择定时器时钟输入源,一般设置为2取系统时钟。 IDx是对输入时钟进行分频,0不分频,1为2分频,2为4分频,3为8分频 MCx为计数模式控制位,0为停止模式,1为增基数模式,2为连续计数模式,3为增/减计数模式 3、TBCCR0寄存器用于设置比较值,例如增加计数模式时,当TBR中的值增加到TBCCR0中的值时,产生中断。 程序代码: #include "msp430.h" #define led P1OUT

int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; TBR = 0;//设置计数器初值 TBCTL |= TBSSEL_2|0xc0|MC_1;//对寄存器TBCTL进行设置,TBSSEL_2为选择MCLK系统时钟,0xc0为8分频,MC_1为增计数模式 TBCCR0 = 0xfffd;//设置比较值,当TBR中的值增加到TBCCR0时,产生中断。TBCCTL0 &= ~CAP;//设置为比较模式 while(1) { led = 0x01; do{;} while(!(TBCCTL0 & CCIFG));//没有中断标志时进行空操作 TBCCTL0 &= 0xfffe;//对中断标志进行软件清零 led = 0x00; do{;} while(!(TBCCTL0 & CCIFG)); TBCCTL0 &= 0xfffe; } //return 0; }

MSP430时钟配置

MSP430 频率(时钟)配置 MSP430时钟: 1、在MSP430单片机中一共有四个时钟源: (1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz晶振 (2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接400kHz~16Mhz; (3)DCOCLK,数控振荡器,为内部时钟,由RC震荡回路构成,受温度和电压的影响较大;若外部不接稳定的晶振电路,直接由内部时钟工作,则会因环境变化而导致性能不稳定。(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。(要得到标准的12k则必须外接32768等晶振) 2、在MSP430单片机内部一共有三个时钟系统: (1)ACLK:辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数; (2)MCLK:主时钟,为系统内核提供时钟,它可以通过软件从四个时钟源选择或者从四个时钟源分频后选择为主时钟; (3)SMCLK:子时钟,也是可以由软件选择时钟源。 3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3 MOD0~MOD4: Modulation Bit,频率的微调。 一般不需要DCO的场合保持默认初始值就行了。 XT5V: 1. DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8; XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。 XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。 正常情况下把XT2OFF复位就可以了. DCOR: 0,选择内部电阻;1,选择外部电阻 DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8 SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK. DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8. SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK 我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。 其它: 1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1.

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)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_仍然工作于增/减计数模式,从暂停前的状态开始继续沿着下降方向开始计数。如果不需这样,则可通过TACTL中的CLR控制位来清除定时器的方向记忆特性。 (2)增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。增计数模式的计数过程如图4-2所示。通过改变CCR0值,可重置计数周期。 图4-2增计数模式示意图 (3)连续计数模式:在需要65536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到单增到0FFFFH后,又从0开始重新计数如图4-3所示。 图4-3 连续计数模式 (4)增/减计数模式

msp430F 5438时钟配置为25M时

MSP430F5438外接25M晶振。 void initClock(void) { // 初始化P7.0(#13)和P7.1(#14)为复用功能, XT1 外部时钟晶体接线 GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P7 , GPIO_PIN0 | GPIO_PIN1 ); // 启动XT1 //Initializes the XT1 crystal oscillator with no timeout //In case of failure, code hangs here. //For time-out instead of code hang use UCS_LFXT1StartWithTimeout() UCS_LFXT1Start( UCS_XT1_DRIVE0 , UCS_XCAP_3); // DCO参考时钟选择XT1,选择了默认参数 //UCS_clockSignalInit( UCS_FLLREF, UCS_XT1CLK_SELECT , UCS_CLOCK_DIVIDER_1 ); // 初始化P5.2(#89)和P5.3(#90)为复用功能, XT2 外部时钟晶体接线 GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P5 , GPIO_PIN2 | GPIO_PIN3 ); // 启动XT2 UCS_XT2Start( UCS_XT2DRIVE_24MHZ_32MHZ ); // DCO参考时钟选择XT1,选择了默认参数 //UCS_clockSignalInit( UCS_FLLREF, UCS_XT1CLK_SELECT , UCS_CLOCK_DIVIDER_1 ); // ACLK参考时钟源选择REFO, 32768Hz //UCS_clockSignalInit(UCS_ACLK, UCS_REFOCLK_SELECT,UCS_CLOCK_DIVIDER_1); // DCO参考时钟源选择REFO,32768Hz //UCS_clockSignalInit(UCS_FLLREF, UCS_REFOCLK_SELECT , UCS_CLOCK_DIVIDER_1); // DCO时钟16MHz, used as MCLK and SMCLK frequency // 该函数第1个参数为系统工作频率16384KHz/1024=16MHz,第2个参数为工作频率/DCO参考频率=16*1024*1024/32768=512 #define FRQ_DIV 1 //UCS_initFLLSettle(16384/FRQ_DIV , 512/FRQ_DIV); //! Initializes the XT2 crystal oscillator, which supports crystal frequencies //! between 4 MHz and 32 MHz, depending on the selected drive strength. Loops

MSP430教程10:MSP430单片机WDT看门狗定时器解析

看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。 一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零 1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制命令时先写入口令WD TPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。 bit 15-8 7 6 5 4 3 2 1 0 口令HOLD NMIES NMI TMSE L CNTCL SSEL IS1 IS0 IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。 TMSEL W DT工作模式选择 0 0 T*2的15次 方 0 看门狗模式 0 1 T*2的13次

方 1 定时器模式 1 0 T*2的9次 方 NMI 选择RST/NMI 引脚功能 1 1 T*2的6次 方 RST/NMI为复位端 SSEL 选择WDTCNT的时钟 源 1 RST/NMI为非屏蔽中断输入 0 SMCL K 1 ACLK NMIES 选择NMI中断的边沿触发方 式 HOLD 停止看门狗定时器工作 0 上升沿触发NMI中 断 0 看门狗功能激活 1 下降沿触发NMI中 断 1 时钟禁止输入,记数停止

关于(单片机)msp430的时钟资料

msp430f5419/38学习笔记之时钟系统 (2011-11-30 10:41:30) 分类: msp430 标签: msp430f541x msp430f543x ucs 时钟系统注:msp5419/38中,如果你使用SMCLK做TIMER_A的时钟,那么进入低功耗3或低功耗4是不会把SMCLK关掉的,这点5系列和其他系列的不一样。 UCS模块是一个低成本超低功耗系统,通过选择使用3个内部时钟信号,用户可以得到性能和功耗的 最佳平衡点。UCS可以由软件配置其工作模式,如配置成:不需要任何外部器件、使用1或 2个外部晶振等。

一、时钟系统 UCS模块具有5个时钟源: XT1CLK:低频/高频振荡器,既可以与低频 32768HZ钟振、标准晶振、外部振荡器,又可以与外部4M-32MHZ时钟源一起使用,XT1CLK可以作为FLL模块内部的参考时钟。有些芯片XT1CLK只允许使用外部的低频晶振,具体可参考数据手册; XT2CLK:可选高频振荡器,可与标准晶振,振荡器或者 4MHZ~32MHZ外部时钟源一起使用; VLOCLK:内部低功耗、低频振荡器,频率典型值为10KHZ; REFOCLK:内部低频振荡器,典型值为 32768HZ,可作为 FLL基准时钟源;

DCOCLK:可以通过 FLL来稳定的内部数字控制振荡器(DCO);DCOCLK经过 FLL分频后可得DCOCLKDIV。 UCS模块可以提供3种时钟信号: ACLK:辅时钟; MCLK:系统主时钟; SMCLK:子系统主时钟。 二、UCS操作 PUC之后,UCS的默认配置模式如下: XT1CLK 选择LF模式下的XT1作为时钟源,ACLK 选择 XT1CLK 作为时钟源; MCLK 选择DCOCLKDIV作为时钟源; SMCLK 选择DCOCLKDIV作为时钟源; FLL操作使能,FLL基准时钟(FLLREFCLK)选择XT1CLK; XIN 和 XOUT作普通IO 口使用,禁止了 XT1 功能,直到 I/O 口重新配置为 XT1 模式; 如果有 XT2IN 和XT2OUT,则一并配置为普通 IO 口,禁止 XT2 功能。 如上所述: 默认状态下:XIN/XOUT(P7.0/1)、XT2IN/XT2OUT(P5.2/3) 为普通 IO口,振荡功能禁止;FLL基准源、ACLK时钟源是 XT1CLK,晶振失效逻辑控制位作用下均切换到 REFOCLK,ACLK = 32768Hz;默认下FLL倍频为:31(FLLN值),DCOCLKDIV=(32+1)*32768 =1.047856MHz;默认下分频值 D=2(FLLD值),DCOCLK = 2*DCOCLKDIV = 2.097152MHz。 默认选择了使用 XT1的 FLL操作,为了启用 XT1功能,必须将与 XT1引脚对应的 PSEL置位。当 XT1CLK 使用 32768Hz 晶振时,由于XT1不会立即稳定,失效逻辑控制位会立即选择 REFOCLK 作为 ACLK 时钟源。一旦晶体振荡稳定后,由于 FLL的作用,MCLK 和SMCLK 都将稳定在 1.047586MHz,Fdco稳定在 2.097152MHz。

MSP430系列MCU的动态时钟配置分析

MSP430系列MCU的动态时钟配置分析时间:2012-06-01 18:49:18 来源: https://www.doczj.com/doc/cc3444375.html, 本文结合MSP430系列微处理器,详细论述了通过控制改变MCU的时钟频率来降低功耗的设计方法。 1 功耗产生的原因 在CMOS电路中,功耗损失主要包括静态功耗损失和动态功耗损失两部分。其中静态功耗主要是由反偏PN结的漏电流和晶体管的亚阈值电流引起的,其最主要的形式就是漏电损失。其实CMOS电路理论上不会有静电功耗损失,因为从供应电源到地面没有直接的路径,但实际上晶体管总会有漏电电流的出现,从而出现漏电损失。在0.18μm工艺水平之下,其在功耗中所占比重大约为5%~10%,一般可以忽略(但是随着工艺的提高,供电电压的降低,又使其所占比重逐渐上升)。这样,在CMOS电路中,动态功耗就成了这个系统功耗的主要组成部分,约占整体功耗的90%以上。定量地分析电路的动态功耗,可用以下公式表示: 其中:C为负载电容;VDD为电源电压;?琢为翻转几率,即每个时钟周期中发生的充放电周期个数;fCLK为时钟频率。从这个公式可以看到如何降低动态功耗从而降低整个CMOS 电路的功耗。即可以减小翻转的负载电容,降低电源电压,减小节点的翻转几率,或者降低时钟频率。本文将主要围绕如何动态降低时钟频率实现低功耗设计。 2 动态时钟低功耗管理原理 MCU系统设计是个很复杂的过程,在一些条件下可能会用到整个系统的所有硬件资源,但是在一些应用中可能只需要其中很少的一部分硬件资源;在某些应用中可能需要很高的时钟频率,而在其他应用中却可以工作在很低的工作频率中。例如:当任务量很大时,MCU满负荷工作,则需要较高的时钟频率,功耗较大;当任务量很小时,MCU负荷较轻,所需时钟频率较低,功耗就可以相应降低。动态配置系统的时钟频率就是以不牺牲系统的性能为前提,动态地管理系统的工作频率来降低MCU的功耗。

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输入。跟在时钟源后面的是一个分频器,由ID来控制,将时钟源的时钟信号1、2、4、8分频后作为定时/计数器的时钟源。TAR右边的蓝色框代表TimerA在计数模式下由MC来控制TAR的四种计数方式。同时我们还注意到TAR的左下方有一个TACLAR连接至TAR的Clear端,显然是清零作用的,数据手册还告诉我们置位TACLAR,不但会清零TAR的计数值还会清除时钟分频信息。TACLAR 一旦置1,会自动归零,所以可以当做是TimerA的复位按钮。

MSP430定时器A说明

MSP430的定时器A有比较\捕获两种工作模式 比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx置1,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置1。 例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断,输出时序脉冲。 捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置1。 捕获模式的应用: 利用捕获源来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等。 利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 具体例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0和P1.4方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时 //设置定时器A计数模式为连续增计模式

MSP430时钟配置及ad模块等学习笔记

MSP430收集资料笔记 问: 个刚从51转到msp430这块的学生,我想知道,分频其实到底可以干什么,具体什么时候才会需要我们去分频? 能举些详细的例子告诉我分频什么时候改用,什么时候不该用吗?不需要代码,例子就好 答: 51也要分频啊,一个系统CPU(中央处理单元)的频率最高的,其他的外设都是低速的,都要通过主时钟分频产生低速的时钟来工作;比如8Mhz的单片机是说CPU的时钟是工作在8mhz,但gpio、串口,定时器等它们的工作频率很低的,这个时钟就需要分频来产生;当你想要改变一个外设的工作频率时就需要重新设置分频系数,比如串口波特率,定时时间,IIC时钟,spi时钟等等; 问: MSP430单片机的定时器,看门狗等东西的时钟来源于于各个时钟 (SMCLK,ACLK,MCLK,DCO等)有什么区别呢?还有这些问什么要分频呢,不分频好像程序也可以写啊! 有这三种时钟我也知道,我只是想知道。我是想知道这些时钟给外设使用的时候到底到底选择哪个,为什么要选择这个? 答: 不知道楼主用的是那个型号!我用的149,就用这个给你说吧!msp430F149 不分频具体的根据系统需要决定,楼主应该是初学吧!有些问题你不必深究,慢慢的在学习和使用中你就明白了,刚开始你知道怎么用就可以了! CTRL_C+CTRL_V,就算是抄别人的,也自己敲一遍,加深理解,加深印象!

话有说回来,学编程本来就是这么个过程,一看二抄三写四调试!我就是这么过来的,网上资源很多,多看看别人是怎么学的,怎么做的! || || 信号源---分频输出---------》时钟----------------》输出信号源----------外围模块|| (DCO)//************不设置即被MCLK默认***********************// || (LFXTI)→MCLK==→信号源分频输出=→信号源供给外围模块,CPU || (LFXT2) 1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 ||(DCO)//************不设置即被MCLK默认***********************// ||(LFXTI)→信号源分频输出=→SMCLK==→信号源供给外围模块 ||(LFXT2) (3)ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1、2、4、8分频作为信号源。 PUC复位后,MCLK和SMCLK的信号源为DCO,DCO的振荡频率默认为800KHZ。ACLK的信号源为LFXT1。 || ||LFXI1=→信号源分频====》ACLK========→外围模块 MCLK,SMCLK ||PUC复位===|=======》 DCO=800KHZ |ACLK | |LFXTI

基于MSP430时钟程序(详细版)

//**************************************** /*基于msp430写的简易时钟程序,1602显示,可实现时间初始值设定,按键调整时间,时分秒走时等。 因为初学430,故而写个时钟熟悉一下各个模块,年月日等只用了静态数组显示,下次再用时钟芯片写个正式版,与大家分享,共同学习! */ //******************************************* #include #include "lcd1602.h" #include "key.h" #define uint unsigned int #define uchar unsigned char uchar miaoflag=1; uchar fenflag=0; uchar shiflag=0; unsigned char table0[]="DYS-2013-08-03"; //*****************定时器A初始化************************** void Timer_A_init() { TACTL=TASSEL0+TACLR;//设置定时器A控制寄存器,TASSEL0为选择辅助时钟aclk //TACLR为清除定时器A计数器 CCTL0=CCIE; //设置捕获/比较控制寄存器;CCIE使能捕获比较中断 CCR0=16384*2; //设置捕获/比较寄存器,初始值为16384,对于32768hz的频率来说,即为0.5s; TACTL |=MC0; //使记计模式为增模式; _EINT(); //使能中断,这是一个c编译器所支持的内部过程; } //***********************设定初始时间****************************

msp430基本时钟结构中文

Chapter5 ZHCU032I–December2004–Revised January2012 基本时钟模块+ 基本时钟模块+为MSP430x2xx系列提供了时钟。本章阐述了MSP430x2xx器件系列的基本时钟模块+的操作。 Topic Page 5.1基本时钟模块+介绍 (272) 5.2基本时钟模块+的操作 (274) 5.3基本时钟模块+寄存器 (280)

基本时钟模块+介绍https://www.doczj.com/doc/cc3444375.html, 5.1基本时钟模块+介绍 基本时钟模块+支持低系统成本和超低功耗。采用三种内部时钟信号,用户可以选择性能和低功耗的最佳平衡。为了实现无任何外部元件操作,可在全软件控制下,用一个外部电阻、一个或两个外部晶振、或用振荡器来配置基本时钟模块+。 基本时钟模块+有2个,3个或4个时钟源: ?LFXT1CLK:低频/高频振荡器可以与低频时钟晶振或外接32768Hz时钟源,或与标准晶振、振荡器,外部400KHz~16MHz的外部时钟源一起使用。 ?XT2CLK:可以与标准晶振、振荡器,或外部400KHz~16MHz的外部时钟源一起使用的可供选择的高频振荡器。 ?DCOCLK:内部数控振荡器(DCO)。 ?VLOCLK:内部超低功耗、12KHz典型频率的低频振荡器。 基本时钟模块+可提供的三种时钟信号: ?ACLK:辅助时钟。ACLK是由软件选择来作为LFXT1CLK或VLOCLK。ACLK经1,2,4,8分频后得到。ACLK可由软件选作各个外围模块。 ?MCLK:主机时钟。MCLK由软件选择作LFXT1CLK,VLOCLK,XT2CLK(如果片上提供),或DCOCLK。MCLK由1,2,4,8分频得到。MCLK用于CPU和系统。 ?SMCLK:系统子时钟。SMCLK由软件选作LFXT1CLK,VLOCLK,XT2CLK(如果片上提供),或DCOCLK。SMCLK由1,2,4,8分频得到。SMCLK可由软件选作各个外围模块。 MSP430F2xx器件中的基本时钟模块+的方框图如图5-1所示。 MSP430AFE2xx器件中的基本时钟模块+的方框图如图5-2所示。 272基本时钟模块+ZHCU032I–December2004–Revised January2012

MSP430的时钟问题

单片机上电后,如果不对时钟系统进行设置,默认800kHz的DCOCLK为MCLK和SMCLK 的时钟源,LFXTl接32768Hz晶体,工作在低频模式(XTS=O)作为ACLK的时钟源。CPU 的指令周期由MCLK决定,所以默认的指令周期就是1/800kHz="1".25μs。要得到lμs 的指令周期需要调整DCO频率,即MCLK=1MHz,只需进行如下设置: BCSCTLl=XT20FF+RSEL2; //关闭XT2振荡器,设定DCO频率为1MHz DCOCTL=DCO2 //使得单指令周期为lμs MSP430的时钟周期(振荡周期)、机器周期、指令周期之间的关系 通用知识 时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周期就是直接供内部CPU使用的晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。 机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6个S周期(状态周期)组成。一个S周期=2个时钟周期,所以8051单片机的一个机器周期=6个状态周期=12个时钟周期。 指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。 专用知识: 在430中,一个时钟周期=MCLK晶振的倒数。如果MCLK是8M,则一个时钟周期为1/8us; 一个机器周期=一个时钟周期,即430每个动作都能完成一个基本操作; 一个指令周期=1~6个机器周期,具体根据具体指令而定。 另:指令长度,只是一个存储单位与时间没有必然关系。 MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为:(1)DCO数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO 的调节功能可以改善它的性能,他的调节分为以下3步:a:选择BCSCTL1.RSELx确定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调;c:选择DCOCTL.MODx 的值进行细调。

MSP430单片机定时器实验报告

MSP430单片机定时器实验报告 实验四定时器实验 实验目的: MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。实验内容: 定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能: 1. 定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。 2. 定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序 3. 采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED亮2s,灭1s。 4. 用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。 5. 使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。程序代码: 程序1: #include void main() {WDTCTL = WDTPW + WDTHOLD; //关看门狗 P1DIR |= BIT3; //设置P1.0口方向为输出。 TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1, //CCR0捕获/比较功能中断为允许。

TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767 TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。 //进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE); } //定时器A 中断服务程序区 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { P1OUT ^= BIT3; //P1.0取反输出 } 实验现象: 实验开始后,实验板上LED6亮灭闪烁,间隔为1s。 程序2: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关狗 P1DIR |= BIT1; // P1.1 设置为输出 P1SEL |= BIT1; // P1.1 输出使能 TA0CCR0 = 60000; // PWM Period TA0CCTL0 = OUTMOD_4; // CCR1 模式4 TA0CCR1 = 30000; // CCR1 PWM duty cycle TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR

MSP430的系统时钟

通用知识 时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周期就是直接供内部CPU使用的晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。 机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6个S周期(状态周期)组成。一个S周期=2个时钟周期,所以8051单片机的一个机器周期=6个状态周期=12个时钟周期。 指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。 专用知识: 在430中,一个时钟周期= MCLK晶振的倒数。如果MCLK是8M,则一个时钟周期为1/8us; 一个机器周期=一个时钟周期,即430每个动作都能完成一个基本操作; 一个指令周期= 1~6个机器周期,具体根据具体指令而定。 另:指令长度,只是一个存储单位,与时间没有必然关系。

MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为: (1)DCO 数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO的调节功能可以改善它的性能,他的调节分为以下3个步骤 a:选择BCSCTL1.RSELx确定时钟的标称频率; b:选择DCOCTL.DCOx在标称频率基础上分段粗调; c:选择DCOCTL.MODx的值进行细调。 (2)LFXT1 接低频振荡器。典型为接32768HZ的时钟振荡器,此时振荡器不需要接负载电容。也可以接450KHZ~8MHZ的标准晶体振荡器,此时需要接负载电容。 (3)XT2 接450KHZ~8MHZ的标准晶体振荡器。此时需要接负载电容,不用时可以关闭。 低频振荡器主要用来降低能量消耗,如使用电池供电的系统,高频振荡器用来对事件做出快速反应或者供CPU进行大量运算。当然高端430还有锁频环(FLL)及FLL+等模块,但是初步不用考虑那么多。MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时 钟;ACLK辅助时钟。

MSP430F149的定时器A操作

MSP430F149的定时器A定时操作 1)定时器A的图解 图1 定时器A图解 2)定时器A的四种计数模式。 1.停止模式。 2.增计数模式。(产生两个中断标志) 也就是当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中 断标志TAIFG。如图:

图2 增计数模式的波形图 3.连续计数模式。(产生一个中断标志) 也就是计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图: 4.增减计数模式。(产生两个中断标志) 也就是当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。当计数跟TACCT0一样的时候产生一 个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。如图: 注意:当重新写入TACCR0数值的时候,当新的数据大于原来的数值的时候,计数器将计数到新的数值才重新返回零;当新的数据小于原来的数值的时候,计数器将直接返回零重新计数。 3)定时器A的寄存器。 1.TACTL

●TASSELx:计时器A的时钟来源选择。 ●IDx:计时器A时钟的分频选择。 ●MCx:计时器A四种计数模式选择。 ●TACLR:计数器A的TAR计数清零,同时也可以清楚时钟分频器和计 数方向。 ●TAIE:TAIFG中断标志使能。在捕获模式下可以打开所有CCIFG的中 断使能。 ●TAIFG:中断标志位。 2.TAR 计数器的计数寄存器。 3.TACCTLx ●CMx:捕获模式选择。00:关闭;01:上升沿捕获;10:下降沿 捕获;11:上升下降沿捕获。 ●CCISx:捕获引脚选择。 ●SCS:选择捕获电平方式。0异步时钟;1同步时钟。 ●SCCI:锁存同步时钟输入端。也就是锁存EQUx的值,以供CPU 读取。 ●CAP:捕获模式和比较模式选择。0比较;1捕获。 ●OUTMODx:输出模式选择。 ●CCIE:CCIFG中断标志使能。 ●CCI:捕获当时输入信号的值。以供CPU读取。 ●OUT:当前输出的镜像,以供CPU读取。 ●COV:捕获溢出位,当第一次捕获的时候没有将寄存器里面的数 据读走,就又发生了一次捕获,所有溢出。(必须由软件清零) ●CCIFG:中断标志位。

MSP430单片机中断的定义及原理

MSP430单片机中断的定义及原理 430的中断是按照下图1的优先级顺序定义的,有三种中断:1.系统重置、2.不可屏蔽中断(NMI)、3.可屏蔽中断。 图1.中断优先级 部分具体的中断优先级由高到低为: PORT2_VECTOR (1 * 2u)/* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * 2u)/* 0xFFE8 Port 1 */ TIMERA1_VECTOR (5 * 2u)/* 0xFFEA TImer A CC1-2,TA */ TIMERA0_VECTOR (6 * 2u)/* 0xFFEC TImer A CC0 */ ADC_VECTOR (7 * 2u)/* 0xFFEE ADC */ USART0TX_VECTOR (8 * 2u)/* 0xFFF0 USART 0 Transmit */ USART0RX_VECTOR (9 * 2u)/* 0xFFF2 USART 0 Receive */ WDT_VECTOR (10 * 2u)/* 0xFFF4 Watchdog TImer */ COMPARATORA_VECTOR (11 * 2u)/* 0xFFF6 Comparator A */ TIMERB1_VECTOR (12 * 2u)/* 0xFFF8 Timer B CC1-2,TB */ TIMERB0_VECTOR (13 * 2u)/* 0xFFFA Timer B CC0 */ NMI_VECTOR (14 * 2u)/* 0xFFFC Non-maska××e */ RESET_VECTOR (15 * 2u)/* 0xFFFE Reset [Highest Priority]*/ 其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)。有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应。要中断嵌套的话,就必须在中断中打开总中断。

MSP430 定时器A和B 中断定时 1秒操作

MSP430 定时器A 和B 中断定时1 秒操作 /********************TimerA0 1 秒定时TIMER B 1 秒定时溢出中断: MCLK = 2MHz DCOCLKLFXT1 = 32768Hz ACLK***********************/ #include unsigned int i;unsigned int times,times_b;unsigned int sec; /***** 定时器A 初使化*******/void TimerA_Init(void){TACTL = TASSEL_1 + ID0 + TACLR ; //ACLK=32768Hz ,清除tar ,2 分频CCTL0 = CCIE; //CCR0 = 819; // (1/32768)*819 =20 ms ??TACTL |= MC0; //增计数}/**** 定时器 B 初使化*****/void TimerB_Init (void){TBCTL = TBSSEL_1 + ID0 + TBCLR ; //ID_2 + ID1 +TBCCTL0 = CCIE; // INTERRUPT ENABLETBCCR0 = 819; //TBCTL |= MC0;}/***** 秒测试 1 秒响一下********/void Sec_Beep(void) //beep every second{ if(sec==1){ sec = 0; P5OUT – 0x10;}}void main( void ){times = 20;times_b = 20;WDTCTL = WDTPW + WDTHOLD;// SYstem clockDCOCTL = 0x60;BCSCTL1 = 0x86;//XT20FF ,XTS=0 LOW FREQ , RESEL=6 DCOCLK=2MHz// XT2on, XTS DIVA.1 DIVA.0 XT5V RSEL.2 RSEL.1 RSEL.0// 1 0 0 0 0 1 1 0BCSCTL2 = 0x00; //MCLK = DCOCLK, DIVM=0, SMCLK=CCOCLK ,DIVS =0P1DIR |= 0x02; //p1.2 OUTP5DIR |= 0x10; //P5.4 OUTTimerA_Init(); //定时器初使化TimerB_Init();_EINT(); // interrupt enablefor(;;) { _BIS_SR(LPM3_bits); _NOP();}} /****** 定时器 A 中断处理***********/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){ times--;if(times == 0){ times = 20; sec=1; Sec_Beep();}}/****** 定时器B 中断 处理***********/#pragma vector = TIMERB0_VECTOR__interrupt void Timer_B0 (void){ times_b--; if(times_b == 0) { times_b = 20; P1OUT – 0x02; }}

相关主题
文本预览
相关文档 最新文档