您现在所在的是:

单片机论坛

回帖:4个,阅读:1519 [上一页] [1] [下一页]
704
snn
文章数:2
年度积分:50
历史总积分:704
注册时间:2011/9/2
发站内信
发表于:2011/9/2 9:41:18
#0楼
请问一下各位高手,T2定时器一直都开不了,是怎么回事?
# include <at89x52.h>
sbit V1=P3^0;  
sbit V2=P3^1;
sbit V3=P3^2;
////////////////////////////////////////////////////////////////////////////////////
//函数名: Wait_Ms()
//功  能: 延时,单位大概是 1ms
//输  入: 延时值 i 单位为mS
//输  出: 无
///////////////////////////////////////////////////////////////////////////////////
void Wait_MS (unsigned char i)
{
  int j;
  for(i;i<0;i--)
  {
    for(j=0;j<178;j++);
}

}
/
////////////////////////////////////////////////////////////////////////////////////
//函数名: timer 0()
//功  能: 定时器中断0,X轴方向速度
//输  入: 无
//输  出: 无
////////////////////////////////////////////////////////////////////////////////////
void timer0(void) interrupt 1 //T0中断
{  TR1=0;
  TR2=0;

   V1=!V1;
}

////////////////////////////////////////////////////////////////////////////////////
//函数名: timer 1()
//功  能: 定时器中断1,y轴方向速度
//输  入: 无
//输  出: 无
////////////////////////////////////////////////////////////////////////////////////
void timer1(void) interrupt 3//T1中断
{  TR0=0;
  TR2=0;
   V2=!V2;
}
////////////////////////////////////////////////////////////////////////////////////
//函数名: timer 2()
//功  能: 定时器中断2,z轴方向速度
//输  入: 无
//输  出: 无
////////////////////////////////////////////////////////////////////////////////////
void timer2(void) interrupt 5 //T2中断
{  TR0=0;
  TR1=0;
  TF2=0;    // T2定时器发生溢出中断时,需要用户软件清除溢出标记,而51的其他定时器是自动清除的
  V3=!V3;
}
////////////////////////////////////////////////////////////////////////////////////
//函数名: Scan_key()
//功  能: 按键扫描
//输  入: 无
//输  出: 无
////////////////////////////////////////////////////////////////////////////////////
unsigned char Scan_key()
{
  unsigned char i,k;
  i = P1 & 0x1c;   //hllibs
  if(i == 0x1c)
   {
     k = 0;  //无按键按下
   }
  else
   {
     //Wait_MS(10);  //延时去抖
     switch(i)
       {
         case 0x18:k=1;break;
         case 0x14:k=2;break;
         case 0x0c:k=3;break;
       }
    }
   return k;
}
////////////////////////////////////////////////////////////////////////////////////
//函数名: main()
//功  能: 主程序的入口,一维移动速度为0-150mm/S可调
//输  入: 无
//输  出: 无
////////////////////////////////////////////////////////////////////////////////////
void main()
{
  int key_val=0;

  EA=0;
  TMOD=0x22;         //T0定时器工作方式2,T1定时器工作方式2,8位自动重载
  TH0= 0x8D;         //4kHz频率,125uS中断一次 ,256-125uS*11.0592M/12=141=0x8D
  TL0= 0x8D;
  TH1= 0x8D;
  TL1= 0x8D;
  TH2= 0xFF;
  TL2= 0xD8;
  RCAP2H=0xFF;        //4kHz频率,125uS中断一次,65536-125uS*11.0592M/12=65421=0xFF8D
  RCAP2L=0xD8;
  T2CON=0x00;         //T2定时器工作方式 为16位定时器自动重载
  EA=1;
  ET0=1;
  ET1=1;
  ET2=1;
 


  V1=0;              
  V2=0;
  V3=0;


//unsigned int hz_shu=4KHZ
//T0_cnt=0;
//T1_cnt=0;
//T2_cnt=0;

  Wait_MS(200);

//T0_over_num=get_T_over_num(hz_shu);
//T1_over_num=get_T_over_num(hz_shu);
//T2_over_num=get_T_over_num(hz_shu);

  while(1)
    {
      key_val = Scan_key();  //扫描按键
      if(key_val != 0)
      Wait_MS(10);
      if(key_val != 0)
         {
             switch(key_val)
            {
               case 1:TR0=1;break;  //开启定时器T0
               case 2:TR1=1;break;  //开启定时器T1
               case 3:TR2=1;break;  //开启定时器T2
            }
          }
       else
          {
             TR0=0;   //无产生脉冲按键按下时,关闭所有定时器
             TR1=0;
             TR2=0;
          }
     }
}
722
1158660293
文章数:9
年度积分:50
历史总积分:722
注册时间:2011/8/31
发站内信
发表于:2011/9/2 12:37:04
#1楼
是不是和中断优先级有关,你在想一想!
1058
zhgkwfxs
文章数:160
年度积分:50
历史总积分:1058
注册时间:2010/7/13
发站内信
发表于:2011/9/15 12:09:37
#2楼
调试可以中断,你的按键程序及定时中断处理编的有问题
1449
静水流深0904
文章数:137
年度积分:50
历史总积分:1449
注册时间:2011/9/15
发站内信
发表于:2011/9/15 15:28:42
#3楼
我现在做plc,以前调过,我记得很好调啊就和T0、T1设置的一样就行,主要是设置T2CON,你在看看吧!
704
snn
文章数:2
年度积分:50
历史总积分:704
注册时间:2011/9/2
发站内信
发表于:2011/9/26 16:21:59
#4楼
已经搞定了,原来程序没有问题,是仿真环境的问题,内核是51内核,没有T2定时器

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004