老师们,有没有软件延时1us,10us,1ms,10ms的延时库函数
老师们,有没有软件延时1us,10us,1ms,10ms的延时库函数,能够自主适应时钟的。有啊,自己写很好的。 liuzonggong 发表于 2024-10-10 07:46
有啊,自己写很好的。
应该怎么写?不太会算{:sweat:} 1μs时间太短,软件延时误差很大或需要特殊的时钟频率或无法实现,其他频率可以直接使用ISP软件生成 CyberHamster 发表于 2024-10-10 08:04
1μs时间太短,软件延时误差很大或需要特殊的时钟频率或无法实现,其他频率可以直接使用ISP软件生成 ...
1us还要自适应主时钟?应该主时钟适应它才对{:titter:} 要是学习,就自己写一次,如果后续开发用,烧录软件里面有工具的,很方便的啦!如果你是用官方配的硬设库,就省事,它里面有个“STC8G_H_Delay”的文件,在里面有ms软件延时,可以通过头文件修改晶振频率,函数里面自动调整,这样不用每次修改晶振的时候,都要用工具算 1us估计不行,10ms以上可以。 STCISP生成的延时程序不带参数,要是能随意填写延时时长就好了,例如 Delay_ms(20); 代表延时20毫秒 本帖最后由 xxkj2010 于 2024-10-20 13:07 编辑
us时间太短
ms的,基本可以用,但不可能完全准确,这是以前收存的:
STC单片机自适应毫秒级延时函数:
//#define MAIN_Fosc 48000000L //定义主时钟
//#define MAIN_Fosc 44236800L //定义主时钟
//#define MAIN_Fosc 40000000L //定义主时钟
//#define MAIN_Fosc 36864000L //定义主时钟
//#define MAIN_Fosc 35000000L //定义主时钟
//#define MAIN_Fosc 33177600L //定义主时钟
//#define MAIN_Fosc 30000000L //定义主时钟
//#define MAIN_Fosc 27000000L //定义主时钟
//#define MAIN_Fosc 24000000L //定义主时钟
//#define MAIN_Fosc 22118400L //定义主时钟
//#define MAIN_Fosc 20000000L //定义主时钟
//#define MAIN_Fosc 18432000L //定义主时钟
#define MAIN_Fosc 12000000L //定义主时钟
//#define MAIN_Fosc 11059200L //定义主时钟
//#define MAIN_Fosc 6000000L //定义主时钟
//#define MAIN_Fosc 5529600L //定义主时钟
void delay_ms(unsigned int ms) //注:ms_max=65536
{
unsigned int i;
do
{
// i=MAIN_Fosc/96000L; //STC89/90_12T
// i=MAIN_Fosc/48000L; //STC89/90_6T
// i=MAIN_Fosc/14000; //STC11、STC12
// i=MAIN_Fosc/13000; //STC15
i=MAIN_Fosc/10000; //STC8
// i=MAIN_Fosc/6030; //STC32
while(--i) ;
}
while(--ms);
}
页:
[1]