打印
[STC单片机]

INT0可以进入中断服务,换成INT1就进不去中断

[复制链接]
2211|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1378659581@qq|  楼主 | 2015-11-2 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我昨天碰到一个问题,一直没搞明白,想请教一下大家。问题是这样的:下面这个程序中,中断服务采用INT0时可以进去,但采用INT1时就不能进去,请问一下大家这是什么情况?谢谢!

#include <STC12C2052AD.H>
unsigned char a,b,maxv,f,i;//b为按键状态标志,a为最大输出标志
unsigned int c;//c为输出状态的第二级标记(第一级为b)
unsigned char code freq[]={0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE};         //不同输出频率对应的T1初值

sbit CLKOUT1 = P1^1;//置时钟输出口
sbit LED3 = P1^5;//扫频状态指示
sbit KEY = P3^2;

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY (unsigned int a){
        unsigned int i;
        while( a-- != 0){
                for(i = 0; i < 600; i++);
        }
}
/*********************************************************************************************/

/*********************************************************************************************
函数名:主函数;STC15F104W有一个外部中断源,一个
调  用:无
参  数:无
返回值:无
结  果:程序开始处,无限循环
备  注:
/**********************************************************************************************/
void main (void){
        AUXR |= 0xC0;//T0、T1时钟速度1T
        TMOD =0x22;//定时器0、1置8位自动装载

        TL1 = TH1 = 0xC8;//8位自动装载数256-56,1T模式下输出107kHz激励信号
        TCON |= 0x45;//T1开始计时;外部中断源INT0、INT1为下降沿触发

        EA = 1;//开总中断
//        EX0 = 1;//开外部中断0
        EX1 = 1;//开外部中断1

        maxv = 0;

        P1M1 = 0x01;//0000 0010,置P1.2为高阻输入
        P1M0 = 0x04;//0000 0100,置P1.0为强推输出
        P3M1 = 0x20;//0010 0000
        P3M0 = 0x00;//0000 0000,置P3.5为强推输出

//        IPH |= 0x05;  //INT0、INT1设为最高优先级中断
//        IP |= 0x05;

        ADC_DATA = 0x00;
        ADC_CONTR = 0xE2;       
        while(1);
}
/**********************************************************************************************/
函数名:中断处理函数0,绿灯
调  用:无
参  数:无
返回值:无
结  果:
备  注:
/**********************************************************************************************/
void inter1 () interrupt 2
{
        if (KEY == 0){
        DELAY (50);                                       
        if (KEY == 0){
        WAKE_CLKO = 0x02;//允许T1时钟输出
        for (i=0;i<11;i++)                                 //扫频,选择最佳工作频率
        {
          TL1 = TH1 = freq[i];//8位自动装载数1T模式下输出激励信号
          DELAY (500);
          ADC_CONTR |= 0x08;
          while ((ADC_CONTR & 0x10)==0);
          ADC_CONTR &= 0xEF;
          if(ADC_DATA>=maxv)
          {
                  maxv = ADC_DATA;
                f = freq[i];
          }                          
          LED3 = ~LED3;          
        }
        LED3 = 0;
        TL1 = TH1 = f;          
        WAKE_CLKO = 0x00;//不允许T1时钟输出
       CLKOUT1 = 0;//输出置零
        }
        }
}

相关帖子

沙发
autopccopy| | 2015-11-3 08:51 | 只看该作者
如果是STC15F104W的话,要看它有否这个资源。

使用特权

评论回复
板凳
1378659581@qq|  楼主 | 2015-11-3 14:50 | 只看该作者
autopccopy 发表于 2015-11-3 08:51
如果是STC15F104W的话,要看它有否这个资源。

我这里用的是STC12C2052AD,程序里那个说明忘改了,104W也是有INT1的吧,我记得是

使用特权

评论回复
地板
15715627181| | 2015-12-27 20:28 | 只看该作者
中断优先级问题吧,你把INTO设为高优先吧

使用特权

评论回复
5
hnsyz| | 2018-12-9 00:01 | 只看该作者
接的p32不用0行吗?

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝