打印
[STC单片机]

外部中断触发定时不对

[复制链接]
1326|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caoye87|  楼主 | 2015-8-3 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我想用外部中断1控制外部中断0,当中断1发生后,打开中断0,中断0接口一直有方波输入的,打开中断0后接收到方波的下降沿时,再打开定时器1,同时关闭外部中断0.定时器1定时20mS输出,然后关闭定时器。可是用proteus仿真出来的结果不对。附上程序,请高手指教,谢谢。

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit ready = P3^3;          //  充电到
sbit fire  = P1^7;          //  输出点火

void delay(uint time);
void exint0(void);
void tim0(void);

void main(void)
{
    EA   = 1;             //  开总中断
    IT0  = 1;             // INT0下降沿触发
    IT1  = 1;             // INT1下降沿触发
    EX0  = 0;             // 关INT0中断
    EX1  = 1;             // 开INT1中断
    TR1  = 0;             // 关定时器1
    ET1  = 1;             //  开定时器1中断
    TMOD = 0x10;          // 定时器1工作于方式1
    TH1  = 0xB8;          // 定时20mS
    TL1  = 0x00;

    ready = 1;
    fire  = 1;

    while(1)
    {
        delay(200);
    }
}

void exint1(void)interrupt 2
{
    EX0 = 1;
}

void exint0(void)interrupt 0
{   
    TR1 = 1;                     // 打开定时器1
   
    EX0 = 0;                     // 关INT0中断
}

void tim1(void)interrupt 3
{
    TH1  = 0xB8;
    TL1  = 0x00;
    TR1   = 0;                  //  关闭定时器

    fire = 0;                   //  点火输出
    delay(200);
    fire = 1;   
}

void delay(uint time)
{
   uint i;
   uchar j;
   for(i=0;i<time;i++)
   {
    for(j=0;j<200;j++);
        for(j=0;j<102;j++);
        }
}

相关帖子

沙发
caoye87|  楼主 | 2015-8-3 09:50 | 只看该作者
没人遇到类似情况吗

使用特权

评论回复
板凳
ayb_ice| | 2015-8-3 17:12 | 只看该作者
闲着蛋疼吧

你这把中断都打开了,不该到的信号先到了,不就乱了吗

应该是依次打开才对

使用特权

评论回复
地板
caoye87|  楼主 | 2015-8-4 14:32 | 只看该作者
ayb_ice 发表于 2015-8-3 17:12
闲着蛋疼吧

你这把中断都打开了,不该到的信号先到了,不就乱了吗

我的顺序是开中断int1,关int0和定时器1,当int1有触发时,打开int0,收到int0下降沿,打开定时器1同时关闭int0,因为int0一直有脉冲信号的;最后定时到再fire输出,同时关闭定时器。不知道哪里错了,还请高手指正,谢谢。

使用特权

评论回复
5
ayb_ice| | 2015-8-4 14:35 | 只看该作者
caoye87 发表于 2015-8-4 14:32
我的顺序是开中断int1,关int0和定时器1,当int1有触发时,打开int0,收到int0下降沿,打开定时器1同时关 ...

开中断前,一般需要清除相应的标志,

标志会置位的,只要信号正常,不管你中断是否开启

也许还有其它问题

使用特权

评论回复
6
caoye87|  楼主 | 2015-8-4 14:37 | 只看该作者
ayb_ice 发表于 2015-8-4 14:35
开中断前,一般需要清除相应的标志,

标志会置位的,只要信号正常,不管你中断是否开启

谢谢,我再检查检查。

使用特权

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

本版积分规则

6

主题

20

帖子

0

粉丝