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

KeilC51程序设计中几种精确延时方法
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_( );

_NOP_( );

_NOP_( );

}

Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\[4\],以实现较长时间的延时;但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 μs。这是因为执行Delay40us( )时,先执行了一次LCALL 指令(2 μs),然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us( ),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84 μs),所以,实际延时时间为86 μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 μs。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。

2.2 在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只能在函数内使用。

2.3 使用示波器确定延时时间

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

void Dly1ms(void) {

unsigned int i,j;

while (1) {

T_point = 1;

for(i=0;i<2;i++){

for(j=0;j<124;j++){;}

}

T_point = 0;

for(i=0;i<1;i++){

for(j=0;j<124;j++){;}

}

}

}

void main (void) {

Dly1ms();

}

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

确定延时的方法。

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

对于不熟悉示波器的开发人员可用Keil C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种方法,还使用“for

(i=0;i

C:0x000FE4CLRA//1T

C:0x0010FEMOVR6,A//1T

C:0x0011EEMOVA,R6//1T

C:0x0012C3CLRC//1T

C:0x00139FSUBBA,DlyT //1T

C:0x00145003JNCC:0019//2T

C:0x00160E INCR6//1T

C:0x001780F8SJMPC:0011//2T

可以看出,0x000F~0x0017一共8条语句,分析语句可以发现并不是每条语句都执行DlyT次。核心循环只有0x0011~0x0017共6条语句,总共8个机器周期,第1次循环先执行“CLR A”和“MOV R6,A”两条语句,需要2个机器周期,每循环1次需要8个机器周期,但最后1次循环需要5个机器周期。DlyT 次核心循环语句消耗(2+DlyT×8+5)个机器周期,当系统采用12 MHz时,精度为7 μs。

当采用while (DlyT--)循环体时,DlyT的值存放在R7中。相对应的汇编代码如下:

C:0x000FAE07MOVR6, R7//1T

C:0x00111F DECR7//1T

C:0x0012EE MOVA,R6//1T

C:0x001370FAJNZC:000F//2T

循环语句执行的时间为(DlyT+1)×5个机器周期,即这种循环结构的延时精度为5 μs。

通过实验发现,如将while (DlyT--)改为while (--DlyT),经过反汇编后得到如下代码:

C:0x0014DFFE DJNZR7,C:0014//2T

可以看出,这时代码只有1句,共占用2个机器周期,精度达到2 μs,循环体耗时DlyT×2个机器周期;但这时应该注意,DlyT初始值不能为0。

这3种循环结构的延时与循环次数的关系如表1所列。

表1 循环次数与延时时间关系单位:μs

注意:计算时间时还应加上函数调用和函数返回各2个机器周期时间。

2.5 使用性能分析器计算延时时间

很多C程序员可能对汇编语言不太熟悉,特别是每个指令执行的时间是很难记忆的,因此,再给出一种使用Keil C51的性能分析器计算延时时间的方法。这里还以前面介绍的for (i=0;i<124;i++)结构为例。使用这种方法时,必须先设置系统所用的晶振频率,选择Options for target中的target选项,在Xtal(MHz)中填入所用晶振的频率。将程序编译后,分别在_point = 1和T_point = 0处设置两个运行断点。选择start/stop debug session按钮进入程序调试窗口,分别打开Performance Analyzer window和Disassembly window。运行程序前,要首先将程序复位,计时器清零;然后按F5键运行程序,从程序效率评估窗口的下部分可以看到程序到了第一个断点,也就是所要算的程序段的开始处,用了389 μs;再按F5键,程序到了第2个断点处也就是所要算的程序段的结束处,此时时间为1 386 μs。最后用结束处的时间减去开始处时间,就得到循环程序段所占用的时间为997 μs。

当然也可以不用打开Performance Analyzer window,这时观察左边工具栏秒(SEC)项。全速运行时,时间不变,只有当程序运行到断点处,才显示运行所用的时间。

3 总结

本文介绍了多种实现并计算延时程序执行时间的方法。使用定时器进行延时是最佳的选择,可以提高MCU工作效率,在无法使用定时器而又需要实现比较精确的延时时,后面介绍的几种方法可以实现不等时间的延时:使用自定义头文件的优点是,可实现任意时间长短的延时,并减少主程序的代码长度,便于对程序的阅读理解和维护。编写延时程序是一项很麻烦的任务,可能需要多次修改才能满足要求。掌握延时程序的编写,能够使程序准确得以执行,这对项目开发有着重要的意义。本文所讨论的几种方法,都是来源于实际项目的开发经验,有着很好的实用性和适应性

5分钟的延时

2008-04-03 15:56

#include

#include

unsigned int idata i=0;

unsigned char idata go=0;

unsigned char idata section=0; //板水平为0,垂直为1

unsigned char idata ii=0; //ii作为标志,如果等于1的时候,说明定时器0的中断是为电机转的时间长短服务的

#define stop P12=0;

void delay(unsigned int a);

void round(void);

void main(void)

{

TMOD = 0x01;//定时器0 方式2

TF0=0;

TH0=0xEC;//延时100MS 算法:(2^16-x)*2*10^-6 = 100*10^-3

TL0=0x78;/// 2为机器周

期需要的时间为 100*10^-3

ET0=1;

TR0=1;

EA =1;

go=0;

while(1)

{

if (go==1)

{

round();

go=0;

}

}

}

void time1(void) interrupt 1 using 0

{

TF0=0;//定时器2必须软件清0

TR0=0;

TH0=0xEC;//延时100MS 算法:(2^16-x)*2*10^-6 = 100*10^-3

TL0=0x78;

TR0=1;

i++;

if(ii==0)

{

if (i==3000)

{

i=0;

go=1;

TR0=0;

}

}

else

{

if(i==40)//暂时定为40秒

stop;

TR0=0;

}

}

void round(void)

{

if(section== 0) //设光偶有信号的时候为水平,

{

P12=1; //开始转动

ii=1;

TR0=1; //启动定时器开始计时

}

}

我搜集的文章库

不知道

主页博客相册|个人档案 |好友

查看文章

51单片机Keil C延时

2008-04-03 08:36

void delay1(unsigned char i)

{

while(--i);

}

心不在焉的编译,看源码:

FUNCTION _delay1 (BEGIN)

SOURCE LINE # 13

---- Variable 'i' assigned to Register 'R7' ----

SOURCE LINE # 14

0000 ?C0004:

SOURCE LINE # 15

0000 DFFE DJNZ R7,?C0004

SOURCE LINE # 16

0002 ?C0006:

0002 22 RET

FUNCTION _delay1 (END)

天~~~奇迹出现了......我想这个程序应该已经可以满足一般情况下的需要了。如果列个表格的话:

i delay time/us

1 5

2 7

3 9 ...

计算延时时间时,已经算上了调用函数的lcall语句所花的2个时钟周期的时间。终于,结果已经明了了。只要合理的运用,C还是可以达到意想不到的效果。很多朋友抱怨C效率比汇编差了很多,其实如果对Keil C的编译原理有一个较深入的理解,是可以通过恰当的语法运用,让生成的C代码达到最优化。即使这看起来不大可能,但还是有一些简单的原则可循的:

1.尽量使用unsigned型的数据结构。

2.尽量使用char型,实在不够用再用int,然后才是long。

3.如果有可能,不要用浮点型

应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,

一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动DS18B20 的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往

往有点小题大做。而在极端的情况下,计时器甚至已经全部派上了别的用途。这时就

需要我们另想别的办法了。

以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。比如用的

是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要:mov r0, #09h

loop: djnz r0, loop

51单片机的指令周期是晶振频率的1/12,也就是1us一个周期。mov r0, #09h需要2个极其周期,djnz也需要2个极其周期。那么存在r0里的数就是(20-2)/2。用这种方法,可以非常方便的实现256us以下时间的延时。如果需要更长时间,可以使用两层嵌套。而且精度可以达到2us,一般来说,这已经足够了。

现在,应用更广泛的毫无疑问是Keil的C编译器。相对汇编来说,C固然有很多优点,比如程序易维护,便于理解,适合大的项目。但缺点(我觉得这是C的唯一一个缺点了)就是实时性没有保证,无法预测代码执行的指令周期。因而在实时性要求高的

场合,还需要汇编和C的联合应用。但是是不是这样一个延时程序,也需要用汇编来实现呢?为了找到这个答案,我做了一个实验。

用C语言实现延时程序,首先想到的就是C常用的循环语句。下面这段代码是我经

常在网上看到的:

void delay2(unsigned char i)

{

for(; i != 0; i--);

}

到底这段代码能达到多高的精度呢?为了直接衡量这段代码的效果,我把Keil C 根

据这段代码产生的汇编代码找了出来:

; FUNCTION _delay2 (BEGIN)

; SOURCE LINE # 18

;---- Variable 'i' assigned to Register 'R7' ----

; SOURCE LINE # 19

; SOURCE LINE # 20

0000 ?C0007:

0000 EF MOV A,R7

0001 6003 JZ ?C0010

0003 1F DEC R7

0004 80FA SJMP ?C0007

; SOURCE LINE # 21

0006 ?C0010:

0006 22 RET

; FUNCTION _delay2 (END)

真是不看不知道~~~一看才知道这个延时程序是多么的不准点~~~光看主要的那四条语句,就需要6个机器周期。也就是说,它的精度顶多也就是6us而已,这还没算上一条lcall 和一条ret。如果我们把调用函数时赋的i值根延时长度列一个表的话,就是:

i delay time/us

0 6

1 12

2 18

...

因为函数的调用需要2个时钟周期的lcall,所以delay time比从函数代码的执行时间多2。顺便提一下,有的朋友写的是这样的代码:

void delay2(unsigned char i)

{

unsigned char a;

for(a = i; a != 0; a--);

}

可能有人认为这会生成更长的汇编代码来,但是事实证明:

; FUNCTION _delay2 (BEGIN)

; SOURCE LINE # 18

;---- Variable 'i' assigned to Register 'R7' ----

; SOURCE LINE # 19

; SOURCE LINE # 21

;---- Variable 'a' assigned to Register 'R7' ----

0000 ?C0007:

0000 EF MOV A,R7

0001 6003 JZ ?C0010

0003 1F DEC R7

0004 80FA SJMP ?C0007

; SOURCE LINE # 22

0006 ?C0010:

0006 22 RET

; FUNCTION _delay2 (END)

其生成的代码是一样的。不过这的确不是什么好的习惯。因为这里实在没有必要再引入多余的变量。我们继续讨论正题。有的朋友为了得当更长的延时,甚至用了这样的代码:

void delay2(unsigned long i)

{

for(; i != 0; i--);

}

这段代码产生的汇编代码是什么样子的?其实不用想也知道它是如何恐怖的$#^%&% $......让我们看一看:

; FUNCTION _delay2 (BEGIN)

; SOURCE LINE # 18

0000 8F00 R MOV i+03H,R7

0002 8E00 R MOV i+02H,R6

0004 8D00 R MOV i+01H,R5

0006 8C00 R MOV i,R4

; SOURCE LINE # 19

; SOURCE LINE # 20

0008 ?C0007:

0008 E4 CLR A

0009 FF MOV R7,A

000A FE MOV R6,A

000B FD MOV R5,A

000C FC MOV R4,A

000D AB00 R MOV R3,i+03H

000F AA00 R MOV R2,i+02H

0011 A900 R MOV R1,i+01H

0013 A800 R MOV R0,i

0015 C3 CLR C

0016 120000 E LCALL ?C?ULCMP

0019 601A JZ ?C0010

001B E500 R MOV A,i+03H

001D 24FF ADD A,#0FFH

001F F500 R MOV i+03H,A

0021 E500 R MOV A,i+02H

0023 34FF ADDC A,#0FFH

0025 F500 R MOV i+02H,A

0027 E500 R MOV A,i+01H

0029 34FF ADDC A,#0FFH

002B F500 R MOV i+01H,A

002D E500 R MOV A,i

002F 34FF ADDC A,#0FFH

0031 F500 R MOV i,A

0033 80D3 SJMP ?C0007

; SOURCE LINE # 21

0035 ?C0010:

0035 22 RET

; FUNCTION _delay2 (END)

呵呵,这倒是的确可以延迟很长时间~~~但是毫无精度可言了。

C51编程:while(--i); 的延迟时间计算

void Delay(unsigned int i)

{

while(--i);

}

函数的延迟时间如何计算?

这种方法只能算个大概,使用时可能很不准确。

这种方法延迟时间与CPU的晶振频率、编译好以后汇编指令数目以及运行时其他任务(如中断)的影响有关。很难算准,只能算个大概。建议必要用这种方法来实现延迟。

1、很难算准循环时间,因为同样的C代码,在不同的优化等级和编译模式下编译出来的汇编

语句是不同的。所以很难算准每次循环的时间。

2、这种方法效率极低。在延迟的时间内,CPU只是不停地在循环,而无法作任何其他事情。

3、如果系统中有中断,则会导致这种延迟方式完全失去精度。因为中断会插入到循环运行中。

4、所以建议是用定时器中断来实现定时任务。对于长时间定时,要注意是否会出现定时器

溢出。如果会发生溢出,则要计算出定时器从0到溢出过程的次数和最后一次定时的余数,就可以实现任意长度的定时了。

51单片机 Keil C 延时程序的简单研究

void delay2(unsigned char i)

{

while(--i);

}

分析:假设外挂12M(之后都是在这基础上讨论)

我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:

delay2(0):延时518us 518-2*256=6

delay2(1):延时7us(原帖写“5us”是错的,^_^)

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。

精度是很高了!

但这个程序的最大延时是为518us,显然不能满足实际需要,因为很多时候需要延迟比较长

的时间。

那么,接下来讨论将t分配为两个字节,即uint型的时候,会出现什么情况。

void delay8(uint t)

{

while(--t);

}

我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:

delay8(0):延时524551us 524551-8*65536=263

delay8(1):延时15us

delay8(10):延时85us 85-80=5

delay8(100):延时806us 806-800=6

delay8(1000):延时8009us 8009-8000=9

delay8(10000):延时80045us 80045-8000=45

delay8(65535):延时524542us 524542-524280=262

如果把这个程序的可调度看为8us,那么最大误差为263us,但这个延时程序还是不能满足

要求的,因为延时最大为524.551ms。

那么用ulong t呢?

一定很恐怖,不用看编译后的汇编代码了。。。

那么如何得到比较小的可调度,可调范围大,并占用比较少得RAM呢?请看下面的程序:

/*------------------------------------------------------------------

函数全称:50us 延时

注意事项:基于1MIPS,A T89系列对应12M晶振,W77、W78系列对应3M晶振

例子提示:调用delay_50us(20),得到1ms延时

输入:

返回:无

------------------------------------------------------------------*/

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

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

}

我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:

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

赫赫,延时50ms,误差仅仅22us,作为C语言已经是可以接受了。再说要求再精确的话,就算是用汇编也得改用定时器了。

/*------------------------------------------------------------------

函数全称:50ms 延时

注意事项:基于1MIPS,A T89系列对应12M晶振,W77、W78系列对应3M晶振

例子提示:调用delay_50ms(20),得到1s延时

全局变量:无

返回:无

------------------------------------------------------------------*/

void delay_50ms(uint t)

{

uint j;

for(;t>0;t--)

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

}

我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:

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,可以接受!

上面程序没有采用long,也没采用3层以上的循环,而是将延时分拆为两个程序以提高精度。应该是比较好的做法了。

如果想要得到更高精度的延时,可以这么做:

void delay_50us(uint t)

{

uchar j;

if(t>255)

{

针对性给于延时补偿;

}

if(t<255)

{

针对性给于延时补偿;

}

for(;t>0;t--)

for(j=18;j>0;j--) //根据实际,将原来19改为18或者更小

;

}

void delay_50ms(uint t)

{

uint j;

if(t>...)

{

针对性给于延时补偿;

}

if(t>...)

{

针对性给于延时补偿;

}

if(t>...)

{

针对性给于延时补偿;

}

......

......

for(;t>0;t--)

for(j=6244;j>0;j--) //根据实际,将原来6245改为6244或者更小;

}

基于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)

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

教学的方法有哪些汇编

教学的方法有哪些汇编 教学方法的分类 第一类方法:以语言传递信息为主的方法,包括讲授法;谈话法;讨论法;读书指导法等。 第二类方法:以直接感知为主的方法,包括演示法;参观法等。 第三类方法:以实际训练为主的方法,包括练习法;实验法;实习作业法。 第四类方法:以欣赏活动为主的教学方法例如陶冶法等。 第五类方法:以引导探究为主的方法,如发现法;探究法等。 教学方法的层次 第一层次:原理性教学方法。解决教学规律、教学思想、新教学理论观念与学校教学实践直接的联系问题,是教学意识在教学实践中方法化的结果。如:启发式、发现式、设计教学法、注入式方法等。 第二层次:技术性教学方法。向上可以接受原理性教学方法的指导,向下可以与不同学科的教学内容相结合构成操作性教学方法,在教学方法体系中发挥着中介性作用。例如:讲授法、谈话法、演示法、参观法、实验法、练习法、讨论法、读书指导法、实习作业法等。 第三层次:操作性教学方法。指学校不同学科教学中具有特殊性的具体的方法。如语文课的分散识字法、外语课的听说法、美术课是写生法、音乐课的视唱法、劳动技术课的工序法等。 常用的教学方法

1.讲授法 讲授法是教师通过简明、生动的口头语言向学生传授知识、发展学生智力的方法。它是通过叙述、描绘、解释、推论来传递信息、传授知识、阐明概念、论证定律和公式,引导学生分析和认识问题。运用讲授法的基本要求是: 讲授既要重视内容的科学性和思想性,同时又要应尽可能的与学生的认知基础发生联系。 讲授应注意培养学生的学科思维。 讲授应具有启发性。 讲授要讲究语言艺术。语言要生动形象、富有感染力,清晰、准确、简练,条理清楚、通俗易懂,尽可能音量、语速要适度,语调要抑扬顿挫,适应学生的心理节奏。 讲授法的优点是教师容易控制教学进程,能够使学生在较短时间内获得大量系统的科学知识。但如果运用不好,学生学习的主动性、积极性不易发挥,就会出现教师满堂灌、学生被动听的局面。 2.讨论法 讨论法是在教师的指导下,学生以全班或小组为单位,围绕教材的中心问题,各抒己见,通过讨论或辩论活动,获得知识或巩固知识的一种教学方法。优点在于,由于全体学生都参加活动,可以培养合作精神,激发学生的学习兴趣,提高学生学习的独立性。一般在高年级学生或成人教学中采用。运用讨论法的基本要求是: 讨论的问题要具有吸引力。讨论前教师应提出讨论题和讨论的具

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

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

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

目录 一、总体方案与原理说明 (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被关断后,该电压一

教学手段有哪几种

教学手段有哪几种 合理地应用一些现代信息技术手段,能够易于解决知识的重难点,达到激发学生兴趣,强化学生记忆,挖掘学生潜力,培养学生能力的作用,可以有效的改进传统教学模式,优化教学结构,提高课堂教学效率,顺利达成教学目标。 教学手段有哪几种 (一)以语言形式获得间接经验的方法。 这类教学方法是指通过都师和学生口头语言活动及学生独立阅读书面语言为主的教学方法。它主要包括:讲授法、谈话法、讨论法和读书指导法。 1 讲授法 讲授法是教师运用口头语言向学生描绘情境、叙述事实、解释概念、论证原理和阐明规律的一中教学方法。 2 谈话法 谈话法,又称回答法。它是通过师生的交谈来传播和学习知识的一种方法。其特点是教师引导学生运用已有的经验和知识回答教师提出的问题,借以获得新知识或巩固、检查已学的知识。 3 讨论法

讨论法是在教师指导下,由全班或小组围绕某一种中心问题通过发表各自意见和看法,共同研讨,相互启发,集思广益地进行学习的一种方法。 4 读书指导法 读书指导法是教师目的、有计划地指导学生通过独立阅读教材和参考资料获得知识的一种教学方法。 (二)以直观形式获得直接经验的方法 这类教学方法是指教师组织学生直接接触实际事物并通过感知觉获得感性认识,领会所学的知识的方法。它主要包括演示法和参观法。 1 演示法 演示法是教师把实物或实物的模象展示给学生观察,或通过示范性的实验,通过现代教学手段,使学生获得知识更新的一种教学方法。它是辅助的教学方法,经常与讲授、谈话、讨论等方法配合一起使用。 2 参观法 参观法是根据教学目的要求,组织学生到一定的校外场所——自然界、生产现场和其他社会生活场所,使学生通过对实际事物和现象的观察、研究获得新知识的方法。 (三)以实际训练形式形成技能、技巧的教学方法 这类教学方法是以形成学生的技能、行为习惯、、培养学生解决问题能力为主要任务的一种教学方法。它主要包括练习、实验和实习作业等方法。

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

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

小学数学最新教学方法有哪些

小学数学最新教学方法有哪些 1、对应思想方法 对应是人们对两个集合因素之间的联系的一种思想方法,小学数学一般是一一对应的直观图表,并以此孕伏函数思想。如直线上的点(数轴)与表示具体的数是一一对应。 2、假设思想方法 假设是先对题目中的已知条件或问题作出某种假设,然后按照题中的已知条件进行推算,根据数量出现的矛盾,加以适当调整,最后找到正确答案的一种思想方法。假设思想是一种有意义的想象思维,掌握之后可以使要解决的问题更形象、具体,从而丰富解题思路。 3、比较思想方法 比较思想是数学中常见的思想方法之一,也是促进学生思维发展的手段。在教学分数应用题中,教师善于引导学生比较题中已知和未知数量变化前后的情况,可以帮助学生较快地找到解题途径。 4、符号化思想方法 用符号化的语言(包括字母、数字、图形和各种特定的符号)来描述数学内容,这就是符号思想。如数学中各种数量关系,量的变化及量与量之间进行推导和演算,都是用小小的字母表示数,以符号的浓缩形式表达大量的信息。如定律、公式、等。 5、类比思想方法 类比思想是指依据两类数学对象的相似性,有可能将已知的一类数学对象的性质迁移到另一类数学对象上去的思想。如加法交换律和乘法交换律、长方形的面积公式、平行四边形面积公式和三角形面积公式。类比思想不仅使数学知识容易理解,而且使公式的记忆变得顺水推舟的自然和简洁。 6、转化思想方法 转化思想是由一种形式变换成另一种形式的思想方法,而其本身的大小是不变的。如几何的等积变换、解方程的同解变换、公式的变形等,在计算中也常用到甲÷乙=甲×1/乙。 7、分类思想方法

分类思想方法不是数学独有的方法,数学的分类思想方法体现对数学对象的分类及其分类的标准。如自然数的分类,若按能否被2整除分奇数和偶数;按约数的个数分质数和合数。又如三角形可以按边分,也可以按角分。不同的分类标准就会有不同的分类结果,从而产生新的概念。对数学对象的正确、合理分类取决于分类标准的正确、合理性,数学知识的分类有助于学生对知识的梳理和建构。 8、集合思想方法 集合思想就是运用集合的概念、逻辑语言、运算、图形等来解决数学问题或非纯数学问题的思想方法。小学采用直观手段,利用图形和实物渗透集合思想。在讲述公约数和公倍数时采用了交集的思想方法。 9、数形结合思想方法 数和形是数学研究的两个主要对象,数离不开形,形离不开数,一方面抽象的数学概念,复杂的数量关系,借助图形使之直观化、形象化、简单化。另一方面复杂的形体可以用简单的数量关系表示。在解应用题中常常借助线段图的直观帮助分析数量关系。 10、统计思想方法: 小学数学中的统计图表是一些基本的统计方法,求平均数应用题是体现出数据处理的思想方法。 11、极限思想方法: 事物是从量变到质变的,极限方法的实质正是通过量变的无限过程达到质变。在讲“圆的面积和周长”时,“化圆为方”“化曲为直”的极限分割思路,在观察有限分割的基础上想象它们的极限状态,这样不仅使学生掌握公式还能从曲与直的矛盾转化中萌发了无限逼近的极限思想。 12、代换思想方法: 他是方程解法的重要原理,解题时可将某个条件用别的条件进行代换。如学校买了4张桌子和9把椅子,共用去504元,一张桌子和3把椅子的价钱正好相等,桌子和椅子的单价各是多少? 13、可逆思想方法: 它是逻辑思维中的基本思想,当顺向思维难于解答时,可以从条件或问题思维寻求解题思路的方法,有时可以借线段图逆推。如一辆汽车从甲地开往乙地,

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

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

题目: ___简易彩灯控制器电路_ 学生姓名: 专业班级:电子信息工程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个以上的彩灯;

基于51单片机的精确延时(微秒级)

声明: *此文章是基于51单片机的微秒级延时函数,采用12MHz晶振。 *此文章共包含4个方面,分别是延时1us,5us,10us和任意微秒。前三个方面是作者学习过程中从书本或网络上面总结的,并非本人所作。但是延时任意微秒函数乃作者原创且亲测无误。欢迎转载。 *此篇文章是作者为方便初学者使用而写的,水平有限,有误之处还望大家多多指正。 *作者:Qtel *2012.4.14 *QQ:97642651 ----------------------------------------------------------------------------------------------------------------------序: 对于某些对时间精度要求较高的程序,用c写延时显得有些力不从心,故需用到汇编程序。本人通过测试,总结了51的精确延时函数(在c语言中嵌入汇编)分享给大家。至于如何在c 中嵌入汇编大家可以去网上查查,这方面的资料很多,且很简单。以12MHz晶振为例,12MHz 晶振的机器周期为1us,所以,执行一条单周期指令所用时间就是1us,如NOP指令。下面具体阐述一下。 ----------------------------------------------------------------------------------------------------------------------1.若要延时1us,则可以调用_nop_();函数,此函数是一个c函数,其相当于一个NOP指令,使用时必须包含头文件“intrins.h”。例如: #include #include void main(void){ P1=0x0; _nop_();//延时1us P1=0xff; } ----------------------------------------------------------------------------------------------------------------------2.延时5us,则可以写一个delay_5us()函数: delay_5us(){ #pragma asm nop #pragma endasm } 这就是一个延时5us的函数,只需要在需要延时5us时调用此函数即可。或许有人会问,只有一个NOP指令,怎么是延时5us呢? 答案是:在调用此函数时,需要一个调用指令,此指令消耗2个周期(即2us);函数执行完毕时要返回主调函数,需要一个返回指令,此指令消耗2个周期(2us)。调用和返回消耗了2us+2us=4us。然后再加上一个NOP指令消耗1us,不就是5us吗。

单片机C延时时间怎样计算

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时 应该使用unsigned char作为延时变量。以某晶振为12MHz的单片 机为例,晶振为12M H z即一个机器周期为1u s。一. 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--);

英语教学方法有哪几种

英语教学方法有哪几种 一、语法翻译法 1、语法翻译法是一种通过学习语法规则和词汇,并且按照规则用本国语和目的语进行互译来教授语言的方法。 2、教学过程 3、原则和技巧 原则:(1)书面语很重要,重视写作和阅读 (2)熟记语法规则和单词 (3)教师的绝对权威 (4)本族语的中介作用 技巧:(1)书面翻译/互译 (2)阅读理解性问答 (3)演绎法讲解语法规则 4、评价: (1)使用方便 (2)学习语言知识多于语言技能掌握 (3)改良式的语法翻译法:弥补口语的听说训练、重视交际能力的培养、重视调动学生学习的主动性。 二、直接法 1、直接法是一种通过实物、图画、动作、表情等手段把外语和其对应的意思直接联系,从而达到直接理解和直接应用的外语教学法。

2、教学步骤 用目的语讲解——提问——回答 用归纳法教语法:例子——总结规则——巩固性练习——听写练习 3、原则与技巧 原则:(1)先听说后书面语言 (2)通过有意义的上下文来学习单词和句子 (3)禁止使用本族语翻译 (4)自我更正来促进语言学习 技巧:大声朗读、问答练习、自我更正、会话、填空、听写段落、画图讲解、实物演示等。 4、评价: (1)强调语言实践和运用,有利于听说 (2)学习用外语思考,重视语言的交际作用 (3)排斥本国语,有时花费很长的时间来解释,或者解释不清楚 (4)对教师口语、教学技能要求高 三、听说法 1、听说法是一种运用句型操练形式学习外语的方法。其理论基 础为结构主义语言学和行为主义心理学。 2、教学步骤 听外语对话——模仿——纠正语音语调——逐句背诵——对话练习——看书面材料——语法点归纳——替换/回答练习 3、原则与技巧 原则:(1)教师示范,学生模仿。

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

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

专业班级:自动化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延时电路

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

单片机一些常用的延时与中断问题及解决方法 延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了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 答: 不可能的,是不是你的编译有错的啊

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() {

老师常见用教学方法有哪些

教学方法论由教学方法指导思想、基本方法、具体方法、教学方式四个层面组成。教学方法包括教师教的方法(教授法)和学生学的方法(学习方法)两大方面,是教授方法与学习方法的统一。教授法必须依据学习法,否则便会因缺乏针对性和可行性而不能有效地达到预期的目的。但由于教师在教学过程中处于主导地位,所以在教法与学法中,教法处于主导地位。接下来小编给大家带来一些常见的教学方法啦! 常见的教学方法分类有: 1、讲授法 讲授法是教师通过口头语言向学生传授知识的方法。讲授法包括讲述法、讲解法、讲读法和讲演法。教师运用各种教学方法进行教学时,大多都伴之以讲授法。这是当前我国最经常使用的一种教学方法。 2、谈论法 谈论法亦叫问答法。它是教师按一定的教学要求向学生提出问题,要求学生回答,并通过问答的形式来引导学生获取或巩固知识的方法。谈论法特别有助于激发学生的思维,调动学习的积极性,培养他们独立思考和语言表述的能力。初中,尤其是小学低年级常用谈论法。 谈论法可分复习谈话和启发谈话两种。复习谈话是根据学生已学教材向学生提出一系列问题,通过师生问答形

式以帮助学生复习、深化、系统化已学的知识。启发谈话则是通过向学生提出来思考过的问题,一步一步引导他们去深入思考和探取新知识。 3、演示法 演示教学是教师在教学时,把实物或直观教具展示给学生看,或者作示范性的实验,通过实际观察获得感性知识以说明和印证所传授知识的方法。 演示教学能使学生获得生动而直观的感性知识,加深对学习对象的印象,把书本上理论知识和实际事物联系起来,形成正确而深刻的概念;能提供一些形象的感性材料,引起学习的兴趣,集中学生的注意力,有助于对所学知识的深入理解、记忆和巩固;能使学生通过观察和思考,进行思维活动,发展观察力、想象力和思维能力。 4、练习法 练习法是学生在教师的指导下,依靠自觉的控制和校正,反复地完成一定动作或活动方式,借以形成技能、技巧或行为习惯的教学方法。从生理机制上说,通过练习使学生在神经系统中形成一定的动力定型,以便顺利地、成功地完成某种活动。练习在各科教学中得到广泛的应用,尤其是工具性学科(如语文、外语、数学等)和技能性学科(如体育、音乐、美术等)。练习法对于巩固知识,引导学

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

电子课程设计 —简易声光控延时照明灯电路设计 学院:电子信息工程学院 专业、班级:电气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--

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

目录 摘要 (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。

C51精确延时

C51中精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机Keil C 延时程序的简单研究,作者:InfiniteSpace Studio/isjfk,写得不错,他是用while(--i);产生DJNZ 来实现精确延时,后来有人说如果while里面不能放其它语句,否则也不行,用do-while就可以,具体怎样我没有去试.所有这些都没有给出具体的实例程序来.还看到一些延时的例子多多少少总有点延时差.为此我用for循环写了几个延时的子程序贴上来,希望能对初学者有所帮助.(晶振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--); } 产生的汇编: C:0x0800 7F0F MOV R7,#0x0F C:0x0802 7ECA MOV R6,#0xCA C:0x0804 7D51 MOV R5,#0x51 C:0x0806 DDFE DJNZ R5,C:0806 C:0x0808 DEFA DJNZ R6,C:0804 C:0x080A DFF6 DJNZ R7,C:0802 C:0x080C 22 RET 计算分析: 程序共有三层循环 一层循环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--)

常见的教学方法有哪些

常见的教学方法有哪些? 2010年04月20日16:16,星期二作者:教科室 我国中小学常用的教学方法有: 1)讲授法 讲授法是教师通过口头语言向学生传授知识的方法。讲授法包括讲述法、讲解法、讲读法和讲演法。教师运用各种教学方法进行教学时,大多都伴之以讲授法。这是当前我国最经常使用的一种教学方法。 2)谈论法 谈论法亦叫问答法。它是教师按一定的教学要求向学生提出问题,要求学生回答,并通过问答的形式来引导学生获取或巩固知识的方法。谈论法特别有助于激发学生的思维,调动学习的积极性,培养他们独立思考和语言表述的能力。初中,尤其是小学低年级常用谈论法。 谈论法可分复习谈话和启发谈话两种。复习谈话是根据学生已学教材向学生提出一系列问题,通过师生问答形式以帮助学生复习、深化、系统化已学的知识。启发谈话则是通过向学生提出来思考过的问题,一步一步引导他们去深入思考和探取新知识。 3)演示法 演示教学是教师在教学时,把实物或直观教具展示给学生看,或者作示范性的实验,通过实际观察获得感性知识以说明和印证所传授知识的方法。 演示教学能使学生获得生动而直观的感性知识,加深对学习对象的印象,把书本上理论知识和实际事物联系起来,形成正确而深刻的概念;能提供一些形象的感性材料,引起学习的兴趣,集中学生的注意力,有助于对所学知识的深入理解、记忆和巩固;能使学生通过观察和思考,进行思维活动,发展观察力、想象力和思维能力。 4)练习法 练习法是学生在教师的指导下,依靠自觉的控制和校正,反复地完成一定动作或活动方式,借以形成技能、技巧或行为习惯的教学方法。从生理机制上说,通过练习使学生在神经系统中形成一定的动力定型,以便顺利地、成功地完成某种活动。练习在各科教学中得到广泛的应用,尤其是工具性学科(如语文、外语、数学等)和技能性学科(如体育、音乐、美术等)。练习法对于巩固知识,引导学生把知识应用于实际,发展学生的能力以及形成学生的道德品质等方面具有重要的作用。 5)读书指导法 读书指导法是教师指导学生通过阅读教科书、参考书以获取知识或巩固知识的方法。学生掌握书本知识,固然有赖于教师的讲授,但还必须靠他们自己去阅读、领会,才能消化、巩固和扩大知识。特别是只有通过学生独立阅读才能掌握读书方法,提高自学能力,养成良好的读书习惯。 6)课堂讨论法 课堂讨论法是在教师的指导下,针对教材中的基础理论或主要疑难问题,在学生独立思考之后,共同进行讨论、辩论的教学组织形式及教学方法,可以全班进行,也可分大组进行。 7)实验法 实验法是学生在教师的指导下,使用一定的设备和材料,通过控制条件的操作过程,引起实验对象的某些变化,从观察这些现象的变化中获取新知识或验证知识的教学方法。在物理、化学、生物、地理和自然常识等学科的教学中,实验是一种重要的方法。一般实验是在实验室、生物或农业实验园地进行的。有的实验也可以在教室里进行。实验法是随着近代自然科学的发展兴起的。现代科学技术和实验手段的飞跃发展,使实验法发挥越来越大的作用。通过实验法,可以使学生把一定的直接知识同书本知识联系起来,以获得比较完全的知识,又能够培养他们的独立探索能力、实验操作能力和科学研究兴趣。它是提高自然科学有

相关文档
最新文档