搜索
bottom↓
回复: 13

STM8单片机延时函数延时时间太久问题出在哪里?

[复制链接]

出0入8汤圆

发表于 2017-10-21 23:51:44 | 显示全部楼层 |阅读模式
只是一个LED灯闪亮实验延时函数这么短的循环延时时间将近2秒了,问题出在哪里了?
#include "stm8s.h"

#define  LEDON  GPIOD->ODR=0xff;
#define LEDOFF  GPIOD->ODR=0x00;


void delay()
{
   u8 a;
   u16 b=5;
for (a=0;a<200;a++)
{
  while(b--);
}

}

int main( void )
{   
    CLK->CKDIVR = 0x00;
      
    GPIOD->CR1=0xff;
    GPIOD->CR2=0x00;
    GPIOD->DDR=0xff;
   
   
   while(1)
   {
   LEDON;  
   delay();
   LEDOFF;
   delay();
   }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2017-10-22 00:04:58 来自手机 | 显示全部楼层
while(b--);前边加上b=5;

出0入8汤圆

 楼主| 发表于 2017-10-22 00:14:01 | 显示全部楼层
q457344370 发表于 2017-10-22 00:04
while(b--);前边加上b=5;

卧槽 好了 这是为啥啊?这是啥高科技呀?我明明在进函数时候就赋值了为啥再付一次就好了?

出0入0汤圆

发表于 2017-10-21 23:51:45 | 显示全部楼层
mkliop 发表于 2017-10-22 00:14
卧槽 好了 这是为啥啊?这是啥高科技呀?我明明在进函数时候就赋值了为啥再付一次就好了? ...

for前赋值只有第一次循环时是从5开始,第二次以后就不是了

出0入85汤圆

发表于 2017-10-22 00:40:38 | 显示全部楼层
第二次以后,从0开始减,下一个数是0xFFFF(65535),时间长就是这原因了。

出0入8汤圆

 楼主| 发表于 2017-10-22 10:21:18 来自手机 | 显示全部楼层
网络孤客 发表于 2017-10-22 00:40
第二次以后,从0开始减,下一个数是0xFFFF(65535),时间长就是这原因了。 ...

对就是这样哈哈(^_^)

出0入0汤圆

发表于 2017-10-22 10:28:25 来自手机 | 显示全部楼层
mkliop 发表于 2017-10-22 00:14
卧槽 好了 这是为啥啊?这是啥高科技呀?我明明在进函数时候就赋值了为啥再付一次就好了? ...

。。。你要回去重修谭浩强了+_+

出0入0汤圆

发表于 2017-10-22 11:18:46 | 显示全部楼层
我都是用+不用-的

出0入0汤圆

发表于 2017-10-22 12:27:48 来自手机 | 显示全部楼层
90999 发表于 2017-10-22 11:18
我都是用+不用-的

这个是51带来的习惯  51用减效率高  后面单片机速度快了不用再纠结这种事  

出0入0汤圆

发表于 2017-10-22 15:05:09 | 显示全部楼层
偷偷的告诉你一声,把 u16 b=5;改成 u32 b=5; 效果更好。。。。。。一般人我不告诉他。

出0入0汤圆

发表于 2017-10-22 15:16:21 | 显示全部楼层
C到处都是坑啊。标记下,以免犯同样错误。

出330入0汤圆

发表于 2017-10-22 19:36:30 来自手机 | 显示全部楼层
本帖最后由 zcllom 于 2017-10-22 19:39 编辑

调用delay函数时,难道不执行b=5?初始化只进行一次?我也迷糊了。

出0入22汤圆

发表于 2017-10-22 19:41:38 | 显示全部楼层
我也是迷糊了。如果你的b最大值只有5,为啥要声明来个U16。。。。。难道你用的是32位机,还支持thumb指令?

出330入0汤圆

发表于 2017-10-22 19:55:03 来自手机 | 显示全部楼层
我认为是编译器优化掉了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 19:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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