搜档网
当前位置:搜档网 › 利用Keil精确实现软件延时

利用Keil精确实现软件延时

利用Keil精确实现软件延时
利用Keil精确实现软件延时

用定时器延时,有时候显得有点麻烦,我们不如考虑软件精确延时,软件延时无非就是利用for或while多重循环。以前用到延时函数时,都是从网上下载别人写好的延时子程序。延时5ms,400ms,1s,……,这些延时函数的函数名中都清清楚楚地标明了延时的时间,可我一直不知道这些函数是如何编写的,确切地说,是如果根据延时时间来确定循环次数的。如果是纳秒级的延时,可以通过示波器来观察波形,或者反汇编一下,计算一下指令执行时间,但如果延时时间相对较长,示波器便无能为力了。这几天好好看了一下Keil调试,发现Keil的功能实在是太强大了。利用Keil uVersion的调试就可以写出精确的软件延时程序。以下是我的简单小结,文中所有程序都是在Xtal=11.0592MHZ下测试。

比如我需要一个400ms的延时,随便写了个两重循环,外层循环5次,内层循环暂且设为5000:

void Delay400Ms(void){

uchar i=5;

unint j;

while(i--){

j=5000; //通过keil调试来确定循环次数

while(j--);

}

}

在main函数中调用Delay400Ms():

void main()

{

while(1){

P1=0;

Delay400ms();

P1=1;

}

}

进入uVersion的调试状态,按F10进行单步,当黄色箭头指向Delay400ms()这条语句时记下左边窗中Sys->sec的值,如图,是0.00042426。

再按F10,执行完Delay400ms()后,sec值变为0.38858181,此时记录刚才的初值0.00042426,结果0.38815755即说明执行Delay400ms()耗时388.15755ms,由此可见还未达到400ms的延时要求。此时,增加内循环的次数,将j的值增加到6700,再重复上述过程,算得0.40009874,即Delay400ms()程序延时400.09874ms,此时已经符合延时400ms的要求。

除了上述所说的观察sec值来确定延时时间外,还可以从Keil的性能分析窗口中观测到执行Delay400ms()函数的时间。进入调试状态后使用菜单View->Performance Analyzer Window,打开性能分析对话框,进入该对话框后,只有一项unspecified,点鼠标右键,在快捷菜单中选择Setup PA即打开性能分析设置对话框,对于C 语言程序,该对话框右侧的“Function Symbol”下的列表框给出函数符号,双击某一符号,该符号即出现在Define Performance Analyzer 下的编缉框中,每输入一个符号名字,点击Define 按钮,即将该函数加入其上的分析列表框。对于汇编语言源程序,Function Symbol 下的列表框中不会出现子程序名,可以直接在编缉框中输入子程序名,点击Close 关闭窗口,回到性能分析窗口,此时窗口共有4 个选项。全速执行程序,可以看到Delay400Ms 后出现一个蓝色指示条,配合上面的标尺可以直观地看出该函数占整个执行时间的比例,点击相应的函数名,可以在该窗口的状态栏看到更详细的数据,如下图:

值得注意的是,用性能分析窗口来观察延时函数的执行时间要求被观察的延时函数中不能再调用其他任何子函数,被测函数只能由C的基本语句组成,否则观测到的时候并不是整个函数的运行时间。

采用上述方法,得到了以下几个延时程序:

/*

* 延时400毫秒

*/

void Delay400Ms(void){

uchar i=5;

unint j;

while(i--){

j=6699;

while(j--);

}

}

/*

* 延时1秒

*/

void delay_1_s()

{

uchar loop=10;

unint j;

while(loop--){

j=8375;

while(j--);

}

}

/*

* 延时N 秒,参数s为需要延时的秒数*/

void delay_N_s(uchar s)

{

while(s--){

delay_1_s();

}

}

基于RC延时电路的延时路灯设计

湖南人文科技学院课程设计报告 课程名称:电子技术课程设计 设计题目:基于RC 延时电路的延时路灯设计系别:通信与控制工程系 专业:通信工程 班级:09级电信二班 姓名:……………………………… 学号:……………………………………起止日期: 2011.6.13~2011.6.25 指导教师: 梁庶来姚毅 教研室主任: 2011年6月23 日

摘要 路灯控制器主要由声控电路、光控电路、延时电路组成。白天的时候,在光控电路(无论有无声音)作用下,电路的开关元件处于断开状态,LED灯不亮。晚上没有声音的时候,在声控电路作用下,电路的开关元件处于断开状态,LED 仍旧不亮;当有声响的时候,电路的开关元件闭合,灯LED形成通路,LED亮,由于延时电路的存在,LED持续亮一段时间后熄灭,持续亮的时间长短由RC积分电路控制。 关键词:声控电路;光控电路;RC积分电路、RC延时电路。

目录 1.引言 (5) 1.1设计目的 (5) 1.2 设计要求 (5) 1.3设计内容 (6) 2.方案论证 (6) 2.1设计方案一 (6) 2.2设计方案二 (7) 2.3方案对比选择 (7) 3.单元电路图 (7) 3.1电源电路 (7) 3.2声控电路 (8) 3.3光控电路 (8) 3.4延时电路 (9) 4.整体电路工作原理分析 (9) 4.1电路原理方框图 (9) 4.2电路工作原理 (9) 5.电路仿真与测试调整 (10) 5.1延时路灯控制电路仿真 (10) 5.2延时路灯控制电路安装与调试 (10) 6.总结与致谢 (11) 参考文献 (12) 附录一:电路原理图与PCB图 (13) 附录三:整机实物图 (14) 附录三:元件清单 (15)

单片机C语言(for)延时计算

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;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 延时总时间= 三层循环+ 循环外= 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序 程序: void delay200ms(void) { unsigned char i,j,k;

for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); } 三. 10ms延时子程序程序: void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); } 四. 1s延时子程序 程序: void delay1s(void) { unsigned char h,i,j,k; for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); }

KeilC51程序设计中几种精确延时方法

Keil C51程序设计中几种精确延时方法 2008-04-03 08:48 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2 软件延时与时间计算 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。 2.1 短暂延时 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs 的延时函数可编写如下: void Delay10us( ) { _NOP_( ); _NOP_( ); _NOP_( ) _NOP_( );

实验一 Keil软件的使用及简单程序的调试方法

实验一 Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下: 几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程

名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示 单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。

电工电子课程设计简易声控延时照明灯

题目:___简易声控延时照明灯__ 班级:________________ 学号:__________ :__________________ 指导教师:___________ 时间:

课程设计任务书 教研室主任签字:年月日

目录 一、总体方案与原理说明 (4) 1.1、主要原理说明 (4) 1.2、总体电路原理图 (5) 1.3、总体电路原理相关说明 (6) 二、电路设计……………………………………....................................... .7 2.1、单元电路一——声强监测电路和声强信号处理电路 (7) 2.2、单元电路二——延时控制电路和照明灯开关电路 (8) 2.3、单元电路三——电源电路....................................,..., (10) 三、元件清单............................................................,...,.. (11) 四、参考文献............................................................,, (12) 五、设计心得............................................................,.. (13)

一、总体方案与原理说明 总体方案 1、查阅相关资料,了解简易声控延时照明灯电路的原理与作用。 2、通过文献了解各种简易声控延时照明灯电路设计方案。 3、自行设计一种简易声控延时照明灯电路。 4、使用protel画图软件画出电路图。 5、列出元件清单。 1.1、主要原理说明 简易声控延时照明灯电路的总体框图 简易声控延时照明灯电路的总体框图如图1所示。它是由声强监测电路、声强信号处理电路、延时控制电路、照明灯开关电路和电源电路5部分构成的。 声强监测电路的功能是利用MIC(麦克风)的特性,即当MIC接收到足够的声强时,在该电路产生谐振后输出一个微弱脉冲,从而将声音信号转换为电信号。声强信号处理电路的处理电路的功能是将声强监测电路输出的电信号进行放大和整流,从而得到一个电平信号,为控制电路作准备。延时控制电路的功能是利用555集成电路构成可重复触发的单稳态电路,从而实现照明灯的延时控制。照明灯开关电路的功能是实现控制电路和照明灯电路的强弱电转换。电源电路的功能是为上述所有电路提供直流电源。 延时照明灯的主要电路如下图所示。图中K为拉线开关或墙壁开关,当K闭合后,该延时电路不工作,电灯处于正常的发光状态。当K被关断后,该电压一

延时子程序计算方法

学习MCS-51单片机,如果用软件延时实现时钟,会接触到如下形式的延时子程序:delay:mov R5,#data1 d1:mov R6,#data2 d2:mov R7,#data3 d3:djnz R7,d3 djnz R6,d2 djnz R5,d1 Ret 其精确延时时间公式:t=(2*R5*R6*R7+3*R5*R6+3*R5+3)*T (“*”表示乘法,T表示一个机器周期的时间)近似延时时间公式:t=2*R5*R6*R7 *T 假如data1,data2,data3分别为50,40,248,并假定单片机晶振为12M,一个机器周期为10-6S,则10分钟后,时钟超前量超过1.11秒,24小时后时钟超前159.876秒(约2分40秒)。这都是data1,data2,data3三个数字造成的,精度比较差,建议C描述。

上表中e=-1的行(共11行)满足(2*R5*R6*R7+3*R5*R6+3*R5+3)=999,999 e=1的行(共2行)满足(2*R5*R6*R7+3*R5*R6+3*R5+3)=1,000,001 假如单片机晶振为12M,一个机器周期为10-6S,若要得到精确的延时一秒的子程序,则可以在之程序的Ret返回指令之前加一个机器周期为1的指令(比如nop指令), data1,data2,data3选择e=-1的行。比如选择第一个e=-1行,则精确的延时一秒的子程序可以写成: delay:mov R5,#167 d1:mov R6,#171 d2:mov R7,#16 d3:djnz R7,d3 djnz R6,d2

djnz R5,d1 nop ;注意不要遗漏这一句 Ret 附: #include"iostReam.h" #include"math.h" int x=1,y=1,z=1,a,b,c,d,e(999989),f(0),g(0),i,j,k; void main() { foR(i=1;i<255;i++) { foR(j=1;j<255;j++) { foR(k=1;k<255;k++) { d=x*y*z*2+3*x*y+3*x+3-1000000; if(d==-1) { e=d;a=x;b=y;c=z; f++; cout<<"e="<

单片机一些常用的延时与中断问题及解决方法

单片机一些常用的延时与中断问题及解决方法 延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..在内的各种单片机常见的延时与中断问题及解决方法,希望对单片机新手们,有所帮助! 一、单片机延时问题20问 1、单片机延时程序的延时时间怎么算的? 答:如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。 如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 2、求个单片机89S51 12M晶振用定时器延时10分钟,控制1个灯就可以 答:可以设50ms中断一次,定时初值,TH0=0x3c、TL0=0xb0。中断20次为1S,10分钟的话,需中断12000次。计12000次后,给一IO口一个低电平(如功率不够,可再加扩展),就可控制灯了。 而且还要看你用什么语言计算了,汇编延时准确,知道单片机工作周期和循环次数即可算出,但不具有可移植性,在不同种类单片机中,汇编不通用。用c的话,由于各种软件执行效率不一样,不会太准,通常用定时器做延时或做一个不准确的延时,延时短的话,在c中使用汇编的nop做延时 3、51单片机C语言for循环延时程序时间计算,设晶振12MHz,即一个机器周期是1us。for(i=0,i<100;i++) for(j=0,j<100;j++) 我觉得时间是100*100*1us=10ms,怎么会是100ms 答: 不可能的,是不是你的编译有错的啊

声控延时照明灯电路的原理

声控延时照明灯电路的原理 当今世界在以电子信息技术为前提下推动了社会跨跃式的进步,科学技术的飞速发展日新月异带动了各国生产力的大规模提高。由此可见科技已成为各国竞争的核心,尤其是电子信息技术更显得尤为重要,在国民生产各部门电子信息技术得到了广泛的应用。曾经不被人们所重用的如声音,光等如今在电子信息技术方面都得到了广泛的应用,尤其是光能更是人们有待开发的具大的能源宝库。 电子信息技术发展的主要目标是实现高度智能化,在减少以至不需要人为干预下使机器能独立处理各种工作。智能化照明电路也是如此,如我们所熟知的走道照明电路其智能化实现方法是利用了声学?光学?电子学?原理的综合;而马路上的路灯是应用了光学的原理;另一个我们所知的交通系统红绿灯则是采用了电子学中计数器的原理。可见原理不同电路所实现的功能也不尽相同,以下将对其进行逐一分析。 声控照明电路 声音是我们最为熟知的。人与人需要用声音去交流,机器运转发出声音,动物会发出声音等等。然而发此宝贵的资源却被我们忽视了很长时间,如今留给我们的就是怎样合理高效的利用这一资源。以前人们在设计电路时只求一个‘用’字,只要能用就万事大吉了,所以我们常见的电路都有很多开关如照明电路要让它工作我们必须机械地去控制它,这对于当今社会各种各样的智能化建筑如智能办公楼,智能化公寓等是非常不实用的;在这种情况下声音就派上了用场,声控作为智能化电路的一部分是一可缺少的;然而要实现声控也不是一件容易的事,因为声音是一模拟量且非电信号无法在数字电路中使用,所以我们在设计声控电路时就面临怎样把模拟量转化为数字量,把声音信号转化为电信号的问题。要解决这个问题我们可以设计一个类似于‘窃听器’的接收设备专门用来接听声音信号并将声音信号转化为

简易声光控延时照明灯电路课程设计范本

简易声光控延时照明灯电路课程设计 电子技术课程设计

题目: ___简易彩灯控制器电路_ 学生姓名: 专业班级:电子信息工程11-01班 学号: 院(系):电气信息工程学院 指导教师:黄春 完成时间: 06月25日 郑州轻工业学院 课程设计(论文)任务书 题目简易彩灯控制器电路 专业电信工程11-01 学号姓名

主要内容、基本要求、主要参考资料等: 主要内容 1.阅读相关科技文献。 2.学习protel软件的使用。 3.学会整理和总结设计文档报告。 4学习如何查找器件手册及相关参数。 技术要求 1.要求电路能够控制8个以上的彩灯。 2.要求彩灯组成四种以上的花形,每种花形连续循环两次,各种 花形轮流显示。 主要参考资料 1.何小艇,电子系统设计,浙江大学出版社, 6月 2.姚福安,电子电路设计与实践,山东科学技术出版社, 10月 3.王澄非,电路与数字逻辑设计实践,东南大学出版社,1999年10月 4.李银华,电子线路设计指导,北京航空航天大学出版社, 6月 5.康华光,电子技术基础,高教出版社, 完成期限: 06月28日

指导教师签章: 专业负责人签章: 06月21日 简易彩灯控制器电路 摘要 彩灯控制器是用来使彩灯按照一定的形式和规律闪亮,起到烘托节日氛围、吸引公众注意力的作用,它是一种很好的照明娱乐工具,应用前景较为广泛。本设计就是采用电子元件制作的一个简易的具有四种变换花型的彩灯控制器。 本电路系统由四部分组成,分别是: (1)时钟振荡电路,555定时器构成多谐振荡器; (2)分频电路,由四位二进制计数器 74LS161组成,为D触发器提供时钟; (3)状态机电路,由双 D 触发器组成; (4)移位显示电路,由双向移位寄存器 74194 和发光二极管组成,实现花型显示。 彩灯控制器实现方法多种多样,本次设计的这台彩灯控制器主要功能有: (1)能够控制8个以上的彩灯;

简易声光控延时照明灯电路

轻工业学院 电子技术课程 设计 题目:简易声光控延时照明灯电路学生:振鹏

专业班级:自动化14-02班学号:541401010224 院(系):电气信息工程学院指导教师:黄春 完成时间:2016年12月18日

轻工业学院 课程设计(论文)任务书 题目简易声光控延时照明灯电路 专业自动化14-02学号541401010224 振鹏 主要容、基本要求、主要参考资料等: 主要容 1.阅读相关科技文献。 2.学习protel软件的使用。 3.学会整理和总结设计文档报告。 4.学习如何查找器件手册及相关参数。 技术要求 1.要求电路能够通过照明灯开关对光线强弱的感应,控制照明灯第一级开关。 2.要求电路能够通过照明灯开关对声强的感应,在第一级开关开通的前提下,控制 照明灯的亮灭。 3.要求电路能够实现照明灯点亮时间t后自动关断,并且时间t可以手动调节。 4.要求电路如果在照明灯点亮期间又有新的声源出现,照明灯应重新通电时间t。 主要参考资料 1.何小艇,电子系统设计,大学,2001年6月 2.福安,电子电路设计与实践,科学技术,2001年10月 3.王澄非,电路与数字逻辑设计实践,东南大学,1999年10月 4.银华,电子线路设计指导,航空航天大学,2005年6月 5.康华光,电子技术基础,高教,2003 完成期限:2016年12月18日 指导教师签章: 专业负责人签章: 2016年12月12日

简易声光控延时照明灯电路 摘要 随着电子技术的发展,尤其是数字技术的发展,用数字电路实现灯的自动发亮节能省电,延长灯的寿命变得越来越重要,而且贴近我们的实际生活,声光控电路已成为人们日常生活必不可少的必需品,不仅是智能化,而且节约能源。 简易声光控延时照明灯电路由光敏传感电路、声敏传感电路、信号调理电路、555延时电路以及电源电路五部分组成。装置为555定时器构成的可重复触发单稳态电路、声敏传感电路的输入装置是咪头、光敏传感电路的输入装置是光敏二极管、信号调理电路是74LS04非门和74HC32或门、电源是由交流220V变12V在经整流后稳压为12V和5V的电源,电路的总体运行环境是在无光条件下声强监测处理电路检测到声音后就会触发555延时电路使之输出高电平继而使之电灯点亮。 关键词声光控光敏传感电路声敏传感电路信号调理电路555延时电路

单片机延时计算

单片机C51延时时间怎样计算? C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int 更优化的代码,在使用时应该使用unsigned char作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;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 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序

程序: void delay200ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); } 三. 10ms延时子程序 程序: void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); } 四. 1s延时子程序 程序: void delay1s(void) { unsigned char h,i,j,k;

Keil纯软件延时程序

keil调试延时程序 2007-11-25 22:20 时间的单位换算 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s) 1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s) 1秒=1,000,000,000 纳秒(ns) 1纳秒=1/1,000,000,000秒(s) 1秒=1,000,000,000,000 皮秒(ps) 1皮秒=1/1,000,000,000,000秒(s) 参考资料:资料 用定时器延时,有时候显得有点麻烦,我们不如考虑软件精确延时,软件延时无非就是利用for或while多重循环。以前用到延时函数时,都是从网上下载别人写好的延时子程序。延时5ms,400ms,1s,……,这些延时函数的函数名中都清清楚楚地标明了延时的时间,可我一直不知道这些函数是如何编写的,确切地说,是如果根据延时时间来确定循环次数的。如果是纳秒级的延时,可以通过示波器来观察波形,或者反汇编一下,计算一下指令执行时间,但如果延时时间相对较长,示波器便无能为力了。这几天好好看了一下Keil调试,发现Keil 的功能实在是太强大了。利用Keil uVersion的调试就可以写出精确的软件延时程序。以下是我的简单小结,文中所有程序都是在Xtal=11.0592MHZ下测试。 比如我需要一个400ms的延时,随便写了个两重循环,外层循环5次,内层循环暂且设为5000: void Delay400Ms(void){ uchar i=5; unint j; while(i--){ j=5000; //通过keil调试来确定循环次数 while(j--); } } 在main函数中调用Delay400Ms(): void main() {

51单片机的几种精确延时

51单片机的几种精确延时实现延时 51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC 语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2 软件延时与时间计算 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。 2.1 短暂延时 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: void Delay10us( ) { _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); } Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。可以把这一函数

简易声光控延时照明灯电路设计

电子课程设计 —简易声光控延时照明灯电路设计 学院:电子信息工程学院 专业、班级:电气091501班 姓名:\ 学号: 指导教师:闫晓梅 2014年12月

目录 电子课程设计 (1) 简易声光控延时照明灯电路设计 (3) 一、设计任务与要求 (3) 二、总体框图 (3) 1、总体框图 (3) 2、电路方案的选择(延时电路的选择) (3) 3、电路的基本组成及功能 (4) 三、选择器件 (5) 四、功能模块 (9) 1、电源模块 (9) 2、光控模块 (9) 3、声控模块 (10) 4、延时照明模块 (11) 五、总体设计电路 (11) 1、总体电路图仿真图 (12) 2、各模块间的连接 (12) 3、在模拟、数字实验箱上实验实现 (12) 六、设计心得 (12)

简易声光控延时照明灯电路设计 一、设计任务与要求: 1、设计任务:设计一个简易声光控延时照明灯电路。同时设计一与电路相配合的稳压电源电路。 2、设计功能及要求: (1)具有光控功能,白天光线较亮,即使有声音时路灯也不亮,光线较暗、有声音时路灯点亮。 (2)具有声控功能,晚上光线较暗,有声音时路灯点亮,声音消失后延时照明一段时间t后自动熄灭;并且时间t可以手动调节。 (3)要求电如果在照明灯点亮期间又有新的生源出现,照明灯应重新通电时间t。 (4)采用高亮度LED作为照明光源。 二、总体框图: 1、总体框图: 电路采用声光两级控制照明电路。照明灯开关对光线强弱的感应控制照明灯的第一级开关,对声强的感应控制第二级开关。光信号的感应通过光敏三极管来实现,使得光控电路在光强时输出低电位,光弱时输出高电位。对于声强信号的处理市利用音频集成功率放大器,把声信号变为电信号,通过对声强信号的处理可得一个电平信号,为控制电路准备。延时控制功能通过555定时器构成的单稳态触发电路来实现。将光控电路的输出作为555定时器的复位端输入。将声控输出端作为延时电路的输入,从而可以实现在光线强的情况下,即使有足够强的声信号,照明灯电路也不工作。而在光线弱的情况下,可以通过声信号来控制照明。 2、电路方案的选择(延时电路的选择): 方案一: RC电路延时:由一个电阻和一个电容并联组成的RC延时电路。但输入电压为高时,电容充电,但输入电压为低时电容放电。达到延时目的。 方案二:

用单片机实现延时(自己经验及网上搜集).

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。 在keil C51中,直接调用库函数: #include // 声明了void _nop_(void; _nop_(; // 产生一条NOP指令 作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。 在选择C51中循环语句时,要注意以下几个问题 第一、定义的C51中循环变量,尽量采用无符号字符型变量。 第二、在FOR循环语句中,尽量采用变量减减来做循环。 第三、在do…while,while语句中,循环体内变量也采用减减方法。 这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。 下面举例说明: unsigned char i; for(i=0;i<255;i++; unsigned char i; for(i=255;i>0;i--;

其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令: MOV 09H,#0FFH LOOP: DJNZ 09H,LOOP 指令相当简洁,也很好计算精确的延时时间。 同样对do…while,while循环语句中,也是如此 例: unsigned char n; n=255; do{n--} while(n; 或 n=255; while(n {n--}; 这两个循环语句经过C51编译之后,形成DJNZ来完成的方法, 故其精确时间的计算也很方便。 其三:对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。 unsigned char i,j for(i=255;i>0;i--

单片机一些常用的延时与中断问题及解决方法

延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..在内的各种单片机常见的延时与中断问题及解决方法,希望对单片机新手们,有所帮助! 一、单片机延时问题20问 1、单片机延时程序的延时时间怎么算的? 答:如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。 如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 2、求个单片机89S51 12M晶振用定时器延时10分钟,控制1个灯就可以 答:可以设50ms中断一次,定时初值,TH0=0x3c、TL0=0xb0。中断20次为1S,10分钟的话,需中断12000次。计12000次后,给一IO口一个低电平(如功率不够,可再加扩展),就可控制灯了。 而且还要看你用什么语言计算了,汇编延时准确,知道单片机工作周期和循环次数即可算出,但不具有可移植性,在不同种类单片机中,汇编不通用。用c的话,由于各种软件执行效率不一样,不会太准,通常用定时器做延时或做一个不准确的延时,延时短的话,在c中使用汇编的nop做延时 3、51单片机C语言for循环延时程序时间计算,设晶振12MHz,即一个机器周期是1us。for(i=0,i<100;i++) for(j=0,j<100;j++) 我觉得时间是100*100*1us=10ms,怎么会是100ms 答: 不可能的,是不是你的编译有错的啊 我改的晶振12M,在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因, 不可能出现100ms那么大的差距,是你的软件的原因。 不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序是正确的

声光控延时照明电路课程设计

目录 摘要 (1) 1 设计方案 (2) 2主要单元电路设计 (3) 2.1感光控制 (3) 2.2检声控制 (4) 2.3电源电路 (5) 2.4延时控制电路 (6) 2.5开关 (6) 2.6简易声光双控延时照明灯电路总原理 (7) 3组成框图 (9) 4 元件清单 (10) 参考文献 (11) 附录 (12) 心得体会 (14) 摘要 该声光双控延时照明灯电路由五部分组成:电源电路、感光电路、检音电路,延时开启电路及开关电路组成。本电路通过光敏电阻和MK对

外界光照和声音感应,经过电路的进一步处理从而实现对照明灯亮灭的控制。感光电路主要是由光敏电阻组成,当有光照时电阻阻值变小;夜晚无光时光敏电阻变大。声控检测功能是通过声音传感器实现的,当传感器接收到声音信号时,在电路产生谐振后产生一个微弱脉冲,从而将声音信号转化为电信号,即可方便及时的打开声控照明装置。白天有光照时,无论外界有没有声响,照明灯都不会点亮;夜晚无光照,当外界有声响时,照明灯点亮时间t后自动关闭,并且时间t可以手动调节.电路还具有在照明灯点亮期间又有新的声源出现,照明灯可重新计算通电时间t的功能。 1设计方案 本设计的声控电路时这样实现的:声音传感器对声强的感应,是在第一级开关开通时来控制照明灯的亮灭。当声音信号通过MK接收后,产生微小的交流信号,在经过三极管放大信号后,流入单向晶闸管的控制极,来实现主回路的导通,从而控制照明灯的点亮。 而光敏电阻对光线强弱的感应,有光照时光敏电阻阻值变小,时光信号变为低电平,当光信号和声音信号同时经过一个与非门,光敏电阻端为低电平,将此门锁住,从而实现控制照明灯第一级开关。 此电路照明灯点亮时间t后可以自动关闭,并且时间t可以手动调节。主要通过可调电阻与电容的充放电来实现延时控制及延时时间t的手动调节。在照明灯点亮期间若有新的声源出现,本电路可以重新计算通电时间t。当照明灯点亮期间,如有新的触发信号,电容快速放电后,又继续充电,从而使照明灯重新实现通电时间t。

51单片机延时时间计算和延时程序设计

一、关于单片机周期的几个概念 ●时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12MHz的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。 ●机器周期 完成一个基本操作所需要的时间称为机器周期。 以51为例,晶振12M,时钟周期(晶振周期)就是(1/12)μs,一个机器周期包 执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。 对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。 1.指令含义 DJNZ:减1条件转移指令 这是一组把减1与条件转移两种功能结合在一起的指令,共2条。 DJNZ Rn,rel ;Rn←(Rn)-1 ;若(Rn)=0,则PC←(PC)+2 ;顺序执行 ;若(Rn)≠0,则PC←(PC)+2+rel,转移到rel所在位置DJNZ direct,rel ;direct←(direct)-1 ;若(direct)= 0,则PC←(PC)+3;顺序执行 ;若(direct)≠0,则PC←(PC)+3+rel,转移到rel 所在位置 2.DJNZ Rn,rel指令详解 例:

MOV R7,#5 DEL:DJNZ R7,DEL; rel在本例中指标号DEL 1.单层循环 由上例可知,当Rn赋值为几,循环就执行几次,上例执行5次,因此本例执行的机器周期个数=1(MOV R7,#5)+2(DJNZ R7,DEL)×5=11,以12MHz的晶振为例,执行时间(延时时间)=机器周期个数×1μs=11μs,当设定立即数为0时,循环程序最多执行256次,即延时时间最多256μs。 2.双层循环 1)格式: DELL:MOV R7,#bb DELL1:MOV R6,#aa DELL2:DJNZ R6,DELL2; rel在本句中指标号DELL2 DJNZ R7,DELL1; rel在本句中指标号DELL1 注意:循环的格式,写错很容易变成死循环,格式中的Rn和标号可随意指定。 2)执行过程

简易声光控延时照明灯电路

郑州轻工业学院 电子技术课程 设计

题目:简易声光控延时照明灯电路学生姓名:李振鹏 专业班级:自动化14-02班 学号:541401010224 院(系):电气信息工程学院 指导教师:黄春 完成时间:2016年12月18日

郑州轻工业学院 课程设计(论文)任务书 题目简易声光控延时照明灯电路 专业自动化14-02学号541401010224 姓名李振鹏 主要内容、基本要求、主要参考资料等: 主要内容 1.阅读相关科技文献。 2.学习protel软件的使用。 3.学会整理和总结设计文档报告。 4.学习如何查找器件手册及相关参数。 技术要求 1.要求电路能够通过照明灯开关对光线强弱的感应,控制照明灯第一级开关。 2.要求电路能够通过照明灯开关对声强的感应,在第一级开关开通的前提下,控 制照明灯的亮灭。 3.要求电路能够实现照明灯点亮时间t后自动关断,并且时间t可以手动调节。 4.要求电路如果在照明灯点亮期间又有新的声源出现,照明灯应重新通电时间t。主要参考资料 1.何小艇,电子系统设计,浙江大学出版社,2001年6月 2.姚福安,电子电路设计与实践,山东科学技术出版社,2001年10月 3.王澄非,电路与数字逻辑设计实践,东南大学出版社,1999年10月 4.李银华,电子线路设计指导,北京航空航天大学出版社,2005年6月 5.康华光,电子技术基础,高教出版社,2003 完成期限:2016年12月18日 指导教师签章: 专业负责人签章: 2016年12月12日

简易声光控延时照明灯电路 摘要 随着电子技术的发展,尤其是数字技术的发展,用数字电路实现灯的自动发亮节能省电,延长灯的寿命变得越来越重要,而且贴近我们的实际生活,声光控电路已成为人们日常生活必不可少的必需品,不仅是智能化,而且节约能源。 简易声光控延时照明灯电路由光敏传感电路、声敏传感电路、信号调理电路、555延时电路以及电源电路五部分组成。装置为555定时器构成的可重复触发单稳态电路、声敏传感电路的输入装置是咪头、光敏传感电路的输入装置是光敏二极管、信号调理电路是74LS04非门和74HC32或门、电源是由交流220V变12V在经整流后稳压为12V和5V的电源,电路的总体运行环境是在无光条件下声强监测处理电路检测到声音后就会触发555延时电路使之输出高电平继而使之电灯点亮。 关键词声光控光敏传感电路声敏传感电路信号调理电路555延时电路

课程声光双控延时照明灯电路

课程声光双控延时照明灯电路

目录 摘要 (1) 1.设计方案 (2) 2.设计原理 (3) 2.1第一级电路:光控电路 (3) 2.2第二级电路:声控电路 (4) 2.3第三级电路:555可重复触发的单稳态电路.. 5 2.4第四级电路:LED照明灯电路 (6) 2.5 直流稳压电源 (6) 3.元器件选型 (8) 3.1红外线发射管 (8) 3.2红外线接收管 (9) 3.3继电器 (11) 3.3.1 继电器概述 (11) 3.3.2 继电器JRC-21F (12) 3.4驻极体话筒 (13) 3.4.1驻极体话筒概述 (13) 1

3.4.2驻极体话筒与电路的接法 (14) 3.4.3 驻极体话筒极性判别 (15) 3.4.4驻极体话筒灵敏度检测: (15) 3.4.5 驻极体话筒工作原理 (16) 3.4.6 驻极体话筒选配注意 (16) 3.4.6驻极体话筒的种类规格 (17) 3.5电压比较器 (17) 3.5.1工作原理 (17) 3.5.2功能作用 (18) 3.5.3 LM393 (18) 3.6 NE555定时器 (19) 3.7 变压器 (20) 3.8 直流稳压芯片 (21) 心得体会 (22) 参考文献 (24) 附录 (25) 附录1:元器件清单 (25) 表附录1-1 控制电路元器件清单 (25) 1

表附录2-2直流稳压电源中元器件清单26 附录2:声光双控延时照明灯电路全图 (26) 1

1

摘要 随着电子技术的发展,用模拟电路和数字电路设计实现灯的自动开关,既能节能省电,有能延长灯的实际使用时间是非常重要的。灯泡在白天不会点亮,而在夜晚,一旦有声音振动,灯泡就会自动点亮。这种设计可以广泛应用于走廊、楼道招待所等公共场所,给人们的生活、带来极大的方便,得到了广泛的应用。声光控电路是声音和光控制电路工作的电子开关。该电路由电源电路、声控电路、光控电路和延时控制开关电路等组成。本设计以红外发射管作为模拟可见光,红外接收管作为光源传感器,以驻极体话筒作为感应声音的传感器,同时用NE555定时器搭建可重复触发单稳态电路,实现可重复触发LED供电电路工作。 关键词:声控,光控,照明,延时 1

相关主题