123下一页
返回列表 发新帖我要提问本帖赏金: 4.00元(功能说明)

[STC单片机] 求助,数码管计数记着记着就停了

[复制链接]
 楼主| 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 | 显示全部楼层
那可能你外部中断的程序那块有问题。好好检查检查
 楼主| 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();
                         
               
                }
        }
                  像这样就正常
JY-DX-JY 发表于 2015-12-10 11:02 | 显示全部楼层
现在不一样的地方就是外部中断了。你说哪里有问题。
flame123 发表于 2015-12-10 11:19 | 显示全部楼层
你的flag是控制什么的,把初始化程序的EA提到最前面试试。
wh6ic 发表于 2015-12-10 12:47 | 显示全部楼层
用IO设置计数没有问题,外接有问题。硬件问题的可能性很大,有外界干扰的可能
 楼主| chenjinyu 发表于 2015-12-10 12:53 | 显示全部楼层
flame123 发表于 2015-12-10 11:19
你的flag是控制什么的,把初始化程序的EA提到最前面试试。

我直接照芯片手册上写的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
flame123 发表于 2015-12-10 13:29 | 显示全部楼层
chenjinyu 发表于 2015-12-10 12:53
我直接照芯片手册上写的

你看的不仔细,你的程序设置的是IT0=1;这个是上升沿有效,手册是IT0=0,这个是下降沿有效。
JY-DX-JY 发表于 2015-12-10 13:34 | 显示全部楼层
还是楼上仔细。不过感觉一样,按键按下去是下降沿,弹起来就是上升沿了。
 楼主| chenjinyu 发表于 2015-12-10 13:56 | 显示全部楼层
JY-DX-JY 发表于 2015-12-10 11:02
现在不一样的地方就是外部中断了。你说哪里有问题。

我用示波器看了,当计数停止的时候发现有下降沿的
 楼主| chenjinyu 发表于 2015-12-10 13:57 | 显示全部楼层
wh6ic 发表于 2015-12-10 12:47
用IO设置计数没有问题,外接有问题。硬件问题的可能性很大,有外界干扰的可能 ...

我用示波器看了,当计数停止的时候有下降沿的
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) ;

}
}
}
我感觉你这儿有问题。你外部中断不就是检测下降沿吗?这儿又检测,不重复了吗?
 楼主| 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了
 楼主| chenjinyu 发表于 2015-12-10 14:06 | 显示全部楼层

这个是复位的外部按键,但是计数停止后我按下复位,数字清零,但是之后数字也不再发生变化
JY-DX-JY 发表于 2015-12-10 14:18 | 显示全部楼层
奥。我明白了。
你现在使用干簧管给外部中断,可能有干扰。
你先不用干簧管,你用个按键试下。
flame123 发表于 2015-12-10 14:33 | 显示全部楼层
chenjinyu 发表于 2015-12-10 14:04
不是啊!芯片上有这样一句,设置INT0的中断触发方式(1:falling only  0:Rising&Falling)  所以我设置 ...

不好意思,1是下降沿,我记错了,你现在这个问题,你可以这么解决,你的要求就是在检测到外部中断后,数码管开始计数,对吧,既然开始计数,当你检测到中断的时候,进入你的中断函数,那么你的最好这么写,检测到外部中断,你把你中断的delay函数去掉,把flag也去掉(这玩意你又没用),然后再测试,另外,你的外部中断0是中断等级最高的,所以你的复位时不起作用的,这个时候,你最好改变思路,用定时器。
 楼主| chenjinyu 发表于 2015-12-10 14:45 | 显示全部楼层
JY-DX-JY 发表于 2015-12-10 14:18
奥。我明白了。
你现在使用干簧管给外部中断,可能有干扰。
你先不用干簧管,你用个按键试下。 ...

用了按键了,还是不行,我比较疑惑的是为何断电之后再重新上电就行了,而按下复位键却不行
 楼主| chenjinyu 发表于 2015-12-10 14:47 | 显示全部楼层
flame123 发表于 2015-12-10 14:33
不好意思,1是下降沿,我记错了,你现在这个问题,你可以这么解决,你的要求就是在检测到外部中断后,数 ...

把delay去掉,把flag去掉,之前都已经试过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

170

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

42

主题

170

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部