c语言延时语句_第1页
c语言延时语句_第2页
c语言延时语句_第3页
c语言延时语句_第4页
c语言延时语句_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品好资料学习推荐C语言程序延时Keil C51的编程语言常用的有2种:一种是汇编语言;另一种是C 语言。用汇编语言写单片机程序时,精确时间延时是相对容易解决的。比如,用的是晶振频率为12 MHz的AT 89C51,打算延时20 s,51单片机的指令周期是晶振频率的1/12,即一个机器周期为1 s;“MOV R0,#X”需要2个机器周期,DJNZ也需要2个机器周期,单循环延时时间t=2X+3(X为装入寄存器R0的时间常数)2。这样,存入R0里的数初始化为8即可,其精度可以达到1 s。用这种方法,可以非常方便地实现512 s以下时间的延时。如果需要更长时间,可以使用两层或更多层的嵌套,当然其精度

2、误差会随着嵌套层的增加而成倍增加。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。有人说如果while里面不能放其它语句,否则也不行,用do-while就可以,具体怎样我没有去试.所有这些都没有给出具体的实例程序来.还看到一些延时的例子多多少少总有点延时差.为此我用for循环写了几个延时的子程序贴上来,希望能对初学者有所帮助.(晶振12MHz,一个机器周期1us.)一. 500ms延时子程序程序: void delay500ms(void) unsign

3、ed char i,j,k; for(i=15;i0;i-) for(j=202;j0;j-) for(k=81;k0;k-); 计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us循环外: 5us子程序调用 2us + 子程序返回2us + R7赋值 1us = 5us延时总时间 = 三层循环 + 循环外 =

4、499995+5 = 500000us =500ms计算公式:延时时间=(2*R5+3)*R6+3*R7+5二. 200ms延时子程序程序:void delay200ms(void) unsigned char i,j,k; for(i=5;i0;i-) for(j=132;j0;j-) for(k=150;k0;k-);三. 10ms延时子程序程序:void delay10ms(void) unsigned char i,j,k; for(i=5;i0;i-) for(j=4;j0;j-) for(k=248;k0;k-);四. 1s延时子程序程序:void delay1s(void) unsigned char h,i,j,k; for(h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论