📄 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,1000,5000时,
AVRStudio仿真中实际运行时间为TIME,ERROR为计算所得误差。
************************************************************************/
#include <iom16v.h>
#include <macros.h>
/*********************************delay_us()************************************
ERROR=0
********************************************************************************/
void delay_us()
{
NOP();
}
/*********************************delay_10us(unsigned int M)******************
M=1,TIME=17.50,ERROR=75%; (注意!!!误差较大,请选用其他量级)
M=10,TIME=107.50,ERROR=7.5%; (注意!!!误差较大,请选用其他量级)
M=100,TIME=1007.50,ERROR=0.75%;
M=1000,TIME=10008.25,ERROR=0.0825%;
M=5000,TIME=50012.25,ERROR=0.0245%;
******************************************************************************/
void delay_10us(unsigned int M)
{
unsigned int i;
while(M--)
{
unsigned int i=4;
while(i--)
{
delay_us();
NOP();
}
NOP();
NOP();
NOP();
}
}
/*********************************delay_100us(unsigned int M)***********
M=1,TIME=107.50,ERROR=7.5%; (注意!!!误差较大,请选用其他量级)
M=10,TIME=1007.50,ERROR=0.75%;
M=100,TIME=10007.50,ERROR=0.075%;
M=1000,TIME=100008.25,ERROR=0.00825%;
M=5000,TIME=500012.25,ERROR=0.00245%;
************************************************************************/
void delay_100us(unsigned int M)
{
unsigned int i;
while(M--)
{
unsigned int i=52;
while(i--)
{
delay_us();
NOP();
}
NOP();
NOP();
NOP();
}
}
/*********************************delay_ms(unsigned int M)***************************
M=1,TIME=1007.50,ERROR=0.75%;
M=10,TIME=10007.50,ERROR=0.075%;
M=100,TIME=100007.50,ERROR=0.0075%;
M=1000,TIME=1000008.25,ERROR=0.000825%;
M=5000,TIME=5000012.25,ERROR=0.000245%;
***********************************************************************/
void delay_ms(unsigned int M)
{ unsigned int i;
while(M--)
{ unsigned int i=531;
while(i--)
{
delay_us();
NOP();
}
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
}
}
/*********************************delay_10ms(unsigned int M)***************************/
void delay_10ms(unsigned int M)
{
while(M--)
{
delay_ms(10);
}
}
/*********************************delay_100ms(unsigned int M)***************************/
void delay_100ms(unsigned int M)
{
while(M--)
{
delay_ms(100);
}
}
/*********************************delay_s(unsigned int M)***************************/
void delay_s(unsigned int M)
{
while(M--)
{
delay_ms(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -