微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51中断的问题,要求INT0中断和TIM0计数中断

51中断的问题,要求INT0中断和TIM0计数中断

时间:10-02 整理:3721RD 点击:

要求INT0中断后, TIME0才开始计数外部脉冲,两次脉冲溢出中断,P1亮灯,如果INT0没有中断,TIME0是不会中断的.

实现的效果是外部中断INT0对外部电平的检测,等待电平下降沿中断,低电平触发后,等待TIM0的下降沿脉冲,两次脉冲后中断,此时P0口输出高电平控制继电器开关,控制外部直流电动机的动作。一次动作完成后,重复等待外部INT0的中断,循环往复。

本人对51程序不是很会,按自己的思想写了一些程序,但是仿真出来是INT0中断P0就动作,反而计数时不动作 why?、求解

#include<reg51.h>  //  包含51单片机寄存器定义的头文件


void Delay(unsigned int i)

{

    unsigned int j;

    for(;i>0;i--)

         for(j=0;j<125;j++)

       {;}

}


/**************************************************************

函数功能:主函数

**************************************************************/

void main(void)

{

    EA=1;                  //开总中断


TMOD=0x0B;             //使用计数器的T0的模式2

TH0=(65536-65534)/256; //计数两次溢出

TL0=(65536-65534)%256;


    EX0=1;  //允许使用外中断

    IT0=1;  //选择负跳变来触发外中断

           P1=0x00;   


while(1);//无限循环等待中断


}


/**************************************************************

函数功能:外部低电平中断服务程序

**************************************************************/


void int0(void) interrupt 0  //外中断0的中断编号为0

{

   IE0=0;                 //清INT中断标志位

   EX0=0;         //清INT中断使能位

   ET0=1;         //定时中断使能位

   TR0=1;                 //启动定时器T0


}         

/**************************************************************

函数功能:定时器T0的中断服务程序

**************************************************************/

void Time0(void) interrupt 1  //"interrupt"声明函数为中断服务函数

                                    //其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器

{

    TF0=0;                //清定时中断标志位

ET0=0;         //定时中断使能位

    EX0=1;         //INT中断使能位


  TH0=(65536-65534)/256; //计数两次溢出

TL0=(65536-65534


)%256;

P1=0x01;  //溢出中断则灯亮0.1秒就熄灭。

    Delay(100);

    P1=0x00;

}



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top