C51单片机延时问题,使用delay函数。这个延时时间是如何计算的啊?110从何而来?

作者&投稿:冷柯 (若有异议请与网页底部的电邮联系)
51单片机C语言里延时函数里110的意思~

1、C语言中没有_nop_()函数,该函数是在51单片机中用的延时函数,延时一个指令周期。一般包含在 intrins.h 头文件当中。
2、例如用6MHz的晶振,则如下for循环大约延时1秒。
int i;
for(i=0; i<6000000; i++)
_nop_(); // 延时一个指令周期,相当于执行一条无意义的语言

这个和指令执行的时间有关,这里的意思就是for语句执行110次就是1毫秒,循环500次就是500毫秒。

1.你可以通过keil仿真,多试几次找出这个值。仿真可以看时间。
2.还可以把程序下到板子上,比如运行1分钟。通过多次试验,也能找出这个值。
3.也可以理论计算,51有机器周期、指令周期,考虑晶振,看一个for要多少指令,最后也能算出来。
不同单片机不一样,有的没有机器周期,有的指令周期也不一样,晶振也不一样。推荐前两种方法。

keil仿真调试里面可以看到运行这一段程序所用时间,这样得到的只是近似值,需要精确的1ms时间用定时器

直接是一个近似值而已

从调试里面看了


C51单片机延时程序,需要不精确延时2小时,请问大神怎么写延时代码,谢 ...
可以有很多办法,一是调整参数,使其延时5分钟或6分钟,循环24次或20次。二是将延时函数的形参改为长整型(32位)延时时间扩大65536倍。三是使用定时器,每次定时50mS,累计144000次,便是2小时,使用定时器(中断)的好处是在延时期间还可以干许多事情,例如显示剩余时间,检测设备工作状态或者调整延时...

51单片机12HZ的,怎么计算延时时间?
应该是 12MHz 吧?单片机内部,计时的单位是《机器周期T》。下面是每条指令执行时,所用的周期数:MOV R1,#60 1T F: MOV R3,#248 1T DJNZ R3,$ 2T DJNZ R1,F 2T RET 2T 下面是程序循环时所用的周期数:MOV R1,#60 F: MOV R3,#248 DJNZ R3,$ 2 * 248 = 496 ...

51单片机的一个延时,我问下这个延时是具体怎么执行延时的?
需要延时的时候,在程序中带参数调用DelayMs,参数传递给DelayMs的形式参数“unsigned char t”,t就有了数值。“while(t--);”执行t个循环后退出,t个循环用了若干时间。连续执行两条“DelayUs2x(245);”,原理同第1,2步,也用了若干时间。以上执行用的时间就是你延时的时间。问题点:程序有失误...

51单片机C语言程序中延时函数delay的原理是什么?
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。

关于51单片机软件延时并用数码管显示的问题,请各位高手指教!
显示一位后,要有一个延时,之后再显示下一位。必要时,还要加上消隐,之后再显示下一位。否则,显示必然混乱,总是在交换显示内容,看不清楚。void main(){ ENLED = 0; ADDR3 = 1; \/*38译码器使能*\/ uchar num = 0, i;while(1) { num++;if(num > 60) num = 0;ge = num% ...

51单片机用c语言怎么写延时函数?
那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1\/12M *100(s),即1\/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生...

51单片机,晶振为6M请帮忙写一个10ms的延时程序,能有详细解释的。因为我...
还有一种是用定时器。我本身也是菜鸟所以只能粗略的讲一下。第一种的算法是 晶振的周期T1=1\/f; 这里f=6MHz 所以T1=1\/6 us;(微秒)单片机花12个T1去执行一个指令,所以一个机器周期等于12个晶振周期,T2=12*T1=2us 10ms=1000 0us 所以你要得到10ms的延时就要想办法让机器去做5000条“...

51单片机延时程序时间是怎么计算的
51单片机延时时间计算需要考虑以下两种因素:1、指令执行时间 2、指令循环次数

设MCS-51单片机的晶振频率为12MHZ,试编写10ms的延时程序(要求误差不超 ...
C语言程序:include void main (void){ TMOD = 0x10;TH1 = (-50000>>8);TL1 = -50000;TCON = 0x40;IE = 0x88;while(1);} void T1_int (void) interrupt 3 { TH1 = (-50000>>8);TL1 = -50000;} 汇编程序如下:ORG 0000H AJMP MAIN ORG 001BH AJMP T1INT ORG ...

51单片机的定时器怎么做延时 汇编
定时器中断里1S时,作个标志,主程序里判断这标志。给你一个流水灯的例子参考。ORG00H AJMPMAIN ORG0BH AJMPT0INT ORG30H MAIN:MOVTMOD,#01H MOVTH0,#3CH MOVTL0,#0B0H MOVR0,#20 SETBEA SETBET0 SETBTR0 MAIN0:MOVA,#01H MAIN1:MOVP1,A JNBF0,MAIN1 CLRF0 RLA INCA AJMPMAIN1 T...

宝山区17671423572: 51单片机C语言中delay函数是怎么定义和使用的 -
宜义硅炭: delay函数是一般自己定义的一个延时函数. c语言定义延时函数主要通过无意义指令的执行来达到延时的目的.下面给出一个经典的延时函数. // 定义一个延时xms毫秒的延时函数 void delay(unsigned int xms) // xms代表需要延时的毫秒数 {unsigned int x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--); }

宝山区17671423572: C51单片机延时问题,使用delay函数.这个延时时间是如何计算的啊?110从何而来? -
宜义硅炭: 1.你可以通过keil仿真,多试几次找出这个值.仿真可以看时间. 2.还可以把程序下到板子上,比如运行1分钟.通过多次试验,也能找出这个值. 3.也可以理论计算,51有机器周期、指令周期,考虑晶振,看一个for要多少指令,最后也能算出来. 不同单片机不一样,有的没有机器周期,有的指令周期也不一样,晶振也不一样.推荐前两种方法.

宝山区17671423572: 51单片机C语言程序中延时函数delay的原理是什么? -
宜义硅炭: 1:原理:仅仅执行一些,没有实质性影响的所谓“无意义指令”,比如做比大小啊,做某个int的自加运算啊之类的 2:两重for的作用:简单的说,就像高中数学中的“乘法原理”一样,这样可以很轻易的迅速增加上述“无意义指令”的数目 3...

宝山区17671423572: C51单片机怎样实现延时控制 -
宜义硅炭: 最简单的软件延时: unsigned char i; for(i=0;i<100;i++) {i++; } 可改变i的值以达到延迟的时间. 还有就是用定时器延时: void Delay(unsigned char t) {do{TH0 = 0xDC;//设置定时器初值(定时10ms)TL0 = 0x00;TR0 = 1; //启动定时器while ( !TF0 ); //等待定时器溢出TR0 = 0; //停止定时器TF0 = 0; //清除溢出标志} while ( --t != 0 ); //循环t次 }

宝山区17671423572: 51单片机delay延时问题 -
宜义硅炭: 这个延时要看编译后的汇编来计算,看具体的执行时间来定,延时1秒可以用多层圈来套用即可

宝山区17671423572: 请问在单片机C语言编程中,用delay延迟的话,1秒程序是什么?单片机晶振为12MHZ ... -
宜义硅炭: 在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1.多试几个A,差不多调到1s就够了.我一般都这么调.你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧.

宝山区17671423572: 51单片机 延迟时间问题 -
宜义硅炭: 这是靠单片机指令周期延时的程序,12M晶振,每个周期为1us,每个for语句3个周期,所以124*3*3约等于1ms,所以可以进行简单的延时.

宝山区17671423572: 51单片机延时程序时间计算 -
宜义硅炭: 计算延时时间应注意以下几点:1、晶振跑多少的,象这里的6M的话,那么它执行的机器周期就是2us,2、看指令执行要多少个机器周期,向DJNZ、RET都要两个机器周期,3、那么,这里总共时间是26(1A)*255(0FF)*255(0FF)*2(机器周期)*2us(1个机器周期的时间)=6762600us 若要精确计算的话要加上上面赋值的时间和子程序返回的时间.不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助...

宝山区17671423572: 跪求51单片机延时程序计算方法:百度度不到,死去活来的求,是用DEL:MOV R5 #FFH```````下面省略,高手请进 -
宜义硅炭: DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250DJNZ R5,$DJNZ R6,D2DJNZ R7,D1RET说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等2、这个程序是12M时钟,如果时钟不同,要修改数值.如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5

宝山区17671423572: MCS - 51单片机 编程中 延时程序DELAY怎么计算?? -
宜义硅炭: 一次DJNZ是两个机器周期,一个MOV是1个机器周期,然后你自己算一下总共多少个机器周期就可以了.对于一般的51芯片,12个时钟周期等于1个机器周期,也就是说,对于12M的晶振,1个机器周期就是1微妙.但有些芯片是6个时钟周期等于1个机器周期,甚至1个时钟周期等于1个机器周期,这点你要在选择硬件的时候注意.

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