1. 首页 > 科技

单片机for延时 51单片机for延时

单片机里的for循环延时函数怎样理解

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

单片机for延时 51单片机for延时

一个单片机的for语句的简单延时程序

你的延时程序从语法来说是没有问题的,但是在实际应用中就应该考虑实际问题.我具体帮你分析一下;看你包含的头文件,你应该是用的51内核的单片机,假设你用的是.

单片机for循环延时语句的问题

虽然delay定义的入口参数是int型的 但是内部延时函数的i是char型.unsigned char的范围是0-255 所以,改成unsigned int i,j; 就行了

关于单片机的延时,c语言中for循环是怎么计算的?

单片机要精确的延时一般都用定时器,for循环延时只是一个粗略的延时,时间上不能计算,可以在仿真时测试运行时间

单片机循环延时函数

一个时钟周期=晶振的倒数51单片机的一个机器周期=6个状态周期=12个时钟周期 一个单周期指令包括一个机器周期,即12个时钟周期,所以12m晶振的话一条单周期指令执行的时间为12*(1除12m)=1us 延时更多的话往上乘就是了

51单片机c语言for语句延时为什么不对啊???求高手指教

这个的话应该只有在x为某一个确定值左右时延时准确,当x偏离这个值太多时候,就会由于累积误差导致延时不对了.因为循环次数不同,则执行的for中的判断语句和赋值语句就会累积增加或减少(主要是第一层,因为内层的基本时间不变),最终导致较大的误差.一般写这种函数的话都是写一个固定值的,而不会加形参.

keil3,51单片机,关于for循环延时的问题

在C51中,uint是2个字节长,也就是16位,uchar是1个字节长,就是8位.其实在这段C程序编译后去看汇编程序你会发现,用1个字节保存j,只需要使用DJNZ命令就可以了,而用2个字节的话,对低字节减1后,还需要判断是否有借位,如果有借位还需要对高字节进行判断.这些动作都需要一定量的汇编程序来完成,而程序运行的时间完全取决于程序量的多少,所以会有明显的不一样.

单片机的延时程序

单片机里有两种方法可以延时!第一种是用for语句:如,void delay(ms) for(i=0, i>ms,i++) { for(j=0,j>110,j++) } 这是一个有参数的延时程序,其中ms是参量,在调用时可以随意赋值~ 如你想延时一秒,则在调用时可以写:delay(1000); 其原因是:内层for 是延时1ms的函数,内层for是一个公认的样式! 而参量ms=1000,即外层for循环1000次!延时时间=1000x1=1s 第二种是用定时/计数器,如是12Mhz 晶振,则每计一个数表示1us 这个没例子我不好讲,你刚学单片机吧!以后要学的,挺好学的!看看书就知道了

单片机的延时设置

用编译器自带的跑表模拟跑一下不就得了

单片机延时

你这是死循环延时,太浪费单片计的运行时间了,这也是最低级的写程序的方法. 用定时器中断处理是一种方法,但在定时器不多,或者定时器还有其它用途的场合就不好办了.而且这会打断其它流程的正常操作. 最好的做法是做成周期查询的,类似与操作系统的任务,定一个时间基数,比如1ms,然后单片机产生1ms中断,中断里只对变量a进行加1操作.主程序里任何需要定时的任务,就去查询当前a的值.比如延时就是记下当前的a值,然后等到a的值变到需要的时间值后再执行. 但不要死等a的值变化,主程序应该是轮询式的,到了需要的时间点就去做该做的事,没到时间,主程序就去轮询其它任务.这样的单片机的处理能力才真的被释放出来,这个程序也就有随意添加其他任务的可能.