打印
[AVR单片机]

求助关于睡眠模式的进入命令

[复制链接]
4407|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
宇航3000|  楼主 | 2011-6-6 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用ATTiny13 ,需要进入掉电模式,而且INT0口已经被占用了,我只能用引脚变化来唤醒。
但是我用下面的语句怎么也进入不了掉电模式:
GIMSK=0X20 ; // 引脚变化中断使能
  PCMSK=0x18 ; // 设定引脚PCINT3 和 PCINT4 变化触发中断
  MCUCR&=0x0F; // 清除标志位
  MCUCR|=0x03; // SE置位 设定为掉电模式
//   _SLEEP();
  asm volatile("sleep"::);
而且如果用_SLEEP(); 编译还提示有错误,真是想不明白为啥 ?

无奈之下我只好用GCC自带的#include <avr/sleep.h>头文件
用如下命令进入掉电模式:
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设定为掉电模式
  sleep_mode(); //进入睡眠状态   
可以顺利进入掉电模式了,但是却不能唤醒,不知道这个在哪里设置唤醒方式?
希望高手能帮我解决上面的两个问题!!

相关帖子

沙发
宇航3000|  楼主 | 2011-6-7 12:47 | 只看该作者
我现在用这个语句可以进入掉电模式并且引脚可以唤醒,但是不知道为什么不能再次进入睡眠模式了
GIMSK=0X20 ; // 引脚变化中断使能
   PCMSK=0x18 ; // 设定引脚PCINT3 和 PCINT4 变化触发中断
   set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设定为掉电模式
   sei();
   sleep_mode(); //进入睡眠状态  

是不是唤醒好要对什么清零呢?

使用特权

评论回复
板凳
宇航3000|  楼主 | 2011-6-7 18:07 | 只看该作者
为什么不能再次进入睡眠模式啊:'(

使用特权

评论回复
地板
宇航3000|  楼主 | 2011-6-9 11:38 | 只看该作者
再顶一个

使用特权

评论回复
5
宇航3000|  楼主 | 2011-6-9 17:33 | 只看该作者
自己搞定了一种方式。
其实引脚变化中断的向量地址就是0x0002 5个引脚的中断地址共用PCINT0 . 这个在TINY12里面写的很清楚叫“PIN_CHANGE" 。

而且这个中断的向量名叫“SIG_PIN_CHANGE0” , 这个向量名可以到“C:\WinAVR\avr\include\avr” 对应你的MCU型号里面查到。
所以它的中断子函数为:
SIGNAL(SIG_PIN_CHANGE0)
  {
  。。。。
  }

我知道为什么不能二次进入睡眠了,应该是开始我没写中断子函数,所以就没清零进入中断标志位。

使用特权

评论回复
6
TopV| | 2011-7-12 21:07 | 只看该作者
楼主自己解决了
赞一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

165

帖子

2

粉丝