C51的延时函数

发布者:书香门第最新更新时间:2016-11-17 来源: eefocus关键字:C51  延时函数 手机看文章 扫描二维码
随时随地手机看文章

#ifndef _DELAY_51_H_
#define _DELAY_51_H_
#include

#define uint    unsigned int
#define uchar   unsigned char

//nus延时
void delay_nus( uchar n );
//nms延时
void delay_nms( uchar n );
//2us延时
void delay_2us( uchar t );
//50us延时
void delay_50us(uint t);
//50ms延时
void delay_50ms( uint t );


#endif  // 

 

/*
********************************************************************
** 文件名   : C51延时驱动
********************************************************************
*/

#define  _DELAY_51_C_
#include  "DELAY_51.H" //用户自己定义的头文件

//==========================向以前版本兼容部分函数==============================
/*
********************************************************************
** 函数名:nus延时函数
** 注意  :注意延时为 0 < n < 256, 
** 说明  :此版本主要是对前面的驱动兼容, 实际上可调度约为2us, 不做多
**         说明,以后尽量用新版本delay_2us(uchar n)代替。
********************************************************************
*/
void delay_nus( uchar n )
{
   while( --n )
   {;}
}

/*
********************************************************************
** 函数名:nus延时函数
** 注意  :注意延时为 0 < n < 256, 
** 说明  :此版本主要是对前面的驱动兼容, 比较准确
**
********************************************************************
*/
void delay_nms( uchar n )
{
 uchar i;
 uchar j;
 uchar t;
 for( t = 0; t < n; t++ ) 
 {
  for( j = 0; j < 15; j ++ )
  {
   for( i = 0; i < 21; i++ )
    {;}
  } 
 }
}
//==============================================================================
//==============================================================================
/*
********************************************************************
** 函数名  :2us延时函数
** 注意项  :注意延时为 0 < t < 256
** 例子提示:调用delay_2us(1),得到1ms延时
** 说明    :

** delay2(0):延时518us 518-2*256=6
** delay2(1):延时7us
** delay2(10):延时25us 25-20=5
** delay2(20):延时45us 45-40=5
** delay2(100):延时205us 205-200=5
** delay2(200):延时405us 405-400=5

** 可调度为2us,而最大误差为6us
********************************************************************
*/
void delay_2us( uchar t )
{
   while( --t )
   {;}
}


/*------------------------------------------------------------------
函数全称:50us 延时
注意事项:AT89系列对应12M晶振
例子提示:调用delay_50us(20),得到1ms延时
输 入: 
返 回:无

delay_50us(1):延时63us 63-50=13
delay_50us(10):延时513us 503-500=13 
delay_50us(100):延时5013us 5013-5000=13
delay_50us(1000):延时50022us 50022-50000=22

误差最大在22us, 很准确了。

------------------------------------------------------------------*/
void delay_50us(uint t)
{
 uchar j; 
 for( ; t > 0; t-- ) 
  for( j = 19; j > 0; j-- ) 
  {;}
}

/*
********************************************************************
** 函数全称:50ms 延时
** 注意事项:基于1MIPS,AT89系列对应12M晶振
** 例子提示:调用delay_50ms(20),得到1s延时
** 全局变量:无
** 返回: 无
** 说明    : 参考网络

** delay_50ms(1):延时50 010 10us
** delay_50ms(10):延时499 983 17us
** delay_50ms(100):延时4 999 713 287us
** delay_50ms(1000):延时4 997 022 2.978ms

** 延时50s,误差仅仅2.978ms,可以接受
********************************************************************
*/
void delay_50ms( uint t )
{
 uint j; 
 for( ; t > 0; t-- ) 
  for( j = 6245; j > 0; j-- ) 
  {;}
}


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

上一篇:KCS301滚动码解码程序
下一篇:51单片机lcd1602的驱动程序

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

Keil C51使用教程---软件使用详解(二)
第一节 Keil C51编译器的控制指令 C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类。 1. 源文件控制类 NOEXTEND:C51源文件不允许使用ANSI C扩展功能。 DEFINE(DF):定义预处理(在C51命令行)。 2. 目标文件(Object)控制类: COMPACT LARGE SMALL 选编译模式 DEBUG(DB) 包含调试信息,以供仿真器或dSCope51使用。 NOAMAKE(NOAM) 禁止AutoMake信息记录 NOREGPARMS 禁止用寄存器传递参数 OBJECTEXTEND(OE) Object文件包含附加变量类型信息 OPTIMIZE(OT) 指定优化
[单片机]
KEIL C51代码优化详细分析:局部参数放寄存器变量,数据覆盖技术
阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C51对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析 文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Kei1 C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。 本文中对原文提到的问题,提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单,设计也更规范。(无意批评,请原文作者见谅) 1 问题回顾和分析 原文中提到:在实际工作中遇到对同一端口反复连续读取,Keil C51编译并未达到预期的结果。原文作者
[单片机]
c51模拟串口
在电路设计当中,经常会感觉控制器mcu的串口sci数量太少,一般mcu的sci数量不会超过3个(其实包含有3个的就是很多的了)。要想使用更多的串口sci,就得选用硬件串口uart扩展芯片或者采用软件协议利用一般的端口来模拟sci协议。利用软件模拟的方法是最廉价的设计方法。现在把c51模拟串口sci的程序提供出来,供大家享用。 /********************************************** IO 口模拟232通讯程序,频率9600 占用定时器0 **********************************************/ #i nclude MAIN.h #i nclude
[单片机]
C51的模块化设计方法
一个大的单片机程序往往包含很多模块,我是这样组织的: 1、每一个C源文件都要建立一个与之名字一样的H文件(头文件),里面仅仅包括该C文件的函数的声明,其他的什么也不会有,比如变量的定义啊等等不应该有。 2、建立一个所有的文件都要共同使用的头文件,里面当然就是单片机的管脚使用的定义,还有里面放那些需要的KEIL系统的头文件,比如 #i nclude reg52.h ,#i nclude absacc.h 等等,把这个文件命名为common.h,或者干脆就叫main.h 3、每个C源文件应该包含自己的头文件以及那个共同的使用的头文件,里面还放自己本文件内部使用的全局变量或者以extern定义的全局变量 4、主文件main.c里面包含所
[单片机]
<font color='red'>C51</font>的模块化设计方法
C51: 向24C02,写入n个数据,再读出n 个数据
//函数功能, //写入n个数据,再读出n 个数据。用LCD1602 显示。 #include reg51.h #include intrins.h //变量声明 #define uchar unsigned char #define uint unsigned int //延时 1ms void delayms() { uchar i; for(i=0;i 250;i++); for(i=0;i 80;i++); } void delaynms(uint s) { uint tem; for(tem=0;tem s;tem++) { delayms(); } } //LCD 忙碌查询 sb
[单片机]
《初学者C51自学笔记》之89C51初步认识
左边是一个总线型的,为什么是总线型呢?它的引脚P1、P2、P3、P0都是有8位,而右边P3是没有P3.6的,所以它是非总线型的。 51单片机内部集成8位CPU,4K字节的ROM,128字节RAM,4个8位并行I/O口,一个全双工串行口,2个16位定时器/计数器,5个中断源。 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器 RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据(断电数据会消失) ROM:用以存放程序、一些原始数据和表格;(断电数据不会丢失) I/O口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C:两个定时/记数器,既可以工作在
[单片机]
《初学者<font color='red'>C51</font>自学笔记》之89C51初步认识
C51单片机和AVR单片机的区别
1.avr为risc结构cpu,大多数指令在一个时钟周期内完成.所以MIPS比51高 2.avr单片机的复位电平为负逻辑, 而51为正逻辑 3.汇编的程序不通用,但是如果用c写的程序还是可以移植的. AVR 单片机是ATMEL 在90年代推出的精简指令集RISC的单片机,跟PIC类似.使用哈佛结构.可以这样类比,AT89C52相当于复杂指令集CISC的intel的奔腾CPU,AT90S8515相当于AMD的精简指令集RISC的K7 CPU. 以上是指令集的类比.AVR是专门为使用高级语言设计的,在使用高级语言时, 会比89C52有较佳的表现. 可以直接替代89C52的CPU是AT90S4414和AT90S8515.
[单片机]
C51单片机和电脑串口通信电路图与源码
C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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