打印

很偶然发现的一下问题,请大家探讨一下,什么原因?

[复制链接]
1648|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TE, IO, ni, sd, AC
先说明一下现象,我用的是PIC16F887,用INT(RB0)中断,下降沿触发,采样一个方波信号频率在1HZ左右,然后在中断里,将一个LED的IO口取反,LED采用低电平驱动的方式。发现IO口的波形如图一:闪的频率是对的,但是波形不对。是不是读写修改的问题啊?
测试的程序:
void INT_Init(void)
{
        ANS12 = 0;
        TRISB0 = 1;
        RBPU = 0;
        WPUB0 = 1;
        INTEDG = 0;                        //下降沿触发
        INTE = 1;
        INTF = 0;
}
void main(void)
{
        INT_Init();
        PEIE = 1;
        GIE = 1;
        TRISD7 = 0;
        //TRISD6 = 0;
        RD7 = 1;
        //RD6 = 1;
        while(1);
}

void interrupt ISR(void)
{
        if(INTF)
        {
                INTF = 0;
                RD7 = !RD7;
        }
}


沙发
小鱼儿1045|  楼主 | 2013-10-25 13:00 | 只看该作者
我刚刚又试了一下,程序稍微改了一下:
void interrupt ISR(void)
{
        if(INTF)
        {
                INTF = 0;
                i ++;
                if(i >= 8)
                {
                        RD7 = !RD7;
                        i = 0;
                }
        }
}
按道理说应该八个下降沿的脉冲以后RD7取反一下,但是现在发现四个脉冲就开始取反,只能认为是电平变化就中断,四个脉冲正好八次电平变化。求给位大牛帮忙看看。

使用特权

评论回复
板凳
lnulibin| | 2013-10-25 17:16 | 只看该作者
研究了半天,觉得是有些和说明上的不同。
怎么好端端的外部中断。就变成了B口的电平变化中断了呢。
是不是生产的时候,产品本身就有问题呀。

使用特权

评论回复
地板
ZG11211| | 2013-10-25 18:19 | 只看该作者
把不用的ADC关了,把需要的输出口设为输出。

使用特权

评论回复
5
小鱼儿1045|  楼主 | 2013-10-25 22:54 | 只看该作者
lnulibin 发表于 2013-10-25 17:16
研究了半天,觉得是有些和说明上的不同。
怎么好端端的外部中断。就变成了B口的电平变化中断了呢。
是不是 ...

这是一个无意中一个小程序上发现的,就单独写了一个INT的测试程序,发现有点和DS写的不一样,但是用proteus仿真,确实和DS一样的,定义什么边沿就是什么边沿触发

使用特权

评论回复
6
小鱼儿1045|  楼主 | 2013-10-25 22:54 | 只看该作者
ZG11211 发表于 2013-10-25 18:19
把不用的ADC关了,把需要的输出口设为输出。

这是单独把INT拎出来的,就是为了测试一下INT,没有其他的输出了

使用特权

评论回复
7
小鱼儿1045|  楼主 | 2013-10-25 22:56 | 只看该作者
希望哪位大神能用开发板测试一下,看看是不是这样的。

使用特权

评论回复
8
huangxz| | 2013-10-26 07:06 | 只看该作者
INTCON的中断设置位采用一次写入的方式设置一下试试
比如 INTCON = 0x90;

使用特权

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

本版积分规则

个人签名:绳命是如滴灿烂,绳命是如此滴辉煌

70

主题

1965

帖子

19

粉丝