交通灯(--已选题)_第1页
交通灯(--已选题)_第2页
交通灯(--已选题)_第3页
交通灯(--已选题)_第4页
交通灯(--已选题)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 设计思路一 设计思路 交通灯的变化规律 按照常规我们假设一个十字路口为东西南北走向 初始状态为状态 1 南 北方向绿灯通车 东西方向红灯 经过过一段时间 25S 转换状态 2 南北方 向绿灯闪几次转亮黄灯 延时 5S 东西方向仍然红灯 再转换到状态 3 东西 方向绿灯通车 南北方向红灯 过一段时间 25S 转换到状态 4 东西方向绿 灯闪几次转亮黄等 延时 5S 南北方向仍然红灯 最后循环至南北绿灯 东西 红灯 在这些状态下 有时钟倒数计时 二 硬件介绍二 硬件介绍 基础知识基础知识 交通灯控制器实例主要使用了 89C51 单片机的定时器 计数器 基础知识 主要包括交通灯的变化规律 定时器 计数器的概念 定时器 计数器的相关 寄存器 定时器 计数器的 4 种工作方式 以及定时器 计数器的变成 2 12 1 定时器定时器 计数器计数器 定时器 计数器是单片机中最常用 最重要的功能模块之一 本节通过交 通灯控制器实例来演示定时器的使用 并复习如何使用散转程序 首先介绍交通灯以及定时器 计数器的基础知识 接着介绍本实例的硬件 电路构成 然后逐步分析定时器的变成以及程序的全貌 最后总结一下本实例 的技巧与注意点 2 22 2 定时器 计数器的概念定时器 计数器的概念 89C51 单片机内有两个可编程的定时器 计数器 T0 T1 当定时器 计数器用作 定时器 时 每经过 1 个机器周期 12 个时钟周期 计数器加 1 当定时器 计数器用作 计数器 时 计数器在对应的外部输入管脚 T0 为 P3 4 引脚 T1 为 P3 5 引脚 上每发生一次 1 到 0 的跳变时加 1 使用 计数器 功 能时 外部输入每个机器周期被采样一次 当某一周期管脚状态采样为高电平 而下一周期采样为低电平时 计数器加 1 由于检测下降沿跳变需要两个机器 周期 24 个时钟周期 的时间 所以技术频率最大值只能为时钟周期的 1 24 计数器对外部输入信号的占空比并无限制 但为了保证给定的电平信号 在其改变之前至少被采样一次 外部输入信号必须至少保持一个完整的机器周 期 2 32 3 定时器 计数器的相关寄存器定时器 计数器的相关寄存器 与定时器 计数器相关的寄存器有定时器 计数器工作方式寄存器 TMOD 定 时器 计数器控制寄存器 TCON TCON 已经在 2 5 节受控输出实例中介绍过 因此 在本例中主要介绍 TMOD 寄存器 定时器 计数器工作方式寄存器 TMOD 字节地址 89H 不可进行位寻址 定时器 计数器工作方式寄存器 TMOD 的 8 位分为两组 高 4 位控制 T1 低 4 位控制 T0 TMOD 每一位的功能如下 GATE 门控位 GATE 0 仅由运行控制位 TRX X 0 1 1 来启动定时器 计数器运行 GATE 1 由运行控制位 TRX X 0 1 1 和外部中断引脚上的高电平共同来 启动定时器 计数器运行 C T 定时器模式和计数器模式选择位 C T 0 为定时器模式 C T 1 为计数器模式 M1 M0 工作方式选择位 M1 M0 的 4 中编码对应 4 种工作方式 对应关系见 表 2 10 2 42 4 定时器 计数器的定时器 计数器的 4 4 种工作方式种工作方式 定时器 计数器的 4 种工作方式下的逻辑结构如表所示 M1M2 工作方式 00 方式 0 为 13 位定时器 计数器 01 方式 1 为 16 位定时器 计数器 10 方式 2 为初值自动重装的 8 位定时器 计数器 11 方式 3 仅 T0 有效 将 T0 分为两个 8 位定时器 计数器 1 方式 0 定时器 计数器的工作方式 0 称为 13 位定时器 计数器的 它由 TLX 的低 5 位 和 TLX 的 8 位构成 13 位的计数器 此时 TLX 的高 3 位未使用 改工作方式是为 了和 48 系列单片机兼容而设计的一种工作方式 一般情况不使用方式 0 进行定 时 计数 方式 0 的控制方式与方式 1 完全相同 下面重点介绍方式 1 的控制 方式 2 方式 1 定时器 计数器的工作方式 1 称为 16 位定时器 计数器 它由 TLX 和 THX 构成 TLX 计数溢出向 THX 进位 THX 计数溢出置位 TCON 中溢出标志位 TFX GATE 位的状态定时器 计数器运行控制取决于 TRX 一个条件还是 TRX 和 INTX 引脚这两个条件 当 GATE 0 时 则只要 TRX 被置为 1 定时器 计数器即被允 许计数 定时器 计数器的计数控制仅由 TRX 的状态确定 TRX 1 计数 TRX 0 停止计数 当 GATE 1 时 定时器 计数器是否计数由 INTX 输入的电平和 TRX 的状态共同确定 当 TRX 1 且 INTX 1 时 才允许定时器 计数器计数 定时 器 计数器的计数控制由 TRX 和 INTX 两个条件控制 3 方式 2 定时器 计数器的工作方式 0 和方式 1 再计数溢出后 计数器的值为 0 需要 通过程序重新装入计数初值 定时器 计数器的工作方式 1 称为初值自动重装的 8 位定时器 计数器 在该 工作方式下 TLX 作为计数器 当 TLX 计数溢出时 在置 1 溢出标志 TFX 的同 时 还自动的将 THX 中的常数送至 TLX 使 TLX 从该常数开始重新计数 这种 工作方式可以省去用户软件中重装常数的程序 简化定时常数的计算方法 确 定计数初值 可以相当精确地确定定时时间 4 方式 3 工作方式 3 仅对定时器 计数器 0 有效 在该工作方式之下 定时器 计数器 的 0 被拆成 2 个独立的定时器 计数器 TL0 TF1 TL0 使用 T0 的状态控制 C T GATE TR0 INT0 而 TH0 被固定位一个 8 位定时器 不能作外部计数方 式 并使用定时器 计数器 1 的状态控制位 TR1 和 TF1 同时占用定时器 T1 的中断源 此时 定时器 计数器 1 可设定为方式 0 方式 1 和方式 2 作为串 行口的波特率发生器 2 52 5 定时器 计数器的编程定时器 计数器的编程 1 初始化 定时器 计数器的初始化编程包括以下几个部分 根据要求给定时器 计数器方式寄存器 TMOD 送一个方式控制字 以设定定 时器 计数器的工作方式 根据需要给 TH 和 TL 寄存器送初值 以确定需要的定时时间或计数的初值 根据需要给中断允许寄存器 IE 送中断控制字 以开放相应的中断和设定中 断优先级 给 TCON 寄存器送命令字以启动或禁止定时 计数器的运行 2 定时器 计数器初值的计算 计数器初值 设计算器的模值位 M 所需的计数值为 C 计数初值设定为 TC 则 TC M C M 等于 2 的 13 次方 16 次方 8 次方 定时器初值 设定时器的模值为 M 需要的定时时间为 T 定时器的初值设定为 TC 则 TC M T t M 等于 2 的 13 次方 16 次方 8 次方 三 软件程序设计三 软件程序设计 交通灯控制器实例使用了 89C51 单片机的定时器 计数器 首先分定时器 初始化 定时器中断服务程序两个部分介绍定时器计数器的软件编程 其次在 画出程序流程图的基础上编写软件程序 并给出完整的交通灯控制器程序实例 3 13 1 定时器初始化定时器初始化 为了使定时器时间准确 避免因为定时器重装而引起的累计误差 应将定 时器设置为初值自动装置的 8 位定时器 计数器 即定时器工作在工作方式 2 在 12MHz 晶振条件下 8 位定时器的最长定时时间是 0 256ms 为了方便计算取 定时时间为 0 25ms 所以 定时 0 5s 需要定时器中断 2000 次 下面计算定时器的初值 定时器初值 TC M T t 256 250 1 6 因此 TH0 06H TL0 06H 定时器初始化程序如下 定时器 T0 设定为工作方式 2 初始值为 06H 自 动重装入值为 06H T0 INIT MOV TMOD 00000010B 定时器 T0 工作方式 2 MOV TL0 06H 设定时器 T0 的初始值 MOV TH0 06H 设定时器 T0 的自动重装值 MOV TCON 00010000B 定时器 T0 的使能 SETB EA 中断允许总控制位使能 SETB ET0 T0 中断使能 RET 3 23 2 定时器中断服务程序定时器中断服务程序 T0 INIT DJNZ TIME COUNT0 T0 INT EXIT MOV TIME COUNT0 250 DJNZ TIME COUNT1 T0 INT EXIT MOV TIME COUNT1 8 SETB SECOND FLAG T0 INT EXIT RETI 每 0 25ms 定时器中断发生 程序跳转到中断服务程序 T0 INT 开始执行 中断服务程序每次将定时器中断计数变量减 1 但定时器中断计数变量为 0 时 0 5s 定时时间到 将位变量 SECOND FLAG 置为 1 定时器中断服务程序通过 RETI 指令返回 程序将跳转到进入中断前的断点继续执行 3 33 3 程序流程图程序流程图 程序较为简单 可以直接进行程序的编写 但本实例的程序流程比较复杂 在编写程序前 应当先画出程序流程图 程序流程图是描述程序运行流程的一 种图表 它不仅描绘程序从头到尾的运行顺序 也描述程序运行过程中的所有 可能 发生的状况 开始 初始化变量 0 5s 定时时间到 状态标志变量的值 时间计数 变量减 1 南北红 东西黄 时间计 数 4 状态变 量 5 南北绿 东西红 状态变 量 0 东 西 绿 灯 时间计数 变量减 1 时间计数 变量减 1 时间计数 变量减 1 时间计数 变量减 1 时间计数 变量减 1 状态变 量 3 南北红 东西绿 状态变 量 4 时间计 数 6 时间计 数 40 南 北 绿 灯 南北黄 东西红 状态变 量 2 时间计 数 40 时间计 数 4 时间计 数 6 状态标 志变量 1 时间计 数变量 为 0 时间 计数 变量 为 0 时间 计数 变量 为 0 时间 计数 变量 为 0 时间 计数 变量 为 0 时间计 数变量 为 0 四 电路图及仿真设计四 电路图及仿真设计 4 14 1设计完成原理图如下 在电路连接完成后 将写好的程序放入单片机 运行 4 24 2在初始状态南北绿灯 东西红灯 持续时间为 25s 4 34 3南北跳转到黄灯 5s 东西仍为红灯 在南北转换为红灯的同时 东西灯转换到绿灯持续 25s 东西转换为黄灯 持续 5s 南北红灯不变 如此循环 从而实现交通灯的作用 八 源程序八 源程序 include define uchar unsigned char define uint unsigned int uchar n 0 temp 0 uchar code segcode0 0 x5b 0 x06 0 x3f 0 x5b 0 x06 0 x3f 0 x5b 0 x06 0 x3f uchar code segcode1 0 x6f 0 x7f 0 x07 0 x7d 0 x6d 0 x66 0 x4f 0 x5b 0 x06 0 x3f uchar code segcode0 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f void delay x while x void timer0 interrupt 1 TH0 65536 50000 256 TL0 65536 50000 256 n temp temp 61 if n 20 temp n 0 if temp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论