C51单片机延迟程序怎么算啊 我要的不是C语言的解释

作者&投稿:豆往 (若有异议请与网页底部的电邮联系)
C51单片机延时问题(用C语言编译)~

在12M的晶振下:
void delay(unsigned int xms)
{
unsigned i,j;
for(i=0;i<xms;i++)
for(j=0;j<124;j++);
}
delay(1000)大概是1S
延时的时间你可以在Keil里设置断点通过查看Sec可以看到

延时多少不是c语言决定的,是编译后的汇编语言执行时间和单片机晶振共同决定的;
首先通过编译器,看看这个函数汇编之后,翻译成了什么,然后根据翻译过来汇编语言的时钟周期,计算该段程序的总执行周期(每条汇编语言指令执行的周期数都是确定的);
再用总周期乘以你的晶振时间(频率的倒数),就可以计算了。
你需要知道,机器周期、指令周期这些概念。也可以用其他的办法,很多单片机内置函数NOP,或者_delay_cycles这些内容。真想搞懂的话,希望多学学基础知识。

先算单片机的周期,然后算执行了多少次数,周期时间乘以执行次数就是延时时间!这个书上都有!不同的 单片机周期算法有些区别,具体看手册!

看看这个:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/95d6b8376e6bc6d7a2cc2bd5.html

用定时器

用循环呀?来耗费时间呀?


51单片机怎么延时程序
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水灯逐个闪动 { P1=~temp;delay(100); \/\/调用延时函数 temp<<=1;} temp=0x80;for(i=0;i<8;i++) \/\/8个...

51单片机延时程序
for(j=0;j<125;j++);这个循环语句是不是要执行125次,这就花了很多时间。所以这个程序就起到了延时的效果了

51单片机C语言程序中延时函数delay的原理是什么?
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量 关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大...

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

51单片机延迟程序(汇编语言)解析
延时计算:12M的晶振换算指令周期为1uS MDLY1S: MOV 35H, #255 ;2uS MOV 36H, #0 ;2uS MOV 37H,#4 ;2uS DLYB: NOP ;1us DJNZ 35H, DLYB ;2us,第一次循环为255*(1+2)=765,以 ;后为256*(1+2)=768 DJNZ 36H, DLYB ;2us 765+(...

51 单片机延时程序
..2... ...10*2...RET 执行一次 ...2... ..1*2...一共需要5133个机器周期,如果用12M晶振 则执行一个机器周期需要1US,那么一共需要5133US 还有不用算的方法,运行一下,编译环境下有记时的,将光标放到程序后,运行到光标处....

需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
void delay1s(uint i) \/\/1s延时程序 { for(;i>0;i--){delay1ms(1000);} } void main(){ led=0;while(1){ if (s==0){ delayms(20);if (s==0);{delay1s(60);led=1; } } if(led==1){delay1s(1800);led=0; } } } 如果对时间要求精确,则要用到定时器,还要确保电路...

设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单片机的延时程序,用的而是12M晶振,延时了大约多久呢。只需要大概_百...
C51里面调用,在调用前记住机器周期数,调用完之后会产生一个新的周期数,这两个周期数的差值就是这段程序执行完所需要的周期数了,然后再根据使用晶振频率计算出周期的时间,这个方法对精确延时调试很管用的,多少可以用NOP空指令补,希望能采纳 ...

山海关区13383599409: 单片机C51延时时间怎样计算? -
沃废兰释: 去百度文库,查看完整内容>内容来自用户:云海寻峰C程序中可使用不同类型的变量来进行延时设计.经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量.以某晶振为12MHz...

山海关区13383599409: 单片机c51中 延时的次数怎么计算啊? 急!!!!!! -
沃废兰释: 一条指令执行的时间乘以你所设置的跳转数,就是延时的时间.希望对你有帮助.

山海关区13383599409: 在C51单片机中延时子程序的延时时间是怎么算的?
沃废兰释: 按每一个指令所占有的机器周期..再根据晶振频率来算..

山海关区13383599409: 怎么用C51编写单片机延时函数 -
沃废兰释: 软件延时的话建议直接用单片机精灵或STC-ISP等软件计算生成的代码.用定时器的话,设置定时器基本定时时间,再增加标志判断定时器工作了几轮,基本时间*标志就是延时的时间了;如果要用时间很短的精准延时就需要计算该给TLx和THx的值了

山海关区13383599409: C51单片机的延时是怎么计算的?l -
沃废兰释: C语言软延时一般用于不要求准确延时的场合,准确计算比较困难,不象汇编语言有公式,一般用软件仿真试验的方法获得,不准确时可以按比例调a和 b的值,但并不完全成正比,如果说要求精确定时,还需定时器

山海关区13383599409: C51单片机延迟程序怎么算啊我要的不是C语言的解释
沃废兰释: 先算单片机周期算执行少数周期间乘执行数延间书都同 单片机周期算些区别具体看手册

山海关区13383599409: 单片机中的延时程序的延时时间怎样计算的? -
沃废兰释: 把#号后面的数乘起来,计算后的结果就是延时的时间,单位是US,要花成秒要除以100000

山海关区13383599409: 单片机延时程序的延时时间怎么算的? -
沃废兰释: 单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期. 扩展资料: 1丶指令周期,是每种运算需要的时间,如加法、逻辑等,是每一步进行这种指令运算需要的时间,是机器周期的整数倍,这种周期不定. 2丶51单片机12M晶振,晶振周期1/12微妙,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微妙=1微妙. 3丶1个毫秒延时子程序如下: void delay1ms(uint ms) { uint i,j; for(i=0;i<ms;i++) { for(j=0;j<110;j++); } }

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

山海关区13383599409: C51单片机延时函数的计算 -
沃废兰释: 软件延时都是不精确延时,精确延时需要用到定时器中断.软件延时的计算可以反汇编,汇编指令有对应的执行机器周期,机器周期=时钟周期*12,时钟周期就是晶振频率的倒数.这些都可以通过“单片机小精灵”这个软件实现,本来就不是精确延时,没必要深究,而且不同的51单片机运行速度不一样,延时的时间也不一样.

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