1207|14

84

帖子

0

资源

一粒金砂(高级)

为什么我的INT功能进入不了中断? [复制链接]

 

为什么我的RB0口进入不了中断?是哪里的问题?

#include<pic.h>
#include<pic16f877a.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3731); 
void delay(uint x)
{
    uint a,b;
    for(a=x;a>0;a--)
        for(b=110;b>0;b--);
}
void init()    //初始化
{
    OPTION_REG=0x00;            //RBPU=0使能B口上拉电阻,INTEDG=0下降沿触发中断
    INTCON=0xD0;                //GIE为1允许总中断,INTE=1使能RB0/INT外部中断,INTF=0清RB0外部中断标志位
    TRISB=0x01;                    //B口低2位设为键盘的输入
    TRISD=0;                    //D口低4位设为LED的输出
//    PORTB=0x01;
    PORTD=0;                    //D口清零
}
void interrupt INT()
{
    if(INTF==1)                    //查询中断标志位是否被置1
    {
        INTF=0;                    //清中断标志位
        if(RB0==0)                //再次检测RB0口是否被按下
        {
            PORTD=0x02;            //马达反转
        }
    }
}
void main()
{
    init();
    while(1)
    {
        PORTD=0x00;            //马达反转
    }
}


回复

1万

帖子

2836

资源

管理员

有提示报错原因吗?

点评

没有错误提示。可以中断置1,但进不了中断  详情 回复 发表于 2020-6-30 20:26
个人签名

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!


回复

1万

帖子

14

资源

版主

中断没有开吧

点评

INTCON=0xD0;                //GIE为1允许总中断,INTE=1使能RB0/INT外部中断,INTF=0清RB0外部中断标志位     有开中断的  详情 回复 发表于 2020-6-30 20:26

回复

84

帖子

0

资源

一粒金砂(高级)

用ICD2仿真,可以看到中断位置1,但是进不了中断。

点评

我没有PIC16F877A的硬件 仅通过软件仿真:目前是可以进入中断的。从程序编写上来说,初始化这段,可以这样调整: ①设置管脚电平(PORTx→H,L); ②设置管脚方向(TRISx→输入/输出); ③设  详情 回复 发表于 2020-7-6 16:03

回复

84

帖子

0

资源

一粒金砂(高级)

okhxyyo 发表于 2020-6-28 05:58 有提示报错原因吗?

没有错误提示。可以中断置1,但进不了中断


回复

84

帖子

0

资源

一粒金砂(高级)

INTCON=0xD0;                //GIE为1允许总中断,INTE=1使能RB0/INT外部中断,INTF=0清RB0外部中断标志位

 

 

有开中断的


回复

324

帖子

2

资源

一粒金砂(中级)

帮顶


回复

630

帖子

2

资源

版主

yealien 发表于 2020-6-30 20:25 用ICD2仿真,可以看到中断位置1,但是进不了中断。

我没有PIC16F877A的硬件

仅通过软件仿真:目前是可以进入中断的。从程序编写上来说,初始化这段,可以这样调整:

①设置管脚电平(PORTx→H,L);

②设置管脚方向(TRISx→输入/输出);

③设置上拉(若有的话);

④清相关中断标志,设置中断允许位;

⑤打开所需要的总中断及外设置中断。

点评

调了顺序,还是不行。  详情 回复 发表于 2020-7-10 18:54

回复

84

帖子

0

资源

一粒金砂(高级)

dingzy_2002 发表于 2020-7-6 16:03 我没有PIC16F877A的硬件 仅通过软件仿真:目前是可以进入中断的。从程序编写上来说,初始化这段,可以 ...

void init()    //初始化
{
    OPTION_REG=0x00;            //RBPU=0使能B口上拉电阻,INTEDG=0下降沿触发中断
    INTCON=0xD0;                //GIE为1允许总中断,INTE=1使能RB0/INT外部中断,INTF=0清RB0外部中断标志位
    TRISB=0x01;                    //B口低2位设为键盘的输入
    TRISD=0;                    //D口低4位设为LED的输出
//    PORTB=0x01;
    PORTD=0;                    //D口清零
}

 

是这样啊.


回复

630

帖子

2

资源

版主

我一般这样写:

①:

//    PORTB=0x01;
    PORTD=0;                    //D口清零

②:

    TRISB=0x01;                    //B口低2位设为键盘的输入
    TRISD=0;                    //D口低4位设为LED的输出

   OPTION_REG=0x00;            //RBPU=0使能B口上拉电阻,INTEDG=0下降沿触发中断
    INTCON=0xD0;                //GIE为1允许总中断,INTE=1使能RB0/INT外部中断,INTF=0清RB0外部中断标志位
 

点评

好象与我的顺序刚好相反了,我明天试试  详情 回复 发表于 2020-7-7 19:58

回复

84

帖子

0

资源

一粒金砂(高级)

dingzy_2002 发表于 2020-7-7 11:49 我一般这样写: ①: //    PORTB=0x01;     PORTD=0;   &n ...

好象与我的顺序刚好相反了,我明天试试


回复

84

帖子

0

资源

一粒金砂(高级)

dingzy_2002 发表于 2020-7-6 16:03 我没有PIC16F877A的硬件 仅通过软件仿真:目前是可以进入中断的。从程序编写上来说,初始化这段,可以 ...

调了顺序,还是不行。

点评

我是用软件仿真的,是可以进入中断的; 硬件仿真时,进入不子中断,还主要看寄存器配置问题; 以我的经验来看:多观察寄存器数据变化会更快的发现问题。    详情 回复 发表于 2020-7-11 14:45

回复

630

帖子

2

资源

版主

yealien 发表于 2020-7-10 18:54 调了顺序,还是不行。

我是用软件仿真的,是可以进入中断的;

硬件仿真时,进入不子中断,还主要看寄存器配置问题;

以我的经验来看:多观察寄存器数据变化会更快的发现问题。

 

点评

我用软件仿真也没问题,但是硬件仿真就进不了中断  详情 回复 发表于 2020-7-13 18:37

回复

84

帖子

0

资源

一粒金砂(高级)

dingzy_2002 发表于 2020-7-11 14:45 我是用软件仿真的,是可以进入中断的; 硬件仿真时,进入不子中断,还主要看寄存器配置问题; 以我 ...

我用软件仿真也没问题,但是硬件仿真就进不了中断


回复

2

帖子

0

资源

一粒金砂(初级)

GIE、PEIE都开了么


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表