52单片机定时器0 定时器1 定时器2同时使用

2019-07-15 08:24发布

求助各位大神
小弟在编写程序的过程中碰到了如题所示的问题,三个定时器其中0和1用于定时,定时器2用于波特率发生器,但是一旦将串口发送的函数放在main大循环中,串口没有输出,但是放在main的循环前面,串口是可以执行一次的,而且T2初始化之后要想保证T0 T1正常,必须重新给T0 T1初始化,以下是部分代码:
void T2init()
{
        T2MOD = 0x01; //自动重载
T2CON = 0x30; //T2用做发送接收时钟
//  TH2 = 0xFF;  //9600波特率,11.0592Mhz晶振
//  TL2 = 0xDC;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据
TR2 = 1;  //启动T2
}
main()
{
int i;
int j;
IP=0X10;
t=30000;
T2init();
// uart_cfg();
send_string(alARM);
delay(5);
send_string(weizhi);


// a=0;                                                //发送报警之后恢复T0 T1基本参数
TH0=(65536-t)/256;
TL0=(65536-t)%256;
TMOD=0X11;
TR0=0X01;
TF0=0X00;
PT0=0;
ET0=0X01;


TH1=0xd8;
TL1=0xef;
TR1=0X01;
TF1=0X00;
PT1=1;
ET1=0X01;
while(1)
        {
               
//圈数计算        
                j=z/4;
                i=j;
                ge=i%10;
                i=j/10;
                shi=i%10;
                i=j/100;
                bai=i%10;
                i=j/1000;
                qian=i%10;
                i=j/10000;
                wan=i%10;
//键盘显示值计算
                P1=0x0f;
                if(P1!=0x0f&&a==0)//电机未运转则键盘有效
                {  
                        if(P1!=0x0f&&a==0)
                        {
                         Key_Scan();
                        }
                          if(key==15)                                 //清零
                                                                        
                         {
                         age=0;
                         ashi=0;
                         abai=0;
                         aqian=0;
                         awan=0;
                         x=0;
                         m=0;
                   // (*((void (*)())(rst)))();  // 将rst数组当函数调用 产生复位效果        (已经屏蔽)

                         }
                         else if(m<6553)                          //键盘设定值要小于65535
                         {
                                m=m*10+key;
                                age=m%10;
                                n=m/10;
                                ashi=n%10;
                                n=m/100;
                                abai=n%10;
                                n=m/1000;
                                aqian=n%10;
                                n=m/10000;
                                awan=n%10;
                                x=m;
                         }
               
                while(P1!=0xf0);


                }
                if(already==0)
                        {
                                if(z/2==x)
                                {
                                        //a=~a;
                                        b=~b;
                                        already=1;
                                }
                        }
                        
                while(P3_7)         //开关
                {
                while(P3_7)        ;
                   a=~a;
                }
                while(P3_6)         //方向
                {
                while(P3_6)        ;
                   b=~b;
                }
                while(P3_5)         //减速
                {
                  while(P3_5);        // t值最大为65535
                if(t<=40000)
                {               
                  t=t+10000;
                }
                }
                while(P3_4)         //加速
                {
                while(P3_4)        ;
                if(t>=20000)
                {
                  t=t-10000;
                }
                }
        }



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。