发新帖本帖赏金 4.00元(功能说明)我要提问
123下一页
返回列表
打印
[STC单片机]

求助,数码管计数记着记着就停了

[复制链接]
3902|53
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenjinyu|  楼主 | 2015-12-10 09:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
百思不得其解,芯片是STC15F204EA,数码管计数记着记着有时候就停了,当我在软件上自己给它高低电平变化的时候,计数正常,当我在实际操作中给它下降沿时,计数记着记着就停了,按下复位键之后,数码管清零,但之后也不能计数了,这是怎么回事啊?
bit FLAG;
sbit S2=P3^2;
sbit S1=P3^3;
void init()
{

IT0=1 ;//设置下沿触发跳变
EX0=1;
EA=1;
// P1=P1|0x03;
// P1ASF=0x03;
P2=table[0] ;
com1=1; //1表示打开位选
com2=1 ;

}

void display()
{
P2=table[a%10] ;
com1=1;
com2=0 ;
delay(30) ;
com1=0 ;
com2=0 ;

P2=table[a/10] ;
com2=1;
com1=0 ;
delay(30) ;
com1=0 ;
com2=0;

}

void res()
{
if(S1==0)
{
delay(10);
if(S1==0)
{
EA=0;
a=0;
init();
while(!S1) ;

}
}
}

void main()
{
init();
while(1)
{

// S2=1 ;
//Delay10ms();
// S2=0;
//Delay10ms();
display();
res();


}
}


void exint0() interrupt 0
{
FLAG=INT0;
Delay10ms();
a++;
if(a==100)
a=0;

}


打赏榜单

21ic小管家 打赏了 4.00 元 2015-12-10

评分
参与人数 1威望 +1 收起 理由
autopccopy + 1 stc15f204ea A版本外部中断有不bug,见数据.

相关帖子

沙发
JY-DX-JY| | 2015-12-10 10:19 | 只看该作者
用示波器看看,是不是持续给下降沿了?

使用特权

评论回复
板凳
chenjinyu|  楼主 | 2015-12-10 10:49 | 只看该作者
JY-DX-JY 发表于 2015-12-10 10:19
用示波器看看,是不是持续给下降沿了?

我用电压表测了,开关没有闭合时5V,闭合后是0V

使用特权

评论回复
地板
JY-DX-JY| | 2015-12-10 10:51 | 只看该作者
那可能你外部中断的程序那块有问题。好好检查检查

使用特权

评论回复
5
chenjinyu|  楼主 | 2015-12-10 10:58 | 只看该作者
JY-DX-JY 发表于 2015-12-10 10:51
那可能你外部中断的程序那块有问题。好好检查检查

但是我在软件上自己给持续给它高低电平变化的时候,数码管计数正常的。 S2是外部中断那个I/O口
void main()
{
                init();
       while(1)
          {
               
                 S2=1 ;
                   Delay10ms();
                           S2=0;
                   Delay10ms();
                     display();
                   res();
                         
               
                }
        }
                  像这样就正常

使用特权

评论回复
6
JY-DX-JY| | 2015-12-10 11:02 | 只看该作者
现在不一样的地方就是外部中断了。你说哪里有问题。

使用特权

评论回复
7
flame123| | 2015-12-10 11:19 | 只看该作者
你的flag是控制什么的,把初始化程序的EA提到最前面试试。

使用特权

评论回复
8
wh6ic| | 2015-12-10 12:47 | 只看该作者
用IO设置计数没有问题,外接有问题。硬件问题的可能性很大,有外界干扰的可能

使用特权

评论回复
9
chenjinyu|  楼主 | 2015-12-10 12:53 | 只看该作者
flame123 发表于 2015-12-10 11:19
你的flag是控制什么的,把初始化程序的EA提到最前面试试。

我直接照芯片手册上写的

使用特权

评论回复
10
flame123| | 2015-12-10 13:29 | 只看该作者
chenjinyu 发表于 2015-12-10 12:53
我直接照芯片手册上写的

你看的不仔细,你的程序设置的是IT0=1;这个是上升沿有效,手册是IT0=0,这个是下降沿有效。

使用特权

评论回复
11
JY-DX-JY| | 2015-12-10 13:34 | 只看该作者
还是楼上仔细。不过感觉一样,按键按下去是下降沿,弹起来就是上升沿了。

使用特权

评论回复
12
chenjinyu|  楼主 | 2015-12-10 13:56 | 只看该作者
JY-DX-JY 发表于 2015-12-10 11:02
现在不一样的地方就是外部中断了。你说哪里有问题。

我用示波器看了,当计数停止的时候发现有下降沿的

使用特权

评论回复
13
chenjinyu|  楼主 | 2015-12-10 13:57 | 只看该作者
wh6ic 发表于 2015-12-10 12:47
用IO设置计数没有问题,外接有问题。硬件问题的可能性很大,有外界干扰的可能 ...

我用示波器看了,当计数停止的时候有下降沿的

使用特权

评论回复
14
JY-DX-JY| | 2015-12-10 14:02 | 只看该作者
void res()
{
if(S1==0)
{
delay(10);
if(S1==0)
{
EA=0;
a=0;
init();
while(!S1) ;

}
}
}
我感觉你这儿有问题。你外部中断不就是检测下降沿吗?这儿又检测,不重复了吗?

使用特权

评论回复
15
chenjinyu|  楼主 | 2015-12-10 14:04 | 只看该作者
flame123 发表于 2015-12-10 13:29
你看的不仔细,你的程序设置的是IT0=1;这个是上升沿有效,手册是IT0=0,这个是下降沿有效。 ...

不是啊!芯片上有这样一句,设置INT0的中断触发方式(1:falling only  0:Rising&Falling)  所以我设置为IT0=1了

使用特权

评论回复
16
chenjinyu|  楼主 | 2015-12-10 14:06 | 只看该作者

这个是复位的外部按键,但是计数停止后我按下复位,数字清零,但是之后数字也不再发生变化

使用特权

评论回复
17
JY-DX-JY| | 2015-12-10 14:18 | 只看该作者
奥。我明白了。
你现在使用干簧管给外部中断,可能有干扰。
你先不用干簧管,你用个按键试下。

使用特权

评论回复
18
flame123| | 2015-12-10 14:33 | 只看该作者
chenjinyu 发表于 2015-12-10 14:04
不是啊!芯片上有这样一句,设置INT0的中断触发方式(1:falling only  0:Rising&Falling)  所以我设置 ...

不好意思,1是下降沿,我记错了,你现在这个问题,你可以这么解决,你的要求就是在检测到外部中断后,数码管开始计数,对吧,既然开始计数,当你检测到中断的时候,进入你的中断函数,那么你的最好这么写,检测到外部中断,你把你中断的delay函数去掉,把flag也去掉(这玩意你又没用),然后再测试,另外,你的外部中断0是中断等级最高的,所以你的复位时不起作用的,这个时候,你最好改变思路,用定时器。

使用特权

评论回复
19
chenjinyu|  楼主 | 2015-12-10 14:45 | 只看该作者
JY-DX-JY 发表于 2015-12-10 14:18
奥。我明白了。
你现在使用干簧管给外部中断,可能有干扰。
你先不用干簧管,你用个按键试下。 ...

用了按键了,还是不行,我比较疑惑的是为何断电之后再重新上电就行了,而按下复位键却不行

使用特权

评论回复
20
chenjinyu|  楼主 | 2015-12-10 14:47 | 只看该作者
flame123 发表于 2015-12-10 14:33
不好意思,1是下降沿,我记错了,你现在这个问题,你可以这么解决,你的要求就是在检测到外部中断后,数 ...

把delay去掉,把flag去掉,之前都已经试过了

使用特权

评论回复
发新帖 本帖赏金 4.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

170

帖子

4

粉丝