外部中断触发定时不对

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条回答
小猴子卡勒
1楼-- · 2019-07-16 14:11
caoye87 发表于 2015-8-3 16:54
我是读IO口前先置高电平后读,我的外部是用电阻上拉到VCC,按键按下拉地,应该没有问题。

我想知道你仿真哪一点不对,我看完程序,感觉应该能按你说的功能实现
caoye87
2楼-- · 2019-07-16 18:09
小猴子卡勒 发表于 2015-8-3 17:00
我想知道你仿真哪一点不对,我看完程序,感觉应该能按你说的功能实现

未命名.jpg ,请你帮我看看
zhangruiqi2315
3楼-- · 2019-07-16 19:21
谢谢。。。。。。。。。。。。。。。。。
caoye87
4楼-- · 2019-07-16 21:34
已解决,谢谢 。                                    
小猴子卡勒
5楼-- · 2019-07-16 22:35
 精彩回答 2  元偷偷看……
caoye87
6楼-- · 2019-07-17 00:41
void exint1(void)interrupt 2
{
    IE   = 0;
    EX0 = 1;
}
加上IE=0即可,谢谢你这些天的回答

一周热门 更多>