c语言中延时1ms的程序以及原理,谢谢
这个程序应该是板子上延时的程序。
a就是需要延迟的毫秒数(也可能是其他单位)。
就是说,执行 for(i=0;i<600;i++);的时间应该是一个单位长度(可能为1ms);
这样,你在调用的时候,赋值给a多少值,实际就是延时多少毫秒。
例如,延时10ms,就用
delay(10);
延时1ms,就用
delay(1);
1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。
2、然后添加c文件,接下来输入代码,先输入一个头文件命令。
3、然后,进行宏定义,代码如图所示。
4、然后声明P1口,如下图所示。
5、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。
6、最后,点击编译,生成HEX文件就可以了,这样51单片机延时语句就完成了。
#include<stdio.h>
void main()
{
clock_t start,finish;
double durtion=0;
printf("计时开始\n");
start=clock();
while(1-durtion>0.00001)
{
finish=clock();
durtion=(double)(finish-start);
}
printf("1ms计时完毕\n");
}
原理:两个时间差值是1ms就立即跳出while循环,C语言中时间分度值是ms
如果是单片机建议用这个
不是的话无视这个
void delay(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay(DWORD ms){
DWORD a,b;
a=GetTickCount();//开始时间,单位毫秒
while(1){
b=GetTickCount();//判断时间
if((b-a)>ms)return;
};
}
求一个51单片机延时1秒的程序,用汇编!!
DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,DJNZ R6,D2 DJNZ R7,D1 RET 说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5 ...
C语言delay延时时间怎么算?
简单比喻一次振荡需要1us,那1ms就是1000次振荡,300ms就是300x1000次振荡,这样就能大概的计算出300ms delay;这得看你的CPU运行一条指令得多久,像单片机89C51一般一条1us。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码...
51单片机中,写个延时函数,延时1ms,该怎么写,为什么?
用汇编语言写可以精确计算,但有时想拼出整数的ms或10ms也不容易,计算方法如下图说明:而C语言靠经验和实验得来的,如下面程序 如果不准(与晶振频率有关),调K的值,,软件仿真查看,直到大致准确,想更精确用定时器 void delay(unsigned char i) \/\/延时程序{ unsigned char i,k;for(j=i;j...
单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
首先你要知道一个指令周期是几秒 算法是1\/(晶振频率除以12)然后你要知道循环究竟执行了几个指令周期 你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而...
void Delay 1ms(unsigned int count)是什么意思
一个无返回值的函数,参数是无符号整型,实现的功能从字面看来是:延时,1count = 1ms
汇编语言延时程序
应该是这样简单的吧:mov c,p1.0 jnc next mov r1,#9 yanshi:djnz r1,yanshi nop next:...延时1+18+1=20us 1ms=1000us next是标号好不好,就是低电平跳过延时程序到这里,高电平延时后到这里
怎么样用C语言实现精确延时
要自己构造,步骤1,检查单片机的说明书,知道执行一条指令要多少时钟周期,2, 12M的时钟频率就是一个始终周期83.3ns,3,你要1毫秒,就是要延迟12000个时钟周期,做一个For循环,在里面做4000次加法运算就可以了(假设你的单片机一个指令用一个时钟)...
在单片机编程中,12M晶振,延时1ms,常用for(i=0;i<120;i++);谁能帮我...
这个是for循环是一个软件延时,意思就是单片机执行for循环耗费的时间大约在1ms左右,并不准确的,这个for循环没有人能计数出来单片机在执行它能耗费多少机器周期,都是通过仿真看到的。这个for循环也是别人在仿真时候测试CPU执行空i--指令耗费大约在1ms....
c语言,这里的120是代表什么?如果是秒针的延时时间又是多少
用1调用这个函数 就是延时1毫秒。 120 就是循环一次延时 1\/120 毫秒, 所以循环120次延时1毫秒。实际时间,还是要看自己的CPU. 通过调用测试,看误差有多少,自己适当调整120这个数值。
C语言延时程序编程
-在主程序中用一个GPIO测试,如:SetGPIOHigh(); Delay(1000); SetGPIOLOW();-用示波器测量该GPIO波形及频率 -调整Delay函数的调用值,可以用变量,在调试时实时修改变量值,找到延时1毫秒的值,把Delay函数改名为Delay1ms,之后调用这个函数完成精确延时 -其他的延时函数也可以类似上述方法完成,但记住...
衷治甲巯: 一般延时1ms的程序是: void Delay(uint x) {uchar i;while(x--){for(i=120;i>0;i--);} }那么当你在别的函数中用到Delay(10000);就是延时10000ms,也就是10S
拜城县18026921122: 用C语言编写延时0.001ms程序 - ?
衷治甲巯: #include <stdlib.h> void main(){ sleep(1); /* 延迟1ms */ }
拜城县18026921122: 单片机C语言延时程序,延时时间是怎样计算的 - ?
衷治甲巯: 这怎么是延时1ms的程序?k不一样延时也不一样.而这种靠执行指令延时的程序的延时里昂: 1. 可以通过查看她的反汇编代码来分析得到. 2. 也可以通过定时计数器的获得.执行前从0开始计数启动定时器,然后以一定参数k调用delay,在返回后检查定时器的计数值 T.T = tc + k * t0,tc是任何一次调用都具有的调用开销.t0时k=1时去掉调用开销tc的循环体执行时间. 给两个不同的k得到两个不同的T,就可以确定这两个参数 tc和t0. 从而就可以根据谣言吃的时间和容易的计算出k的值.
拜城县18026921122: 我的单片机用的11.0592M的晶振,想写一个大概延时1MS的子程序,应该怎样写?(用C语言)?
衷治甲巯: void delay(uint n) { uint i,j; for(i=n;i>0;i--) { for(j=110;j>0;j--); } } 当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值. 头文件下请定义宏 #define uchar unsigned char #define uint unsigned int
拜城县18026921122: C语言编程时,延时函数125次=1ms(书本上是这样的,不懂),是怎样得来的? - ?
衷治甲巯: 就看楼主你用的晶振是多大的!如果你用的是12M的晶振,一个机器周期为T=12/f=1微秒,你的延时程序循环600*125=75000次,即75000微秒,就是75毫秒.
拜城县18026921122: c语言延时一秒响铃代码 - ?
衷治甲巯: #include <stdio.h>#include <stdlib.h> int main() { Sleep(1000); //延迟1秒putchar('\a'); //响铃return 0; }请采纳.
拜城县18026921122: 单片机延时1秒如何计算要最详细一点的要过程 用C语言写的 晶振为12M 主要是计算过程和算法 - ?
衷治甲巯: unsigned char rSecondCount; //秒计时数 unsigned char rMinuteCount; //分计时数 sbit IsOneSecondReach;sbit Pulse_Sec=P1^0; sbit Pulse_Min=P1^1;main() { rSecondCount=0; rMinuteCount=0; TH1=0x3C; TL1=0xAF; //定时器50ms产...
拜城县18026921122: 怎么样用C语言实现精确延时 - ?
衷治甲巯: 要自己构造, 步骤1,检查单片机的说明书,知道执行一条指令要多少时钟周期, 2, 12M的时钟频率就是一个始终周期83.3ns, 3,你要1毫秒,就是要延迟12000个时钟周期, 做一个For循环,在里面做4000次加法运算就可以了(假设你的单片机一个指令用一个时钟)
拜城县18026921122: 有谁懂单片机C语言的吗? - ?
衷治甲巯: for(;Delay>0;Delay--) C语言的意思是 循环初始Delay等于调用时的Delay,如果Delay大于0则做这个循环语句,每循环一次后Delay=Delay-1,如果Delay大于0则再执行这个循环.直到Delay变0.Delay循环语句的循环体是i的循环语句,它对i做124次循环,i的循环体是空语句.for(i=0;i<124;i++) {;} i=124次,应当是率定试验做出来的.例如做过一次1分钟的试验,得出7440次,那么1秒钟:7440/60=124次
拜城县18026921122: c语言精确延迟程序?
衷治甲巯: 晶振为12mhz,速度跟电脑的CPU差不多了. void DELAYMS(unsigned int m) { unsigned int i,j; for(i=0;i<m;i++) for(j=0;j<1124;j++); } 当m=1000时 大约等于1s 当m=1时 大约等于1ms 所以删掉 for(j=0;j<1124;j++); void DELAYMS(unsigned int m) { unsigned int i,j; for(i=0;i<m;i++) } 当m=500 时 为500um, 40时为40um 我也不敢肯定这样对不对,在做实验时,我一般这样取值!仅供参考