找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3477|回复: 15
打印 上一主题 下一主题
收起左侧

请问单片机端口电平中断怎么唤醒休眠模式?

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:478344 发表于 2019-10-29 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 水深蓝 于 2019-10-29 14:31 编辑

目前我手头做的项目要求低功耗,所以我采用休眠模式,想知道端口电平中断如何唤醒休眠模式?

芯圣1.png (40.72 KB, 下载次数: 63)

芯圣1.png

芯圣2.png (54.92 KB, 下载次数: 56)

芯圣2.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:138097 发表于 2019-10-29 11:20 | 只看该作者
看是什么单片机了,我用过STM32的低功耗,可以用按键的外部中断唤醒,需要在睡眠函数和初始化中定义
回复

使用道具 举报

板凳
ID:478344 发表于 2019-10-29 14:30 | 只看该作者
whx.000 发表于 2019-10-29 11:20
看是什么单片机了,我用过STM32的低功耗,可以用按键的外部中断唤醒,需要在睡眠函数和初始化中定义

我用的芯圣的OTP芯片 他的PDF文档中显示可以配置成电平变化中断,就是我不知道如何实现
回复

使用道具 举报

地板
ID:478344 发表于 2019-10-29 14:31 | 只看该作者
whx.000 发表于 2019-10-29 11:20
看是什么单片机了,我用过STM32的低功耗,可以用按键的外部中断唤醒,需要在睡眠函数和初始化中定义

上图是我使用的单片机 请问应该如何配置呢
回复

使用道具 举报

5#
ID:213173 发表于 2019-10-29 15:03 | 只看该作者
一般有3种省电模式以降低功耗,它们分别是:低速模式,空闲模式和掉电模式。使用方法因品牌、型号不同代码也不同。没有一招通吃的方法。具体应用需要查产品手册。
回复

使用道具 举报

6#
ID:123289 发表于 2019-10-29 16:44 | 只看该作者
中断会自动消除休眠状态的(看一下手册)。不必操心。
回复

使用道具 举报

7#
ID:478344 发表于 2019-10-30 11:17 | 只看该作者
//初始化
    #include "holychip_define.h"
    #include "inital.h"
    void inital(void)
    {
        PORTA=0X00;
        PORTB=0X00;                //PORT口输出高低电平设置  1=高电平,0=低电平
        TRISA=0X00;                        //输入输出设置  1=输入,0=输出
        TRISB=0XE0;                        //输入输出设置  1=输入,0=输出  0X11100000  PB7,PB6,PB5设置为输入
       
        PHCON1=0XFF;                //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
        PHCON =0XFF;                //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP  
       
        PDCON1=0XFF;                //下拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
        PDCON =0XFF;                //下拉设置 1=DISABLED PULL-UP  ;0=PULL-UP  
       
        ODCON1=0X00;                //开漏设置 0=DISABLED PULL-UP  ;1=PULL-UP
        ODCON =0X00;                //开漏设置 0=DISABLED PULL-UP  ;1=PULL-UP
    }

    //系统初始化                                                                                    
        void sysinitial(void)
    {
        INTECON=0x00;
        OSCCON=0X80;
        OPTION=0X80;                        //Ftimer0 1/2
        PCON=0X40;                                //更改  上下电复位 禁止看门狗
    }


//模式转换
    #include "holychip_define.h"
    #include "model.h"
    void high_frequence_change_to_sleep(void)                //高低频切睡眠
    {
    //        SBIT(OSCCON, 7, LOW);
        T0OSCEN=0;
    }
    void high_frequence_change_to_low_frequence(void)        //高频切低频
    {
    //        SBIT(OSCCON, 0, HIGH);
        SCS=1;
    }
    void low_frequence_change_to_high_frequence(void)        //低频切高频
    {
    //        SBIT(OSCCON, 0, LOW);
        SCS=0;
    }
    void low_or_high_frequence_change_to_green(void)        //高低频切绿色模式        T0定时唤醒
    {
        OPTION=0X05;       
        SBIT(OPTION, 5, HIGH);                        //T0CS=1       
    //        T0CS =1;
        T0IF=0;                                                        //清T0中断标志
        T0IE=1;                                                        //使能T0定时器
        T0=0X00;                                                //T0赋初值
        asm(sleep)
    }
               

//PB电平变化中断初始化
    #include "holychip_define.h"
    #include "PORTB_interrupt_inital.h"
    void PORTB_interrupt_inital()
    {
        TRISB=0XE0;                //PORTB端口设置 0X11100000  PB7,PB6,PB5设置为输入
        IOCB=0XE0;                //使能PORTB端口为电平变化中断
       
        PBIF=0;                        // PROTB中断请求标志清零
        PBIE=1;                        //使能PROTB中断
        GIE=1;                        //使能GIE
    }       
//脉冲显示函数
    #include "holychip_define.h"
    #include "Pulse_display.h
    uS延时函数
    void DelayUs(unsigned char t)
    {   
     while(--t);
    }
    mS延时函数
    void DelayMs(unsigned int t)
    {
        unsigned char count = 200;          
        while(t--)
        {
                while(count--);
        }
    }
    //脉冲显示子程序
    void Pulse_display(void)                       
    {
    if(PORTB7==1)
     PORTA1=1;
     DelayMs(20);
     PORTA1=0;
     if(PORTB7==0)
     PORTA2=1;
     DelayMs(20);
    PORTA2=0;
               
    if(PORTB6==1)
    PORTA3=1;
    DelayMs(20);
    PORTA3=0;
    if(PORTB6==0)
    PORTB0=1;
    DelayMs(20);
    PORTB0=0;

    if(PORTB5==1)
    PORTB1=1;
    DelayMs(20);
    PORTB1=0;
    if(PORTB5==0)
    PORTB2=1;
    DelayMs(20);
    PORTB2=0;
    }
//主函数
    #include "holychip_define.h"
    #include "inital.h"
    #include "Pulse_display.h"
    #include "PORTB_interrupt_inital.h"
    #include "model.h"
    void main(void)
    {
        inital();                        //端口初始化
        DelayMs(100);                //延时等待系统稳定
        sysinitial();                //系统初始化
    PORTB_interrupt_inital();//PB电平中断初始化,设置PB7,PB6,PB5电平中断
        while(1)
        {
        high_frequence_change_to_sleep();  //高频转换为睡眠模式
        Pulse_display();        //脉冲显示

        }
    }
    //PORTB中断服务程序
    void Intr(void) __interrupt 0
    {
        if(PBIF)                                        //Judge PBIF
        {
                PBIF=0;                                        //Clear PBIF
        }
    }
回复

使用道具 举报

8#
ID:478344 发表于 2019-10-30 11:18 | 只看该作者
yzwzfyz 发表于 2019-10-29 16:44
中断会自动消除休眠状态的(看一下手册)。不必操心。

你好 以下是我根据数据手册写的代码,请问只要进入中断就会唤醒单片机么,那我这样做可以么
回复

使用道具 举报

9#
ID:478344 发表于 2019-10-30 11:18 | 只看该作者
wulin 发表于 2019-10-29 15:03
一般有3种省电模式以降低功耗,它们分别是:低速模式,空闲模式和掉电模式。使用方法因品牌、型号不同代码 ...

恩恩 以下是我查看数据手册写的代码,请问这样可以么
回复

使用道具 举报

10#
ID:401564 发表于 2019-10-31 00:06 | 只看该作者
PIC的大多例程是以汇编为主的
在PIC的眼中,汇编和C是一样,你还是学一下怎么看汇编,能看明白别人写的是什么就可以了,就几十条指令而已,看半个月就会了
如果是不想看,那就得认真的看数据手册了,一般来说,PIC的数据手册都会有写的
回复

使用道具 举报

11#
ID:478344 发表于 2019-10-31 09:59 | 只看该作者
Y_G_G 发表于 2019-10-31 00:06
PIC的大多例程是以汇编为主的
在PIC的眼中,汇编和C是一样,你还是学一下怎么看汇编,能看明白别人写的是什么 ...

主要是因为公司要求我所有的项目都用C写,而且我自己对C也熟悉一些
回复

使用道具 举报

12#
ID:401564 发表于 2019-10-31 10:57 | 只看该作者
水深蓝 发表于 2019-10-31 09:59
主要是因为公司要求我所有的项目都用C写,而且我自己对C也熟悉一些

这年头,如果不是刻要求用汇编的话,还用汇编的,基本都是上古世纪的人了,但PIC对于文件寄存器的操作大多都是用汇编来做教程的,就算是高端的18F系列,在文件寄存器上竟然还是以汇编为主了,哪怕是最近几年才出的单片机也是如此,神奇了.
但也不一定要学汇编了,能看明白文件寄存器怎么操作就可以了.主要还是要多看数据手册
回复

使用道具 举报

13#
ID:478344 发表于 2019-10-31 16:20 | 只看该作者
Y_G_G 发表于 2019-10-31 10:57
这年头,如果不是刻要求用汇编的话,还用汇编的,基本都是上古世纪的人了,但PIC对于文件寄存器的操作大多都 ...

是的 当然如果只是点灯之类的程序,汇编还是更好的,而且有的芯片只有0.5KROM。。。不过我还是喜欢C
回复

使用道具 举报

14#
ID:370231 发表于 2019-10-31 18:06 | 只看该作者
希望对你有帮助! FT60F02x_PA_INT.pdf (345.77 KB, 下载次数: 13)

回复

使用道具 举报

15#
ID:478344 发表于 2019-11-1 09:25 | 只看该作者
a89588038 发表于 2019-10-31 18:06
希望对你有帮助!

好的谢谢
回复

使用道具 举报

16#
ID:625009 发表于 2019-11-1 10:46 | 只看该作者
根据手册配置中断唤醒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表