微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么T0,T1我只能使用一个呢

为什么T0,T1我只能使用一个呢

时间:10-02 整理:3721RD 点击:
代码如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1=P1^0;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c};
void delay(uint z);
void display(uchar shi,uchar ge);
void init();
uchar aa,bb,temp,shi,ge;
void main()
{
init();
while(1)
{
  /*if(aa==4)             //判断延时200ms,灯1亮
  {
   aa=0;
   D1=~D1;
  }*/
  if(bb==20)            //判断延时1s
  {
   bb=0;
   temp++;
   if(temp==60)       //清零
   {
    temp=0;
   }
   shi=temp/10;
   ge=temp%10;
  }
  display(shi,ge);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);

dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void init()
{
TMOD=0X11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
/*void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}*/
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
bb++;
}
目的是让t0控制一个led。让t1来给数码管控制。但是实际运行中发现数码管永远是00,led闪烁,把t0注释掉以后数码管能正常工作,这是怎么回事呢?(上面代码我已经注释了t0)

把延时改短点,TH0=(65536-50000)/256;
TL0=(65536-50000)%256;这两句算出来放到中断里面,减少中断执行时间

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

网站地图

Top