STC15W408AS较精准的延时函数
✨说明:参考使用STC-ISP工具计算得来。
- 注意选择
STC-Y5
指令集的。
-
🍁以
STC15W408AS
为对象,进行测定。 -
🌿STC-ISP工具生成的软件延时500ms
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
- 🌿延时函数,
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=120;j>0;j--);
}
🌼测试500ms延时
- 🌿这里使用
STC15W408AS
单片机型号,内部晶振11.0592
MHz。
//STC15W408AS,512字节的RAM,8K FLASH
#include <STC15F2K60S2.H>
#include "intrins.h"
void delay_ms(unsigned int n);
//char *_uitoa(unsigned int num, char *str);//整数转字符串
//int unsignedstrtoint(char *str); //开头不带正负号的字符串转整型
void main()
{
P1M0 = 0x00; P1M1 = 0x00;
while (1)
{
P17 = 0x01;
delay_ms(3273);
P17 = 0x00;
delay_ms(3273);
}
}
//延时n毫秒
void delay_ms(unsigned int n)
{
unsigned int i = 0, j = 0;
for (i = 0; i < n; i++)
for (j = 0; j < 120; j++);
}
- 🔧逻辑分析仪测量
🌻利用STC-ISP工具自动生成500ms延时测定
-
- stc-isp软件延时500ms
- stc-isp软件延时500ms
-
📝程序代码
#include <STC15F2K60S2.H>
#include "intrins.h"
void Delay500ms();
void main()
{
P1M0 = 0x00; P1M1 = 0x00;
while (1)
{
P17 = 0x01;
Delay500ms();
// delay_ms(3273);//76.4,
P17 = 0x00;
// delay_ms(3273);
Delay500ms();
}
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
- 🔨逻辑分析仪测量
可以发现只有约497ms。使用STC-ISP工具自动计算的时间还是有一定的误差。
- 🛠手动调整设定
Delay500ms()
如下,才达到十分接近的500ms延时时间
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 36;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}