单片机C语言延时的方法。最好能够详细说明原理

作者&投稿:雷任 (若有异议请与网页底部的电邮联系)
求指教单片机c语言延时程序~

单片机里没有万用的延时函数吧,最简单的
for(i=0;i<100;i++);这就是一个能延时的for循环(注意最后的分号),
要明白延时的原理,就让单片机一直做一件事,如上边的就是一直执行这个语句直到i=99,

只要明白这个,其他的延时就不难啦,可以使用循环嵌套实现更长的延时,不仅仅可以使用for语句,while语句也同样可以

原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量







关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。







当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。

扩展资料:
定义延迟XMS毫秒的延迟函数







Voiddelay(unsignedintXMS)//XMS表示需要延迟的毫秒数















无符号intx,y;







For(x=XMS;X0;X-)







For(y=110;Y”0;Y-);















使用:







VoidDelay10us(ucharMs)















Uchar数据我;







(;女士“0;------Ms)







对于(I = 26)我> 0;我-);















I=[(延迟值-1.75)*12/ms-15]/4

如果用C51来编写延时程序,一般都用循环语句:
例:
void delay(unsigned int num)
{
unsigned int i;

for (i=0; i<num; i++)
{
; // 程序什么都不做
}
}

原理很简单,程序什么都不做,只是不段的比较,直到比较完,这样就起到延时的作用了。至于它延时了多少时间,则需要编译后,看实际的反汇编程序。
2: {
3: unsigned int i;
4:
5: for (i=0; i<num; i++)
C:0x0000 E4 CLR A
C:0x0001 FD MOV R5,A
C:0x0002 FC MOV R4,A
C:0x0003 C3 CLR C
C:0x0004 ED MOV A,R5
C:0x0005 9F SUBB A,R7
C:0x0006 EC MOV A,R4
C:0x0007 9E SUBB A,R6
C:0x0008 5007 JNC C:0011
6: {
7: ; // 程序什么都不做
8: }
C:0x000A 0D INC R5
C:0x000B BD0001 CJNE R5,#0x00,C:000F
C:0x000E 0C INC R4
C:0x000F 80F2 SJMP C:0003
9: }
根据汇编及指令执行周期就可以算出时间了。


一个很简单的delay延时小函数,有点小问题,请C51高手帮忙!
这是c的编译规则的问题。对于int型7FFF次是可直接执行的 因为不管你定义的是什么型,对于1个循环跳转次数来说都是0-255是单跳转 0-7fff是2个跳转嵌套,16位数的最高位是符号的。这里不管i是什么型 对于循环就是把i的值带入入口而已。通常做软循环不建议用INT的变量因为太不好就算了 而且切效率低。

51单片机,有8个流水灯,每个之间延迟1秒,这个延迟用c程序编写怎么写
要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2\/12 M =1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下。c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟。 本回答被网友采纳 fenire | 发布于2012-09-05 举报| 评论 3 0 写个for...

51单片机c语言里 _nop_ 函数怎么用?
在单片机c语言中直接调用库函数即可,具体如下:include<intrins.h> \/\/ 声明了void _nop_(void);_nop_(); \/\/ 产生一条NOP指令。该函数的作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M...

单反和胶片的区别是什么? 单反胶片机 的 原理是什么?
装上胶卷后,胶片机的操作很简单,没有现在数码机那么多按钮,胶片机的拨盘全是数字,主要有调节感光度,调节快门速度,镜头上有光圈环和焦距环,变焦环,如果把相机比作计算机语言的话,那么胶片相机就是C语言,操作的随意度很大,能够充分发挥你的想象空间,当然前提是你的技术足够好。胶片也进行后期处...

单片机与PLC的区别
2、plc就是由单片机加上外围电路做成的 ,单片机开发式底层开发,程序编写用汇编或者c语言比如延时用单片机做程序,要从晶振来计算,而plc就不一样,厂家都提供一个编程软件,可以用梯形图编程。3、价格不同。单片机开发成本低,一个单片机十几块到几十块,但开发起来,麻烦。PLC 的价格几百,几千...

c语言程序 帮我把没一句注释写上,越清楚奖分越多。最好按格式写(第一句...
void delay1ms(uint t) \/*声明并且实现函数,函数命为d elay1ms1ms 参数为 uint ,返回值为void*\/ { uint i,j; \/*声明i和t两个uint类型的变量*\/ for(i=0;i<t;i++) \/*根据输入的参数 t,决定循环执行的次数*\/ for(j=0;j<120;j++); \/*执行120次空代码,实现延时的作用*\/ } void ...

用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!
C语言实现LED灯闪烁控制配套51单片机开发板。include \/\/包含单片机寄存器的头文件 \/***函数功能:延时一段时间 \/ void delay(void) \/\/两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; \/\/定义无符号整数,最大取值范围65535。for(i=0;i<20000;i++) \/\/做20000次空...

我是学机电一体化技术的,如果把C语言学精了可以从事哪方面的工作
单机片和c语言学好了可以搞嵌入式开发!你可以网上搜索关于嵌入式开发的一些文章,c语言在嵌入式开发中占78%,可想而知c语言的重要性,关于书,你可以看一些关于的51的书,自己学习的这个专业对于嵌入式开发也很重要,不要落下了哦。最后祝你成功。

怎样用2个按键让51弹片机P1 P2口输出高电平和低电平,用C语言怎样编?
P1,P2口都有8条线哦,假定按键1在 P10口 按键2在 P11口 两个输出口分别为 P20 P21 我写个主循环的一部分。while(1){ if(P10==0) P20=0;else P20=1;if(P11==0) P21=0;else P21=1;}

微控制器都有哪些型别
可以说,掌握用C语言微控制器程式设计很重要,可以大大提高开发的效率。不过初学者可以不了解微控制器的组合语言,但一定要了解微控制器具体效能和特点,不然在微控制器领域是比较致命的。如果不考虑微控制器硬体资源,在KEIL中用C胡乱程式设计,结果只能是出了问题无法解决!可以肯定的说,最好的C语言微控制器工程师都是...

大石桥市13295716894: 单片机C语言延时的方法.最好能够详细说明原理
段干卓环磷: 如果用C51来编写延时程序,一般都用循环语句: 例: void delay(unsigned int num) { unsigned int i; for (i=0; i<num; i++) { ; // 程序什么都不做 } } 原理很简单,程序什么都不做,只是不段的比较,直到比较完,这样就起到延时的作用了.至于...

大石桥市13295716894: 单片机延时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产...

大石桥市13295716894: 怎么用C语言做单片机的精确延时 -
段干卓环磷: 在单片机应用中,经常会遇到需要短时间延时的情况,一般都是几十到几百μs,并且需要很高的精度(比如用单片机驱动DS18B20时,误差容许的范围在十几μs以内,不然很容易出错);而某些情况下延时时间较长,用计时器往往有点小题大...

大石桥市13295716894: C语言单片机怎么调用延时指令???? -
段干卓环磷: void delay( int time) {int x,y;for(x=0;x<120;x++)for(y=time;y>0;y--); } time表示延时时间,如果晶振是12MHZ的话,time=1表示延时1毫秒

大石桥市13295716894: 怎么样用C语言实现精确延时 -
段干卓环磷: 要自己构造, 步骤1,检查单片机的说明书,知道执行一条指令要多少时钟周期, 2, 12M的时钟频率就是一个始终周期83.3ns, 3,你要1毫秒,就是要延迟12000个时钟周期, 做一个For循环,在里面做4000次加法运算就可以了(假设你的单片机一个指令用一个时钟)

大石桥市13295716894: 如何用C语言对单片机进行精确延时 -
段干卓环磷: 用 定时器/计数器 实现, 给定时器 寄存器设个初值, 选个工作方式, 时间一到 溢出 产生中断, 在中断 子程序中 调用串口 可以输出延时的时间. 至于初值 设为多少, 那就要看你到底定时多少了. 12M晶震 的机器周期 是 1us 自己算酸 分单字节单周期指令, 双字节单周期指令, 单字节双周期指令.单片机在执行 指令时 首先要取指令和执行指令2步.单周期指令的执行时间 为一个机器周期.比如:如果想要知道 for(;;)这个循怀 到底用了多长时间来执行. 那么你可以 查编译器 这条语句所对应的 操作码和操作数. 然后再区分其到底是什么类型的指令.最后把时间加加 就可以了 .

大石桥市13295716894: 怎么用C语言做单片机的精确延时
段干卓环磷: 可以使用C语言中的Sleep()函数.

大石桥市13295716894: 在MCS单片机中用C语言怎么计算延迟时间?要精确的//..
段干卓环磷: 首先你要确认你的晶振频率,假设是12MHz,然后是你单片机执行指令消耗的时钟周期,8051的一般都是12T,也就是执行一条指令消耗12个机器周期,现在STC的大部分是1T的,就是比传统的快12倍.那么传统51单片机执行一条指令的时间为T=12/(12M),即1us,你只要设置个for循环,for循环里没有语句,那么for循环的次数*1us就是消耗的时间,也就是软件延时.软件不可能非常精确,你也可以用定时器定时

大石桥市13295716894: 单片机的延时,延时时间长度是怎么算的?最好有一个例子,来说明! -
段干卓环磷: 延时长度根据你的振荡器的频率和后分频来计算的.最简单就是写一段延时,用示波器测试一下.简单的延时可以用nop循环,长延时尽量用定时器来做.

大石桥市13295716894: 单片机的延时程序 -
段干卓环磷: 去百度文库,查看完整内容>内容来自用户:天成信息单片机延时方法总结 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循...

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