打印
[PIC®/AVR®/dsPIC®产品]

pic10无法进入休眠模式

[复制链接]
1460|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
                INTCONbits.IOCIE = 1; // ENable IOCI interrupt 
            //  PWM1CONbits.PWM1EN = 0;
                PWM2CONbits.PWM2EN = 0;
            //    INTCONbits.TMR0IE = 0; // Disable TMR0 interrupt
                T2CONbits.TMR2ON = 0;//    stop timer2  
                PIE1bits.TMR2IE = 0; // Disable TMR2 interrupt
                SLEEP();
                WorkMode = 1;
                INTCONbits.IOCIE = 0; // Disable IOCI interrupt
                PIE1bits.TMR2IE = 1;
                T2CONbits.TMR2ON = 1; //   start timer2     
                INTCONbits.TMR0IE = 1; // Enable TMR0 interrupt  
            //  PWM1CONbits.PWM1EN = 1;
                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();这个函数里面什么内容?配置字?

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

手册上并没有相关的控制字或着配置位

使用特权

评论回复
5
XIEYUANBIN| | 2016-9-7 15:23 | 只看该作者
肯定有什么别的在吵醒你,比如悬空的引脚

使用特权

评论回复
6
番茄炒西红柿|  楼主 | 2016-9-7 15:28 | 只看该作者
XIEYUANBIN 发表于 2016-9-7 15:23
肯定有什么别的在吵醒你,比如悬空的引脚
#pragma config FOSC = INTOSC    // Oscillator Selection bits->INTOSC oscillator: CLKIN function disabled
#pragma config BOREN = OFF    // Brown-out Reset Enable->Brown-out Reset disabled
#pragma config WDTE = OFF    // Watchdog Timer Enable->WDT disabled
#pragma config PWRTE = OFF    // Power-up Timer Enable bit->PWRT disabled
#pragma config MCLRE = OFF    // MCLR Pin Function Select bit->MCLR pin function is digital input, MCLR internally tied to VDD
#pragma config CP = OFF    // Code Protection bit->Program memory code protection is disabled
#pragma config LVP = OFF    // Low-Voltage Programming Enable->Low-voltage programming disabled
#pragma config LPBOR = OFF    // Brown-out Reset Selection bits->BOR disabled
#pragma config BORV = HI    // Brown-out Reset Voltage Selection->Brown-out Reset Voltage (Vbor), low trip point selected.
#pragma config WRT = OFF    // Flash Memory Self-Write Protection->Write protection off

这是我的配置字,外设我只用了PWM2和TIMER0,TIMER1,并且在进入休眠模式之前,把他们全部都给关了,只打开了IOC中断来唤醒MCU。

使用特权

评论回复
7
wuhenyouyu| | 2016-9-7 17:32 | 只看该作者
手册有说,如果使用IO口电平变化唤醒,那么在进入SLEEP之前,必须先读下IO电平,否进入休眠会立刻被唤醒。你看看是不是这样原因。

使用特权

评论回复
8
番茄炒西红柿|  楼主 | 2016-9-7 17:58 | 只看该作者
wuhenyouyu 发表于 2016-9-7 17:32
手册有说,如果使用IO口电平变化唤醒,那么在进入SLEEP之前,必须先读下IO电平,否进入休眠会立刻被唤醒。 ...

我把这个IOC中断禁止仍然不能进入休眠模式。。。

使用特权

评论回复
9
JY-DX-JY| | 2016-9-7 18:23 | 只看该作者
电源稳定吗?

使用特权

评论回复
10
XIEYUANBIN| | 2016-9-8 10:06 | 只看该作者
番茄炒西红柿 发表于 2016-9-7 17:58
我把这个IOC中断禁止仍然不能进入休眠模式。。。

中断禁止了仍然会唤醒

使用特权

评论回复
11
番茄炒西红柿|  楼主 | 2016-9-9 14:27 | 只看该作者
XIEYUANBIN 发表于 2016-9-8 10:06
中断禁止了仍然会唤醒

谢谢回复,我找到了原因。是由于timer2的定时周期太短,当timer2的周期中断周期小于120us时就不能进入休眠了。但是我没找到解决的方法,以及产生这个问题的原因。

使用特权

评论回复
12
NE5532| | 2016-9-11 16:26 | 只看该作者
你timer2用的内部时钟还是外部时钟?定时器中断可以唤醒休眠的,但是如果用内部时钟,休眠以后定时器就不跑了。

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝