外部中断触发定时不对

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++);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
caoye87
1楼-- · 2019-07-15 18:35
 精彩回答 2  元偷偷看……
caoye87
2楼-- · 2019-07-16 00:33

没人遇到类似情况吗
小猴子卡勒
3楼-- · 2019-07-16 00:49
main函数里面,你的ready=1,这句话不对吧,你首先要打开外部中断1,但是外部中断1采用的是下降沿触发,就是说你的P3^3端要置成低电平才会引起外部中断1
caoye87
4楼-- · 2019-07-16 06:20
小猴子卡勒 发表于 2015-8-3 15:59
main函数里面,你的ready=1,这句话不对吧,你首先要打开外部中断1,但是外部中断1采用的是下降沿触发,就是说你的P3^3端要置成低电平才会引起外部中断1

我是读IO口前先置高电平后读,我的外部是用电阻上拉到VCC,按键按下拉地,应该没有问题。
小猴子卡勒
5楼-- · 2019-07-16 06:39
caoye87 发表于 2015-8-3 16:54
我是读IO口前先置高电平后读,我的外部是用电阻上拉到VCC,按键按下拉地,应该没有问题。

你的外部中断0和1都是用你说的IO口加上拉电阻控制的吧
caoye87
6楼-- · 2019-07-16 08:52
 精彩回答 2  元偷偷看……

一周热门 更多>