51单片机延时程序如何写,能不能不用循环体困住指针的方式?(单片机延时程序原理)
单片机延时程序怎么写?是根据什么原理写的?有什么方法吗?
单片机中做延时,如果是时间比较短的情况,和单片机的机器周期时间,或单片机运行单个命令的时间是同一个单位时间的话,那么用循环运行一些没有动作的命令来延时,算每个命令的时间是多少,循环了多少次,那延时时间就可以算出来的了.另外一种延时,时间相对机器周期的单位时间来说比较大,好像要MS,S 以上,那么可以用单片机的定时器来做,那就比较准确的时间的了,
c51怎么写延时程序??
用汇编语句写循环,看每个指令的周期是多少 循环一次要多少个指令,加上前后的几个,就是总的延时 网上有关于这方面的讨论的帖子的
51单片机中写数码管59秒循环计时的程序可以不用计时器吗?用延时函数可能实现吗?
可以实现.不过这样的定时精度比较低.既然能计数,那说明是你的数码管部分的程序没写好. 直接delay(1000)就约等于1s 了,不过你这样最好计数小一点,因为这个延时程序执行完了之后还要执行显示函数.还有一种方法就是自己估算一下显示函数需要花多长时间,然后在while里同时执行delay和显示函数,这时候就要定义一个变量,全局变量
51单片机延时程序
我以2ms为例说明一下: 单片机的晶振周期为12hz,则执行一条代码为一个机器周期,为1微妙(ua),所以2ms=10*200(ua), 对r2赋值200(4位二进制数最大值为256,...
AT89C51单片机延时1秒程序怎么写???
void DELAY(int z)//延时zms { int x,y; for(x = z;x > 0;x--) for(y = 110;y > 0;y--); }DELAY(1000); 就可以延时1S 但是有很小的误差 精确的只能用定时器了
如何不使用51单片机,做一个延时电路
需要延时的时候,在程序中带参数调用DelayMs,参数传递给DelayMs的形式参数“unsigned char t”,t就有了数值.“while(t--);”执行t个循环后退出,t个循环用了若干时间.连续执行两条“DelayUs2x(245);”,原理同第1,2步,也用了若干时间.以上执行用的时间就是你延时的时间.问题点:程序有失误,DelayMs里的while(t--)后边不能有分号,这样t个循环才能作用到下边的两条“DelayUs2x(245);”
求教51单片机按键可调延时的子程序怎么写
应该是把flag=0;而不是flag==0;一个是赋值,一个是比较,怪不得啦!
用汇编怎么写51单片机的延时程序
和前两位的差不多,最简单的就是运用MOV赋值的,再用DJNZ递减的方式,计算出每条指令执行时间,再加上循环字数,延时时间按照你自己的时间编写循环次数和赋值大小;另外,你也可以用定时器编写,计算好你的延时时间,当时间达到时输出高电平,作为中断信号,返回主程序,执行设定延时后的目标程序.汇编和C各有好处,就我个人而言,浮点数的计算最好用C编,汇编不好解决,而且需要的很多代码,C很容易就可以实现!
c51单片机延时程序
/*------------------------------------------------ us延时函数,其值的范围是 0~255 晶振12m, 精确延时请使用汇编,大致延时 长度如下 t=t * 2+5 us ------------------------------------------------*/ void delayus (unsigned char t) // 延迟函数 { while(--t); } void main() // 主程序 while(1) { // ---------- delayus(40); // 调用 延迟函数 将延迟 40*2+5 = 85us // ---------- }
在51单片机中除了delay还有哪几种延时的写法
定时器,循环,_nop_