51单片机C语言中delay函数是怎么定义和使用的?定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递 。
2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好 。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好 。
C语言中如何编写以秒为单位的计时函数?求代码// 使用 windows 的延时函数 Sleep(); 实现
// 以下代码实现每秒钟输出一个数字,连续输出 10 个
#include windows.h
#include stdio.h
// 主函数
void main()
{
int i = 0;
while(i10)
{
printf("%d\n", i);
Sleep(1000);
}
}
还可以使用多媒体定时器实现精确延时,详细请百度《精确延时的实现》
关于C语言流水灯的延时函数根据单片机c语言产生13ms的函数的频率来计算c语言产生13ms的函数的 。
这个Delay10ms转化成汇编之后c语言产生13ms的函数:
DELAY_10S: MOV R4,#1
L1: MOV R3,#38 1指令周期
L2: MOV R2,#130 1指令周期
L3: DJNZ R2,L3 2指令周期
DJNZ R3,L2 同上
DJNZ R4,L1 同上
RET 同上
总耗时:[(130*2 1 2)*38 1 2]*1*12/12M = 0.009997s≈10ms
至于是不是误差 0us这个要根据具体的编译器来计算c语言产生13ms的函数,因为编译器不同c语言产生13ms的函数,转化之后的汇编也不一样 。
C语言编写精确到毫秒的时间函数CreateWaitableTimer,SetWaitableTimer;
WM_TIMER消息也是可以的
如果不是Windows , 则可以用time函数,需包含time.h
求一个C语言的微秒级延时函数一个微秒级的延时函数今天要用到一个微秒级的定时函数,到网上search下 , 找了几个都不能用,我晕 , 无奈,还是自己动手比较好,赶紧贴出来 。
免得以后要用的时候又不知道那里去找,方便自己也方便大家^_^又避免重复发明轮子^_^
/********************************************************************
Created:2006/09/02
FileName:t.c
Author:Liu Qi
Purpose:测试微秒级延时
*********************************************************************/
#include windows.h
#include time.h
#include stdio.h
ULONG GetTimeDis(struct tm first, struct tm second)//计算两次时间差
{
return abs((first.tm_hour * 3600first.tm_min * 60first.tm_sec)
- (second.tm_hour * 3600second.tm_min * 60second.tm_sec));
}
void Delay(ULONG ulMicroSeconds)
{
LARGE_INTEGERtimeStop;
LARGE_INTEGERtimeStart;
LARGE_INTEGERFreq;
ULONGulTimeToWait;
if (!QueryPerformanceFrequency( Freq ))
return;
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
QueryPerformanceCounter ( timeStart );
timeStop = timeStart;
while( timeStop.QuadPart - timeStart.QuadPartulTimeToWait )
{
QueryPerformanceCounter( timeStop );
}
}
int main(void)
{
struct tm timeStart, timeEnd;
_getsystime(timeStart);
Delay(1000 * 1000 * 3);//3秒
_getsystime(timeEnd);
printf("用时:%d秒\n", GetTimeDis(timeStart, timeEnd));
return 0;
}
请问下面的C语言延时函数是如何计算延时时间的?for循环中的四个nop是否可以省略?一个nop为1个指令周期c语言产生13ms的函数,通过nop指令可以产生一定的延迟c语言产生13ms的函数 , 但是对于快速的CPU来说效果不明显,因此可以多写几个,便可以多延迟几个时钟(具体应该说是一个指令占用c语言产生13ms的函数了3个时钟脉冲);所以,一个for循环会执行4*250个指令周期,那么总共延时4*250*ms个指令周期~~
【c语言产生13ms的函数 c语言s=13 5799】关于c语言产生13ms的函数和c语言s=13 5799的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 开发性格测评小程序费用,性格测试h5制作
- postgre中字符串函数,post传递字符串
- 视频号文件夹位置怎么设置,微信视频号文件演示怎么用
- php解析数据表接口 php读取数据表内容
- 怎么看显卡的图纸,怎么看显卡的图纸型号
- 券商新媒体待遇如何啊知乎,券商传媒组
- 手机怎么查团员证信息,手机怎么查团员证信息呢
- 虚拟机go语言怎么安装 虚拟机工具怎么安装
- 关于linux系统mysql分时间段备份数据的信息