泰勒soc 发表于 2023-12-16 08:03:56

已解决!!! delay_ms()函数 软件延时 时间不对 求解答

先上代码
型号8H1K24-LQFP32
#define MAIN_Fosc 24000000UL

void delay_ms(u16 ms)
{//Fosc24M
   u16 i;
   do{
          i = MAIN_Fosc / 10000;
          while(--i);//
   }while(--ms);
}

这个函数是毫秒定时函数,我的计算方法是:周期 * 次数
周期 = 1 / 24M
次数 = 24M / 1000
这样计算的时间理论上是1ms
但是,用示波器测量不对,次数改为24M / 10000,示波器测量的时间就是1ms。
求解答,是我的计算方法不对,还是其他问题?
单片机是10T的


32G12K128 发表于 2023-12-16 09:07:13

可以直接下载软件上自动生成:



泰勒soc 发表于 2023-12-16 09:08:38

STC32G12K128 发表于 2023-12-16 09:07
可以直接下载软件上自动生成:

没有意义

xxkj2010 发表于 2023-12-16 09:34:57

请问什么型号的?

泰勒soc 发表于 2023-12-16 10:47:09

xxkj2010 发表于 2023-12-16 09:34
请问什么型号的?

8H1K24-LQFP32

xxkj2010 发表于 2023-12-16 11:13:31

可能因为这芯片是10T的吧。例程中有注释:
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-3-9
// 备注:
//========================================================================
void delay_ms(u8 ms)
{
   u16 i;
   do{
          i = MAIN_Fosc / 10000;
          while(--i);   //10T per loop
   }while(--ms);
}


泰勒soc 发表于 2023-12-16 11:20:49

xxkj2010 发表于 2023-12-16 11:13
可能因为这芯片是10T的吧。例程中有注释:

那应该就是了,我测的时候就是大了10倍。这个手册上写了吗?哪里有介绍

xxkj2010 发表于 2023-12-16 11:42:43

本帖最后由 xxkj2010 于 2023-12-16 11:45 编辑

泰勒soc 发表于 2023-12-16 11:20
那应该就是了,我测的时候就是大了10倍。这个手册上写了吗?哪里有介绍
手册倒是没有说明,但厂家提供的例程中有说明是10T。所以要用STC单片机,除了要认真看手册外,还得看例程。

xxkj2010 发表于 2023-12-16 13:40:39

xxkj2010 发表于 2023-12-16 11:42
手册倒是没有说明,但厂家提供的例程中有说明是10T。所以要用STC单片机,除了要认真看手册外,还得看例程 ...

是的,因定向思维来用STC单片机,有时就会误入死胡同。
页: [1]
查看完整版本: 已解决!!! delay_ms()函数 软件延时 时间不对 求解答