如下代码实现MSP430G2553单片机两个led交替闪烁

#include <msp430.h>
/*** main.c*/
int main(void)
{WDTCTL = WDTPW | WDTHOLD; // stop watchdog timerP1DIR|=BIT0+BIT6;P1OUT|=BIT0;while(1){unsigned int i;i=50000;while(i--);P1OUT^=BIT0+BIT6;}
}

发现灯光显示异常两灯常亮。

为什么呢?在老师帮助下了解了是因为Msp430这款板子默认的低功耗模式导致了cpu不干预而使这种while(i--)的空循环失效。

MSP430G2553单片机有6种功耗模式如下:

1、活动模式-----AM

正常的工作模式,这时CPU消耗的电能最大.

2、低功耗模式0-----LPM0

CPUOff置位,CPU停止活动,但外围模块继续工作,ACLK和MCLK信号保持活动,MCLK的锁频坏控制正常工作.有关控制位设置为:SCG0=0,SCG1=0,OscOff=0,CPUOff=1。

3、低功耗模式1-----LPM1

CPUOff置位,CPU停止活动,但外围模块继续工作,MCLK的锁频环控制停止工作,ACLK与MCLK保持活动,有关控制位设置为:SCG0=0,SCG1=1,OscOff=0,CPUOff=1。

4、低功耗模式2-----LPM2

CPUOff置位,CPU停止活动,但外围模块继续工作,MCLK的锁频环控制停止,ACLK活动,MCLK停止,有关控制位设置为:SCG0=0,SCG1=1,OscOff=0,CPUOff=1。

5、低功耗模式3-----LPM3

CPUOff置位,CPU停止活动,但外围模块继续工作,MCLK的锁频环控制和MCLK停止工作,DCO的DC发生器关闭,但ACLK信号仍保持活动,有关控制位设置为:SCG0=1,SCG1=1,OscOff=0,CPUOff=1。

6、低功耗模式4-----LPM4

CPUOff置位,CPU停止活动,但外围模块继续工作,MCLK的锁频环控制和MCLK停止工作,晶振停止,有关控制位设置为:SCG0=x,SCG1=x,OscOff=1,CPUOff=1。

处理器进入低功耗模式以后,一般由中断来唤醒。可以是外部中断,也可以是内部的定时器等中断。

而具体到上述问题从TI网站上查到相应的资料:翻译后如下

MSP430提供各种类型的定时器和时钟,可配置为无需CPU干预即可运行。当需要延迟时,可以利用其中一个定时器外设来产生这种延迟,而CPU不会保持活动状态。该方法显着降低了设备的功耗。这些定时器可使MSP430微控制器保持低功耗模式,直到定时器唤醒CPU。

风险,严重程度
在微控制器中,CPU是整体功耗的最大贡献者。当应用程序执行延迟时,如果CPU保持活动模式,则会浪费大量的功率和能量。

为什么会这样
当在项目中的任何代码文件中发现延迟时,将发出此注释。
检查代码中是否包含仅包含以下任一行的循环,而不包含任何其他代码:

__no_operation();
 _NOP();
任何空循环。例如:

volatile int i = MAX_VALUE;
 而(i--> 0);
 出现这种情况://上述问题所在

__delay_cycles(NUMBER_OF_CYCLES);
补救
利用其中一种MSP430低功耗模式,并使用MSP430器件中的一个定时器模块在一段时间后唤醒。
代码示例
 // ********* ******************************
 // MSP430G2xx3演示 -  Timer_A,切换P1.0,CCR0续。模式ISR,DCO SMCLK
 //
 //描述:使用软件和TA_0 ISR切换P1.0。切换每一个
 // 50000个SMCLK周期。 SMCLK为TACLK提供时钟源。
 //在TA_0 ISR期间,切换P1.0并添加50000个时钟周期
 // CCR0每50000个周期触发TA_0 ISR。 CPU通常是关闭的
 //仅在TA_ISR期间使用。
 // ACLK = n / a,MCLK = SMCLK = TACLK =默认DCO
 //
 // MSP430G2xx3
 // ---------------
 // / | \ | XIN |  - 
 // | | |
 //  -  | RST XOUT |  - 
 // | |
 // | P1.0 |  - > LED
 //
 // D. Dang
 #include <msp430g2553.h>
 void main(void)
 {
   WDTCTL = WDTPW + WDTHOLD; //停止WDT
   P1DIR | = 0x01; // P1.0输出
   CCTL0 = CCIE; //启用CCR0中断
   CCR0 = 50000;
   TACTL = TASSEL_2 + MC_2; // SMCLK,contmode
 
   _BIS_SR(LPM0_bits + GIE); //输入LPM0 w / interrupt
 }
 
 //定时器A0中断服务程序
 #pragma vector = TIMER0_A0_VECTOR
 __interrupt void Timer_A(void)
 {
   P1OUT ^ = 0x01; //切换P1.0
   CCR0 + = 50000; //将偏移添加到CCR0
 }

具体代码现在搞不太懂,但是大体上两种解决方法,第一用delay函数实现用时钟定时,第二个就是用中断进入其他的例如AM退出低功耗模式,然后就可以调用cpu来实现循环。

应该是这样,现在第一次学真的搞不来这些代码,只能这样了。

MSP430低功耗模式-while循环失效相关推荐

  1. 【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

    目录 系统时钟概述 BCS+模块单元的基本构造 时钟-概览 介绍 Basic User 模式 Power User 模式 1. 数控振荡器 DCO 2. 出厂预校正频率 3. 低频振荡器 VLO 4. ...

  2. MSP430F5529 DriverLib 库函数学习笔记(十三)认识低功耗模式

    目录 硬知识 低功耗模式 MSP430单片机各工作模式下的电流消耗 API 进入低功耗模式 退出低功耗模式 平台:Code Composer Studio 10.3.1 MSP430F5529 Lau ...

  3. STM32低功耗模式

    STM32 的低功耗模式有 3种: 1)睡眠模式(CM3内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机(standby)模式(1.8V内核电源关闭) 从待机模式唤醒后的代码执行等同 ...

  4. ESP32低功耗模式

    低功耗模式 ESP32可以进入light-sleep和deep-sleep模式,还能进入一个用于相对较低功耗运行的modem-sleep模式 注意:进入低功耗模式前,应用程序必须关闭wifi和蓝牙设备 ...

  5. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)-----(八)低功耗模式补充

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (八)低功耗模式补充 如果MSP430处于低功耗模式的工作状态,当可屏蔽中断和非可屏蔽中断源产生时,就会唤醒CPU进入中断处理程序. 入栈保护当 ...

  6. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) -----(四)ESP430G2 低功耗模式

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (四)ESP430G2 低功耗模式 MSP430除了active模式外,还有低功耗模式(Low-power mode)即LPM0.LPM1.LP ...

  7. MCU低功耗模式浅析

    1.低功耗简介 MCU的低功耗有三种,分别是待机模式.睡眠模式以及停止模式. 在系统或电源复位以后,微控制器处于运行状态.运行状态下的 HCLK 为 CPU 提供时钟,内核执行程序代码. 当 CPU ...

  8. 基于MSP430低功耗烟雾采集智能报警系统设计(毕设课设)

    MSP430烟雾报警器 设计基于MSP430的烟雾报警器 要求是设计尽量采取低功耗模式,延长电池使用寿命,当有烟雾产生时,报警器产生声音报警信号 #include <msp430x14x.h&g ...

  9. android 6.0的DozeMode低功耗模式 及 引起的进程保活问题

    一.问题的来源 由于Android的开放特性,加上国内app开发者的觉悟普遍不高的情况下,越来越多的app开始利用安卓的系统特性甚至可以称为漏洞,故意让app退出后仍然占用大量的硬件资源.   越来越 ...

最新文章

  1. 记录一次nginx升级,支持ipv4和ipv6访问https
  2. 【tensorboard】从tensorboard上看出模型是否存在过拟合
  3. nn.CrossEntropyLoss()
  4. mysql5.7导入数据的权限问题
  5. 成功解决Value Error: Unable to add relationship because child variable ‘name‘ in ‘cats_df‘ is also its i
  6. 【SSH系列】Hibernate映射 -- 一对多关联映射
  7. 【Python】如何在文件夹里批量分割图片?
  8. 对计算机网络用户而言 掌握网络,计算机网络的特点
  9. 给数据库表字段设置默认值
  10. 聊聊安卓折叠屏给交互设计和开发带来的变化
  11. 牛客网 字符串的排列
  12. 宗地图绘制要求和规范_宗地图绘制的基本要求与内容.ppt
  13. 电脑硬件检测软件排名列前茅:试试整合了当下最好的硬件检测软件的图吧工具箱吧 | 图吧工具箱在哪里下载
  14. 80286计算机配置,电脑的各种配置给详的细解释.doc
  15. Eighth Week's ARST
  16. 零基础学习Java真的很难?初学者必须了解的Java基础知识梳理
  17. 阿里云国际站:云端实时渲染 阿里云用算力让三星堆“活过来”
  18. Downloads Help 下载帮助
  19. 对抗鲁棒性使得神经网络又强又怂
  20. angular报错信息之 'zmz-select' is not a known element

热门文章

  1. Android 获取联网的IP地址
  2. LayoutParams cannot be resolved to a type
  3. python爬虫之Scrapy框架的post请求和核心组件的工作 流程
  4. MySQL☞dual虚拟表
  5. jquery 实现Json节点的增删改查
  6. 《人件集》阅读笔记第一篇
  7. 构建自己的PHP框架--构建缓存组件(1)
  8. ipad html 自定义裁剪图片大小,移动端图片裁剪上传插件 Mavatar.js(原创)
  9. 乐高机器人教室布置图片大全_全国青少年机器人技术等级考试(上海宝山站)顺利举行...
  10. Linux安装软件的注意事项,64位Linux下安装软件注意事项