C51延时函数delay的编写

发布者:shmilyde最新更新时间:2018-07-20 来源: eefocus关键字:C51  延时函数  delay 手机看文章 扫描二维码
随时随地手机看文章

例如,要写一个延迟10ms的delay函数:(12M晶振)



void delay_10ms()

{

     unsigned char i,j,k;

     for(i=5;i>0;i--)

     {

           for(j=4;j>0;j--)

           {

                   for(k=248;j>0;j--);

            }

      }

}

原理:3层for循环,循环次数是 NUM = 4X5X248 = 4960次,由每次循环都有条件判断(如 i >0)和自减语句(如 i--),因此每次循环又耗费两个机器周期

     所以,总耗费的机器周期为 SUM = NUM x 2 = 9920个


     又因为 12M 晶振频率,每一个机器周期为 1us,所以 这个函数话费的时间 为9920us = 9.920 ms 约等于10ms,而把赋值语句,压栈出栈操作计算在内,加起来差不多10ms


关键字:C51  延时函数  delay 引用地址:C51延时函数delay的编写

上一篇:单片机外部中断的两种模式
下一篇:51单片机的延时及定时器

推荐阅读最新更新时间:2024-03-16 16:09

按键的C51源程序
8条口线24按键的C51源程序 //键盘扫描处理,无按键返回0,有按键返回键值,键值对应于keycode 下标值。8条(以P2为例)口线24按键 //键盘码也可定义为局部数组变量 unsigned char code keycode = {0x00,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0xd7,0xe7,0xb7,0x7b,0x7d,0x7e,0x77, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x7f,0xbf}; unsigned char keyread(void) { unsigned ch
[单片机]
C51单片机学习笔记之LED
简介 LED就是一个发光二极管,没啥好说的。唯一 一点就是低电平有效! 原理图 代码部分 #include REGX52.H void delay() { unsigned int i; for(i=0;i 30000;i++); } main() { unsigned int i; unsigned char J; while(1) { /*P0=0xFE; delay(); P0=0xFD; delay(); P0=0xFB; delay(); P0=0xF7; delay(); P0=0xEF; delay(); P0=0x
[单片机]
<font color='red'>C51</font>单片机学习笔记之LED
C51学习三)按键
1.独立按键 原理: 独立按键比较简单,先在单片机开发板的配套资料中找出案件的原理图,如下图: 以K1为例,当K1按下时,P3.4就相当于接地GND,所以当K1按下时,P3.4为低电平。即P3.4=0 代码: 下面写一个按下K1就亮起LED0灯: 找出LED的原理图: 可以发现LED0对应的引脚为P1.0 #include sbit K1=P3^4; sbit LED0=P1^0; void main() { while(1) { LED0=K1; } } 2.矩阵键盘 为什么要用矩阵键盘: 因为矩阵键盘相对于独立键盘可以节省I/O口。例如16个按键,用
[单片机]
(<font color='red'>C51</font>学习三)按键
C51串口中断---接收和发送
C51单片机(STC11L32/48/60XE)的串口中断处理函数,如果在使能串口中断后,有接收或者发送数据时,就会设置中断标志位,进而处理中断函数。 接收数据,设置RI=1,处理完中断函数后,再设置RI=0。同理,发送数据,设置TI=1,处理完中断函数后,再设置TI=0。
[单片机]
c51软复位,实在经典,分析实在透彻
现单列复位部分如下: main() { unsigned char code rst ={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码 (*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用 } 本来我告诉他嵌入如下代码: clr a push acc push acc reti 结果他却玩了前面哪一段,而数组rst 中的内容恰恰是上面的汇编机器码,他的做法是将 rst数组的数据当作代码保存,然后采用绝对地址方式指向该数组,将该数组中的代码当作 函数来运行。居然通过了! 我觉得有问题,我说即使如此,那绝对地址调用也应该写成(*((void (*)(
[单片机]
干货,三分钟教你Keil C51软件的使用方法
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,本站特地制作了一个相对简单的教程。他能能嵌入汇编语言保留了汇编代码高效,快速的特点。KEIL C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序
[单片机]
干货,三分钟教你Keil <font color='red'>C51</font>软件的使用方法
《初学者C51自学笔记》之ADC0804
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit rs=P2^4; sbit rw=P2^5; sbit e=P2^6; sbit adcs=P3^5; sbit adrd=P3^0; sbit adwr=P3^3; sbit P23=P2^3; uchar table1 = www.baidu.com ; uchar table2 = LCD1602 test ok! ; uchar table3 = 0123456789 ; //延时函数,在12MHz的晶振频率下 //大约50us的延时 void d
[单片机]
《初学者<font color='red'>C51</font>自学笔记》之ADC0804
一种基于C51的多任务机制及应用
引言   传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要,本文设计的这种简单的多任务机制,在只增加极少量C语言代码的前提下,不需使用汇编,无需对原本的程序进行大改动,就可以实现多任务操作。   实时操作系统RTOS的核心
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved