微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 外部中断内部有定时器中断怎么没有执行,请帮忙看看

外部中断内部有定时器中断怎么没有执行,请帮忙看看

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

外部中断内部有定时器中断怎么没有执行,请帮忙看看
外部中断1执行后,到定时器0中断的时候不能执行,为什么呢?  

刚开始写软件,求帮助
格式怎么考进来都乱了。
#include "reg52.h"#define uint unsigned int
#define uchar unsigned char
uchar count;uint num;
sbit east_red        =        P2^0;
sbit east_green =        P2^1;
sbit sou_red        =        P2^6;
sbit sou_green        =        P2^7;
sbit d1                        =        P2^4;
sbit sp=P1^5;
void delayms(uint);
void main(){      
  TMOD=0x01;      
  TH0=(65536-50000)/256;     
   TL0=(65536-50000)%256;  
         EA=1;     
         EX1=1;      
        ET0=1;      
        TR0=1;      
      east_red=0;   
       east_green=0;   
      sou_red=0;     
      sou_green=0;      
  delayms(1000);        
        while(1)      
    {              
          east_red=0;               
          east_green=1;           
           sou_red=1;              
         sou_green=0;            
         delayms(200);
            
        east_red=1;         
         east_green=0;         
        sou_red=0;           
       sou_green=1;               
        delayms(200);      
  }
}
void delayms(uint i)                   //延时函数
{      
   uint j;     
   for(;i!=0;i--)   
    {            
        for(j=112;j!=0;j--);   
    }
}
void external1() interrupt 2                      //外部中断1
{      
     d1=0;  
      delayms(1000);     
      d1=1;      
     delayms(1000);   
    sp=0;      
     delayms(1000);      
      sp=1;            
    num=0;                  
                     //这段程序没有运行。        
if(num==20)                                //外部中断执行了      
{                                                //但是定时器中断没有运行           
          num=0;              
        count=0xfe;        
       P2=count;              
           sp=0;              
          delayms(1000);            
           sp=1;           
          delayms(1000);   
    }            
  }
void time0() interrupt 1                                //定时器0——50ms中断
{     
   TH0=(65536-50000)/256;   
     TL0=(65536-50000)%256;      
  num++;     
  }




之前一直做硬件,现在想转软件,遇到好多问题呀,求帮助

  num=0;                  
                     //这段程序没有运行。        
if(num==20)      
前面那个num = 0清零语句删掉。刚清零 哪有那么快到20啊。就算是TIM0的中断优先,也没有一条判断语句的时间超过20吧。你把51看得太慢了 呵呵。
不信,你可以把 if(num == 20) 改成
while(num != 20)
{
;
}
让CPU卡死在这里一段时间,让TIM0中断个20次。一样能进。

谢了,确实是这样的

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

网站地图

Top