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

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

2009年05月16日星期六 14:35

转自:/archive/2009/03/06/1404721.html

来源:嵌入式技术网作者:河南师范大学段向东毋茂盛时间:2007-12-19 发布人:林逸

--------------------------------------------------------------------------------------------

摘要实际的单片机应用系统开发过程中,由于程序功能的需要,经常编写各种延时程序,延时时间从数微秒到数秒不等,对于许多C51开发者特别是初学者编制非常精确的延时程序有一定难度。本文从实际应用出发,讨论几种实用的编制精确延时程序和计算程序执行时间的方法,并给出各种方法使用的详细步骤,以便读者能够很好地掌握理解。

引言

单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C 语言,用C51写延时程序时需要一些技巧[3]。因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。

实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高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的延时函数可编写如下:

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

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

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

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

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.讨论法 讨论法是在教师的指导下,学生以全班或小组为单位,围绕教材的中心问题,各抒己见,通过讨论或辩论活动,获得知识或巩固知识的一种教学方法。优点在于,由于全体学生都参加活动,可以培养合作精神,激发学生的学习兴趣,提高学生学习的独立性。一般在高年级学生或成人教学中采用。运用讨论法的基本要求是: 讨论的问题要具有吸引力。讨论前教师应提出讨论题和讨论的具

教学手段有哪几种

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

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

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

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

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

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

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

基于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)教师示范,学生模仿。

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、练习法 练习法是学生在教师的指导下,依靠自觉的控制和校正,反复地完成一定动作或活动方式,借以形成技能、技巧或行为习惯的教学方法。从生理机制上说,通过练习使学生在神经系统中形成一定的动力定型,以便顺利地、成功地完成某种活动。练习在各科教学中得到广泛的应用,尤其是工具性学科(如语文、外语、数学等)和技能性学科(如体育、音乐、美术等)。练习法对于巩固知识,引导学

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。可以把这一函数

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

标准的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那么大的差距,是你的软件的原因。 不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序是正确的

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)实验法 实验法是学生在教师的指导下,使用一定的设备和材料,通过控制条件的操作过程,引起实验对象的某些变化,从观察这些现象的变化中获取新知识或验证知识的教学方法。在物理、化学、生物、地理和自然常识等学科的教学中,实验是一种重要的方法。一般实验是在实验室、生物或农业实验园地进行的。有的实验也可以在教室里进行。实验法是随着近代自然科学的发展兴起的。现代科学技术和实验手段的飞跃发展,使实验法发挥越来越大的作用。通过实验法,可以使学生把一定的直接知识同书本知识联系起来,以获得比较完全的知识,又能够培养他们的独立探索能力、实验操作能力和科学研究兴趣。它是提高自然科学有

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)执行过程

51单片机精确延时源程序

51单片机精确延时源程序 一、晶振为 11.0592MHz,12T 1、延时 1ms: (1)汇编语言: 代码如下: DELAY1MS: ;误差 -0.651041666667us MOV R6,#04H DL0: MOV R5,#71H DJNZ R5,$ DJNZ R6,DL0 RET (2)C语言: void delay1ms(void) //误差 -0.651041666667us { unsigned char a,b; for(b=4;b>0;b--) for(a=113;a>0;a--); } 2、延时 10MS: (1)汇编语言: DELAY10MS: ;误差 -0.000000000002us MOV R6,#97H DL0: MOV R5,#1DH DJNZ R5,$ DJNZ R6,DL0

RET (2)C语言: void delay10ms(void) //误差 -0.000000000002us { unsigned char a,b; for(b=151;b>0;b--) for(a=29;a>0;a--); } 3、延时 100MS: (1)汇编语言: DELAY100MS: ;误差 -0.000000000021us MOV R7,#23H DL1: MOV R6,#0AH I

棋影淘宝店:https://www.360docs.net/doc/8e15110399.html,QQ:149034219 DL0: MOV R5,#82H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET (2)C语言: void delay100ms(void) //误差 -0.000000000021us { unsigned char a,b,c; for(c=35;c>0;c--) for(b=10;b>0;b--) for(a=130;a>0;a--); } 4、延时 1S: (1)汇编语言: DELAY1S: ;误差 -0.00000000024us MOV R7,#5FH DL1: MOV R6,#1AH DL0: MOV R5,#0B9H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET (2)C语言: void delay1s(void) //误差 -0.00000000024us { unsigned char a,b,c; for(c=95;c>0;c--) for(b=26;b>0;b--)

英语中常见的教学方法有哪些

英语中常见的教学方法有哪些 1. Task-Based Language T eaching,即TBL T这是新课标之后实行的新型教学方法——任 务型教学,这个意识半会儿说不清楚,你得好好研究一下。如果成功了,这个教学方法课堂效果会很好。 2.五步教学法: Step 1 Warming up Step 2 Presentation and practice Step 3 Presentation Step 4 Practice Step 5 Post Task 3.五指教学法:RPCPP Step 1 Review Step 2 Presentation Step 3 Consolidation Step 4 Practice Step 5 Project Presentation 4.3P教学法 Warming-up Presentation Practice Production Homework 5交际型教学Communicative Teaching在教学过程中创设或模拟真实情景交际,让学生通过听、说、理解等交际活动不断沟通交流、进行互动的一种教学模式 下面谈一谈英语学习方式 前面提到四种学习方式:合作学习/共同学习、自主学习、任务型学习、探究学习。下面就对它们做一个简明扼要的介绍。这个介绍是提纲挈领的介绍,涉及不到十分具体的技巧。关于技巧方面可以在培训班另安排时间深入探讨。过去(甚至目前)学生课堂学习的方式比较单一、枯燥乏味、效果不佳。这种学习方式就是大家所熟悉的学生听教师讲为主的方式。《英语课程标准》建议教师帮助学生掌握多种学习方式。这里介绍的四种学习方式,不是全部的学习方式,比如,有条件的地方,可以利用多媒体手段、利用互联网络进行学习。这里介绍四种学习方式,不意味着其他学习方式不好,或者无效,而是要根据教学实际情况选择使用、交替使用、综合使用。而且,教师讲解也不是在教学中没有任何地位,必要的时候,仍然可以使用。只不过不要把它作为唯一的方式或者主要的学习方式。各种学习方式之间不是截然分开的,它们可以相互结合,相互影响。 合作学习或者称为共同学习,用于外语教学,基于以下几个理念。一、课堂外面的社会,人与人之间需要进行合作,课堂教学就要培养合作意识,训练合作技能。二、语言的本质是社会性的,是人与人之间沟通的工具,与人交际和沟通的过程就是合作行为。语言哲学里提到的会话含义的基础就是会话者要遵循会话准则。三、语言习得研究证明,掌握交际工具在互动中掌握比较有效。互动就是合作行为。 学生在一块儿学习不一定就是合作学习,比如,在双人组、四人组的形式下,也许不能称得上是合作学习。合作学习要遵循一定的原则。共同学习的一个原理是,学习者要在学习中相互依赖,这样才够得上合

51单片机延时模块程序

51单片机独立模块 一、延时模块 1、for循环延时 void delayms(UINT8 ms) { UINT8 x,y; for(x=ms;x>0;x--) for(y=112;y>0;y--); } 2、while循环延时 void delayms(UINT8 ms) { UINT8 x; while(ms--) for(x=112;x>0;x--); } 3、精确的单片机常用延时函数:(c代码误差0us 12M)(1)、延时0.5ms void delay0.5ms(void) //误差 0us { unsigned char a,b; for(b=71;b>0;b--) for(a=2;a>0;a--); } (2)、延时1ms void delay1ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } (3)、延时2ms void delay2ms(void) //误差 0us { unsigned char a,b; for(b=4;b>0;b--) for(a=248;a>0;a--); _nop_; //if Keil,require use intrins.h } (4)、延时3ms void delay3ms(void) //误差 0us

{ unsigned char a,b; for(b=111;b>0;b--) for(a=12;a>0;a--); } (5)、延时4ms void delay4ms(void) //误差 0us { unsigned char a,b,c; for(c=7;c>0;c--) for(b=8;b>0;b--) for(a=34;a>0;a--); } (6)、延时5ms void delay5ms(void) //误差 0us { unsigned char a,b; for(b=19;b>0;b--) for(a=130;a>0;a--); } (7)、延时10ms void delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } (8)、延时15ms void delay15ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=238;b>0;b--) for(a=30;a>0;a--); } (9)、延时20ms void delay20ms(void) //误差 0us { unsigned char a,b; for(b=215;b>0;b--) for(a=45;a>0;a--); _nop_; //if Keil,require use intrins.h

相关文档
最新文档