打印
[通用PIC核OTP系列]

sq013l一次电平变化进两次中断,求解!

[复制链接]
2605|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yueguang3048|  楼主 | 2018-8-28 14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:37 编辑

//PORTB1 上拉输出 高电平  
//PORTB0 上拉输入 高电平(KEY)

一个简单的应用, PORTB0电平发生一次变化,则PORTB1输出一个2S的低电平,其余时刻休眠。
但是发现一个问题:
PORTB0由高然后直接接GND(接触良好),有一定概率触发两次中断,即PORTB1输出4S的低电平。
PORTB0由低然后高,没有问题,即PORTB1输出2S的低电平。


1.现在的方案是中断中增加1S延时,DelayMs(100);//1S @1Mhz        4T ,能够保证两次触发的最小间隔变成1S。但是还是存在一次电平变化,进两次中断的问题,只不过中间会加1S的延时。
2.尝试过进中断关总中断,也不好用。
void Intr(void) __interrupt 0
{        
        GIE=0;               
        if(PBIF)                                       
        {        
                PBIF=0;                                                                                                   
                PORTB1=0;
                DelayMs(200);//2S @1Mhz 4T
                PORTB1=1;               
                DelayMs(100);//1S @1Mhz        4T
                GIE=1;                                
        }        
        

}
3.PORTB0使能了施密特触发器。

OTP型单片机不方便实际验证,求大神指教指教,谢谢。

以下是程序:
#include <sq013l.h>
#include "holychip_define.h"
#include "inital.h"
#include "subroutine.h"
//15mA@3.3V  32mA@5V仿真的板子
//PORTB1 上拉输出 高电平  
//PORTB0 上拉输入 高电平(KEY)
void inital(void)
{
        PORTB=0X03;                                //PORT口输出高低电平设置  1=高电平,0=低电平
        TRISB=0X01;                                //输入输出设置  1=输入,0=输出

        PHCON =0XFC;                        //上拉设置 1=DISABLED PULL-UP    ;0=PULL-UP        
        PDCON =0XFF;                        //下拉设置 1=DISABLED PULL-DOWN  ;0=PULL-DOWN        
        ODCON =0X00;                        //开漏设置 0=DISABLED OD                   ;1=OD
        
}
void sysinitial(void)
{
        INTECON=0x00;                          //关闭所有中断
         OPTION=0X80;                        //Ftimer0 1/2
        PCON=0X00;                        //关闭WD 外部中断
}
void PORTB_interrupt_inital()
{
        IOCB=0X01;                //使能PORTB0端口为电平变化中断        
        PBIF=0;                        // PROTB中断请求标志清零,PBIF:端口电平变化中断使能位
        PBIE=1;                        //使能PROTB中断,PBIE:端口电平变化中断使能位        
        GIE=1;                        //使能总中断
}        
void main()
{
        inital();                        //端口初始化
        DelayMs(10);                //延时等待系统稳定
        sysinitial();                //系统初始化
        PORTB_interrupt_inital();
        while(1)
        {        
                asm(sleep)
        }
}
//*****************************PORTB中断服务程序*****************************
void Intr(void) __interrupt 0
{                DelayMs(10);        //发现加了这句后,好用了,是不是因从休眠到中断唤醒,系统不稳定???求官方指导,有关SQ013L休眠方面的资料很少。
        PBIE=0;
        if(PBIF)                             //PBIF只要有电平变化中断就会变成1,只不过只有PBIE=1的时候才能进中断。           
        {        
                PBIF=0;                                                                                                
                PORTB1=0;
                DelayMs(200);//2S @1Mhz 4T
                PORTB1=1;               
                DelayMs(100);//1S @1Mhz        4T//此句可以去掉了。
                PBIE=1;                        
        }               
}



沙发
ICCCCC| | 2018-8-28 23:29 | 只看该作者
跳入中断函数时,先把中断标志清0,然后延时10ms去抖动,再次判断是否为低电平,如果为低电平则认为有效

使用特权

评论回复
板凳
yueguang3048|  楼主 | 2018-8-29 09:32 | 只看该作者
ICCCCC 发表于 2018-8-28 23:29
跳入中断函数时,先把中断标志清0,然后延时10ms去抖动,再次判断是否为低电平,如果为低电平则认为有效 ...

感谢支持

使用特权

评论回复
地板
雨后梧桐| | 2018-9-7 11:42 | 只看该作者
sleep前后加几句NOP指令,唤醒后做一个几us的延时。

使用特权

评论回复
5
yueguang3048|  楼主 | 2018-9-10 09:42 | 只看该作者
雨后梧桐 发表于 2018-9-7 11:42
sleep前后加几句NOP指令,唤醒后做一个几us的延时。

十分感谢

使用特权

评论回复
6
cbx_xx| | 2018-9-20 09:09 | 只看该作者
楼主的问题解决了吗???

使用特权

评论回复
7
yueguang3048|  楼主 | 2018-10-9 10:47 | 只看该作者
cbx_xx 发表于 2018-9-20 09:09
楼主的问题解决了吗???

看一下红色的字   还有这个单片机的定时器只要上电其实是一直在跑...

使用特权

评论回复
8
lxs0026| | 2018-10-10 20:27 | 只看该作者
上电机就跑?那如果加个电源呢?

使用特权

评论回复
9
xiaoqi000| | 2018-10-10 21:19 | 只看该作者
问题解决了吗?

使用特权

评论回复
10
冷画| | 2018-10-12 14:59 | 只看该作者
我不知道是什么问题         但我系供应商    要拿货SQ013/2711/003 可以找我
  

肿么联系我呢     QQ 1449251178 微信18126448445

使用特权

评论回复
11
纠结的那些年| | 2018-10-17 20:27 | 只看该作者
楼主解决了之后发个贴哦。

使用特权

评论回复
12
纠结的那些年| | 2018-10-17 20:27 | 只看该作者
谢谢楼主

使用特权

评论回复
13
kk201314| | 2019-6-28 15:17 | 只看该作者
这个问题应该是按下和弹起各触发了一次中断

使用特权

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

本版积分规则

个人签名:海纳百川,有容乃大 壁立千仞,无欲则刚

11

主题

1051

帖子

6

粉丝