搜档网
当前位置:搜档网 › Keil C51程序设计中几种精确延时方法总结(gubing2005)

Keil C51程序设计中几种精确延时方法总结(gubing2005)

Keil C51程序设计中几种精确延时方法总结(gubing2005)
Keil C51程序设计中几种精确延时方法总结(gubing2005)

一、实现延时的两种方法

1、硬件延时

优点:用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;

缺点:往往在精度要求不是很高时,会使定时器/计数器大材小用,而且很极端时,定时器根本不够的。

2、软件延时

优点:节省硬件资源的同时,只要正确使用可接近要求的精度,这种方法主要采用循环体进行;

缺点:精度不高,对编程者经验要求甚高。

二、硬件延时

1、常用晶振:11.059 2 MHz(容易产生各种标准的波特率)、12 MHz或6 MHz(机器周期分别为1 μs和2 μs,便于精确延时)。

2、本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达2的16次方=65 536 。

若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

3、在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW 和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。

三、软件延时(通过调用延时函数)

1、调用延时函数三要素:

入口周期Te、返回周期Tr、内部代码执行周期Ti

则:该函数总执行周期Tf=Te+Tr+Ti;其中:Ti=循环次数*循环周期N

2、短暂延时

如Delay10us( ):总执行高峰期为10us=2us+6us+2us.

说明:不宜嵌套调用,嵌套次数越多误差越大。

3、在C51中嵌套汇编程序段实现延时

在C51中通过预处理指令#pragma asm和#pragma endasm可以嵌套汇编语言语句。用户编写的汇编语言紧跟在#pragma asm之后,在#pragma endasm之前结束。

如:#pragma asm

汇编语言程序段

#pragma endasm

延时函数可设置入口参数,可将参数定义为unsigned char、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。在应用时应注意以下几点:

◆#pragma asm、#pragma endasm不允许嵌套使用;

◆在程序的开头应加上预处理指令#pragma asm,在该指令之前只能有注释或其他预处理指令;

◆当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件;

◆asm只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量;

◆#pragma asm、#pragma endasm和asm只能在函数内使用。

说明:将汇编语言与C51结合起来,充分发挥各自的优势,无疑是单片机开发人员的最佳选择。

4、使用示波器确定延时时间

熟悉硬件的开发人员,也可以利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间。方法如下:

把P1.0接入示波器,运行上面的程序,可以看到P1.0输出的波形为周期是3 ms的方波。其中,高电平为2 ms,低电平为1 ms,即for循环结构“for(j=0;j<124;j++) {;}”的执行时间为1 ms。通过改变循环次数,可得到不同时间的延时。当然,也可以不用for循环而用别的语句实现延时。

说明:这里讨论的只是确定延时的方法。

5、使用反汇编工具计算延时时间

对于不熟悉示波器的开发人员可用Keil C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。但要求对于汇编的指令周期要熟悉。

说明:此种方法如果你熟悉汇编指令周期是比较简单的,这里不作详细讨论。

6、使用性能分析器计算延时时间(即:Keil C51的debug 技巧)

A51的程序执行时间可能通过指令周期计算出来,而C51的却无从下手,很多程序员

为了得到精确的执行时间而研读反汇编代码,何等的悲哀。巧妙的使用Keil中的debug功能,问题就迎刃而解了。

下面举例说明:

该程序为一个延时程序,在12M的晶振下,调用一次的时间为16uS ,执行一次循环的时间为9uS(延时范围(25us~589.831ms))。这样来,假设有语句Delay(N);那么该语句的精确延时的计算公式就是(9*N+16)uS了.这个公式可以理解吧!

如何得到程序的调用时间和执行一次循环的时间了。接着看下面:

在主程序MAIN()函数下添加上面两条语句,当前的SEC栏为执行到DELAY(1);语句所花的时间。T(0-)

上面的SEC栏为执行完DELAY(1)所花的时间,这样就可以得到DEALY(1)这条语句的执行时间为595-570=25uS.

上面的SEC栏为执行完DELAY(2)所花的时间,这样就可以得到DEALY(2)这条语句的执行时间为629-595=34uS.

结果不就出来了嘛,T[DELAY(2)]-T[DELAY(1)]不就是执行一次循环的时间嘛,而T[DELAY(1)]减去执行一次循环的时间就是调用一次要花的时间了。精确到1个机器周期。(这里可以通过列简单的一元二次方程组求出来的,因此不作详细讨论)

基于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_( );

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

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

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

目录 一、总体方案与原理说明 (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

单片机延时计算

单片机延时计算 1.10ms延时程序(for循环嵌套) ********************************************************************* 文件名称:void delay_10ms()功能:10ms延时参数:单片机晶振12MHz ********************************************************************* void delay_10ms() { unsigned inti,j; for(i=0;i<10;i++) { for(j=0;j<124;j++); } } **i和j定义为int整型时,for循环执行时间为8个机器周期,当i和j定义为char 字符型时,for循环执行时间3个机器周期。“;”一个机器周 期,每次调用for循环2个机器周期。 **则执行本段延时程序是内循环时间t1=8*124+3个机器周期,其中“8”执行for 循环指令时间;“124”为for循环次数;“3”为每次调用 for循环指令的时间。外循环t2=t1*10+8*10+3其中“10”为for循环次数;“8”为一次for循环指令调用和执行时间;“10”为调用for循环 次数,3为调用for循环指令时间。 **所以本程序延时t=((8*124)+3)*10+8*10+3=10033=10.033ms≈10ms。 注意:变量为整型时,每次调用for循环需要3个机器周期的调用时间,执行for 循环判断需要8个机器周期的执行时间;字符型变量时,每次调用for循环需要2个机器周期的调用时间,执行for循环判断需要3个机器周期的执行时间。

相关主题