找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 337|回复: 7
收起左侧

利用单片机定时器定时频率自增

[复制链接]
不将就123 发表于 2021-10-23 10:28 | 显示全部楼层 |阅读模式
我想写一个频率自增的程序 一开始我是这样写的 如下
void  PIN_LV_ZI_JIA()
{
      unsigned int i;
      for(i=500;i<=1000;i++)      // 频率从500HZ自加到1KHZ
       {
         PIN_LV_UPDETE(i);        //频率改变函数
         delayms(100;               //延时函数  每加一次所用的时间;

       }
}
按照上面写的这样不方便调节时间于是我就改成定时器来写 可是我写了很多次都不行 写法如下

  1. void  PIN_LV_ZI_JIA()
  2. {
  3.       unsigned int i;
  4.       for(i=500;i<=1000;i++)               // 频率从500HZ自加到1KHZ
  5.        {
  6.            if(COUNT>=50)                  //count是来自定时器的值 50次就是50ms
  7.               {
  8.                    COUNT = 0;                   //count清零
  9.                    PIN_LV_UPDETE[i];      //频率改变函数

  10.                }
  11.        }
  12. }
复制代码

这样无法工作  请教大家一下  该怎么改啊     
要求就是要用定时器方便 控制时间  
频率变化还是用 PIN_LV_UPDETE(i);  这个函数
回复

使用道具 举报

Y_G_G 发表于 2021-10-23 11:51 | 显示全部楼层
TH1=(65535-COUNT)/256;        
TL1=(65535-COUNT)%256;
COUNT为全局变量,改变COUNT就可以改变频率,占空比只能是50%
回复

使用道具 举报

 楼主| 不将就123 发表于 2021-10-23 13:31 | 显示全部楼层
Y_G_G 发表于 2021-10-23 11:51
TH1=(65535-COUNT)/256;        
TL1=(65535-COUNT)%256;
COUNT为全局变量,改变COUNT就可以改变频率,占空比只能 ...

不不 你可能没有明白我的意思  我的频率直接调用 PIN_LV_MODE()就可以改变    我的频率是通过PCA产生的 我是封装好了的    我的意思非常简单 就是通过定时器设置间隔时间让这个 PIN_LV_MODE()传递的变量“i”每次加一这样就可以输出频率了  
回复

使用道具 举报

xuyaqi 发表于 2021-10-23 13:45 | 显示全部楼层
改成定时器来写 ,但没显示定时器里怎么写的,还是应该把程序全发出来。
回复

使用道具 举报

188610329 发表于 2021-10-23 17:03 来自手机 | 显示全部楼层
不将就123 发表于 2021-10-23 13:31
不不 你可能没有明白我的意思  我的频率直接调用 PIN_LV_MODE()就可以改变    我的频率是通过PCA产生的  ...

估计,没人能明白你的意思。

就说你改好的程序吧:
你for循环里判断 count是否大于50,这个过程很快,所以for从500到1000,这个循环过程,count根本到不了50,也就是说一次作用都起不了。
回复

使用道具 举报

njzr 发表于 2021-10-23 17:21 | 显示全部楼层
如果要求快速变化就直接在定时中断里改下个周期时间,如果需要慢速变化就用自动重装载定时器用于输出,另一定时器(或其它周期中断)去定时改变输出定时器的重载值
回复

使用道具 举报

Y_G_G 发表于 2021-10-23 23:52 | 显示全部楼层
不将就123 发表于 2021-10-23 13:31
不不 你可能没有明白我的意思  我的频率直接调用 PIN_LV_MODE()就可以改变    我的频率是通过PCA产生的  ...

PCA就是PCA,你又说定时器
每隔一段时间改一下PCA的初值不就行了
回复

使用道具 举报

lkc8210 发表于 2021-10-24 00:07 | 显示全部楼层
你弄错了嵌套次序了
而且不要用For
  1. void  PIN_LV_ZI_JIA()
  2. {
  3.         static unsigned int i = 500;// 频率从500HZ自加到1KHZ
  4.         if(COUNT>=50)                  //count是来自定时器的值 50次就是50ms
  5.         {
  6.                 COUNT = 0;                   //count清零
  7.                 PIN_LV_UPDETE(i);      //频率改变函数
  8.                 i++;
  9.                 if(i>1000)i=500;
  10.         }
  11. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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