发 帖  
[问答] 52单片机定时器0 定时器1 定时器2同时使用
2018-5-18 12:14:19  1795 单片机 定时器
收藏 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 下一条

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

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

电路设计论坛

电子元器件论坛

传感技术

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

Orcad论坛

-

综合技术与应用

电机控制

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

物联网技术

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

高校联盟

深圳大学电子协会

西藏民族学院电子设计协会

西安电子科技大学西电实验室

桂林电子科技大学机电工程协会

鉴鹰电子科技协会

广东海洋大学科技创新协会

福建农林大学电子科技创新协会

湖北理工学院电子技术协会

深圳职业技术学院电子精英训练营

浙江科技学院Zuster

湘潭大学电子科技协会

青岛理工大学琴岛学院天宏开发团队

河南理工大学大学生电器开发部

广西科技大学电气信息创新协会

浙江机电职业技术学院电子制作协会

郑州大学西亚斯国际学院爱电工作室

新乡学院电子创新工作室

洛阳理工学院SmartTeam

苏州工业职业技术学院创新工作室

浙江工业大学GC315团队

杭电-微芯大学生科技创新孵化器

西安工业大学电信科协

商洛学院科技创新协会

大连民族学院创新工作室

南京信息工程大学帆木工作室

-

供求信息发布

方案交易

供需广告

芯片求购|供应发布区