C51两个定时器被占用怎么设置波特率

2019-07-15 14:30发布

我用AT89C51设计转速测量系统,需要做一个串口通信,在proteus上的虚拟终端显示,但是C51的两个定时器已经被转速测量程序给占用了,我现在如何把其中一个定时器转换为用来设置波特率的
附上我现在还没加串口通信的代码,现在本地能显示

#include<reg51.h>

#define
uchar unsigned char

#define
uint unsigned int

uint
mm=00;

uint num;

uchar code
table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};

delay(uint
m)

{ uint
i,j;

  for(i=m;i>0;i--)

     for(j=60;j>0;j--);

}

xian_shi()   

{ uchar
qian,bei,shi,ge;

  uint jj;

  jj=mm;

  qian=jj/1000;

  bei=jj%1000/100;

  shi=jj%100/10;

  ge=jj%10;

P2=0x10;

   P0=table[qian];

   delay(1);

P2=0x20;

   P0=table[bei];

   delay(1);

P2=0x40;

   P0=table[shi];

   delay(1);

P2=0x80;

   P0=table[ge];

   delay(1);

   //P2=0;

}

timer_init()  

{   EA=1;

    ET0=1;

    ET1=1;

    TMOD=0X51;

    TH0=(65535-50000)/256;

    TL0=(65535-50000)%256;

    TH1=0;

    TL1=0;

    TR0=1;

    TR1=1;        

}

main()

{   

    timer_init();

    P0=0;     

   while(1)   

     {

         xian_shi();

         delay(2);  

     }

}

void
timer0() interrupt 1

{   TR0=0;

    TH0=(65535-50000)/256;

    TL0=(65535-50000)%256;

       if(num==19)

    {TR1=0;

       num=0;

    mm=0;

    mm|=TH1;

    mm=(mm<<8)|TL1;

       TH1=0;

    TL1=0;

    TR0=1;

    TR1=1;}

       else

       {

       num++;

       TR1=1;

       TR0=1;

       }

}

void
timer1() interrupt 3     

{   TR1=0;

    TR0=0;

    mm=0;  

}没办法要求不能换单片机哎~~

求大神指教,必有重谢~~
最好能帮我把串口通信的程序加进去~~
我现在的想法是通过C51接MAX232接COMPIM再接虚拟终端然后显示,求大神指正
急求急求~~必有重谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。