第九节单片机实验板实现交通.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九节 利用单片机实验板实现交通灯控制系统 1. C51单片机系统的硬件资源 2. 城市交通信号控制系统 设计要求 在城市道路十字交叉路口,设计一个交通信号灯控制系统; 主干道通车时间1~60s,可任意设置; 黄灯亮时间1~60s,可任意设置; 采用倒计时的方式,用两位十进制数字显示红、绿、黄信号灯亮的倒计时时间; 可以暂停交通灯系统的运行,暂停时红、绿、黄信号灯信号灯全亮。 3. 城市交通信号控制系统 硬件组成分析 交通信号灯 倒计时时间显示 输入 计时器 控制器 存储器 4. 硬件结构框图 5、城市交通信号控制系统 程序设计 利用一般的方式实现程序设计; 利用对象描述和状态机实现程序设计; 利用RTXTiny51系统实现程序设计。 利用定时器T0进行1秒的计时,定时中断程序的流程图如下: 键盘扫描流程图: 5.2 利用对象描述和状态机实现程序设计 对象描述 交通灯系统的设计实际上是对几个对象的行为进行描述,这些对象包括: 键盘、信号灯、计时器、定时设置器、控制器。 状态实现 每个对象处于不同状态,在不同状态下有不同的行为。 对象描述 1.类型定义了一件事物的抽象特点。通常来说,类型定义了事物的属性和它可以做到的(它的行为)。举例来说,“花”这个类型会包含花的一切基础特征,例如它的颜色、香气和开花的能力。 2. 对象(Object)是类型的实例。可以通过对象的属性和方法访问该对象。 状态描述 信号灯的状态图: 信号灯的数据结构: 计时器的状态图: 计时器的数据结构 定时设置器的状态图 定时设置器的数据结构 控制器的状态图 键盘扫描程序的流程图 对象之间的通信 初始化函数 利用RTXTiny51操作系统实现交通灯控制器 RTX51简介 许多微处理器应用程序要求同时执行两个工作或任务,对于这样的应用程序,一个实时操作系统。RTOS 允许灵活的分配系统资源(中央处理器、存储器等等)给各个任务。 RTX51是一个容易使用的强大的实时操作系统 ,RTX51可以运行于所有的8051派生机型。使用RTX51操作系统需要头文件rtx51tny.h。 时间片轮转调度法 Rtx51中的任务并不是并行执行的,而是按时间片轮流执行的。 可利用的中央处理器时间被分成时间片,由 RTX51分配一个时间片给每个任务。 每个任务允许在一段预定时间内执行,然后rtx51切换到另一准备运行的任务并且允许这个任务执行片刻。 时间片非常短。通常为几个毫秒 因此它表现得如同各个任务是同时地执行。 任务 RTX51任务定义 os_create_task os_delete_task 任务切换 RTX51事件 即使是在一个任务的时间片到达前,你也可以使用 os_wait函数通知RTX51中止正在运行的当前任务,等待一指定事件的发生,这时可以让另一个任务开始执行。 直到这个指定事件发生后,等待该事件的任务才继续执行。 RTX51的等待功能支持以下事件 os_wait函数停止当前任务并等待一个或几个事件;比如一个一个超时或从一个任务发送给另一个任务的信号。参数event_sel确定事件或要等待的事件。 并且可以综合使用下列常数: 返回值:当一个指定的事件发生时,任务允许运行。运行被恢复并且 os_wait函数返回一个用于识别重新启动任务的事件的识别常数。可能的返回值是: RTX51的信号 os_send_signal os_clear_signal 交通灯控制器任务图 任务编写举例: 运行 等待 建立 注销 事件发生 实时或多任务应用程序由一个或多个完成具体的操作的任务组成, RTX51 Tiny允许最多 16个任务。 任务是使用下面的格式定义的返回质类型和参数列表为空的 C语言函数 void func (void) _task_ num num是一个从 0到 15的任务标识号 例子 void job0 (void) _task_ 0 { while (1) { counter0++; /* increment counter */ } } 定义函数 job0为任务号0。 #include <rtx51tny.h> char os_create_task (unsigned char task_id); /* ID of task to start */ 文字说明| os_create_task函数启动使用用task_id表示的任务号定义的任务函数。如果任务成功地开始os_create_task 函数的返回值为0, 如果任务不能被开始,或如果没有使用规定任务号定义的任务返回值为-1。 例:#include <rtx51tny.h> #include <stdio.h> /* for

文档评论(0)

神话 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5203223011000000

1亿VIP精品文档

相关文档