我说的是
单片机C,书上的延时是这样的,如:
void delay02()
{
unsigned char i,j,k;
for(i=2;i>0;i--)
for(j=200;j>0;j--)
for(k=250;k>0;k--);
}
它的时间是:2usX250X200X2=200 000us=0.5s
而这个时间是不精确的,我在家里总结出了一个对于这种时间计算法,它的结果和在KEILL中调试时的时间是一样的并且也分开始定义时的类型,char是以1us计算,int 是4us,如果上面的那里定义成int那结果就并不是0.5S啦!
分析法为:
以unsigned char 来说吧!
for(i=2;i>0;i--)
分析:i=2 --->我的分析为1us
i>0 ---->我的分析为1us 有两次共2us
i-- ----->它也有1us 有两次共2us
因此,总的时间为 s=1+1X2+1X2=5us
由此,书上的时间应为
1+1x2+1x2+2x(1+1x200+1x200+200x(1+1x250+1x250))
这个时间显然就是以上从 for 开始到结束的 } 的精确时间了!
又如:unsigned char i;
i=20; //2us
while(i--);
这个时间精确计算应为 s=2+6+20x6 us
为什么是这样呢?这是我通过keill的调试得出来的!
while ---> 2us
(i--) ----->2us
; --------->2us
起步为6us共有20次,那么时间为6+20x6
还有,如:
unsigned int a;
for(a=20;a>0;a--);
这个时间精确为
2+20x4+20x4
好了不多说了,己经到了0:28啦,我要睡啦,不然明儿没精神的。睡去啦!
嘻嘻!这些就是我发现的单片机关于延时的那点事儿哦!
如果你不想信,那么,请朋友你去用keil的调试吧!
用起步的时间减去最后的时间看看是不是这样啦!
sec是时间 0.000 000 00
还有这个说法在keil4上不是怎样成立?这个可能是编译器的区别。不过这个可是理解成一种编程思想吧!不要让编译器所约束(因为编译器也是用程序设计出来的,如果你会那个你也可以编出来)
关键字:51单片机 延时
引用地址:
51单片机之延时的哪点事儿
推荐阅读最新更新时间:2024-03-16 14:46
MCS-51单片机单步工作方式
MCS-51有一种单步工作方式,所谓单步执行就是由外来脉冲控制程序的执行,使之达到来一个脉冲就执行一行指令的目的。而外来脉冲是通过按键产生的,因此实际上单片机执行是按一次键执行一条指令。单步执行是借助单片机的外部中断功能来实现的。 假定利用外部中断0来实现程序的单步执行,为此应事先作好两项准备工作: 〈1〉建立单步执行的外部控制电路,以按键产生脉冲作为外部中断0的中断请求信号,经INT0端输入,并把电路设计成不按键为低电平,按一次键产生一个正脉冲。此外还需要初始化程序中定义INT0低电平有效。 〈2〉编写外部中断0的中断服务程序: JNB P3.2,$
[单片机]
51单片机实验板制作
这是一个简易的单片机试验板,自己动手做制作,又增加了动手能力,又对电路有了认识,我以把需要的元件资料写在下面,和大家分享,如果有不明白的地方,请上单片机论坛。 一、新单片机实验板功能的说明: P1口仍接8只LED,P3口仍接4只按键开关,P0口和P2口仍接2只LED数码管,但改为由P0口直接驱动。与原板完全兼容。新增:MAX232,可与计算机进行串行通讯,将来会考虑加入MON51支持。24C类串行芯片插座,可以插入24CXXX类芯片,进行I2C程序实验。增加X25045芯片插座,可以进行看门狗及3线制串行EEPROM的实验,通过插针切换,也可不用25045作为复位芯片,而采用常规的阻容复位电路。音乐接口,可外接一个小喇叭,做单片
[单片机]
以51单片机为例,一个简单的串口通信协议C程序
/************************************************** 文件说明:以51单片机为例,一个简单的串口通信协议C程序, 协议以0XAA开头,以0XCC,0X33,0XC3,0X3C结尾,数据长度不一定 *************************************************/ #define uchar unsigned char #define uint unsigned int bit RXAAOK; //接收到0XAA开头标志 bit RXFRMOK; //接收一帧完整数据标 //接收中断中如果是完整一条数
[单片机]
51单片机串口程序C语言版
这篇文章主要来介绍一下51单片机的串口,下面先来看一下与串口相关的寄存器。 图1 (该图来自51单片机技术文档) 下面来逐个介绍个寄存器。 SCON寄存器的SM1,SM2主要用来设置串行口的工作方式,具体对应关系见图2,REN:串行口接受使能位,当单片机要接受数据时该位应该置一,TB8:发送数据的第九位。在方式2或者方式3中TB8为发送的第九位数据。该位不是很常用,具体介绍请查看51单片机的技术文档,这里不多做介绍。TI:发送中断标志,由硬件在方式0串行发送第8位结束时置位,或在其它方式串行发送停止位的开始时置位,必须由软件清零。RI:接受中断标志,由硬件由硬件
[单片机]
基于51单片机温度采集及无线发送
0 引言 随着数字化脚步的加快,越来越多的数字化产品取代了原有的机械式仪表,从而大大提高了数据的准确率。然而,多数情况下,温度的采集过程只在现场实时显示,在增加了工作量的同时,也可能会造成很多不便,如进入危险区域。因此,将无线网络应用在工业生产中,不仅能大大提高工作效率,同时也在一定程度上降低了劳动强度。 本设计基于以上两点,将工业生产中常用到的温度进行数字化,并通过无线模块将数据发送出去,在接收方利用无线接收设备接收实时的数据,从而大大降低劳动强度。 1 系统组成 系统由单片机、温度传感器、串口通信模块和无线传输模块等几部分组成。测温系统将测得的温度通过单片机在数码管上实时显示,同时,通过串口通信部分和无线模块将数
[单片机]
#51单片机#蓝牙模块(ATKSPPHC06从机串口)的使用方法
#include AT89X51.H #include intrins.h // 函数原形定义 #define uchar unsigned char #define uint unsigned int void main (void); // 主函数 void LED_OUT(uchar X); // LED单字节串行移位函数 void LED_print (uchar p, uchar x) ; unsigned char code LED_0F ; // LED字模表 sbit DIO = P1^0; //串行数据输入 sbit RCLK = P1^1; //时钟脉冲信号 上升沿有效 sbit SCLK =
[单片机]
51单片机驱动ADC0808电路图C51及汇编程序
这两天刚刚完成了一个用C编写的程序,这是我第一个用C语言编写的程序,并且调试成功。 第一个C程序,值得纪念,也值得以后参考。 本程序的功能是: 1.ADC0808转换功能; 2.数据16进制显示; 3.串行通信数据。 C51程序:工程文件下载: http://www.51hei.com/f/0808_c.rar #include absacc.h # inc lude reg51.h #define uchar unsigned char #define uint unsigned int sbit START=P3^6; //启动转换 sbit OE=P3^
[单片机]