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

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

如果是单片机上,是有可能的

单片机12M晶振执行一条指令1us,所以C语言1us延时程序 用12M晶振延时1us,用—_nop_();

#include<intrinsh> //头文件

_nop_(); //这一个语句表示1us延时

计算机考试中:

Windows XP是一个多任务的 *** 作系统,这是指(Windows XP可以同时运行多个应用程序 )。

譬如:在XP系统下,可以打开网页的同时打开QQ进行聊天,可以打开播放器看视频等。

x=100

delay_us(100)-- i循环100次 j循环12 次

delay_ms(100)-- i循环100次 j循环120 次, 多 100 10 次

x=100 时,两个程序耗时 为 1比100,像似 微秒 和 毫秒。

如果 x=1 两个程序耗时比 为10

猜测 delay_us(100)是1微秒,delay_ms(100)是1毫秒。

实际上,计算机速度不同。这个程序的时间精度难说。

精确计时可用 QueryPerformanceCounter()函数返回当时时钟读数,计时开始用它得到开始读数,计时结束用它得到结束读数,两个数相减是时间差读数。读数转换为时间,要用QueryPerformanceFrequency()函数获得时钟频率,读数除以时钟频率,得时间,单位是秒。乘1000得毫秒。

还有一种方法是用Pentium芯片汇编指令 0x0F 和 0x31,读取时钟计数图章,类似QueryPerformanceCounter()函数,计时开始和结束分别调用一次,得读数差,并扣除执行一次调用函数消耗的额外时间。如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。

xms是x毫秒的字头缩写,这是带参数延时模块

在原来设计的单片机系统中,应该是带入模块延时毫秒的数值但用在不同系统上[主要是系统时钟]其中的i=110需要实际计算或测算后更改,否则不准

这是我很多年前做的一个模块,仅供参考啊,呵呵

#include <reg52h>

#define uchar unsigned char

#define uint unsigned int

sbit wela=P2^7; //位选

sbit dula=P2^6; //段选

sbit vout=P1^0; //脉冲发送端

sbit rece=P3^2; //接收端,0-接收成功,1-等待接收,接在外部中断0上

uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7};

uchar dis_smg[4];

uchar k,j;

uint time,distance;

bit rec_flag;

void Dis_Init(void)

{

dis_smg[0]=smg_du[distance/100]|0x80;

dis_smg[1]=smg_du[distance%100/10];

dis_smg[2]=smg_du[distance%10];

}

void Display(void)

{

static uchar i;

P0=0x00;

dula=1;dula=0;

P0=smg_we[i];

wela=1;wela=0;

P0=dis_smg[i];

dula=1;dula=0;

i++;

if(i==3) i=0;

}

void InterruptInit(void)

{

TMOD=0X21; //定时器0计数 , 定时器1计时

TH0=0X00;TL0=0X00;

TH1=0XF2;TL1=0XF2; //12us

IT0=0; //外部中断0低电平触发,接收成功进入中断服务函数

ET0=1;

EA=1; //开总中断

TR0=1; //开定时器0

}

void main(void)

{

InterruptInit();

while(1)

{

Dis_Init();

Display();

if(rec_flag)

{

rec_flag=0;

Display();

Dis_Init();

EA=1;

TR0=1;

}

}

}

void Timer0() interrupt 1 //计数开始并且计时开始

{

EA=0;

TH0=0X00;

TL0=0X00;

ET1=1;

EA=1;

TR1=1;

TR0=1;

}

void Timer1() interrupt 3

{

vout=!vout; //脉冲信号

k++;

if(k>=4) //脉冲信号发送完,停在计数和计时

{

k=0;

TR1=0;

ET1=0;

for(j=200;j>0;j--);

EX0=1; //开外部中断0,等待接收位rece置0,触发中断

}

}

void PINT0() interrupt 0

{

TR0=0;

TR1=0;

ET1=0;

EA=0;

EX0=0;

rec_flag=1; //接收完成标志位

time=TH0; //距离处理

time=time256+TL0;

time=time-120;

distance=time0017;

}

51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。

#include<reg51h>

#include<intrinsh>

main()

{

_nop_(); //延时1us

while(1);

}

可以通过以下方法解决:

1、在iphone手机点击进入cydia—搜索—输入Mobilesubstrate,选择Mobilesubstrate—更改—重新安装—然后重启手机即可。

2、在iphone端选择设置—通用—还原—还原主屏幕布局,即可出现图标。

3、也可以在电脑端下载一个pp助手,连接手机后,用PP助手的图标修复功能来进行修复。修复完后最好注销一下,或者重启手机。

以上就是关于c语言中一个标准的延时1us的函数怎么写全部的内容,包括:c语言中一个标准的延时1us的函数怎么写、us/os是一个多任务 *** 作系统,说出编写和使用多任务程序的过程、这两个延时程序的区别是不是一个us一个ms等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9714290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存