时间触发系统.pptVIP

  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文档。上传文档
查看更多
时间触发系统

常用操作系统 非实时操作系统 Windows、Linux、WinCE等 实时操作系统 Vxworks(时间片轮番调度法+优先级调度)、Uc/OS(基于优先级)、Ecos,前/后台系统。 Lineo公司的RT-Linux(将Linux作为一个任务); MontaVista(修改Linux的内核); 适应于单片机的OS(调度器) 前后台OS和时间触发OS; 前/后台系统(超级循环系统) 应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可看成后台行为。中断服务程序处理异步事件,可看成前台行为。 时间相关性很强的关键操作一定是靠中断服务来保证。 超级循环的评价 优点: (1)简单,因此易于理解; (2)几乎不占用系统存储器或CPU资源。 考虑从一系列不同的嵌入式项目汇集的许多要求(前后顺序无特别要求) 必须以0.5S间隔测量汽车的当前速度。 每秒必须刷新显示40次。 计算出来的新的油门位置必须每隔0.5S输出 必须每秒执行20次时间-频率变换。 如果已经发生报警,则必须在20分钟之后关掉。 当前门被打开时,如果在30S内没有输入正确的口令,则必须发出警报。 必须每秒采集1000次发动机振动数据。 必须每秒执行20次频域数据分类。 必须每200ms扫描一次键盘。 主机节点必须每秒跟所以其它节点通信一次。 必须每0.5S计算一次新的油门位置。 传感器必须每秒采集一次。 总结上面的任务: 周期性任务,如每100ms执行一次。 单次任务,如在20ms的延迟后执行一次。 Void main(void) { Init_System(); while(1) { X(); //10ms Delay_190ms(); } } 只有满足以下条件才能工作: (1)知道任务X的准确的执行时间。 (2)这个运行时间永不改变。 解决上述问题的一个方案:使用定时器的中断,在一定的时刻调用函数。 //标准89C52芯片 #include”reg52.h” #define INERRUPT_Timer_1_Overflow 3 bit LED_state_G; Sbit LED_pin=p1^7; void main(void) { Timer_1_Init(); LED_Flash_Init(); EA=1; While(1) { PCON |=0x01; } }//void main(void) end void Timer_1_Init(void) { TMOD =0x0F;TMOD |=0x10; Timer_1_Manual_Reload(); ET1=1; }// void Timer_1_Init(void) end void Timer_1_Manual_Relaod(void) { TR1=0; TL1=0x3D;TH1=0x5D; TR1=1; }//…end void LED_Flash_Init(void) { LED_state_G=0; }//end Void LED_Flash_Updata(void)INTERRUPT_Timer_1_overflow { Timer_1_Manual_Reload(); If(LED_state_G==1) {LED_state_G=0;LED_pin=0;} else {LED_state_G=1;LED_pin=1;} }//end 例如:可能需要每隔1ms从ADC读取输入,每隔200ms读取一个或多个开关状态,每隔3ms刷新一次LCD显示。 根据上面的分析,使用三个定时器。 #include”reg52.h” #define INERRUPT_Timer_0_Overflow 1 #define INERRUPT_Timer_1_Overflow 3 #define INERRUPT_Timer_2_Overflow 5 void Timer_0_Init(void); void Timer_1_Init(void); void Timer_2_Init(void); void main(void) { void Timer_0_Init(void); void Timer_1_Init(void); void Timer_2_Init(void); EA=1;while(1); }//…end void Timer_0_Init(void) {//略} void Timer_1_Init(

文档评论(0)

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

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档