单片机经验总结4几个重要模块.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C51编程中几个重要模块 Keil C51常用功能模块使用说明 2001/11/19 说明 本文档包括单片机系统中常用到的时钟中 断、通讯及键盘扫描等模块(见所附源程序) 的说明。这些模块使用前后台系统模型。为 达到最大的灵活性,需要在用户工程中定 义config, h文件,在其中定义各模块可选 参数的设置,而不是直接更改源代码。 这些可选内容大部分为宏定义,如果不定义 宏相应的功能在编译时被屏蔽,不会增加代 码长度。具体可选内容见各模块中的说明。 在Config, h文件中还要包含一个单片机硬 件的资源头文件。 各模块使用了定义在Common, h中的一些数 据类型。如:BIT (bit) BYTE (unsigned char) 等, 等, 具体请参见源程序。 时钟模块 在单片机软件设计中,时钟是重要资 源,为了充分利用时钟资源,故设计本时 钟模块。本模块使用定时器0,在完成用户 指定功能的同时, 指定功能的同时, 还能够自动处理一些其 它模块中与时钟相关的信息。 时钟模块由声明文件Timer, h以及实现 文件Timer, c组成。 用户应该在Config, h中定义宏 TIMER-RELOAD来设定定时器0的重装载初 值。推荐的定时器0的中断时间大于1毫秒。 在程序的初始化阶段调用时钟模块的 初始化函数Ini tTimerModule ()之后,就可 以使用时钟模块所以支持的各种功能。 以使用时钟模块所以支持的各种功能。 描述如下: 延时:当用户需要进行一定时间的延时时, 可以通过调用Delay ()来进行,参数为时钟 中断的次数。如时钟中断周期为1ms,想进 行100ms的延时,则可以调用Delay (100)。 注意: 如果延时的绝对时间小于时钟中断的周期, 则不能够用本方法做到延时。 定时:当程序中需要使用定时功能时,如等 待某外部事件,如果在一定时间内发生则继 续执行,如果在这段时间内发生,则认为出 现错误,转向错误处理机制。 在此推荐一种编程模式,但用户可以用自己 认为更合理的方式处理此类问题。 这里简单说明一下关于阻塞式函数及非阻 塞式函数。简单说,阻塞式函数就是当检测 完成条件,如果不能够完成则等待,如: void CheckSomething () // gbitSuccessFlag is a global variable while (gbitSuccessFlag == FALSE) // do nothing but waiting } 可以看到,当bitSuccessFlag没有被设置 为TRUE时,函数保持等待状态不返回,这 样就是阻塞式的函数。 另外一种情况: BIT CheckSomething () if (gbitSuccessFlag == TRUE) // return TRUE; } return FALSE; } 在这里,如果所检测的事件有没有完成,函 数进行检测之后,立刻返回,通过返回值报 告完成情况,如果没有完成,则等待调用者 分配再次执行的机会。这样的函数就是非阻 塞函数。 在应用定时功能时,首先要将检测函数定义 成非阻塞函数。如上面的第二个版本的 CheckSomething0 然后下面模式: BIT bitDone = FALSE; ResetClock (); // clear timer interrupt times counter while (GetClock () MAX-WAITINGTIME) { if (CheckSomething () == TRUE) bitDone = TRUE; break; } } if (bitDone == FALSE) { // process time out } 或者简单写成: BIT bitDone = FALSE; ResetClock (); while (GetClockO MAX-WAITINGTIME (bitDone = CheckSomething)); if (bitDone == FLASE) { // ... } 软件看门狗:实现具有局限性的看门狗功 能。在程序中合适的地方加入对软件看门狗 的复位函数 ResetWatchDog (),在 Config, h 中加入宏 TIMER_WATCHDOGTIMEOUT。当程序 运行时,如果在发生 TIMER-WATCHDOGTIMEOUT次时钟中断之内没 有复位软件看门狗,则系统复位。 注意: 如果没有加入 TIMER-WATCHDOGTIMEOUT 宏, 程序中的ResetWatchDog没有任何用处,不 用删除。 如果系统不能实现时钟中断,则软件看门狗 也同时失去功能。 目前版本的的时钟模块的复位功能齐不是 完全复位,主要表现在当

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档