AVR单片机电源管理_睡眠模式(低功耗模式)实验(基于ATmega8)
2012-12-10 15:22
393 查看
先看芯片手册吧
这对电源及睡眠模式的一个简述,并介绍了进入模式时和唤醒之后的处理(第二段一定好好吸收哦)。
这是控制寄存器的设定进入不同模式的设定,根据需要进入不同的模式。
看到这里,也算了解了。
下面发段代码:
进入程序首先执行第二个灯闪烁,
闪烁停止,说明进入睡眠模式,
摁下按键,第一个灯开始闪烁,说明单片机被唤醒,进入外部中断服务函数,
第三个灯开始闪烁,说明中断服务函数执行完毕,执行SLEEP指令后面的程序。
有很多不足,也为有兴趣的朋友,做个例子吧,一起学习一下吧。
这对电源及睡眠模式的一个简述,并介绍了进入模式时和唤醒之后的处理(第二段一定好好吸收哦)。
这是控制寄存器的设定进入不同模式的设定,根据需要进入不同的模式。
看到这里,也算了解了。
下面发段代码:
/********************************************************** * 文 件 名 : main.c * 描 述 : 低功耗模式的探究 * 创 建 人 : 夏玉峰 * 单 位 : 佳木斯大学 信息电子技术学院 电子协会 * 日 期 : 2012.12.9 * 开 发 环 境: 开发环境:ICCAVR 7.22 硬件平台:ATmega8 晶 振:8MHZ * 邮 箱 : xiayufeng90520@163.com * 版 本 号 : 1.00 **********************************************************/ #include<iom8v.h> #include<macros.h> #include"xiaofeng_delay.h" /******************************************* 函数 名称: Port_Init 功 能: IO初始化 参 数: 无 返 回 值 : 无 /********************************************/ void Port_Init(void) { PORTB = 0xFF; DDRB = 0xFF; DDRD=0X00; PORTD=0XFF; } /******************************************* 函数 名称: Port_Init 功 能: IO初始化 参 数: 无 返 回 值 : 无 /********************************************/ void Power_Init(void) { MCUCR |= 0X20;//掉电模式,外部中断0低电平触发 GICR |= 0X40; //外部中断0使能 SREG |= 0X80;//使能总中断 } /******************************************* 函数 名称: Device_Init 功 能: 器件初始化 参 数: 无 返 回 值 : 无 /********************************************/ void Device_Init(void) { Port_Init(); //IO端口初始化 Power_Init(); //外部中断,省电模式,初始化 } /******************************************* 函数 名称: main 功 能: 主函数 参 数: 无 返 回 值 : 无 /********************************************/ void main(void) { unsigned char i; Device_Init(); while(1) { for (i=0;i<10;i++) { PORTB &= ~BIT(1); delay_nms(300); PORTB |= BIT(1); delay_nms(300); } MCUCR |= 0x80; //使能休眠 asm("sleep"); for (i=0;i<10;i++) { PORTB &= ~BIT(2); delay_nms(300); PORTB |= BIT(2); delay_nms(300); } } } /******************************************* 函数名称: void int0_isr(void) 功 能: 外部中断0的服务函数 参 数: 无 返 回 值: 无 /********************************************/ #pragma interrupt_handler int0_isr:2 void int0_isr(void) { unsigned char i; for (i=0;i<10;i++) { PORTB &= ~BIT(0); delay_nms(300); PORTB |= BIT(0); delay_nms(300); } }
进入程序首先执行第二个灯闪烁,
闪烁停止,说明进入睡眠模式,
摁下按键,第一个灯开始闪烁,说明单片机被唤醒,进入外部中断服务函数,
第三个灯开始闪烁,说明中断服务函数执行完毕,执行SLEEP指令后面的程序。
有很多不足,也为有兴趣的朋友,做个例子吧,一起学习一下吧。
相关文章推荐
- 第21章 RTX 低功耗之睡眠模式
- stm32低功耗实验之待机模式
- stm32l011F4之 低功耗睡眠模式
- STM32睡眠模式低功耗(停止模式)
- FreeRTOS 低功耗之睡眠模式
- STM32电源管理与低功耗模式
- SYD8801低功耗【深度睡眠模式】【浅度睡眠模式】【进入睡眠模式后要等待硬件进入睡眠】【内部上拉电阻对功耗的影响】【测试低功耗步骤】
- ESP8266的低功耗方案-睡眠模式
- 实验:CentOS6编译LAMP基于FPM模式的应用wordpress
- 计网|实验二 基于端口模式的VLAN实现
- 基于“用户学习”模式的实验结果评估一则
- 实验-----在centos6上编译lamp基于fpm模式的应用wordpress
- STM32电源管理与低功耗模式
- 我的备份与恢复实验(归档模式下用户管理的不完全恢复,基于时间点的)
- STM32睡眠模式低功耗(停止模式)
- Android4.0 nfs配合Eclipse软件adb网络模式调试实验
- RHCE实验:Linux下基于xinetd的访问控制
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.3 分段机制
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护
- 基于c++的builder模式初探。