单片机中断不产生是怎么回事!(急)
我用中断读取icl7135的转换结果,昨天中断还产生,怎么今天就不行了? 望达人指点指点!程序如下!我qq174717183
#include <reg51.h>
#include <absacc.h>
#define ad_run XBYTE[0x7fff]
#define ad_read XBYTE[0xbfff]
#define uchar unsigned char
uchar bbb[5]=0;
uchar aaa;
uchar i;
bit overrun;
bit underrun;
bit data_ready; /* 增加一个标志 */
main()
{
IT0=1; // interrupt edge trigger
IE=0x81; //interrupt 0 enable
i = 5; /* "i " 做全局变量的名字,实在是很不好 */
ad_run=0x20; //ad start
while(1)
{
if (data_ready)
{
/* 处理采样的数据 */
data_ready = 0;
ad_run = 0x20; /* 假定需要重复测量, 再次启动转换 */
}
}
}
void ad_result() interrupt 0
{
ad_run = 0; /* 如果需要暂停它,在哪一个nSTROBE脉冲给出控制信号并无分别*/
/* 每个脉冲都重复给出给出同样的控制信号也没有问题 */
aaa=ad_read;
overrun = underrun = 0; /* 先清0 */
if(aaa&0x04==0x04)
overrun=1; //过量程处理
else if(aaa&0x01==0x01)
underrun=1; //欠量程处理
bbb[i]=aaa; /* 我不知道 B1-B4 占 A 中的哪4个bit */
i--;
if (i==0)
{
data_ready = 1;
i = 5;
}
}
[解决办法]
产生不了中断,很多时候不是软件的问题!
具体,还是先从硬件入手吧...
[解决办法]
EA=1
中断总允许你改了吗?
[解决办法]
//这样改试试
main()
{
IT0=1; // interrupt edge trigger
IE=0x81; //interrupt 0 enable
EA=1; //增加
i = 5; /* "i " 做全局变量的名字,实在是很不好 */
ad_run=0x20; //ad start
while(1)
{
if (data_ready)
{
/* 处理采样的数据 */
data_ready = 0;
ad_run = 0x20; /* 假定需要重复测量, 再次启动转换 */
}
}
}
void ad_result() interrupt 0
{
EA =0; //增加
ad_run = 0; /* 如果需要暂停它,在哪一个nSTROBE脉冲给出控制信号并无分别*/
/* 每个脉冲都重复给出给出同样的控制信号也没有问题 */
aaa=ad_read;
overrun = underrun = 0; /* 先清0 */
if(aaa&0x04==0x04)
overrun=1; //过量程处理
else if(aaa&0x01==0x01)
underrun=1; //欠量程处理
bbb[i]=aaa; /* 我不知道 B1-B4 占 A 中的哪4个bit */
i--;
if (i==0)
{
data_ready = 1;
i = 5;
}
EA = 1; //增加
}