问答

汇集网友智慧,解决技术难题

21ic问答首页 - 这个新塘单片机MS51的IO中断为什么不能用呢

技术交流 s51 IO 新塘单片机 pi ge

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

ZXTWJJ2021-05-26
这个就是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
各位大佬帮忙看一下,感谢。想了好几天没懂这个为啥不能用。
回答 +关注 15
1707人浏览 1人回答问题 分享 举报
1 个回答
  • 解决了,呵呵。输入模式改成推挽输出,再加上自己定义的#DEFINE 拆开放到Init就可以了。呵呵,不踩进去永远不知道哪里有个坑!

您需要登录后才可以回复 登录 | 注册