📄 timedelay.c
字号:
/************************************************************************
TIMEDELAY.C实现了六个级别的软件延时,分别为:
void delay_us(); 微秒级延时程序
void delay_10us(unsigned int M); 10微秒级延时程序
void delay_100us(unsigned int M); 100微秒级延时程序
void delay_ms(unsigned int M); 毫秒级延时程序
void delay_10ms(unsigned int M); 10毫秒级延时程序
void delay_100ms(unsigned char M); 100毫秒级延时程序
void delay_s(unsigned char M); 秒级延时程序
TIMEDELAY.C中使用AVRStudio仿真,void delay_us()函数中定时为1us;
后续微秒级延时函数调用此函数实现定时。函数形参M用法如下:
如延时50us,调用delay_10us(5).注释部分为误差分析,M取值100时,
AVRStudio仿真中实际运行时间为TIME,ERROR为计算所得误差。
************************************************************************/
#include <iom16v.h>
#include <macros.h>
void delay_us() //ERROR=0
{
unsigned char M;
NOP();
}
void delay_10us(unsigned int M) //M=100,TIME=995,ERROR=0.5%
{
while(M--)
{
unsigned int I=4;
do
{
delay_us();
}while(I--) ;
}
}
void delay_100us(unsigned int M) // M=100,TIME=10000.75,ERROR=0.0075%
{
while(M--);
{
unsigned int I=5286;
do
{
delay_us();
NOP();
}while(I--);
}
}
void delay_ms(unsigned int M) //M=100,TIME=99996.63,ERROR=0.00337%
{
while(M--)
{
unsigned char I=198;
unsigned char R=3;
do
{
delay_us();
delay_us();
delay_us();
delay_us();
} while(I--);
while(R--)
{
NOP();
}
NOP();
NOP();
NOP();
}
}
void delay_10ms(unsigned int M)
{
while(M--)
{
delay_ms(10);
}
}
void delay_100ms(unsigned int M)
{
while(M--)
{
delay_ms(100);
}
}
void delay_s(unsigned int M)
{
while(M--)
{
delay_ms(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -