This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5969:如何在 LPM3.5模式下睡眠60秒或更长的时间

Guru**** 663810 points
Other Parts Discussed in Thread: MSP430FR5969
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1290726/msp430fr5969-how-to-sleep-for-60-seconds-or-more-in-lpm3-5-mode

器件型号:MSP430FR5969
主题中讨论的其他器件: MSP430WARE

我得到了 MSP430FR5969代码、我对该微控制器非常陌生。 我想知道我必须编辑哪些参数以及要编辑哪些参数、以便我可以将此示例从60秒或以上唤醒、而不是更改为2秒的设置。

源代码

/*-版权-, BSD_EX
*版权所有(c) 2012、德州仪器(TI)公司
保留所有权利。
*
*以源代码和二进制形式重新分发和使用,有或没有
*修改,在以下条件允许的条件下
*满足:
*
**源代码的重新分发必须保留以上版权
*请注意,本条件清单和以下免责声明。
*
**二进制形式的再分发必须复制上述版权
*通知,本条件清单和下述免责声明在
*与分发一起提供的文档和/或其他材料。
*
**德州仪器公司名称或公司名称
*其贡献者可用于认可或推广派生的产品
*从本软件未经事先书面许可。
*
*本软件由版权持有者和贡献者"按原样"提供
本站明确声明不作出任何种类的所有明示或暗示的保证,包括但不限于关于适销性、适用于
*对特定产品的适销性和适用性的暗示保证
*免责声明。 在任何情况下,版权所有者或
*贡献者对任何直接、间接、偶然、特殊、
*示例性或后果性损害(包括但不限于:
*替代产品或服务的采购;使用、数据或利润的损失;
*或业务中断)然而造成和任何责任理论,
*无论是合同,严格的责任,或侵权(包括疏忽或
*其他)因使用本软件而产生的任何原因、
*即使被告知此类损害的可能性。
*

*
* msp430代码示例免责声明
*
* MSP430代码示例是自包含的低级程序、通常
*以高度优化的方式演示单个外设功能或设备特性
*简洁的方式。 为此、代码可依赖于器件的加电默认值
*寄存器的值和设置,如时钟配置和小心必须
*在合并来自几个示例的代码时采取,以避免潜在的侧
*效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
*针对外设配置的 API 函数库方法。
*
*-/版权-*/
//*****
// MSP430FR59xx 演示- LPM3.5中的 RTC_B 具有2秒的唤醒间隔
//
//说明:RTC_B 模块处于带有计数器中断的计数器模式
//每2秒触发一次。 然后、器件将进入 LPM3.5、等待
// RT1PSIFG 中断。 从 LPMx.5唤醒后、器件将恢复
//基于 ledState 变量计算 P1.0 LED 的先前状态。 然后、它将切换
//电路板上的 P1.0 LED 并将 LED 状态存储到 FRAM 存储器中。
//这是一个很好的示例,展示了如何在开始
//进入 LPMx.5并在唤醒时恢复 GPIO 状态。
// P4.6用作检测信号,表明设备正在唤醒
//从 BOR 复位或 LPMx.5中加电。
//
// ACLK = 32.768kHz、MCLK = SMCLK = DCO =~1MHz
//
// MSP430FR59xx
//-------------------------------------------------------
///|\| xin|-
//|||| 32kHz
//--|RST XOUT|-
//|
//| P1.0|--> LED
//| P4.6|-->探头输出/LED
//
//高建
//德州仪器公司
// 2013年1月
//通过 Code Composer Studio v5.5和 Embedded Workbench v5.60构建
//*****
#包含

void initboard(void);
void initRtc (void);
void WakeUpLPM35 (void);

//将 LED 的状态存储在 FRAM 中,其中此变量
//在启动期间不会用 C 语言初始化。 这允许
///可轻松恢复和管理的某些变量
//存储在非易失性存储器中,无需闪存电荷泵。
//这样可以缩短启动时间。
#if defined (__TI_Compiler_version__)
#pragma persistent(ledState);
unsigned char ledState = 0;
#Elif Defined (__IAR_systems_ICC__)
_persistent unsigned char ledState;
#else
//对于其他编译器,将此变量插入 FRAM 存储器
unsigned char ledState;
#endif

int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT

//初始化板
initBoard();// GPIO 和 CS 的常规初始化代码

//确定是来自 LPMx.5还是常规复位。
如果(SYSRSTIV = SYSRSTIV_LPM5WU)
{
//在从 LPM3.5唤醒时,重新
WakeUpLPM35 ();// LPMx.5唤醒特定的初始化代码
_enable_interrupt ();// RTC 中断应立即触发...

否则
{
ledState = 0;//初始化 LED 状态变量
P1OUT = 0x00;//初始化 P1OUT 为零
initRtc ();// RTC_B 的常规初始化代码

//使用 P4.6 LED 作为心跳,表示设备已重新启动,或者
//从 LPMx.5或完全加电
P4OUT |= BIT6;

//使用计时器 A 短暂延迟,使 P1.0 LED 闪烁
TA0CCTL0 = CCIE;// TACCR0中断被启用
TA0CCR0 = 1000;
TA0CTL = TASSEL__ACLK | MC__UP;// SMCLK、向上计数模式
__ bis_SR_register (LPM3_bits | GIE);
TA0CTL &=~(MC__UP);//停止计时器

P4OUT &=~BIT6;//清除 P4.6 LED

//按顺序进入 LPM3.5。
PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器以进行写入
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF

//使能中断后进入 LPM3.5模式。 请注意、该运算确实
//不返回。 LPM3.5将通过一个复位事件退出、这会导致一个
//重新启动代码。
__ bis_SR_register (LPM3_bits | GIE);
___ no_operation();

返回1;

void initBoard (void)
{
//端口配置
//从变量复位之前恢复 P1.0 LED 状态
//存储在 FRAM 中
P1OUT = ledState;
P1DIR = 0xFF;
P2OUT = 0x00;
P2DIR = 0xFF;
P3OUT = 0x00;
P3DIR = 0xFF;
P4OUT = 0x00;
P4DIR = 0xFF;
PJOUT = 0x00;
PJSEL0 |= BIT4 | BIT5;
PJDIR = 0xFFFF;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;

//设置时钟
CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
CSCTL2 = SELAM_0 | SELS_3 | SELM_3;//设置 ACLK = XT1;MCLK = DCO
CSCTL3 = DIIVA_0 | DIVS_0 | DIVM_0;//将所有分频器设置为1
CSCTL4 &&~LFXTOFF;//启用 LFXT1

正确
{
CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
SFRIFG1 &=~OFIFG;
}while (SFRIFG1和 OFIFG);//测试振荡器故障标志
CSCTL0_H = 0;//锁定 CS 寄存器

void initRtc (void)
{
//配置 RTC_B
//配置 BCD 模式,停止 RTC,然后启用 RTC
RTCCTL01 = RTCBCD | RTCHOLD | RTCTEV_0;
//将 RTC 第二级分频器设置为256
//每2秒发生一次 RTC 中断
RTCPS1CTL = RT1IP_7 | RT1PSIE;

//启动 RTC 日历模式
RTCCTL01 &=~μ H RTCHOLD;

空 WakeUpLPM35 (空)
{
// Re 配置/启动
//配置 BCD 模式,停止 RTC,然后启用 RTC
RTCCTL01 |= RTCBCD | RTCHOLD | RTCTEV_0;
//将 RTC 第二级分频器设置为256
//每2秒发生一次 RTC 中断
RTCPS1CTL = RT1IP_7 | RT1PSIE;

//启动 RTC 日历模式
RTCCTL01 &=~μ H RTCHOLD;


#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_vector
__interrupt void RTC_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
#else
#错误编译器不受支持!
#endif
{
开关(__even_in_range (RTCIV、RTCIV_RTCOFIFG))
{
案例 RTCIV_NONE:中止;
案例 RTCIV_RTCRDYIFG:中断;
案例 RTCIV_RTCTEVIFG:中断;
案例 RTCIV_RTCAIFG:中断;
案例 RTCIV_RT0PSIFG:中断;
情形 RTCIV_RT1PSIFG:
//切换 P1.0上的 LED
P1OUT ^= BIT0;

//将 P1.0输出状态存储到变量中
ledState =(P1OUT & BIT0);
中断;
案例 RTCIV_RTCOFIFG:中止;

//计时器 A0中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (TIMER0_A0_vector)) Timer_A (void)
#else
#错误编译器不受支持!
#endif
{
__ bic_SR_register_on_exit (LPM4_bits);

谢谢!

此致、
普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    2秒是 RTC_B 模块在间隔模式中可以实现的最长周期。

    对于更长的间隔、建议使用一层或看门狗来实现。  

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!

    这里是我正在尝试的代码、在这里、我希望将器件置于待机状态60秒、然后打开 LED 10秒、再将器件置于待机状态。 我希望重复该过程。 但代码无法按预期运行、相反 LED 将始终亮起。

    代码:

    #包含

    void delay_seconds (unsigned int seconds)
    {
    TA1CCR0 =(int)(239.75 *秒);//根据 ACLK 频率设置计数目标
    TA1CTL |= MC__UP;//将计数模式设置为向上
    _ bis_SR_register (LPM3_bits | GIE);//输入 LPM3

    int main (空)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //配置 GPIO
    P1DIR |= BIT0;// LED 中断
    P1OUT |= BIT0;
    PJSEL0 |= BIT4 | BIT5;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;

    //时钟设置
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
    CSCTL2 = SELM__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;//设置 ACLK = VLO;MCLK = DCO
    CSCTL3 = DIVA_32 | DIVS__1 | DIVM_1;//将 S 和 M 分频器设置为1、将 ACLK 设置为239.75Hz
    CSCTL0_H = 0;//锁定 CS 寄存器

    TA1CCTL0 = CCIE;// TACCR0中断被启用
    TA1CCR0 = 0;//默认将计数目标设置为0
    //将定时器时钟速度设置为4.5898次/秒或16524次/小时
    TA1CTL = TASSEL_ACLK | MC__UP | ID_8;//将时钟源设置为 ACLK、计数模式停止、并且时钟分频器设置为8
    TA1EX0 = TAIDEX_7;//将扩展时钟分频器设置为8


    while (1)
    {
    delay_seconds (10);//延迟10秒
    P1OUT ^= BIT0;//切换 LED

    //输入 LPM3 1分钟
    delay_seconds (60);//延迟1分钟


    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector = Timer1_A0_vector
    __interrupt void Timer1_A0_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (Timer1_A0_vector)) Timer1_A0_ISR (void)
    #else
    #错误编译器不受支持!
    #endif
    {
    TA1CTL &&~MC_3;//停止计时器以防止重复计数
    __ bic_SR_register_on_exit (LPM3_BITS);//退出低功耗模式3

    谢谢!

    此致、

    普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    试试这个。


    #包含
    整型计数;

    void delay_seconds (unsigned int seconds)
    {
    TA1CCR0 =(int)(239.75 *秒);//根据 ACLK 频率设置计数目标
    TA1CTL |= MC__UP;//将计数模式设置为向上
    _ bis_SR_register (LPM3_bits | GIE);//输入 LPM3

    int main (空)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //配置 GPIO
    P1DIR |= BIT0;// LED 中断
    P1OUT |= BIT0;
    PJSEL0 |= BIT4 | BIT5;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;

    时钟设置
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
    CSCTL2 = SELM__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;//设置 ACLK = VLO;MCLK = DCO
    CSCTL3 = DIVA_32 | DIVS__1 | DIVM_1;//将 S 和 M 分频器设置为1、ACLK 设置为239.75Hz
    CSCTL0_H = 0;//锁定 CS 寄存器

    TA1CCTL0 = CCIE;// TACCR0中断被启用
    TA1CCR0 = 0;//默认将 count 目标设置为0
    //将定时器时钟速度设置为4.5898次/秒或16524次/小时
    TA1CTL = tassel__ACLK | MC__UP | ID_8;//将时钟源设置为 ACLK、停止计数模式、并将时钟分频器设置为8
    TA1EX0 = TAIDEX_7;//将扩展时钟分频器设置为8

    计数= 0;

    while (1)
    {
    delay_seconds (10);//延迟10秒
    // P1OUT ^= BIT0;//切换 LED
    //
    //输入 LPM3 1分钟
    // delay_seconds (60);//延迟1分钟


    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector = Timer1_A0_vector
    __interrupt void Timer1_A0_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (Timer1_A0_vector)) Timer1_A0_ISR (void)
    #else
    #错误编译器不受支持!
    #endif
    {
    if (count == 0)
    {
    P1OUT |= BIT0;

    否则
    {
    P1OUT &=~BIT0;

    计数++;
    if (count > 6)
    {
    计数= 0;

    // TA1CTL &&~MC_3;//停止计时器以防止重复计数
    //_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出低功耗模式3

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!  

    您 提供的代码无法正常工作、因为 LED 现在始终保持亮起、并且器件永远不会进入 LMP3待机模式。 我想仅打开 LED 10秒、希望器件处于 LMP3待机状态60秒。 待机60秒后、器件应该会自动脱离 LMP3以再次点亮 LED 10秒、然后再次变为静止状态60秒。 此过程应自动重复。 而您的代码注释掉 LMP3退出函数。  

    谢谢!

    此致、

    普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    而您的代码注释掉了 LMP3退出函数。  [/报价]

    因为我在计时器中断例程中操作 GPIO 状态。 无需退出 LPM3模式并返回 while 循环即可执行该任务。

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已经在电路板上测试了此代码。 它按预期工作。 它也应该能在您的电路板上正常工作。  

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!

    正如我在下面所附的图片中看到的、LED 始终保持亮起状态、由此可以确定器件永远不会进入 LMP3模式。  

    此致、

    普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    代码正常工作。 只是定时器周期被配置的太长了。 试试这个。

    #包含
    整型计数;

    void delay_seconds (unsigned int seconds)
    {
    TA1CCR0 =(int)(239.75 *秒);//根据 ACLK 频率设置计数目标
    TA1CTL |= MC__UP;//将计数模式设置为向上
    _ bis_SR_register (LPM3_bits | GIE);//输入 LPM3

    int main (空)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //配置 GPIO
    P1DIR |= BIT0;// LED 中断
    P1OUT |= BIT0;
    PJSEL0 |= BIT4 | BIT5;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;


    //时钟系统设置
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1 MHz
    CSCTL2 = SELM__DCOCLK | SELS__DCOCLK | SELM__VLOCLK;
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM_1;//将所有分频器设置为1
    CSCTL4 = LFXTOFF | HFXTOFF;
    CSCTL0_H = 0;//锁定 CS 寄存器

    TA1CCTL0 = CCIE;// TACCR0中断被启用
    TA1CCR0 = 0;//默认将 count 目标设置为0
    //将定时器时钟速度设置为4.5898次/秒或16524次/小时
    TA1CTL = tassel__ACLK | MC__UP | ID_8;//将时钟源设置为 ACLK、停止计数模式、并将时钟分频器设置为8
    // TA1EX0 = TAIDEX_7;//将扩展时钟分频器设置为8

    计数= 0;

    while (1)
    {
    delay_seconds (1);//延迟10秒
    // P1OUT ^= BIT0;//切换 LED
    //
    //输入 LPM3 1分钟
    // delay_seconds (60);//延迟1分钟


    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector = Timer1_A0_vector
    __interrupt void Timer1_A0_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (Timer1_A0_vector)) Timer1_A0_ISR (void)
    #else
    #错误编译器不受支持!
    #endif
    {
    if (count == 0)
    {
    P1OUT |= BIT0;

    否则
    {
    P1OUT &=~BIT0;

    计数++;
    if (count > 6)
    {
    计数= 0;

    // TA1CTL &&~MC_3;//停止计时器以防止重复计数
    //_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出低功耗模式3

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!

    谢谢你,这一个工作,你是伟大的!!

    1) 1)我现在有几个问题、因此当 LED 熄灭时、器件处于待机状态???  

    2) 2)如何更改 LED 开启的时间、因为现在发生的情况是、当我设置 delay_seconds (60)时、LED 保持亮起24秒、而我只是希望它打开1秒?

    3) 3)在我们未调用"__BIC_SR_register_on_exit (LPM3_BITS)"函数时、器件如何产生(退出) LMP3。

    谢谢!

    此致、

    普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1)我现在有几个问题,所以当 LED 关闭时,设备处于待机状态

    LED 状态与 MCU 低功耗模式无关。 在代码中、计时器中断可将器件从 LPM3模式唤醒。 然后在中断例程中更改 LED 的开或关状态。 然后器件将再次返回 LPM3模式并等待下次由计时器中断唤醒

    2)如何更改 LED 开启的时间,因为现在发生的情况是,当我设置 delay_seconds (60)时,LED 保持开启24秒,而我只想让它打开1秒?

    出于精确时间要求、建议使用外部 LFXT 作为 ACLK 的时钟源。 在代码中、它是 VLO 作为 ACLK 基准。 LFXT 的精度将比 VLO 高得多。  

    然后、 根据 ACLK 频率更改 TA1CCR0以获得1秒的间隔。 那么您将得到确切的1秒周期。  

    3)当我们没有调用"__BIC_SR_register_on_exit (LPM3_BITS)"函数时,设备如何输出(退出) LMP3。

    如果您在 while ()循环中放入了其他代码,并希望执行该代码。 您将需要 在中断例程中调用__ bic_SR_register_on_exit (LPM3_BITS)。 然后它将跳出中断例程、并在 while 循环中运行其余代码。

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!

    根据您在上述线程中所说的内容、我使用了 LFXT 时钟、代码如下所示、现在 LED 闪烁近1秒、然后 MSP430进入 LMP3模式60秒。 您能仔细检查一下吗、告诉我这是正确的方法、是从 ON 过渡到 LMP3时工作正常。

    #包含

    整型计数;

    void delay_seconds (unsigned int seconds)
    {
    TA1CCR0 =(int)(32768 *秒);//根据 LFXT 频率(32768Hz)设置计数目标
    TA1CTL |= MC__UP;//将计数模式设置为向上
    _ bis_SR_register (LPM3_bits | GIE);//输入 LPM3

    int main (空)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //配置 GPIO
    P1DIR |= BIT0;// LED 中断
    P1OUT |= BIT0;
    PJSEL0 |= BIT4 | BIT5;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;

    //时钟系统设置
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1 MHz
    CSCTL2 = SELM_LFXTCLK | SELS_LFXTCLK | SELM_LFXTCLK;//将 LFXT 设置为 ACLK 的时钟源
    CSCTL3 = DIVA_1 | DIVS__1 | DIVM_1;//将所有分频器设置为1
    CSCTL4 = LFXTDRIVE_0;//为晶体模式设置 LFXT 驱动电平
    CSCTL0_H = 0;//锁定 CS 寄存器

    TA1CCTL0 = CCIE;// TACCR0中断被启用
    TA1CCR0 = 32768;//设置1秒间隔的计数目标
    TA1CTL = TASSEL__ACLK | MC__UP;//将时钟源设置为 ACLK、计数模式设置为向上

    计数= 0;

    while (1)
    {
    delay_seconds (1);//延迟1秒
    ///您的代码

    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector = Timer1_A0_vector
    __interrupt void Timer1_A0_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (Timer1_A0_vector)) Timer1_A0_ISR (void)
    #else
    #错误编译器不受支持!
    #endif
    {
    if (count == 0)
    {
    P1OUT |= BIT0;

    否则
    {
    P1OUT &=~BIT0;

    计数++;
    if (count > 60)
    {
    计数= 0;
    }  

    谢谢!

    此致、

    普赫拉吉·辛格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    代码看起来不错。  

    您也可以尝试阻止代码中的第18行"P1OUT |= BIT0;"。 否则、前1个1s LED 亮起将略长于1s。  

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现金、您好!

    非常感谢您的帮助和指导。 如果我需要任何其他帮助、我会让您答疑。

    谢谢!

    此致、

    普赫拉吉·辛格