[PIC®/AVR®/dsPIC®产品] pic10无法进入休眠模式

[复制链接]
1768|11
 楼主| 番茄炒西红柿 发表于 2016-9-7 14:11 | 显示全部楼层 |阅读模式
  1.                 INTCONbits.IOCIE = 1; // ENable IOCI interrupt
  2.             //  PWM1CONbits.PWM1EN = 0;
  3.                 PWM2CONbits.PWM2EN = 0;
  4.             //    INTCONbits.TMR0IE = 0; // Disable TMR0 interrupt
  5.                 T2CONbits.TMR2ON = 0;//    stop timer2  
  6.                 PIE1bits.TMR2IE = 0; // Disable TMR2 interrupt
  7.                 SLEEP();
  8.                 WorkMode = 1;
  9.                 INTCONbits.IOCIE = 0; // Disable IOCI interrupt
  10.                 PIE1bits.TMR2IE = 1;
  11.                 T2CONbits.TMR2ON = 1; //   start timer2     
  12.                 INTCONbits.TMR0IE = 1; // Enable TMR0 interrupt  
  13.             //  PWM1CONbits.PWM1EN = 1;
  14.                 PWM2CONbits.PWM2EN = 1;

求助,MCU在执行了sleep()后并没有停下来,而是接着执行了之后的语句,为什么会出现这种情况?
 楼主| 番茄炒西红柿 发表于 2016-9-7 14:15 | 显示全部楼层
有没有大神能帮忙解惑下?
JY-DX-JY 发表于 2016-9-7 14:18 | 显示全部楼层
SLEEP();这个函数里面什么内容?配置字?
 楼主| 番茄炒西红柿 发表于 2016-9-7 14:22 | 显示全部楼层
JY-DX-JY 发表于 2016-9-7 14:18
SLEEP();这个函数里面什么内容?配置字?

这是一条汇编指令,
  1. #define        SLEEP()                asm("sleep")

手册上并没有相关的控制字或着配置位
XIEYUANBIN 发表于 2016-9-7 15:23 | 显示全部楼层
肯定有什么别的在吵醒你,比如悬空的引脚
 楼主| 番茄炒西红柿 发表于 2016-9-7 15:28 | 显示全部楼层
XIEYUANBIN 发表于 2016-9-7 15:23
肯定有什么别的在吵醒你,比如悬空的引脚
  1. #pragma config FOSC = INTOSC    // Oscillator Selection bits->INTOSC oscillator: CLKIN function disabled
  2. #pragma config BOREN = OFF    // Brown-out Reset Enable->Brown-out Reset disabled
  3. #pragma config WDTE = OFF    // Watchdog Timer Enable->WDT disabled
  4. #pragma config PWRTE = OFF    // Power-up Timer Enable bit->PWRT disabled
  5. #pragma config MCLRE = OFF    // MCLR Pin Function Select bit->MCLR pin function is digital input, MCLR internally tied to VDD
  6. #pragma config CP = OFF    // Code Protection bit->Program memory code protection is disabled
  7. #pragma config LVP = OFF    // Low-Voltage Programming Enable->Low-voltage programming disabled
  8. #pragma config LPBOR = OFF    // Brown-out Reset Selection bits->BOR disabled
  9. #pragma config BORV = HI    // Brown-out Reset Voltage Selection->Brown-out Reset Voltage (Vbor), low trip point selected.
  10. #pragma config WRT = OFF    // Flash Memory Self-Write Protection->Write protection off

这是我的配置字,外设我只用了PWM2和TIMER0,TIMER1,并且在进入休眠模式之前,把他们全部都给关了,只打开了IOC中断来唤醒MCU。
wuhenyouyu 发表于 2016-9-7 17:32 | 显示全部楼层
手册有说,如果使用IO口电平变化唤醒,那么在进入SLEEP之前,必须先读下IO电平,否进入休眠会立刻被唤醒。你看看是不是这样原因。
 楼主| 番茄炒西红柿 发表于 2016-9-7 17:58 | 显示全部楼层
wuhenyouyu 发表于 2016-9-7 17:32
手册有说,如果使用IO口电平变化唤醒,那么在进入SLEEP之前,必须先读下IO电平,否进入休眠会立刻被唤醒。 ...

我把这个IOC中断禁止仍然不能进入休眠模式。。。
JY-DX-JY 发表于 2016-9-7 18:23 | 显示全部楼层
电源稳定吗?
XIEYUANBIN 发表于 2016-9-8 10:06 | 显示全部楼层
番茄炒西红柿 发表于 2016-9-7 17:58
我把这个IOC中断禁止仍然不能进入休眠模式。。。

中断禁止了仍然会唤醒
 楼主| 番茄炒西红柿 发表于 2016-9-9 14:27 | 显示全部楼层
XIEYUANBIN 发表于 2016-9-8 10:06
中断禁止了仍然会唤醒

谢谢回复,我找到了原因。是由于timer2的定时周期太短,当timer2的周期中断周期小于120us时就不能进入休眠了。但是我没找到解决的方法,以及产生这个问题的原因。
NE5532 发表于 2016-9-11 16:26 | 显示全部楼层
你timer2用的内部时钟还是外部时钟?定时器中断可以唤醒休眠的,但是如果用内部时钟,休眠以后定时器就不跑了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部