打印

这个新塘单片机MS51的IO中断为什么不能用呢

[复制链接]
1736|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZXTWJJ|  楼主 | 2021-5-26 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个就是P05接受一个上升沿或者下降沿之后P04输出一个高电平。功能很简单但是一直这个不能实现功能,也没有报错。

#include "MS51_16K.H"
#include "Function_Define_MS51_16K.H"
#include "delay.h"

/*
名称:时控开关
功能:P05接收到上升沿或者下降沿,P04输出一个下降沿在输出高电平
时间:2021.5.26
版本号:V0.0(最初版)
备注:无干扰处理,总线广播,无串口校准验证
*/

#define ENABLE_BIT5_EDGE_TRIG    PICON|=0x40;PINEN|=0x20;PIPEN|=0x20//使能并设置P05端口为(PINEN)上升沿和(PIPEN)下降沿都触发中断
#define INDEPENDENTFALG          1                                  //1为独立模式,即总线广播(不区分设备地址)

#if     INDEPENDENTFALG

void EdgeTriggerInit(void)
{
        P04_PUSHPULL_MODE;
        P05_INPUT_MODE;
        set_P0S_5;//待修改,我也没懂这个时效保护在干撒

        P04 = 0;
        P05 = 0;
       
  ENABLE_INT_PORT0;//选择P0口
        ENABLE_BIT5_EDGE_TRIG;//选择5引脚
               
        set_EPI;//引脚中断使能
        set_EA;
        set_EX0;
}

void main(void)
{

        EdgeTriggerInit();
        while(1);

       
}

void PinInterrupt_ISR(void) interrupt 7
{
        EA = 0;//中断保护
       
        if (PIF == 0X20)
        {
               
                P04 = 1;
                Delay_us(100);
                P04 = 0;//单纯的高电平不足以判断情况,为了证明正确性
                Delay_us(100);
                P04 = 1;
               
                PIF = 0X00;
        }
        EA = 1;
}
#endif
各位大佬帮忙看一下,感谢。想了好几天没懂这个为啥不能用。

使用特权

评论回复

相关帖子

沙发
ZXTWJJ|  楼主 | 2021-5-27 14:37 | 只看该作者
解决了,呵呵。输入模式改成推挽输出,再加上自己定义的#DEFINE 拆开放到Init就可以了。呵呵,不踩进去永远不知道哪里有个坑!

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝