外部中断触发定时不对

2019-07-15 16:24发布

大家好,我想用外部中断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++);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。