C语言代码如下:
/*----------------------------------------------------------------------
Function: 软件精确延时
Descripton: 一种是利用C51的赋值、比较、自减三个单周期指令实现的软件延时;
另一种是利用C51库函数_nop_()软件延时一个机器周期。
系统晶振频率为: 11.0592MHz
Author: Zhang Kaizhou
Date: 2019-6-19 11:51:55
-----------------------------------------------------------------------*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void main(){
uint i; // 可通过改变i的数据类型来扩大延时的长度范围
i = 100; while(i) i--;
/*
延时长度 = 10.85 + (i - 1) * 8.68;
则i = ((延时长度 - 10.85) / 8.68) + 1;
例:延时60us, 则i = (60 - 10.85) / 8.68 + 1 = 7;
(i的值为向上取整时,延时时长会略大于目标时长[2个机器周期];
(i的值为向下取整时,延时时长会略小于目标时长[2个机器周期])
*/
_nop_(); // 延时一个机器周期1.08us
while(1);
}