微机原理实验交通灯控制实验22872.pdf
-课 程 设 计 课程设计名称:交通灯控制实验 专 业 班 级:学 生 姓 名:*:指 导 教 师:课程设计时间:微机原理 专业课程设计任务书 学生 专业班级 *题 目 交通灯控制实验 课题性质 工程设计 课题来源 自拟课题 指导教师 同组 主要容 L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。-任务要求 1:掌握并理解芯片 8255 和 8253 计时器工作原理 2:掌握并理解源程序和程序中的函数 3:熟悉 8255 部构造和与单片机的接口逻辑,掌握 8255 芯片的 3 种工作方式。4:了解单片机外围芯片 8255 的工作原理、初始化编程以及输入、输出程序设计方法 参考文献 微型计算机原理及运用 谭浩强 清华大学 16/32 位微机原理、汇编语言及接口技术涛 机械工业 微机接口技术应用 审查意见 指导教师签字:教研室主任签字:年 月 日 一:设计的目的和容 1 目的:通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。2 容:如图1,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东 西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。图 1 二:设计思想:在选择循环的时间上,教师上课时说过,长延时可以采用双层嵌套,-外层嵌套为 0FFFFH,层嵌套为 4000H,我在编程时外层送进了 0,相当于初值为 65536,层送进了 4000H。为了到达闪烁和延时的区别,我在编闪烁的程序时,给外层嵌套送入初值 3000H,层 0100H这是我通过实验的结果。人眼感觉闪烁的效果只是短延时的结果 此方案是通过并行接口芯片 8255A 和 8086 计算机的硬件连接,以及通过8253 延时的方法,来实现十字路口交通灯的模拟控制。如上图所示,红灯RLED,黄灯YLEDD和绿灯GLED分别接在8255 的 A,B,C 口的低四位端口,PA0,PA1,PA2,PA3 分别接南,东,北,西路口的红灯,B,C 口类推。8086 工作在最小模式,低八位端口 AD0AD7接到 8255 和 8253 的 D0D7,AD8AD15通过地址锁存器 8282,接到三八译码器,译码后分别连到 8255 和8253 的CS 片选端。8253 的三个门控端接+5V,CLOCK0 接由分频器产生的 1MHZ 的时钟脉冲,OUT0 接到 CLOCK1 和CLOCK2,OUT1 接到 8086 的 AD18,8086 通过检测此端口是否有高电平来判断是否 30S 定时到。OUT2 产生 1MHZ 方波通过或门和 8255 的 B 口共同控制黄灯的闪烁。8255 三个口全部工作在方式 0 既根本输入输出方式,红绿灯的转换由软件编程实现。三:设计方案与硬件连接 设 8253 各口地址分别为:设 8253 基地址即通道 0 地址为 04A0H;通道 1 为04A2H;通道 2 为 04A4H;命令控制口为 04A6H。黄灯闪烁的频率为 1HZ,所以想到由 8253 产生一个 1HZ 的方波,8255控制或门翻开的时间,在或门翻开的时间,8253 将方波信号输入或门使黄灯闪烁。-由于计数值最大为 65535,1MHZ/65536 的值远大于 2HZ,所以采用两个计数器级联的方式,8253 通道 0 的 clock0 输入由分频器产生的 1MHZ 时钟脉冲,工作在方式 3 即方波发生器方式,理论设计输出 周期为 0.01s 的方波。1MHZ的时钟脉冲其重复周期为 T=1/1MHZ=1s,因此通道 0 的计数初值为10000=2710H。由此方波分别作为 clock1和 clock2的输入时钟脉冲,所以通道 1 和通道 2 的输入时钟频率为 100HZ,通道 1 作计数器工作在方式 1,计数初值 3000=BB8H既30s,计数到则输出一个高电平到8255 的PA7口,8255将 A 口数据输入到 8086,8086 检测到高电平既完成30s 定时。通道 2 工作在方式 3 需输出一个 1HZ 的方波,通过一个或门和8086 共同控制黄灯的闪烁,因此也是工作在方波发生器方式,其计数初值为 100=64H,将黄灯的状态反应到 8055 的端口 PB7 和 PC7,同样输入到 8086,8086 通过两次检测端口状态可知黄灯的状态变化,计 9 次状态变化可完成 5 次闪烁。三个通道的门控信号都未用,均接5V 即可。四:程序流程图 开场 设置 8255A 口输出 C 口输出 南北路口绿灯亮,东西路口红灯亮 长延时 长延时 南北路口黄灯亮,东西路口红灯亮 南北路口红灯亮,东西路口绿灯亮 南北路口绿灯亮,东西路口红灯亮 是否有键按下?-五:程序分析 1:源程序 data segment io8255a equ28ah io8255b equ28bh portc1 db24h,44h,04h,44h,04h,44h,04h;六个灯可能 db81h,82h,80h,82h,80h,82h,80h;的状态数据 db0ffh;完毕标志 data ends code segment assumecs:code,ds:data start:mova*,data movds,a*movd*,io8255b moval,90h outd*,al;设置8255为C口输出 movd*,io8255a re_on:movb*,0 on:moval,portc1b*cmpal,0ffh 返回 DOS-jz re_on outd*,al;点亮相应的灯 incb*movc*,200;参数赋初值 testal,21h;是否有绿灯亮 jz de1 ;没有,短延时 movc*,2000;有,长延时 de1:movdi,9000;di赋初值9000 de0:decdi;减1计数 jnz de0 ;di不为0 loop de1 pushd*movah,06h movdl,0ffh int21h popd*jz on ;没有,转到on e*it:movah,4ch;返回 int21h code ends end start 可通过对c*的初始值设定来改变黄色灯亮的时间间隔来改变红灯亮的时间-长度。2:调用函数分析 中断-中断函数简介 1、EnableIntr;语法:BOOL EnableIntr();功能描述:将微机实验装置的中断输入设为有效,执行此函数后,PL*9054将承受微机 实验装置上的中断请求,然后根据该请求申请一个PCI中断。参数:无 返回值:如果成功,则返回True,否则返回False 备注:应用程序在调用该函数之前,必须先调用Startup函数。2、DisableIntr;语法:BOOL DisableIntr();功能描述:将微机实验装置的中断输入设为无效,执行此函数后,PL*9054将不相应微 机实验装置上的中断请求 参数:无 返回值:如果成功,则返回True,否则返回False 备注:应用程序在调用该函数之前,必须先调用Startup函数。3、RegisterISR;语法:BOOL RegisterISR(ISR_ROUTINE pfuncISR);功能描述:注册中断效劳程序,当微机实验箱上的中断输入有效时,且实验箱上-的中断 输入使能,程序将会执行该中断效劳程序。参数:pfuncISR:该参数即为中断效劳函数名 返回值:如果成功,则返回True,否则返回False 备注:应用程序在调用该函数之前,必须先调用 Startup 函数 六:调试记录及结果分析 1:本电路没有设置显示倒计时的七段 LED 数码管,如果应用到街道上,不利于司机、行人把握 2:在上机调试中发现,由于此软件延时的时间均为估算时间,不是特别准确,对于交通要求特别高的地方不宜采用。如果是放到一个大的交通灯系统中,会影响到各个交通灯的运行时间,可能整个系统对交通的指挥调度会大大偏离理论计算,不能有效地防止和消除交通堵塞现象;3:当出现紧急情况,在特种车如消防车、救护车正要通过时,这种编程方式就不能完成;但是,可以看到以上方案的一般性,只要将程序里的数据排列或规律稍加修改就可应用到任何一个路口的*一个方向上的交通灯上了,可移植性很强。七:参考资料 微型计算机原理及运用 谭浩强 清华大学 16/32 位微机原理、汇编语言及接口技术 涛 机械工业 微机接口技术应用 八:芯片资料 18255-8255 的部构造 8255A 是一个 40 引脚的双列直插式集成电路芯片 按功能可把 8255A 分为三个逻辑电路局部,即:口电路、总线接口电路和控制逻辑电路。1口电路 8255A 共有三个 8 位口,其中 A 口和 B 口是单纯的数据口,供数据 I/O使用。而 C 口则既可以作数据口,又可以作控制口使用,用于实现 A 口和 B 口的控制功能。数据传送中 A 口所需的控制信号由 C 口高位局部PC7PC4提供,因此把A 口和 C 口高位局部合在一起称之为 A 组;同样理由把 B 口和 C 口低位局部PC3PC0合在一起称之为 B 组。2总线接口电路 总线接口电路用于实现 8255A 和单片微机的信号连接。其中包括:a数据总线缓冲器 数据总线缓冲器为 8 位双向三态缓冲器,可直接和 80C51 的数据线相连,与 I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进展传送。b读/写控制逻辑 与读写有关的控制信号有 CS片选信号低电平有效 RD读信号低电平有效 WR写信号低电平有效 A0、A1端口选择信号。8255A 共有四个可寻址的端口即 A 口、B 口、C-口和控制存放器,用二位地址编码即可实现选择。参见下表。RESET复位信号高电平有效。复位之后,控制存放器去除,各端口被置为输入方式。读写控制逻辑用于实现 8255A 的硬件管理:芯片的选择,口的寻址以及规定各端口和单片微机之间的数据传送方向。c控制逻辑电路 控制逻辑电路包括 A 组控制和 B 组控制,合在一起构成 8 位控制存放器。用于存放各口的工作方式控制字 8255A 工作方式及数据 I/O 操作 18255A 的工作方式 8255A 共有三种工作方式,即方式 0、方式 1、方式 2.a方式 0 根本输入/输出方式 方式 0 下,可供使用的是两个 8 位口A 口和 B 口及两个 4 位口C口高 4 位局部和低 4 位局部。四个口可以是输入和输出的任何组合。方式 0 适用于无条件数据传送,也可以把 C 口的*一位作为状态位,实现查询方式的数据传送。b方式 1 选通输入/输出方式 A 口和 B 口分别用于数据的输入/输出。而 C 口则作为数据传送的联络信号。具体定义见表 72。可见 A 口和 B 口的联络信号都是三个,如果 A或 B 只有一个口按方式 1 使用,则剩下的另外 13 位口线仍然可按方式 0 使用。如果两个口都按方式 1 使用,则还剩下 2 位口线,这两位口线仍然可以进展位状态的输入输出。-方式 1 适用于查询或中断方式的数据输入/输出。c方式 2 双向数据传送方式 只有 A 口才能选择这种工作方式,这时 A 口既能输入数据又能输出数据。在这种方式下需使用 C 口的五位线作控制线,信号定义如表 72 所示。方式 2 适用于查询或中断方式的双向数据传送。如果把 A 口置于方式 2 下,则 B 口只能工作于方式 0.2数据输入操作 用于输入操作的联络信号有:STB(StroBe)选通脉冲,输入,低电平有效。当外设送来 STB 信号时,输入数据装入 8255A 的锁存器。IBF(Input Buffer Full)输入缓冲器满信号,输出,高电平有效。IBF 信号有效,说明数据已装入锁存器,因此它是一个状态信号。INTR(INTerrupt Request)中断请求信号,高电平有效,当 IBF 数据输入过程:当外设准备好数据输入后,发出信号,输入的数据送入缓冲器。然后IBF 信号有效。如使用查询方式,则 IBF 即作为状态信号供查询使用;如使用中断方式,当信号由低变高时,产生 INTR 信号,向单片微机发出中断。单片微机在响应中断后执行中断效劳程序时读入数据,并使 INTR 信号变低,同时也使 IBF 信号同时变低。以通知外设准备下一次数据输入。3数据输出操作 用于数据输出操作的联络信号有:ACK(ACKnowledge)外设响应信号输入,低电平有效。当外设取走输出数据,并处理完毕后向单片微机发回的响应信号为高,信号-由低变高(后沿)时,中断请求信号有效。向单片微机发出中断请求。OBFOutput Buffer Full输出缓冲器满信号,输出,低电平有效。当单片微机把输出数据写入 8255A 锁存器后,该信号有效,并送去启动外设以接收数据。INTR中断请求信号,输出,高电平有效。数据输出过程:外设接收并处理完一组数据后,发回 ACK 信号。该信号使 OBF 变高,说明输出缓冲器已空。如使用查询方式,则 OBF 可作为状态信号供查询使用;如使用中断方式,则当 ACK 信号完毕时,INTR 有效,向单片微机发出中断请求。在中断效劳过程中,把下一个输出数据写入8255A的输出缓冲器。写入后 OBF 有效,说明输出数据已到,并以此信号启动外设工作,取走并处理 8255A 中的输出数据。28253 定时计数器 8253 部可分为 6 个模块,每个模块的功能如下:1.数据总线缓冲器及数据总线 D0D7 2.读/写控制逻辑及控制引脚 CS*A1 A0 I/O 地址 读操作 RD*写操作 WR*0 0 0 0 0 1 0 1 0 0 1 1 40H 41H 42H 43H 读计数器 0 读计数器 1 读计数器 2 无操作 写计数器 0 写计数器 1 写计数器 2 写控制字-3.控制字存放器 在初始化编程时,CPU 写入方式控制字到控制字存放器中,用以选择计数通道及其相应的工作方式。8253 的控制字:8253 的工作方式也是有控制字来决定,其控制字意义如下 4.计数通道 0、计数通道 1、计数通道 2 3 个计数通道部构造完全一样。每个计数通道都由一个 16 位计数初值存放器、一个 16 位减法计数器和一个 16 位计数值锁存器组成 计数初值存于预置存放器,在计数过程中,减法计数器的值不断递减,而预置存放器中的预置不变。输出锁存器用于写入锁存命令时,锁定当前计数值。计数器的 3 个引脚说明:1CLK 时钟输入信号 在计数过程中,此引脚上每输入一个时钟信号下降沿,计数器的计数值减 1 2 GATE 门控输入信号 控制计数器工作,可分成电平控制和上升沿控制两种类型 3 OUT 计数器输出信号 当一次计数过程完毕计数值减为 0,OUT 引脚上将产生一个输出信号 8253 有 6 种工作方式,由方式控制字确定 区分这 6 种工作方式的主要标志由 3 点:一是输出波形不同;二是启动计数器的触发方式不同;三是计数过程中门控信号 GATE 对计数器操作的控制不同。1.方式 0-低电平输出GATE 信号上升沿继续计数 2方式 1-低电平输出GATE 信号上升沿重新计数-3方式 2-周期性脉冲输出 4方式 3-周期性方波输出 OUT 输出低电平,装入计数值 n 后,OUT 立即跳变为高电平。如果当前 GATE为高电平,则立即开场减1计数,OUT 保持为高电平,假设 n 为偶数,则当计数值减到 n/2 时,OUT 跳变为低电平,一直保持到计数值为0,系统才重新置入计数值 n,实现循环计数。这时 OUT 端输出周期为 nCLK 周期,占空比为 1:1 的方波序列:假设 n 为奇数,则 OUT 端输出周期为 nCLK 周期,占空比(n+1)/2:(n-1)/2 的近似方波序列。5方式 4-单次负脉冲输出软件触发 6方式 5-单次负脉冲输出硬件触发 每种工作方式的设置过程类似:设定工作方式 设定计数初值 硬件启动 计数初值进入减 1 计数器 每输入一个时钟计数器减 1 的计数过程 计数过程完毕 九:总结 这个实验是与现实生活是比拟接近,通过这个实验,我大概知道了交通灯的工作原理,也加深了以前学的知识,更进一步认识了 8255、8253 芯片,并且掌握了对并行接口的 使用。交通灯控制设计方面的东西,我了解的较少,只是大概的知道 8255 可编程并行接-口芯片和 8253 可以用来定时。刚开场只是把实验箱的线连接,原理什么都不知道,只好大量的查资料像怎么样使用 8253 来定时及输出一定频率的脉冲,怎么样用 8282 这个地址锁存器来存储高位地址和低位地址以及交通有哪些规则,后来终于弄懂了,并且可以修改代码来得到自己需要的结果,对微机原理越加有兴趣,也想更深入的了解一些有关于这方面的知识。