单片机的c语言延时程序

单片机的c语言延时程序

ID:8833434

大小:57.00 KB

页数:4页

时间:2018-04-09

单片机的c语言延时程序_第1页
单片机的c语言延时程序_第2页
单片机的c语言延时程序_第3页
单片机的c语言延时程序_第4页
资源描述:

《单片机的c语言延时程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、单片机C语言环境延时程序设计东北电力学院(132012)盛文利摘要:讨论运用C语言的单片机开发中,对于时序要求苛刻的延时的开发过程。实例说明在高级语言中,严格控制时序的可能性和注意事项。关键词:单片机C语言编译器现在单片机的开发中,C语言以其方便、灵活、逻辑性强、易于维护和可移植性好等强大优势,占据了单片机开发的主要地位。过去,由于单片机C语言本身存在的缺陷,加之单片机工程本身都不大,C语言在单片机中的应用没有被重视。在C语言环境下,我们只需关心程序的逻辑关系,实现细节由编译器完成,这给我们快速开发提供了条件

2、,也大大减小了开发工作量。但同时实现细节就不被控制了,这个问题对于经常重视实现细节的单片机,就必须得到解决。好在一般的C语言编译器都提供嵌入汇编、与汇编互调用和汇编级的代码察看等功能。现以KEILC51[1]下的一线总线器件程序开发为例,说明我的解决方法。1一线总线协议器件一线总线协议(1wirebusprotocol)也叫做单总线协议,是单总线器件数据传输协议。因为数据(也可以包括电源)都由一条线来传输,没有辅助的数据同步信号,这时就只能由时序来解析协议内容。这样就只有依靠对时序的严格要求,来保障数据传输的

3、准确性。单总线协议的信号主要有:初始化时序,包括复位脉冲和在线脉冲,是主机与器件的联络信号。然后是读、写时序。单总线器件完全依靠对线上的时序来做出响应,这些有效的时序称作时隙,也有称作时间片的,是同一词汇的不同翻译[2]。初始化时序时间裕度大,容易实现。读写脉冲对时序要求相对严格,尤其在慢速的MCS-51下,指令的运行在微妙级,而读写时序在15微秒的后小部分,大约4微秒,不同批次的芯片会有少许差距。有的会允许你的时序有少许误差,有的则非常严格。2C语言编译器在用汇编语言编写的程序时,很容易控制时间,因为我们知

4、道每条语句的执行时间,每段宏的执行时间,每段子程序加调用语句所消耗的时间。在单片机的C语言开发中,C语言编译器都对标准C作了针对单片机特点的扩展。但对于不同的单片机,不同的C语言编译器在将源程序翻译成目标机器语言时,会有不同的编译方法,在生成目标代码时,会有所不同。开发人员必须研究它生成的汇编语言代码,来保证时间的准确性。这也许是除了使用嵌入汇编或直接编写汇编函数的唯一方法。其实在单片机的C编译器中,已经有足够的底层操作方面的扩展,所以这里只考虑纯C语言的方法。3.延时程序设计我们以德国Keil公司的MCS-

5、51C语言编译器为例,目前它已被公认为业界的标准。以下讨论均假设单片机时钟晶振为6兆的51芯片,以小模式下编译,这时MCS-51程序指令执行的最小单位是2微秒。如果使用非英特尔且内核优化过的单片机,应切换回普通模式,或仔细研究它的时序。以DS18B20为例,我们临时在程序中需要延时2微秒,那末可以用以下程序#includevoidsomefunc(void){……;_nop_();……;}如果要延时64微秒甚至640微妙,我们不可能在程序中重复上述_nop_(),虽然这并不会出错。可以利

6、用它来构建延时程序,精确定时的问题就变为延时程序的精度问题。我们先讨论以上的空操作延时。3.1空操作延时及延时函数注意到DS18B20最小时隙除大于一微秒的外,最小的就是15微秒。而数据的读或写也包含在这15微秒中。由于定时器的延时要对定时器进行初始化,不易得到小的延时。只能用于复位脉冲,即在480至960微秒之间的延时,程序实现接近960微秒的延时……;TH0=-950/256;TL0=-950%256;TMOD=TMOD

7、0x01TR0=1;……;定时器启后,单片机可以作其他事情,如复位看门狗,或LED扫

8、描。而调用的短延时函数必需精确的受到控制,先作一个几微秒的延时实验程序,以观察它实际的延时时间,又因为我们在汇编时代常用的延时指令为MOVR7,DDLYDJNZR7,$以便产生最小4微秒的延时,仿造的C程序如下voiddelay1(ndly){for(;ndly>0;ndly--);}生成的汇编代码却与DJNZ无关,是如下形式,其中无关的编译注释已删除RSEG?PR?_delay1?DLY2_delay1:USING0?C0006:MOVA,R7;2usSETBC;2usSUBBA,#00H;2usJC?C0

9、009;2usDECR7;2usSJMP?C0006;4us?C0009:RET;4us;ENDOF_delay1延时至少18微秒,无法用于读写时隙。改用如下程序voiddelay2(unsignedcharvd){for(vd=0;vd<10;vd++);}生成的汇编代码如下RSEG?PR?_delay2?DLY2_delay2:USING0CLRA;2usMOVR7,A;2us?C0002:IN

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。