下面是从STC-ISP中生成的STC8H软件延时程序:
- void Delay1ms(void) //STC8H@24.000MHz
- {
- unsigned char data i, j;
-
- _nop_();
- i = 32;
- j = 40;
- do
- {
- while (--j);
- } while (--i);
- }
复制代码
而在官方例程中,多数都采用频率自适应程序:
- 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/10000; //STC8
- while(--i) ;
- }
- while(--ms);
- }
复制代码
总是觉得频率自适应函数用起来比较方便(主频率改了,也不用重新用STC-ISp生成代码),只是从STC-ISP中生成的软件延时程序,为什么不采用这种模式呢?
是不是从STC-ISP中生成的软件延时程序,延时准确度比较高还是其他原因?
|