打印
[复制链接]
877|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
syz9|  楼主 | 2016-11-27 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我用79E15的键盘中断历程,把电源power down的语句屏蔽掉,程序就不行了呢
沙发
734774645| | 2016-11-27 20:26 | 只看该作者
贴上看看咋样

使用特权

评论回复
板凳
syz9|  楼主 | 2016-11-27 20:46 | 只看该作者

void main()
{
    InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz


    /*********************** Falling edge ***********************/
#if KBI_Level == 0
    P0 = 0xFF;
    KBLS1 = 0x00;                       // Set P0.0~P0.7 Falling Trigger
    KBLS0 = 0x00;
#endif
    /*********************** Rising edge ***********************/
#if KBI_Level == 1
    P0 = 0x00;
    KBLS1 = 0x00;                       // Set P0.0~P0.7 Rising Trigger
    KBLS0 = 0xFF;
#endif
    /******************** Falling/Rising edge ******************/
#if KBI_Level == 2
    P0 = 0xFF;
    KBLS1 = 0xFF;                       // Set P0.0~P0.7 Falling/Rising Trigger
    KBLS0 = 0x00;
#endif
    /************************ Low level ************************/
#if KBI_Level == 3
    P0 = 0xFF;
    KBLS1 = 0xFF;                       // Set P0.0~P0.7 Low level Trigger
    KBLS0 = 0xFF;
#endif

    KBIF = 0x00;                        // Clear KBF
    EKB = 1;                            // Enable KBI Interrupt
    KBIE = KBI_Enable;                  // KBI Enable
    EA  = 1;                            // Enable EA

    while(1)
    {
        PCON |= POWER_SAVING_MODE;      // Enter power down mode or idle mode selected by wizard

    }

}
//-----------------------------------------------------------------------------------------------------------
void KBI_ISR(void) interrupt 7          // Vector @  0x3B
{
    u16Count++;
    Delay1ms(8);
    KBIF = 0x00;                        // Clear KBF flag
        P14 = ~P14;
        P21 = ~P21;
}

把  PCON |= POWER_SAVING_MODE;      // Enter power down mode or idle mode selected by wizard程序屏蔽就不行了,就是让单片机减少功耗的吗,加上的时候我用信号源给频率,测试端口的值频率是有的

使用特权

评论回复
地板
734774645| | 2016-11-27 20:54 | 只看该作者
测试端口的什么频率?你那个语句是让系统进入休眠的,然后通过中断唤醒,唤醒后才能再次触发中断吧。。你屏蔽后,肯定就不对了,跟你要表达的意思不同了吧

使用特权

评论回复
5
734774645| | 2016-11-27 20:55 | 只看该作者
你可以在主函数的while写其他语句试试看

使用特权

评论回复
6
syz9|  楼主 | 2016-11-27 21:03 | 只看该作者
734774645 发表于 2016-11-27 20:55
你可以在主函数的while写其他语句试试看

KBI 通用用于检测外设如键盘等的边沿传输。在空闲状态中,系统先进入掉电模式以减小功耗并等待事件触发。
N79E715系列支持KBI中断,将MCU从掉电模式下唤醒。注意,如果KBI选作任何边沿触发模式,必须遵循如下
条件,以确保芯片能有效得从掉电模式中唤醒。对于下降沿唤醒,引脚状态在进入掉电模式的时候必须为高。相
应地,上升沿唤醒时引脚状态必须为低.

这是PDF 中说的,我如果要想用键盘中断必须要掉电唤醒,那我的程序里再加一些定时器程序,定时器程序不就没有用了,有神魔办法可以解决吗

使用特权

评论回复
7
734774645| | 2016-11-27 21:06 | 只看该作者
syz9 发表于 2016-11-27 21:03
KBI 通用用于检测外设如键盘等的边沿传输。在空闲状态中,系统先进入掉电模式以减小功耗并等待事件触发。 ...

不会的,你担心多余了,你休眠模式下,那定时器还在运行,只是CPU休眠了,而定时器不是CPU,是CPU外设。。。你听说过DMA吗,DMA也是的,CPU休眠了都能运行,就是完全脱离CPU的意思。。所以定时器也可以唤醒CPU。。就是通过定时器中断。

使用特权

评论回复
8
syz9|  楼主 | 2016-11-27 21:34 | 只看该作者
734774645 发表于 2016-11-27 21:06
不会的,你担心多余了,你休眠模式下,那定时器还在运行,只是CPU休眠了,而定时器不是CPU,是CPU外设。。 ...

我试了,不行呢,工作不了

使用特权

评论回复
9
598330983| | 2016-11-27 23:28 | 只看该作者
这个芯片用的人不多,现在很多项目都不用51了,都开始玩ARM了,最少玩个M051吧,新唐的M051简单好用,关键库函数丰富,操作简单

使用特权

评论回复
10
robter| | 2016-11-28 08:09 | 只看该作者
这个没有遇到过

使用特权

评论回复
11
643757107| | 2016-11-28 22:59 | 只看该作者
具体楼主是做什么用,没有讲清楚啊,难以理解要表达个什么样功能的 程序。

使用特权

评论回复
12
lcwang0| | 2016-11-29 10:20 | 只看该作者
楼主没贴 KBI_Level 定义是多少啊,我用楼主的代码定义 KBI_Level = 0,跑PCON |= POWER_SAVING_MODE; P0.2勾了一下GND, 可以看到P1.4 脚有电平变化,就是唤醒进中断了。
还有楼主使用仿真器吗?debug mode还是 download free run? 记得option -> utilitis -> setting -> free run 要勾啊。

使用特权

评论回复
13
734774645| | 2016-12-3 18:26 | 只看该作者
楼上说的似乎有道理。

使用特权

评论回复
14
zhuomuniao110| | 2016-12-4 15:00 | 只看该作者
怎么都用预编译指令啊,预编译指令这种编译后就丢失了其他的情况 。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝