打印
[51单片机]

脉冲制作,定时器的问题

[复制链接]
852|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 ...

好的,各种条件都试一下。

使用特权

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

本版积分规则

855

主题

1044

帖子

4

粉丝