首先我们先来了解一下8051单片机的指令周期这一概念
在考核和培训中我们常用普中开发板作为8051单片机的载板,大多数情况下开发板的晶振为12MHZ和11.0592MHZ,在此我们以11.0592MHZ的晶振为例计算一下时钟周期。
在11.0592MHZ晶振频率的情况下,即1s晶振震荡11059200次,根据公式
一个时钟周期约为0.09us,则一个机器周期为12x0.09=1.08us。
C/C++编译器内置头文件<INTRINS.h>中的_nop_()函数
他的作用是延时一个机器周期,他的实际意义是一个空指令,在汇编中他在一个机器周期内不执行任何操作但占一个程序步。也就是说一条_nop_()操作可以延时1us。所以我想要delay 5us可以编写函数
void delay_5us()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
同理你要想编写特定的值比如说1ms通过for循环,while循环或者do while循环来做。
在51单片机配套的STC-ISP中有软件延时计算部分,可以通过配置系统频率,定时长度还有指令集来实现APP计算软件延时长度