发帖 |
[问答] 52单片机定时器0 定时器1 定时器2同时使用
2018-5-18 12:14:19  1507 单片机 定时器
收藏 1 收藏 推荐 0 推荐
分享
求助各位大神
小弟在编写程序的过程中碰到了如题所示的问题,三个定时器其中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;
                }
                }
        }



2018-5-18 12:14:19   评论 邀请回答
5个回答
不管你使用那款单片机,只要是想同时使用两个定时器,你就必须求出它俩的公约数,你明白吗?
2018-5-19 22:01:48 评论

举报

定时器同时使用这个得看手册介绍怎么解决吧
2018-5-20 13:00:48 评论

举报

houjue 发表于 2018-5-19 22:01
不管你使用那款单片机,只要是想同时使用两个定时器,你就必须求出它俩的公约数,你明白吗?

这个不太懂 谢谢您 之前没接触过这个问题
2018-5-22 08:42:20 评论

举报

@曲终人散@ 发表于 2018-5-20 13:00
定时器同时使用这个得看手册介绍怎么解决吧

手册貌似也没说
2018-5-22 08:42:38 评论

举报

对于你的问题描述和所想要实现的目的不太明白,对于在main的while里无法发送串口的问题,在while里并没有看到你有发送串口数据的操作,至于T0,T1需要在T2初始化后才能初始化,那有可能是在T2初始化时,影响到了T0,T1设置的某些寄存器,这个需要查看手册,T2是非标准51的,所以不同公司的51芯片的T2设置有可能不同
2018-5-22 10:22:16 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

提问题
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表