打印

为什么定时器已初始化但51单片机不工作?

[复制链接]
5388|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2021-8-23 11:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
/*--------函数申明--------*/
void mode_change();
void Init_timer0(void);
void Init_Timer1(void);
int main()
{
        LCD_Init();
        WRITE_Str(1,3,"Hello World",11);
        WRITE_Str(2,1,"Welcome to Use",14);
        sys_delays(5);
        LCD_Clear();
        WRITE_Str(1,3,"Choose mode",11);
        mode_change();
        WRITE_Str(2,3,"Tempture:",9);
        WRITE_COM(0x80+0x40+12);
        WRITE_DATA(0xdf);
        WRITE_DATA(0x43);
        Init_Timer0();
        Init_Timer1();
        while(1)
        {
                while(mode == 1)
                {
                        IF(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=1;
                                L3=1;
                                TR1=1;
                                FS=0;
                                while(Flag_5s == 0);
                                TR1=0;
                                FS=1;
                                Flag_5s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
               
                while(mode == 2)
                {
                        if(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=0;
                                L3=1;
                                TR1=1;
                                FS=0;
                                while(Flag_10s == 0);
                                TR1=0;
                                FS=1;
                                Flag_10s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
               
                while(mode == 3)
                {
                        if(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=0;
                                L3=0;
                                TR1=1;
                                FS=0;
                                while(Flag_15s == 0);
                                TR1=0;
                                FS=1;
                                Flag_15s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
        }
}
//模式选择
void mode_change()
{
        mode=0;
        while(mode == 0)
        {
                if(K1 == 0)
                {
                        sys_delayxms(10);
                        if(K1 == 0)
                        {
                                mode=1;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:1",6);
                        }
                }
                if(K2 == 0)
                {
                        sys_delayxms(10);
                        if(K2 == 0)
                        {
                                mode=2;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:2",6);
                        }
                }
                if(K3 == 0)
                {
                        sys_delayxms(10);
                        if(K3 == 0)
                        {
                                mode=3;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:3",6);
                        }
                }
        }
}
void Init_Timer0(void)
{
        TMOD |= 0x01 ;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
  TH0=(65535-50000)/256;                //给定初值
  TL0=(65535-50000)%256;           
  EA=1;                    //总中断打开
  ET0=1;                   //定时器中断打开
  TR0=1;                   //定时器开关关闭
}
void Timer0_IRS() interrupt 1
{
        TH0=(65535-60000)/256;                //给定初值
  TL0=(65535-60000)%256;  
  Tem_Counter++;
        if(Tem_Counter >= 25)
        {
                Tem_Counter=0;
                ReadTemperature();
                WRITE_Num(2,10,Tempture%100/10);
                WRITE_Num(2,11,Tempture%10);
                if(Tempture > 30)
                        BZ=0;
                else
                        BZ=1;
        }
}
void Init_Timer1(void)
{
        TMOD |= 0x10 ;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
  TH1=(65535-50000)/256;                //给定初值
  TL1=(65535-50000)%256;           
  EA=1;                    //总中断打开
  ET1=1;                   //定时器中断打开
  TR1=0;                   //定时器开关关闭
}
void Timer1_IRS() interrupt 3
{
        TH1=(65535-50000)/256;                //给定初值
  TL1=(65535-50000)%256;  
        Counter++;
        if(mode == 1 && Counter == 100)
        {
                Counter=0;
                Flag_5s=1;
        }
        if(mode == 2 && Counter == 200)
        {
                Counter=0;
                Flag_10s=1;
        }
        if(mode == 3 && Counter == 300)
        {
                Counter=0;
                Flag_15s=1;
        }
}
下面是仿真

使用特权

评论回复

相关帖子

沙发
rankey| | 2021-8-24 19:58 | 只看该作者
本帖最后由 rankey 于 2021-8-24 20:00 编辑

看了一遍代码,发现T1定时器,初始化后 TR1=0;就是说没开定时器1
   然后在大循环while里,T1定时器也是开一会,马上又关掉了。
       T1定时器,基本上没正常开启。
   对T1定时器的使用,与我在用的T1不一样。
  我一般这样用,比如说:

      void Timer1Interrupt(void) interrupt 3  //8位自动重载定时到250us
{         
         static  unsigned char  scan_K1_CNT;
         TF1=0;  //清定时器中断标志
         TR1=0;   //关定时器1
           scan_K1_CNT++;
          if(scan_K1_CNT>=40)
                {
                        scan_K1_CNT=0;
                        scan_K1_key();        //做一次按键扫描                        
                }
               
         if(Encoder_enable==0)  //不扫描编码器时,做定时累加等待
         {   
                 Time_count_Encoder++;         
   }
                  
         if(SEG_Blink_enable)   //数码要闪烁,使能打开
         {
                 SEG_Blink_timeCnt++;
                 if(SEG_Blink_timeCnt>=const_SEG_Blink_all)
                   {SEG_Blink_timeCnt=0; }
         }         
   TR1=1;   //开定时器1
}
   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4548

帖子

6

粉丝