请各位高手看看 ,这个中断伟什么没有用 谢谢
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i,k,l;
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code led[]={0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff,
0xff,0xff,0xff,0xbb,0x81,0xbf,0xff,0xff,
0xff,0xff,0x99,0xae,0xb6,0x99,0xff,0xff,
0xff,0xff,0xdd,0xb6,0xb6,0xc9,0xff,0xff,
0xff,0xff,0xe3,0xed,0x00,0xef,0xff,0xff,
0xff,0xff,0xd8,0xba,0xba,0xc6,0xff,0xff,
0xff,0xff,0xc1,0xb6,0xb6,0xcf,0xff,0xff,
0xff,0xff,0xfe,0x86,0xf8,0xfe,0xff,0xff,
0xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff,
0xff,0xff,0xd9,0xb6,0xb6,0xc1,0xff,0xff,
0xff,0xbf,0x83,0xec,0x83,0xbf,0xff,0xff,
0xff,0xbe,0x80,0xba,0xba,0xc5,0xff,0xff,
0xff,0xc1,0xbe,0xbe,0xbe,0xdd,0xff,0xff,
0xff,0xbe,0x80,0xbe,0xbe,0xbe,0xc1,0xff,
0xff,0xbe,0x80,0xb6,0xb6,0x9c,0xff,0xff,
0xff,0x7e,0x00,0x6e,0xc6,0xfc,0xff,0xff};
void delay(uchar t) ////延时函数
{
uchar i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
void dsq()
{
EA=1;
EX0=1;
IT0=0;
//EX1=1;
//IT1=1;
}
void in_0() interrupt 0 //////外部中断0
{
uchar a;
for(a=0;a<8;a++)
P1=wei[a];
delay(1000);
}
void main()
{
uint i,k,l;
dsq();
while(1)
{
for(k=0;k<=128;k++)
for(l=10;l>0;l--)
for(i=0;i<=7;i++)
{
P2=led[(i+k)%128];
P0=wei[i];
delay(5);
}
}
}
#define uchar unsigned char
#define uint unsigned int
uint i,k,l;
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code led[]={0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff,
0xff,0xff,0xff,0xbb,0x81,0xbf,0xff,0xff,
0xff,0xff,0x99,0xae,0xb6,0x99,0xff,0xff,
0xff,0xff,0xdd,0xb6,0xb6,0xc9,0xff,0xff,
0xff,0xff,0xe3,0xed,0x00,0xef,0xff,0xff,
0xff,0xff,0xd8,0xba,0xba,0xc6,0xff,0xff,
0xff,0xff,0xc1,0xb6,0xb6,0xcf,0xff,0xff,
0xff,0xff,0xfe,0x86,0xf8,0xfe,0xff,0xff,
0xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff,
0xff,0xff,0xd9,0xb6,0xb6,0xc1,0xff,0xff,
0xff,0xbf,0x83,0xec,0x83,0xbf,0xff,0xff,
0xff,0xbe,0x80,0xba,0xba,0xc5,0xff,0xff,
0xff,0xc1,0xbe,0xbe,0xbe,0xdd,0xff,0xff,
0xff,0xbe,0x80,0xbe,0xbe,0xbe,0xc1,0xff,
0xff,0xbe,0x80,0xb6,0xb6,0x9c,0xff,0xff,
0xff,0x7e,0x00,0x6e,0xc6,0xfc,0xff,0xff};
void delay(uchar t) ////延时函数
{
uchar i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
void dsq()
{
EA=1;
EX0=1;
IT0=0;
//EX1=1;
//IT1=1;
}
void in_0() interrupt 0 //////外部中断0
{
uchar a;
for(a=0;a<8;a++)
P1=wei[a];
delay(1000);
}
void main()
{
uint i,k,l;
dsq();
while(1)
{
for(k=0;k<=128;k++)
for(l=10;l>0;l--)
for(i=0;i<=7;i++)
{
P2=led[(i+k)%128];
P0=wei[i];
delay(5);
}
}
}
不起作用是什么意思,进不了中断吗?查询中断标识位看一下呢
- void in_0() interrupt 0 //////外部中断0
- {
- uchar a;
- for(a=0;a<8;a++)
- P1=wei[a];
- delay(1000);
- }
你这个程序写得很难看,不规范。
首先是命名,初始化外部中断你可以这样写吧,void INT0_Init(),一看就知道是说的是外部中断0初始化。还有数组名的命名也不知道是什么……
另外是循环嵌套三层了,应尽量少弄三层以上的循环管嵌套,人家一看就没心情看下去了。
楼上的可能说对了,你是想通过P1口的输出驱动外设(估计你是驱动数码管之类的),你少了一个大括号,程序在极短时间内将wei[0]……wei[7]不断地赋值给P1口,全部一个个赋值完后你才执行delay(1000),即延迟1s,因P1口赋值时间过短,外设上实际看起来可能是没变化,你就觉得外部中断没反应,可实际上外部中断已经有执行过了的。
外部中断的触发方式跟你的外部信号对应吗?IT0位选择的
再检查几遍
