c语言中一个标准的延时1us的函数怎么写?

作者&投稿:汝坚 (若有异议请与网页底部的电邮联系)
如何用c语言实现精确延时1us,这个语句_nop_()除外。~

1 微秒困难。
QueryPerformanceCounter()函数能返回当时时钟记数。两次调用之差就是时间差计数。
QueryPerformanceFrequency()函数获得时钟频率。计数 除以 时钟频率 得时间,单位是秒。
秒换算成微秒添6个0。
还有一种方法是用Pentium芯片汇编指令 0x0F 和 0x31,读取时钟计数图章,类似QueryPerformanceCounter()函数,计时开始和结束分别调用一次,得读数差,并扣除执行一次调用函数消耗的额外时间。读数差怎样转化成时间是个问题,如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。
// Pentium instruction "Read Time Stamp Counter".
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
全程序和说明,见 L_o_o_n_i_e 百度空间里的文章 “C语言时间函数的应用”

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}

拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

如果是单片机上,是有可能的
单片机12M晶振执行一条指令1us,所以C语言1us延时程序 用12M晶振延时1us,用—_nop_();

#include<intrins.h> //头文件
_nop_(); //这一个语句表示1us延时

学过汇编你就会知道,每条指令都占一定的时间(或者机器周期)的,如果你让机器什么都不做,即空指令的话,机器就会延时,然后你在计算好每次延时到底有多长,外面套一个循环(或者多重循环),根据你想要的延时时间即可计算出来循环的次数,延时函数基本上都是这种原理,它的参数就是用来控制循环次数的。


请用c语言编写一个延时函数,并说明该函数在程序中是如何实现延时的?
在C语言中,可以使用delay函数来实现程序的延时功能。delay函数可以使程序暂停执行一段时间,定义一个delay函数,函数的参数为延时的时间,单位为毫秒。函数的实现如e=clock();\/\/获取当前时间es);\/\/当当前时间减去开始时间小于延时时间时,程序处于等待状态,在程序中调用delay函数,并传入需要延时的时间,...

延用的区别是什么?
6. "延用"一词,"延"字源自《说文》中的释义“延,长行也。”,即延续、延长的意思。"用"则表示使用。综合来看,"延用"意味着延长使用期或继续使用。

语言一词的内涵和外延各是什么
语言是以声音\/符号为物质外壳,以含义为内涵,由词汇和语法构成并能表达人类思想的指令系统。语音、手势、表情是语言在人类肢体上的体现,文字符号是语言的显像符号。人的肢体行为是人们使用语言的主要形式,口述声音、手势及表情就是人的肢体行为体现。口语是人类使用行为进行语言交流的最主要的方式。符号的...

请求高手帮忙回答一个汇编语言中怎样求延时时间
5秒,25秒,55秒等等,可以用定时中断方式来做。一般50MS一中断,计20次就是1秒了。这样,再长的时间,甚至几小时也一样做了。给你一个25秒延时子程序的。ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN:MOV R0,#20 MOV TMOD,#01H ;定时中断方式1 MOV TH0,#3CH ;...

如何用单片机的delay实现延时?
如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时...

用C语言写一个KEILC51的延时1秒程序,急
keilc51好像也是用C编程,一般延迟程序就是增加系统负载比如:int i,j;yanchi(){ for(i=0;i<1000;i++)for(j=0;j<1000;j++);} 这样就可以达到延迟的目的,具体参数你可以随便设。

【急求】设计一个延时大约0.5秒的延时子程序(晶振频率12HZ);要求...
几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(...

双元音有哪些
1、合口双元音 其第二组成部分为合口元音,即\/ɪ\/和\/ʊ\/。英语中,合口双元音有5个,分别为:\/aɪ\/ \/eɪ\/ \/aʊ\/ \/əʊ\/ \/ɔɪ\/。2、集中双元音 第二组成部分为中元音,即\/ə\/。英语中,集中双元音有3个,分别为:\/ɪ&#...

语言发展的过程,就是一部个体成长的启示录
再看页数,只有不到400页、22万字。书中的每一章,单独拉出来都是语言学的一个研究领域。没看书之前,我一度对这本《语言小书》产生了忧虑:很多语言学大部头一本书都只能浅尝辄止的东西,《语言小书》只用一章来讲,到底能讲出什么呢?如果整本书只是许多语言学入门知识的罗列,那《语言小书》能讲...

单片机c语言一个整型i++延迟时间多少?晶振12M或11,0592M
这部分包含了硬件及软件上的变化因素.软件上, 建议输出汇编, 依照datasheet确认指令所用周期. (可能会有: a=i; inc a; i=a;...)硬件上, 依照硬件规格书, 可以知道晶振与单片机运行周期时间的关系. 标准应该是\/12, 也有不同的.

东丰县15380004999: 51单片机延时1us,12M晶振怎么用c语言写 -
穰牧知爱: 51单片机12M晶振时是了.C语言中也是如此.#include<reg51.h>#include<intrins.h> main() { _nop_(); //延时1us while(1);}

东丰县15380004999: 求助C语言1us延时程序 我用16M晶振 -
穰牧知爱: void delay_us(unsigned int time) { do { time--; } while (time > 1) { ; } } 这个程序若time=1即延时1us 但这个函数延时存在些误差

东丰县15380004999: C语言延时程序中,延时时间是如何计算出来的.
穰牧知爱: 调用函数 sleep(1) 就可以延时1秒,这个函数会自动处理时间一定要手动,可以用空循环等方法: for (i = 0; i < n; i++) ; 这样,空循环一般编译成以下代码(具体你还是自己看看生产的代码为好): loop: mov dx i inc dx mov i dx cmp i n jl loop ...

东丰县15380004999: C语言中用什么函数来延时 谢谢 -
穰牧知爱: 头文件里加上#include 函数是 ::Sleep(),注意前面有俩冒号,s大写,括号里填数字,表示毫秒

东丰县15380004999: 单片机外接12M的晶振,1ms的基准延时函数用C语言怎么写? -
穰牧知爱: /*----------------------------------------------- 名称:delay1ms() 功能:延时1ms 晶振:12MHz 机器周期1us 时间计算:t=2+1+995+2=1000us =1.000ms-----------------------------------------------*/ void delay1ms(void) //延时1ms子程序 { unsigned char i,j; for(i=5...

东丰县15380004999: 求这个延时程序什么意思??怎么延时1us的?? -
穰牧知爱: asm("nop")=1us,这是1个机器周期,当分频后主频=1MHz的时候.

东丰县15380004999: c语言延时程序 -
穰牧知爱: 这种延时函数一般用于单片机C语言中 X一般默认为1,三个for嵌套循环,总共执行次数为,c*b*a=1*38*130=4940; 若是在主频为12MHZ的电路中,单片机执行一条语句时间大约为1us,那么这个延时为4940us,大约为5ms.你想延时多长时间,就取值X,乘以5ms,当然x不能超过字符型数据的取值范围.

东丰县15380004999: 单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写? -
穰牧知爱: 定时器T0 工作方式1 晶振频率24MHz 定时器最大定时时间(us):32768 定时器最小定时时间(us):0.5 【1ms精确定时C51代码】 void T0_init(void) //定时器初始化 { TMOD |= 0x01; TH0 = 0xf8; //设置定时器计数初值,定时1000us TL0 = 0x33; IE |= 0x82; //打开总中断 TR0 = 1; //启动定时器 } void T0_intservice(void) interrupt 1 //定时器中断服务 { TH0 = 0xf8; //重装载定时器计数初值 TL0 = 0x33; //这里可以插入其他处理程序,不会影响定时器工作 }

东丰县15380004999: 24.5M晶振的单片机 延时函数怎么计算 ?和12M的有什么区别?请帮忙写出1us、2us、、、 -
穰牧知爱: 一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会弹出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这会让你享受到一天都不止的漫长调试“乐趣”中).晶振频率不同自然在相同参数的情况下得出延时时间不同.另外如果你确实需要得到一个比较精准的延时时间,建议你采用定时/计数器,至于怎么用这玩意儿,很简单!不到十分钟就能学会的事儿!这里就不提供教程了,用你调试的时间去学它会让你更有成就感.写了那么多,希望能帮助点什么.......

东丰县15380004999: c语言怎么写一个不占CPU资源的延时函数 -
穰牧知爱: 什么是延迟函数?说白了就是让计算机计算一些无用的数据,来浪费时间,你控制好一个函数的运算时间、函数的正确性,随便一个函数都可以是延迟函数

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网