stm8s的cup,时钟怎么自己变化?

[复制链接]
3126|10
 楼主| c555 发表于 2012-8-23 16:12 | 显示全部楼层 |阅读模式
用程序循环输出一个固定的频率,用的是HSI的2M, 突然发现输出的频率变化了,频率升高了10%,查找原因,发现在一个位置加上一句程序就可以,不管这句程序是什么,只要有这一句程序都可以,有了这句程序后,输出频率就对了。
  头一次遇到这种问题,想不通是怎么回事,更不知向哪里去查了
 楼主| c555 发表于 2012-8-23 16:39 | 显示全部楼层
没有动时钟有关的寄存器,程序写着写着自己频率就变化了,难以理解
香水城 发表于 2012-8-23 16:46 | 显示全部楼层
首先,你用程序循环输出一个固定的频率

其次,你发现在一个位置加上一句程序就可以


当然是程序问题
奔牛滚滚 发表于 2012-8-24 00:02 | 显示全部楼层
2# c555
那是因为你习惯了51或者avr的思维/认识.
 楼主| c555 发表于 2012-8-24 08:48 | 显示全部楼层
输出固定频率的程序是单独一个函数,这个函数并没有动到它,在其他地方写程序,频率就变了。
 楼主| c555 发表于 2012-8-24 09:32 | 显示全部楼层
在主程序中,加个空操作 _asm("NOP"); 或者减去个空操作,输出的频率就变了,这个空操作与输出固定频率的函数是没有任何关系的
 楼主| c555 发表于 2012-8-27 07:58 | 显示全部楼层
没有人说的清啊
 楼主| c555 发表于 2012-8-30 10:59 | 显示全部楼层
现在真麻烦,每写一段程序,需要调试的时候,都要去看看时钟变了吗,如变了,再加个几个空操作,让时钟变回来。
香水城 发表于 2012-8-30 13:56 | 显示全部楼层
你怎么输出固定频率的?为什么不用PWM输出?
 楼主| c555 发表于 2012-8-31 11:59 | 显示全部楼层
将一延时程序贴出来,看有没有高手能发现什么问题的?
这是一个延时函数,在主程序中,增加一个_asm("NOP");和减少一个_asm("NOP");,输出的延时都会变化,比如延时10ms,增加后,延时成了11ms,再加一个_asm("NOP");,延时就又变回10ms

u8  time=36;//

void delay(u8 tt)
{
    u8 t;                                                              
    for(;tt>0;tt--)            
        for(t=time;t>0;t--)     //
        {                 
          ;
        }     
}
e心 发表于 2015-8-17 10:42 | 显示全部楼层
遇到同样的问题,一直都没有解决办法,请求高手指导
您需要登录后才可以回帖 登录 | 注册

本版积分规则

264

主题

556

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部