chuandaoxy 发表于 2021-4-18 11:48

脉冲制作,定时器的问题

一个脉冲分为两段,高电平,低电平,频率从100HZ到10k,占空比可调,因为需要准确到us,我将CPU的频率倍频到4倍88473600 Mhz,单周期0.0113us,但是16位定时器最大时长740us,而需求是2000us-20000us,需要步进设定1us,cpu是c8051f 可以调节ckcon(分频),高低电平长度不同,为了计时精准,两个阶段采用不同分频,问题就在这里,如何自动切换分频,谢谢

        if(xl==0)                             //High level pulse width
   
   {   TH0   = m/256;         
         TL0   = m%256;
         pot=1;
         xl=1;
    }               
       if(xl==1)                   //Low level pulse width
       {
       
           TH0   = m2/256;         
       TL0   = m2%256;                   
       pot=0;                  
           xl=0;

LcwSwust 发表于 2021-4-18 14:44

16位定时器最大时长740us,但是可以在定时中断里加一个变量,实现软件分频,或将多个定时中断周期组合,实现更长的时长。
若改变分频,怕是会引起抖动。

chuandaoxy 发表于 2021-4-19 18:01

LcwSwust 发表于 2021-4-18 14:44
16位定时器最大时长740us,但是可以在定时中断里加一个变量,实现软件分频,或将多个定时中断周期组合,实现 ...

按照楼上的办法写的,把最大延时写成标准中断,多的,再去中断
        if(xl==0)                             //High level pulse width
   
   {
          if(tt0>741)
       
       { TH0 = 49/256;         
       TL0 = 49%256;
          
                   js=js+1;

          if(js==ht)

                {
                  TH0 = m/256;         
          TL0 = m%256;
                     pot=1;
          xl=1;
                   }
                xl=0;
          
           }
          
           else{ TH0 = m/256;         
             TL0 = m%256;
                        pot=1;
             xl=1;}       

    }
       

LcwSwust 发表于 2021-4-19 19:04

chuandaoxy 发表于 2021-4-19 18:01
按照楼上的办法写的,把最大延时写成标准中断,多的,再去中断
        if(xl==0)                             //High level pulse wi ...

好的,各种条件都试一下。
页: [1]
查看完整版本: 脉冲制作,定时器的问题