已解决!!! 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的
可以直接下载软件上自动生成:
STC32G12K128 发表于 2023-12-16 09:07
可以直接下载软件上自动生成:
没有意义 请问什么型号的? xxkj2010 发表于 2023-12-16 09:34
请问什么型号的?
8H1K24-LQFP32 可能因为这芯片是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);
}
xxkj2010 发表于 2023-12-16 11:13
可能因为这芯片是10T的吧。例程中有注释:
那应该就是了,我测的时候就是大了10倍。这个手册上写了吗?哪里有介绍 本帖最后由 xxkj2010 于 2023-12-16 11:45 编辑
泰勒soc 发表于 2023-12-16 11:20
那应该就是了,我测的时候就是大了10倍。这个手册上写了吗?哪里有介绍
手册倒是没有说明,但厂家提供的例程中有说明是10T。所以要用STC单片机,除了要认真看手册外,还得看例程。 xxkj2010 发表于 2023-12-16 11:42
手册倒是没有说明,但厂家提供的例程中有说明是10T。所以要用STC单片机,除了要认真看手册外,还得看例程 ...
是的,因定向思维来用STC单片机,有时就会误入死胡同。
页:
[1]