打印

恳请各路单片机高手指教!

[复制链接]
1691|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiuxiu217|  楼主 | 2010-10-20 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar i,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
EA=1;//开总中断
EX0=1;//允许外部中断0
IT0=0;//电平触发方式
while(1)
{
  for(num=0;num<16;num++)
   {
    P2=0xf8;
    P0=table[num];
    delay(500);
   }
}
}
void delay(uint z)//延迟程序
{
uint x,y;
for(x=200;x>0;x--)
   for(y=z;y>0;y--);
}

void exter0() interrupt 0
{
for(i=0;i<4;i++)
{
  P1=0;
  delay(500);
  P1=0xff;
  delay(500);
}
}
本人一新手,为学习中断知识,写了以上程序,本意:在主程序中让数码管显示0到f,接入外部中断0(硬件接入)后,流水灯闪烁四次,然后退出中断,返回主程序。
但出现如下问题:单片机还未接入中断,程序便自己进入中断了。
不知是程序的问题,还是硬件问题。望指教!谢谢了~~

相关帖子

沙发
singleywy| | 2010-10-20 18:28 | 只看该作者
你的设置中出现三个不稳定的因素:
1)
外部中断0设置为了低电平触发,CPU上点过程中外部可能处于低电平状态导致系统自动进入中断
解决办法:EA=1,之前,先设置EA=0,再加入延时函数delay(500);然后EA=1,这样避开上电过程
2)
由于外部中断0设置了低电平触发,在触发端处于低电平时,CPU会多次检测到中断请求,导致一直维持在IE0=1
解决办法:采用负边沿触发方式,或者进入外中断0后设置EX0=0,然后在主程序中设置EX0=1,
3)
涉及到函数重入问题,delay()函数没有重入功能,这样可能会导致一些不稳定的因素,
解决办法加入reentrant:写法这样,void delay() reentrant{;}

使用特权

评论回复
板凳
yx331447791| | 2010-10-20 20:02 | 只看该作者
感觉你的程序习惯不好,好好加油学习吧

使用特权

评论回复
地板
wuyuwu| | 2010-10-20 20:25 | 只看该作者
好好加油学习吧

使用特权

评论回复
5
xiuxiu217|  楼主 | 2010-10-23 19:54 | 只看该作者
非常感谢!

使用特权

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

本版积分规则

0

主题

2

帖子

1

粉丝