
正文
c语言产生13ms的函数 c语言s=13+5799
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
相关问答
Q1: C语言中如何编写以秒为单位的计时函数?求代码
// 使用 windows 的延时函数 Sleep(); 实现
// 以下代码实现每秒钟输出一个数字,连续输出 10 个
#include windows.h
#include stdio.h
// 主函数
void main()
{
int i = 0;
while(i 10)
{
printf("%d\n", i++);
Sleep(1000);
}
}
还可以使用多媒体定时器实现精确延时,详细请百度《精确延时的实现》
Q2: 关于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的函数,转化之后的汇编也不一样。
Q3: C语言编写精确到毫秒的时间函数
CreateWaitableTimer,SetWaitableTimer;
WM_TIMER消息也是可以的
如果不是Windows,则可以用time函数,需包含time.h
Q4: 求一个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 * 3600 + first.tm_min * 60 + first.tm_sec)
- (second.tm_hour * 3600 + second.tm_min * 60 + second.tm_sec));
}
void Delay(ULONG ulMicroSeconds)
{
LARGE_INTEGER timeStop;
LARGE_INTEGER timeStart;
LARGE_INTEGER Freq;
ULONG ulTimeToWait;
if (!QueryPerformanceFrequency( Freq ))
return;
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
QueryPerformanceCounter ( timeStart );
timeStop = timeStart;
while( timeStop.QuadPart - timeStart.QuadPart ulTimeToWait )
{
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;
}
Q5: 请问下面的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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






