avr睡眠模式(包涵源程序)

合集下载

avr单片机教程

avr单片机教程

avr单片机教程
AVR单片机是一种常用的微控制器,它由Atmel公司推出。

下面是一个简要的AVR单片机教程,包括AVR单片机的
基本知识和编程技巧。

1. 搭建AVR单片机开发环境:
- 下载并安装AVR编程工具链,例如Atmel Studio或AVR-GCC。

- 连接编程器(如USBasp或AVRISP mkII)和AVR单
片机。

2. 学习AVR单片机的基本原理:
- 了解AVR单片机的体系结构,包括CPU核心和外设。

- 学习AVR单片机的寄存器和位操作,如端口设置和IO 口操作。

- 掌握AVR单片机的时钟系统和时钟分频器。

3. 学习AVR单片机的编程语言:
- C语言是AVR单片机的主要编程语言,需要学习C语言的基本语法和数据类型。

- 掌握AVR单片机的特定编程库和API,如delay函数和IO口操作函数。

4. 学习AVR单片机的编程技巧:
- 学习如何控制IO口,包括输入输出控制和中断处理。

- 掌握定时器和计数器的使用,以实现精确的时间控制。

- 学习如何使用外部中断来响应外部事件。

5. 实践项目:
- 首先进行简单的LED闪烁项目,以检查开发环境和硬件连接是否正常。

- 然后尝试一些基本的输入输出控制实验,如按键控制LED亮灭。

- 接下来尝试更复杂的项目,如控制舵机,驱动LCD屏幕等。

以上是一个基本的AVR单片机教程的大纲,希望能够帮助你入门AVR单片机的学习和应用。

具体的学习细节和项目实践可以通过查阅相关的AVR资料和教程来深入学习。

哈曼卡顿AVR 151功放中文说明书

哈曼卡顿AVR 151功放中文说明书
Audio Input(音频输入)按钮:按此按钮可更改当前源的音频输入连接。 使用左/右箭头按钮可以循环浏览可用的输入连接,按 Set(设置)按钮可 以将当前显示的连接分配给源。
红外传感器:这个传感器可以接收遥控器的红外线 (IR) 命令, 确保此传感 器没有被遮盖。
Set(设置)按钮:按此按钮以选择当前高亮显示的菜单项。
请勿使用延长线
为了避免安全隐患,请您只使用设备中随附的电源线。我们不建议您在使 用本设备时配备延长线。使用任何电子设备时,都不要将电源线放在毛 毯、地毯或重物下面。如果电源线受到了损坏,请您立即联系授权的服务 中心,请他们为您更换为符合工厂规格的电源线。
谨慎处理交流电电源线
从交流电插座上断开电源线时,请务必拔下插头;任何时候都请勿拉拔电 线。较长时间不使用本 AVR 设备时,请从交流电插座上拔出插头。
使用前确认线路电压
AVR 1510 需要使用 120 伏交流电 (AC)。AVR 151 需要使用 220 – 240 伏交流 电。如果所连接线路的电压不符合接收器要求,可能会引发安全和火灾危 险,并可能会损坏设备。如果您不清楚具体型号设备的电压要求,或者不 知道您所在地区的线路电压是多少,请在将设备插入壁装插座之前联系经 销商。
t 在 AVR 上下方保留一定的控件,以便通风。我们建议您将本设备与其 他物品隔开适当的距离摆放,上方、背面和左右两边均保留 30cm 的 间隔。
t 如果将 AVR 摆放在机柜或其他封闭空间内,请在机柜内提供冷却气流。 在某些情况下,可能需要安装风扇。
t 请勿阻挡 AVR 顶部的通风槽,或者放置任何物体。
CATV 系统安装人员须知:本信息旨在提醒 CATV 系统安装人员注意 NEC 第 820-40 条的规定,其中提供了正确接地的指导信息,尤其是指明了接地电 缆必须与大厦接地系统连接,并尽可能接近电VR 摆放在固定和平整的平面上。确保该平面和安装硬件能够承 受 AVR 的重量。

avr单片机的低功耗设计

avr单片机的低功耗设计

avr 单片机的低功耗设计基于AVR 单片机atmega48 的低功耗系统设计2010-08-25 11:53atmega48 单片机低功耗系统设计首要是选择合适的单片机。

atmega48 单片机是一款8 位微控制器,具有高性能、低功耗的显著特点。

由于采用risc 精简指令集结构,其指令集大多为单周期指令,具有高速运行的特点。

3v 供电时,未使能内部看门狗的情况下,atmega48 的典型掉电电流小于1ua 。

具体工作电流见图1 。

而且该单片机在1.8v~5.5v 的电压范围内均能正常工作,片内自带4k 字节的flash 、256 字节的e2prom, 以及512 字节sram ;并内置6~8 路10 位ad 转换器、看门狗、3 个16 位的定时/计数器、具有独立振荡器的实时计数器rtc 和6 路pwm 输出。

另外还具有五种休眠模式,引脚变化及中断可唤醒mcu 。

图1 工作电流与系统频率的关系图2 工作电流与供电电压的关系(128k)低功耗设计方法以单片机为核心构成的系统,其系统的总能耗是由单片机能耗及其外围电路能耗共同构成。

为了降低整个系统的功耗,除了要降低单片机自身的运行功耗外,还要降低外围电路的功耗。

对外围电路而言,首先选择低电压低功耗器件,如用lmv324 代替传统的lm324 ,sp3223eey 代替max232 等。

其次,cmos 器件输入引脚不能悬空。

如果输入引脚悬空,在输入引脚上很容易积累电荷,产生较大的感应电动势,使引脚电位处于0 至1 间的过渡区域。

另外,单片机外围电路应尽量避免采用阻性元件。

atmega48 单片机的功耗主要与系统频率,工作模式,电源电压及外围模块有关。

由图1 和图2 可知,atmega48 单片机的工作电流与其工作频率、工作电压成正比。

降低系统时钟频率功耗与工作频率有关。

工作频率增加时,功耗也线性的增加。

系统工作频率的降低,电路的延时增加导致系统性能下降,因此在利用频率降低系统功耗的时候,要在能耗和速度之间进行权衡。

工程教育AVRStudio5的使用

工程教育AVRStudio5的使用
制,不过每个灯维持光亮状态的时间
是一样的,这里所设定的间隔是一样 的,可以说是灯保持光亮状态的一半
EVK1100:休眠管理功能
表现为灯LED3闪烁,过了一段时间后, 灯LED3自动熄灭即进入睡眠模式,按 下摇杆键则被唤醒,在灯地闪烁期间 按摇杆键多久,LED3灯就亮多久
Xplain实验 示例程序cpu example的修改
计数器的外在表现通过LED灯地逐一点 亮来说明,即计数器的计数值为多少则 对应的LED灯亮
一个计数器用来形成PWM,从而来控 制灯LED0的亮灭
Xplain:时钟控制
Xplain:频率设定
Xplain:计数2旁的 键盘则三个灯变暗
将灯LED0、4、3、7逐一点亮(四个角 上的灯),又逐一熄灭,闪烁频率进行 了更改
灯LED0在初始状态为快速闪烁,每按 一次灯LED0旁的按钮,则灯LED0闪烁 频率变慢,共有五个闪烁频率
EVK1100实验(部分)
功能
PB0按钮用于显示字符串;PB1按钮用 EVK1100:LCD、摇杆键的显示与应用 于将显示屏背景光变暗(PB2按钮与之
相反);摇杆键的四个方向用于显示 箭头光标,将其按下去则显示圆点同 时字符恢复为默认形式
EVK1100:时钟设定与LED的应用
先点亮灯LED1、过设定的间隔在点亮 灯 LED3 ,然后过设定的间隔点亮灯 LED5 , 灯 LED5 熄 灭 后 会 经 过 设 定 的 间隔后重新进入循环,其中每个LED 灯地点亮时刻有可设置的时间函数控

01_AVR CPU内核

01_AVR CPU内核

AVRCPU内核介绍这部分讨论A VR内核的总体结构。

CPU内核的主要作用是保证程序的正确执行。

因此,CPU必须能够进行以下操作:访问内存、执行计算、控制外围设备、处理中断。

结构概述为了最大化性能和并行处理能力,A VR使用了哈佛结构——程序和数据拥有独立的存储器和总线。

程序存储器中的指令以单级流水线方式执行,执行指令的同时,从程序存储器中预取下一条指令,使得指令能在单个时钟周期内被执行。

程序存储器采用在系统可重复编程的Flash存储器。

快速访问寄存器组(RegisterFile)包含32个8位通用寄存器,它们具有单周期访问时间。

这就实现了单周期的ALU运行。

在典型的一次ALU操作中,以下工作将在一个时钟周期内完成:从寄存器组取两个操作数、执行计算、计算结果存回寄存器组。

32个寄存器中的6个寄存器可构成3个16位间接寻址寄存器指针以用作数据空间的寻址,提高了地址计算的效率。

其中1个地址指针也可用于Flash程序存储器中查表的地址指针。

这些附加功能寄存器是16位的X、Y、Z寄存器,稍后将对它们进行描述。

ALU支持○1寄存器之间或○2寄存器与常量之间的算术逻辑运算,也支持○3单寄存器操作。

算术运算之后,状态寄存器(SREG)将发生更新以反应与计算结果有关的信息。

程序流由“条件”和“非条件”跳转(jump)、调用(call)指令提供,能够直接访问整个地址空间。

大多数A VR指令具有16位字格式。

每一个程序存储器地址下包含一个16位或32位的指令。

Flash程序存储器空间划分为两个部分:Boot程序部分、应用程序部分。

这两个部分均有专用的锁定位提供“写”和“读/写”保护。

用于向Flash存储器的应用程序部分进行写入的SPM指令必须驻留于Boot程序部分。

中断和子程序调用期间,返回地址程序计数器(PC)存储于堆栈。

堆栈实际上分配于通用数据SRAM中,因此堆栈的大小仅受限于SRAM的大小和使用。

所有的用户程序必须在复位(reset)例程中初始化SP(堆栈指针)(在执行任何子程序和中断之前)。

AVR休眠方式的设定

AVR休眠方式的设定

AVR休眠方式的设定
当需要使用休眠方式时,只要包含头文件“AVR/sleep.h”即可轻松实现。

(基于AVR-Studio 4.0+AVR-G CC,单片机型号:ATtiny24)
使用详细步骤如下:
1)包含该头文件AVR/sleep.h;
2)定义睡眠模式;
如:set_sleep_mode(SLEEP_MODE_ADC);//表示将CPU设置成ADC Noise Ca ncler模式
其它睡眠模式可在sleep.h头文件中找到,一般有:SLEEP_MODE_IDLE、SLEE P_MODE_ADC、SLEEP_MODE_PWR_DOWN等。

3)关全局中断;//cli();
4)睡眠模式允许; //sleep_enable();
5)开全局中断;//sei();
6)进入睡眠模式; //sleep_cpu();
7)等待中断将CPU唤醒
8)CPU唤醒后禁止睡眠模式; //sleep_disable();
完整的代码如下:
/*应用程序代码*/
set_sleep_mode(SLEEP_MODE_ADC);/*为提高AD转换精度,在转换时将CP U设置成ADC Noise Cancler模式*/
cli(); //关全局中断
sleep_enable(); //CPU睡眠允许
sei(); //开全局中断
/*允许ADC中断*/
/*启动AD转换*/
sleep_cpu(); /*启动AD后,CPU马上进入睡眠模式(ADC Noise Can cler),等待AD转换结束,产生ADC中断而将CPU唤醒*/
sleep_disable(); //CPU唤醒后从ADC中断返回,并接着从这里执行指令,禁止睡眠模式,。

AVR ATmega16中文说明书

AVR  ATmega16中文说明书

ALU- 算术逻辑单元AVR ALU 与32 个通用工作寄存器(R0-R31)直接相连。

寄存器与寄存器之间、寄存器与立即数之间的ALU 运算只需要一个时钟周期。

ALU 操作分为3 类:算术、逻辑和位操作。

此外还提供了支持无/ 有符号数和分数乘法的乘法器。

具体请参见指令集。

状态寄存器状态寄存器包含了最近执行的算术指令的结果信息。

这些信息可以用来改变程序流程以实现条件操作。

如指令集所述,所有ALU 运算都将影响状态寄存器的内容。

这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。

在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。

这些工作需要软件来处理。

AVR 中断寄存器SREG 定义如下:•Bit 7 –I: 全局中断使能I 置位时使能全局中断。

单独的中断使能由其他独立的控制寄存器控制。

如果I 清零,则不论单独中断标志置位与否,都不会产生中断。

任意一个中断发生后I 清零,而执行RETI指令后I 恢复置位以使能中断。

I 也可以通过SEI 和CLI 指令来置位和清零。

•Bit 6 –T: 位拷贝存储位拷贝指令BLD 和BST 利用T 作为目的或源地址。

BST 把寄存器的某一位拷贝到T,而BLD 把T 拷贝到寄存器的某一位。

•Bit 5 –H: 半进位标志半进位标志H 表示算术操作发生了半进位。

此标志对于BCD 运算非常有用。

详见指令集的说明。

•Bit 4 –S: 符号位, S = N ⊕VS 为负数标志N 与2 的补码溢出标志V 的异或。

详见指令集的说明。

•Bit 3 –V: 2 的补码溢出标志支持2 的补码运算。

详见指令集的说明。

•Bit 2 –N: 负数标志表明算术或逻辑操作结果为负。

详见指令集的说明。

• Bit 1 – Z: 零标志表明算术或逻辑操作结果为零。

详见指令集的说明。

• Bit 0 – C: 进位标志表明算术或逻辑操作发生了进位。

详见指令集的说明使用CLI 指令来禁止中断时,中断禁止立即生效。

稳定的使用AVR单片机的睡眠与唤醒功能

稳定的使用AVR单片机的睡眠与唤醒功能

稳定的使用AVR单片机的睡眠与唤醒功能
最近有个项目需要用触动按键做产品的电源开关.MPU用的是
M16.既然是电源开关,那么关掉电源的时候,电能损耗应该接近0.自然想到了AVR单片机的睡眠与唤醒功能,使用外部中断实现状态转换不就OK了.可事情能有想像的那么简单吗?
1.第一个问题,睡眠了唤醒不了.可能是以下原因
a. 睡眠前没有打开对应的外部中断端口
b.外部中断端口不是异步低电平触发中断
c. 睡眠前设置了外部异步中断,但是没有开启全局中断.
d.中断信号线忘记连接或连接错误.
2.使用按钮开关做中断信号时,有时能唤醒,有时不能唤醒,有时不给信号却反复睡眠-唤醒,可能是以下原因.
a.与外围芯片信号不同,使用按钮时存在抖动信号,需要消抖,简单的办法是在
中断服务中加上延时.
硬件方面,开关并上一个电容,且用一个电阻与开关串联.
b.外部中断的端口方向最好设置为输入,并且端口的内部上拉电阻应该使能.
c.睡眠前,应尽量将睡眠中无用的端口方向设置为输入,且拉低.防止误触发.
3.虽然睡眠了,可芯片的电能损耗却达不到理想要求,可能是以下原因.
a.没有关闭模数,比较,看门狗,JTGA,掉电检测(部分功能上电默认关闭)
b.所有的端口没有设置成输入,且没有将无用的端口拉低(PINx = 0x00).
以上是我这个菜鸟的查阅和试验总结,希望能对阅读者有所帮助!
如有误点,请指正!
高手见笑!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AVR单片机电源管理及睡眠模式应用实例(含源代码)AVR单片机电源管理及睡眠模式应用实例(含源代码)/*************************************************** AVR 电源管理_睡眠模式范例 ******* ******* 作者: HJJourAVR ******* 编译器:WINAVR20050214 ******* **************************************************//*本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒电源管理及睡眠模式的介绍进入最低耗电的掉电模式关闭各种模块外部中断唤醒M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz0.9uA@Vcc=5.0V [手册的图表约为1.1uA]0.3uA@Vcc=3.3V [手册的图表约为0.4uA]//测量的数字万用表是FLUKE 15B,分辨率0.1uA这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。

这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。

熔丝位设置1 关断BOD功能 BODEN=12 如果用ISP方式烧录,就可以完全关闭JTAG口了 OCEEN=1,JTAGEN=1*/#include <avr/io.h>#include <avr/signal.h>#include <avr/interrupt.h>#include <avr/delay.h>//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟#include <avr/sleep.h>/*sleep.h里面定义的常数,对应各种睡眠模式#define SLEEP_MODE_IDLE 0空闲模式#define SLEEP_MODE_ADC _BV(SM0)ADC 噪声抑制模式#define SLEEP_MODE_PWR_DOWN _BV(SM1)掉电模式#define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))省电模式#define SLEEP_MODE_STANDBY (_BV(SM1) | _BV(SM2))Standby 模式#define SLEEP_MODE_EXT_STANDBY (_BV(SM0) | _BV(SM1) | _BV(SM2)) 扩展Standby模式函数void set_sleep_mode (uint8_t mode);设定睡眠模式void sleep_mode (void);进入睡眠状态*///管脚定义#define LED 0 //PB0 驱动LED,低电平有效#define KEY_INT2 0 //PB3 按键,低电平有效void delay_10ms(unsigned int t){/*由于内部函数_delay_ms() 最高延时较短262.144mS@1MHz / 32.768ms@8MHz / 16.384ms@16MHz故编写了这条函数,实现更长的延时,并能令程序能适应各种时钟频率*/while(t--)_delay_ms(10);}int main(void){unsigned char i;//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻PORTA=0xFF; //不用的管脚使能内部上拉电阻。

PORTC=0xFF;PORTD=0xFF;PORTB=0xFF;DDRB =(1<<LED); //PB0设为输出高电平,灯灭/*端口引脚进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。

最重要的是避免驱动电阻性负载。

在休眠模式下I/O 时钟clkI/O 和ADC 时钟clkADC 都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。

在某些情况下输入逻辑是使能的,用来检测唤醒条件。

用于此功能的具体引脚请参见“ 数字输入使能和休眠模式” 。

如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC/2,否则输入缓冲器会消耗额外的电流。

IO作输出(DDR=1)时,维持状态不变*//*看门狗定时器(上电默认是关闭的)如果系统无需利用看门狗,这个模块也可以关闭。

若使能,则在任何休眠模式下都持续工作,从而消耗电流。

在深层次的睡眠模式下,这个电流将占总电流的很大比重。

假设看门狗定时器使能了,关闭程式如下1. 在同一个指令内对WDTOE 和WDE 写"1“,即使WDE 已经为"1“2. 在紧接的4 个时钟周期之内对WDE 写"0”*/WDTCR=(1<<WDTOE)|(1<<WDE);WDTCR=(0<<WDE);//或使用wdt.h里面的wdt_disable()函数/*模数转换器(上电默认是关闭的)使能时, ADC在睡眠模式下继续工作。

为了降低功耗,在进入睡眠模式之前需要禁止ADC。

重新启动后的第一次转换为扩展的转换。

假设模数转换器使能了,关闭程式如下*/ADCSRA=(0<<ADEN);/*模拟比较器(上电默认是打开的,需要手工关闭)在空闲模式时,如果没有使用模拟比较器,可以将其关闭。

在ADC 噪声抑制模式下也是如此。

在其他睡眠模式模拟比较器是自动关闭的。

如果模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。

否则内部电压基准源将一直使能。

关闭程式如下*/ACSR=(1<<ACD);/*掉电检测BOD (由熔丝位BODEN控制)如果系统没有利用掉电检测器BOD,这个模块也可以关闭。

如果熔丝位BODEN 被编程,从而使能了BOD 功能,它将在各种休眠模式下继续工作。

在深层次的休眠模式下,这个电流将占总电流的很大比重。

设置熔丝位BODEN=1 关断BOD功能*//*片内基准电压使用BOD、模拟比较器和ADC 时可能需要内部电压基准源。

若这些模块都禁止了,则基准源也可以禁止。

重新使能后用户必须等待基准源稳定之后才可以使用它。

如果基准源在休眠过程中是使能的,其输出立即可以使用。

当BOD、模拟比较器和ADC都禁止了,则基准源也自动禁止了。

*//*JTAG 接口与片上调试系统如果通过熔丝位OCDEN使能了片上调试系统,当芯片进入掉电或省电模式时主时钟保持运行。

在休眠模式中这个电流占总电流的很大比重。

下面有三种替代方法:1 不编程OCDEN2 不编程JTAGEN3 置位MCUCSR 的JTD当JTAG 接口使能而JTAG TAP 控制器没有进行数据交换时,引脚TDO 将悬空。

如果与TDO 引脚连接的硬件电路没有上拉电阻,功耗将增加。

器件的引脚TDI 包含一个上拉电阻,因此在扫描链中无需为下一个芯片的TDO 引脚设置上拉电阻。

通过置位MCUCSR寄存器的JTD 或不对JTAG 熔丝位编程可以禁止JTAG 接口。

JTD: 禁止JTAG 接口(MCU控制与状态寄存器MCUCSR Bit7)此位为0 时,如果JTAGEN熔丝位被编程则JTAG 接口使能。

如果这位为1, JTAG接口禁止。

为了避免无意的禁止或使能JTAG接口,必须通过一个时间序列来改变JTD 位。

应用软件必须在四个时钟周期内将期望的数值两次写入JTD。

如果JTAG 接口没有与其他JTAG电路连接, JTD应该置位。

这样做的原因是为了避免JTAG 接口TDO引脚的静态电流。

在软件中关闭JTAG接口的方法MCUCSR=(1<<JTD);MCUCSR=(1<<JTD);/*掉电模式当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。

在此模式下,外部晶体停振,而外部中断、两线接口地址匹配及看门狗(如果使能的话)继续工作。

只有外部复位、看门狗复位、BOD 复位、两线接口地址匹配中断、外部电平中断INT0 或INT1,或外部中断INT2 可以使MCU 脱离掉电模式。

这个睡眠模式停止了所有的时钟,只有异步模块可以继续工作。

当使用外部电平中断方式将MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。

从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来。

唤醒周期与由熔丝位CKSEL 定义的复位周期是一样的。

如果在睡眠过程中发生了复位,则MCU 唤醒后从中断向量开始执行使能的中断可以将进入睡眠模式的MCU 唤醒,经过启动时间,外加4个时钟周期后,MCU 就可以运行中断例程了。

然后返回到SLEEP 的下一条指令。

*/MCUCSR=(0<<ISC2); //INT2 的下降沿激活中断(默认的,这句话可以不写)GICR=(1<<INT2); //使能外部中断INT2sei(); //使能全局中断while(1){for (i=0;i<10;i++) //LED闪动10次后进入掉电模式的睡眠状态{delay_10ms(30);PORTB&=~(1<<LED); //点亮LEDdelay_10ms(30);PORTB|=(1<<LED); //熄灭LED}set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设定为掉电模式sleep_mode(); //进入睡眠状态/*也可以自行编写MCUCR=(0<<SM2)|(1<<SM1)|(0<<SM0); //设定为掉电模式asm volatile(“sleep” : : ); //进入睡眠状态*/}}SIGNAL(SIG_INTERRUPT2) //外部中断2服务程序唤醒源PORTB&=~(1<<LED); //点亮LEDdelay_10ms(500);PORTB|=(1<<LED); //熄灭LEDdelay_10ms(100);/*LED长亮5秒钟,熄灭1秒钟后,退出中断服务程序,然后返回到SLEEP 的下一条指令*/ }/*程序运行效果万用表打到直流电流的最小档位(uA分辨率),接到开关的两头烧录后要把STK500拔出,否则无法测得正确的电流数据。

上电后LED闪动10次后进入掉电模式的睡眠状态此时可断开开关看看万用表的读数然后接通开关按下 INT2按键,将会发现LED长亮5秒钟,熄灭1秒钟后,退回主程序,LED闪动10次后进入掉电模式的睡眠状态如果按下复位按键,马上复位。

网友可以编写其他睡眠模式/开关各种模块/其他时钟源/其他电源电压来测试电流消耗情况*//*电源管理及睡眠模式睡眠模式可以使应用程序关闭MCU中没有使用的模块,从而降低功耗。

相关文档
最新文档