如果是单片机上,是有可能的
单片机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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)