单片机 C 语言的精确延时程序设计.pdfVIP

  • 7
  • 0
  • 约1万字
  • 约 3页
  • 2017-09-17 发布于重庆
  • 举报
电子发烧友 电子技术论坛 EXPERIENCEEXCHANGE 经验交流 单片机 语言的精确延时程序设计※ C ■ 东北电力学院 盛文利 现在单片机的开发中,C 语言以其方便、灵活、逻 法,在生成目标代码时,会有所不同。开发人员必须研 辑性强、易于维护和可移植性好等强大优势,占据了单 究它生成的汇编语言代码,来保证时间的准确性。这也 片机开发的主要地位。过去,由于单片机C语言本身存 许是除了使用嵌入汇编或直接编写汇编函数的唯一方 在的缺陷,加之单片机工程项目本身都不大,C 语言在 法。其实在单片机的C 编译器中,已经有足够底层操作 单片机中的应用没有被重视。在C 语言环境下,只需关 方面的扩展,所以这里只考虑纯C 语言的方法。 心程序的逻辑关系,实现细节则由编译器完成,这为快 3 延时程序设计 速开发提供了条件,也大大减小了开发工作量。但同 时,实现细节就不被控制了,这个问题对于经常重视实 以德国Keil 公司的C51 编译器为例,目前它已被公 现细节的单片机,就必须要得到解决。好在一般的C语 认为业界的标准。以下讨论均假设51 单片机时钟晶振 言编译器都提供嵌入汇编、与汇编互调用和汇编级的代 为6MHz,以小模式下编译,这时程序指令执行的最小 码察看等功能。现以Keil C51(见参考文献[1])下的单总线 单位是2 μs 。如果使用非英特尔且内核优化过的单片 器件程序开发为例,说明解决方法。 机,应切换回普通模式,或仔细研究它的时序。以 DS18B20 为例,临时在程序中需要延时2 μs ,那么可以 1 单总线协议器件 用下述程序。 单总线协议(1 wire bu s protocol)是单总线器件数据传 #incl ude intri ns.h 输协议。因为数据( 也可以包括电源) 都由一条线来传 void somefunc(void) 输,没有辅助的数据同步信号,这时就只能由时序来解 { ……; 析协议内容。这样就只有依靠对时序的严格要求,来保 _nop _(); 障数据传输的准确性。 ……; } 单总线协议的信号主要有:初始化时序(包括复位 如果要延时64 μs 甚至640 μs ,那么不可能在程序 脉冲和在线脉冲,是主机与器件的联络信号)和读、写 中重复上述_n op_(),虽然这并不会出错。可以利用它 时序。单总线器件完全依靠对线上的时序来做出响应, 来构建延时程序,精确定时的问题就变为延时程序的精 这些有效的时序称作时隙,也有称作时间片的,是同一 度问题。首先讨论空操作延时。 词汇的不同翻译(见参考文献[2]) 。 初始化时序时间裕度大,容易实现。读写脉冲对时 3.1空操作延时及延时函数 序要求相对严格,尤其在慢速的M CS-51 下,指令的运 注意到DS 18B20 最小时隙除大于 1 μs 的外,最小 行在μs 级,读写时序在15 μs 的后一小部分,大约4 μ 的就是15 μs ,而数据的读或写也包含在这15 μs 中。 s ,不同批次的芯片会有少许差距。有的会允许你的时 由于定时器的延时要对定时器进行初始化,不易得到小 序有少许误差,有的则非常严格。 的延时。只能用于复位脉冲,即在480~960 μs 之间的 2 C语言编

文档评论(0)

1亿VIP精品文档

相关文档