- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)