首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机中断不产生是咋回事!(急)

2012-03-01 
单片机中断不产生是怎么回事!(急)我用中断读取icl7135的转换结果,昨天中断还产生,怎么今天就不行了?望达人

单片机中断不产生是怎么回事!(急)
我用中断读取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; //增加
}

热点排行