标题: 两个中断存在,为什么单片机上不是我想要的结果 [打印本页]

作者: woaiwm    时间: 2015-1-24 23:16
标题: 两个中断存在,为什么单片机上不是我想要的结果
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned int
#define LED P2
void delay_ms(uint xms);
uchar num1;
uchar num2;
void main()
{
LED=0xFE;
TMOD=0X11;
TH0=0x3C;
TL0=0xB0;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1);
delay_ms(600);
ET1=1;
TR1=1;
while(1);
}
void T0_time() interrupt 1
{
TH0=0x3C;
TL0=0xB0;  //重装初值
if(num1==10)
{
  num1=0;
  LED=_crol_(LED,1);
}
num1++;
}
void T1_time() interrupt 3
{
TH0=0x3C;
TL0=0xB0;  //重装初值
if(num2==10)
{
  num2=0;
  LED=_cror_(LED,1);
}
num2++;
}
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i++)
{
  for(j=110;j>0;j--)
  {
   ;
  }
}
}

作者: liaolinhui    时间: 2015-1-24 23:17
你想要的啥结果
作者: liaolinhui    时间: 2015-1-24 23:21
我算是明白了
void main()
{
LED=0xFE;
TMOD=0X11;
TH0=0x3C;
TL0=0xB0;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1);//程序执行到这里就进入死循环了
后面的delay_ms(600);
ET1=1;
TR1=1;
while(1);根本不会执行,所以程序只会执行定时器0中断而不会执行定时器1中断
作者: woaiwm    时间: 2015-1-24 23:38
那怎么改呢?求解答,我想要的就是先是左循环,再是右循环,初学定时器,别见怪哈!求怎么改?
作者: woaiwm    时间: 2015-1-24 23:38
liaolinhui 发表于 2015-1-24 23:21
我算是明白了
void main()
{

那怎么改呢?求解答,我想要的就是先是左循环,再是右循环,初学定时器,别见怪哈!求怎么改?
作者: wind02072107    时间: 2015-1-25 10:57
即使先左循环再右循环的话,也不需要使用两个定时器啊,使用两个定时器的话也要分时启动啊,先左边循环完成后再启动右循环,然后开启定时中断1,建议使用一个定时中断,使用循环标志位来控制左右循环
作者: woaiwm    时间: 2015-1-25 13:26
wind02072107 发表于 2015-1-25 10:57
即使先左循环再右循环的话,也不需要使用两个定时器啊,使用两个定时器的话也要分时启动啊,先左边循环完成 ...

哦哦哦,谢谢
作者: Tangtaotao    时间: 2016-10-9 23:07
中断的执行建议你去看看原理




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1