《硬件课程设计》实验报告—交通灯指挥系统设计_第1页
《硬件课程设计》实验报告—交通灯指挥系统设计_第2页
《硬件课程设计》实验报告—交通灯指挥系统设计_第3页
《硬件课程设计》实验报告—交通灯指挥系统设计_第4页
《硬件课程设计》实验报告—交通灯指挥系统设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、硬件课程设计交通灯指挥系统设计 实验报告 成员:(信安08-3班)(信安08-2班)指导老师: 日期:2010-12-31交通灯指挥系统课程设计一、 需求分析红绿交通灯是我们日常生活经常见到也是必不可少的,随着城市社会经济的发展,城市道路交通供给和需求的矛盾日益突出,并引发很多交通问题。当今,红绿灯安装在各个交通路口上,已经成为疏导交通车辆最常见和最有效的手段。1968年,联合国道路交通和道路标志信号协定对各种信号灯的含义作了规定。绿灯时通行信号,面对绿灯的车辆可以直行、左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。面对

2、黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。我们设计的交通灯就是依据上述思路控制十字路口南北东西四个方向车辆通行的。二、 设计思路通过可编程并行接口芯片8255a和可编程定时器/计数器芯片8253以及中断控制器8279实现十字路口交通灯的模拟控制,进一步掌握并行接口和定时器/计时器以及数码管控制的实际应用。三、 具体分工我们小组共有两个人,分别是柴婷婷(信安08-3班)、孙国营(信安08-2班)。柴婷婷主要负责软件部分和最终报告的形成,孙国营主要负责查找参考资料、硬件部分、芯片连接以及程序调试。四、 实验内容编写一个交通灯控制程序,实现东西路口与南北路口状

3、态灯的转换。其中红灯亮,表示该道路禁止通行;黄灯亮表示该道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通行;绿灯表示该道路 允许通行。十字路口交通灯控制图简化图五、 技术指示1、用实验箱中提供的发光二极管(红绿黄各两支、共六支)作为南北路口(红绿黄各一支)和东西路口(红绿黄各一支)的模拟交通灯。2、用可编程并行接口芯片8255a控制模拟交通灯的亮与灭和数码管的倒计时显示。3、用可编程定时器/计数器芯片8253实现模拟交通灯亮与灭的时间延迟的控制。4、用数码管作为模拟交通灯亮与灭的时间延迟控制的倒计时显示。5、用汇编语言编程使六个灯按交通灯变化规律“亮/灭”。交通灯变化要求:(1)南北灯绿

4、,东西红灯同时亮30秒,且数码管30秒倒计时显示。(2)南北黄灯闪烁5秒,同时东西路红灯继续亮,且数码管5秒倒计时显示。(3)南北路红灯、东西路绿灯同时亮30秒,且数码管30秒倒计时显示。六、实验原理 通过8253计数,每1ms刷新一次,cx计数不为零,计数值减1,刷新1000次,持续1秒钟(其中输入始终脉冲为1khz)。pa7pa0控制二极管的亮灭,pb7pb0控制数码管的显示。通过设置控制字,使8255a的c口高四位输出,低四位输入。pc4和pc5对数码管进行位控,让两位十进制数同时显示。在黄灯显示的时候,通过判断使黄灯亮时灭,灭时亮,以此设置黄灯闪烁。8255a芯片引脚功能reset:复

5、位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有i/o口均被置成输入方式。 cs:芯片选择信号线,当这个输入引脚为低电平时,即/cs=0时,表示芯片被选中,允许8255与cpu进行通讯;/cs=1时,8255无法与cpu做数据传输. rd:读信号线,当这个输入引脚为低电平时,即/rd=0且/cs=0时,允许8255通过数据总线向cpu发送数据或状态信息,即cpu从8255读取信息或数据。 wr:写入信号,当这个输入引脚为低电平时,即/wr=0且/cs=0时,允许cpu将数据或控制字写入8255。 d0d7:三态双向数据总线,8255与cpu数据传送的通道,当cp

6、u 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 pa0pa7:端口a输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 pb0pb7:端口b输入输出线,一个8位的i/o锁存器, 一个8位的输入输出缓冲器。 pc0pc7:端口c输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口c可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口a和端口b配合使用,可作为控制信号输出或状态信号输入端口。' a0,a1:地址选择线,用来选择8255的pa口,pb口,pc口

7、和控制寄存器. 当a0=0,a1=0时,pa口被选择; 当a0=0,a1=1时,pb口被选择; 当a0=1,a1=0时,pc口被选择; 当a0=1.a1=1时,控制寄存器被选择.8253芯片 工作原理8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。 一、8253内部结构 8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。 1.数据总线缓冲器 数据总线缓冲器与系统总线连接,8位双向,与cpu交换信息的通道。这是8253与cpu之间的数据接口,它由8位双向三态缓冲存储器构成,是cpu与

8、8253之间交换信息的必经之路。 2.读写控制 读写控制分别连接系统的ior#和iow#, 由cpu控制着访问8253的内部通道。接收cpu送入的读写控制信号, 并完成对芯片内部各功能部件的控制功能, 因此, 它实际上是8253芯片内部的控制器。a1a0:端口选择信号,由cpu输入。8253内部有3个独立的通道和一个控制字寄存器, 它们构成8253芯片的4个端口,cpu可对3个通道进行读写操作3对控制字寄存器进行写操作。 这4个端口地址由最低2位地址码a1a0来选择。如表9.3.1所示。 3.通道选择 (1) cs#片选信号,由cpu输入,低电平有效,通常由端口地址的高位地址译码形成。 (2)

9、 rd#、wr#读写控制命令,由cpu输入, 低电平有效。rd#效时,cpu读取由a1a0所选定的通道内计数器的内容。wr#有效时,cpu将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。cpu对8253的读写操作如表9.3.2所示。 4.计数通道02 每个计数通道内含1个16位的初值寄存器、减1计数器和1个16位的(输出)锁存器。8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(bcd码)计数。采用二进制计数时, 最大计数值是ffffh, 采用bcd码计数时。 最大计数值是9999。与此计数器相对应, 每个通道内设有一个16

10、位计数值锁存器。必要时可用来锁存计数值。 当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从clk端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。 out端将有输出。表示计数次数到。当某个通道用作定时器时。 由clk输入一定频率的时钟脉冲。根据要求定时的时间长短确定所需的计数值。并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。out将有输出,表示定时时间到。允许从clk输入的时钟频在12mhz范围内。因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。

11、 而后者是内时钟脉冲进行减“1”计数。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到: 定时系数需要定时的时间时钟脉冲周期 设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式; 计数/定时:向通道写入计数值,启动计数操作; 读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。 计数到:当计数器减1为0时,通过引脚outi向外输出“到”的脉冲信号。 计数初值输入存放在初值寄存器中,

12、计数开始或重装入时被复制到计数器中。 锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。 5.方式选择控制字 二、8253的通道工作方式 8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。8253的各种工作方式如下: 1.方式0:计数结束则中断 工作方式0被称为计数结束中断方式,它的定时波形如图9.3.4所示。当任一通道被定义为工作方式0时, outi输出为低电平;若门控信号gate为高电平,当cpu利用输出指令向该通道写入计数值wr#有效时,outi仍保持低电平,然后计数器开始减“1”计数, 直到

13、计数值为“0”,此刻outi将输出由低电平向高电平跳变,可用它向cpu发出中断请求,outi端输出的高电平一直维持到下次再写入计数值为止。 在工作方式0情况下,门控信号gate用来控制减“1”计数操作是否进行。当gate=1时,允许减“1”计数;gate=0时,禁止减“1”计数; 计数值将保持gate有效时的数值不变, 待gate重新有效后,减“1”计数继续进行。 显然,利用工作方式0既可完成计数功能, 也可完成定时功能。当用作计数器时,应将要求计数的次数预置到计数器中,将要求计数的事件以脉冲方式从clki端输入, 由它对计数器进行减“1”计数,直到计数值为0,此刻outi输出正跳变, 表示计

14、数次数到。当用作定时器时,应把根据要求定时的时间和clki的周期计算出定时系数,预置到计数器中。从clki,输入的应是一定频率的时钟脉冲,由它对计数器进行减“1”计数, 定时时间从写入计数值开始,到计数值计到“0”为止,这时outi输出正跳变,表示定时时间到。 有一点需要说明,任一通道工作在方式0情况下, 计数器初值一次有效,经过一次计数或定时后如果需要继续完成计数或定时功能,必须重新写入计数器的初值。 2.方式1:单脉冲发生器 工作方式1被称作可编程单脉冲发生器,其定义波形如图9.3.5。进入这种工作方式, cpu装入计数值n后outi输出高电平, 不管此时的gate输入是高电平还是低电平,

15、 都不开始减“1”计数,必须等到gate由低电平向高电平跳变形成一个上升沿后,计数过程才会开始。与此同时,outi输出由高电平向低电平跳变,形成了输出单脉冲的前沿,待计数值计到“0”, outi输出由低电平向高电平跳变,形成输出单脉冲的后沿, 因此,由方式l所能输出单脉冲的宽度为clki周期的n倍。 如果在减“1”计数过程中, gate由高电平跳变为低电乎,这并不影响计数过程,仍继续计数;但若重新遇到gate的上升沿,则从初值开始重新计数, 其效果会使输出的单脉冲加宽,如教材图9-22(b)中的第2个单脉冲。 这种工作方式下,计数值也是一次有效,每输入一次计数值,只产生一个负极性单脉冲。 3.

16、方式2:速率波发生器 工作方式2被称作速率波发生器,其定时波形如图9.3.6所示。进入这种工作方式, outi输出高电平,装入计数值n后如果gate为高电平,则立即开始计数,outi保持为高电平不变; 待计数值减到“1”和“0”之间, outi将输出宽度为一个clki周期的负脉冲,计数值为“0”时,自动重新装入计数初值n,实现循环计数,outi将输出一定频率的负脉冲序列, 其脉冲宽度固定为一个clki周期, 重复周期为clki周期的n倍。 如果在减“1”计数过程中,gate变为无效(输入0电平),则暂停减“1”计数,待gate恢复有效后,从初值n开始重新计数。这样会改变输出脉冲的速率。 如果在

17、操作过程中要求改变输出脉冲的速率,cpu可在任何时候,重新写人新的计数值, 它不会影响正在进行的减“1”计数过程,而是从下一个计数操作用期开始按新的计数值改变输出脉冲的速率。 4.方式3:方波发生器 工作方式3被称作方波发生器,其定时波型如图9.3.7所示。任一通道工作在方式3, 只在计数值n为偶数,则可输出重复周期为n、占空比为1:1的方波。 进入工作方式3,outi输出低电平, 装入计数值后,outi立即跳变为高电平。如果当gate为高电平, 则立即开始减“1”计数,outi保持为高电平,若n为偶数,则当计数值减到n/2时,outi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入

18、计数值n,实现循环计数。这时outi端输出的周期为n×clki周期,占空比为1:1的方波序列; 若n为奇数, 则outi端输出周期为n×clki周期,占空比为(n+1)/2)/(n-1)/2)的近似方波序列。 如果在操作过程中, gate变为无效,则暂停减“1”计数过程,直到gate再次有效,重新从初值n开始减“l”计数。 如果要求改变输出方波的速率, 则cpu可在任何时候重新装入新的计数初值n,并从下一个计数操作周期开始改变输出方波的速率。 5.方式4:软件触发方式计数 工作方式4被称作软件触发方式,其定时波形如图9.3.8所示。进入工作方式4,outi输出高电平。 装入

19、计数值n后, 如果gate为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,outi输出宽度为一个clki周期的负脉冲。由软件装入的计数值只有一次有效,如果要继续操作, 必须重新置入计数初值n。如果在操作的过程中,gate变为无效,则停止减“1”计数, 到gate再次有效时,重新从初值开始减“1”计数。 显然,利用这种工作方式可以完成定时功能,定时时间从装入计数值n开始,则outi输出负脉冲(表示定时时间到),其定时时间n×clk周期。 这种工作方式也可完成计数功能,它要求计数的事件以脉冲的方式从clki输入,将计数次数作为计数初值装入后,由clki端输入的计数脉冲进行减“

20、1”计数,直到计数值为“0”,由outt端输出负脉冲(表示计数次数到)。 当然也可利用outj向cfu发出中断请求。 因此工作方式4与工作方式0很相似,只是方式0在outi端输出正阶跃信号、方式4在outi端输出负脉冲信号。 6.方式5:硬件触发方式计数 工作方式5被称为硬件触发方式,其定时波形如图9.3.9所示。进入工作方式5, outi输出高电平, 硬件触发信号由gate端引入。 因此,开始时gate应输入为0, 装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由gate端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”, outi将输出负脉冲,其宽度固定为一个c

21、lki周期,表示定时时间到或计数次数到。 这种工作方式下,当计数值计到“0”后, 系统将自动重新装入计数值n,但并不开始计数, 一定要等到由gate端引入的正跳沿,才会开始进行减“1”计数, 因此这是一种完全由gate端引入的触发信号控制下的计数或定时功能。如果由clki输入的是一定频率的时钟脉冲,那么可完成定时功能,定时时间从gate上升沿开始,到outi端输出负脉冲结束。如果从clki端输入的是要求计数的事件,则可完成计数功能,计数过程从gate上升沿开始,到outi输出负脉冲结束。gate可由外部电路或控制现场产生,故硬件触发方式由此而得名。 如果需要改变计数初值, cpu可在任何时候用

22、输出指令装入新的计数初值m,它将不影响正在进行的操作过程, 而是到下一个计数操作周期才会按新的计数值进行操作。 从上述各工作方式可看出,gate作为各通道的门控信号,对于各种不同的工作方式,它所起的作用各不相同。在8253的应用中,必须正确使用gate信号,才能保证各通道的正常操作。 7.读取计数器的当前值 直接读计数器:输出锁存器在非锁存状态会跟随计数器计数的变化而变化,直接读计数器是从锁存器得到计数器的当前值。但由于计数器处于工作状态,读出值不一定能稳定。 先锁存再读取:通过方式选择控制字对指定通道(sc1、sc0)的计数值锁入锁存器(rl1rl0=00), 锁存器一旦锁存了当前计数值,就

23、不再随计数器变化直到被读取。读计数器通道(有锁存器)。六、 分析与测试port_a8255 equ 200h ;8255a端口地址port_b8255 equ 201h ;8255b端口地址port_c8255 equ 202h ;8255c端口地址port_cs8255 equ 203h ;8255控制端口地址controlmode8255 equ 10001001b ;a口方式0,输出,b口方式0,输出,c口低4位输入,高4位输入port_a8253 equ 208h ;8253计时器0端口地址port_b8253 equ 209h ;8253计时器1端口地址port_c8253 equ

24、20ah ;8253计时器2端口地址port_cs8253 equ 20bh ;8253计时器控制端口地址clock0mode equ 00110100b ;计时器0的工作模式,0通道,先读写低字节后读写高字节,方式2,2进制计数clock0count equ 62500 ;计时器0的计数值clock1mode equ 01110000b ;计时器1的工作模式,1通道,先读写低字节后读写高字节,方式0,2进制计数clock1count equ 16 ;计时器1的计数值data_k equ 10 ;10进制z8279 equ 212h ;8279命令字地址d8279 equ 210h ;8279

25、数据端口地址ledmod equ 00h ;左边输入,8位显示,外部译码8位ledfeq equ 38h ;扫描频率clock1end equ 04h ;截获8255c口第三位输入信息用于检测clock1是否计时完毕code segment;主函数main proc far assume cs:code,ds:codestart: push cs pop ds call init8255 ;初始化8255 mov cx,0 ;清零mainloop: push cx lea bx,light ;将light的值赋给bx add bx,cx mov al,bx mov ah,00h mov dx,

26、port_b8255 out dx,allittleloop: call initclock0 ;初始化计时器0 call initclock1 ;初始化计时器1 call checkclock0over ;检测定时器1是否定时1秒结束,从而截获pc2的信息 lea bx,time pop cx cmp cx,00h je inc0 cmp cx,01h je inc1 cmp cx,02h je inc0 cmp cx,03h je inc1 jmp otherdealinc0: jmp maindealinc1: add bx,1maindeal: push cx mov al,bx mo

27、v ah,00h push bx push ax call display ;8279的显示 pop ax dec ax ;ax=ax-1 pop bx mov bx,al cmp ax,00h jl resetdata ;比较后小于这个数就跳转到这里 jmp littleloopresetdata: ;选择亮不同的灯,0-3分别表示light的四种类型 pop cx inc cx cmp cx,00h je resetdata2 cmp cx,01h je resetdata1 cmp cx,02h je resetdata2 cmp cx,03h je resetdata1 jmp res

28、etdata2resetdata1: mov ax,5 lea bx,time add bx,1 jmp resetdata3 resetdata2: cmp cx,3 ja otherdeal mov ax,30 lea bx,time resetdata3: push cx mov bx,al pop cx jmp mainloop otherdeal: mov cx,0 lea bx,time mov ax,30 mov bx,al add bx,1 mov ax,5 mov bx,al jmp mainloop main endp;检测定时器1是否定时1秒结束checkclock0ov

29、er proc near mov dx,port_c8255 ;8255c口地址compare: in al,dx and al,clock1end ;检测计数器1是否工作结束(通过与运算截获第三位) cmp al,00h ;比较该位是否为低电平 je compare retcheckclock0over endp;这个函数负责将提取出的变量a的值输出到led上,最大8位display proc near ;初始化8279 mov di,ax ;保存频率至bx mov al,ledmod ;左边输入,八位显示,外部译码八位显示 mov dx,z8279 out dx,al mov al,led

30、feq ;扫描频率 out dx,al;向led输出数据,显示结果 mov cx,2first1: mov ax,di ;保存频率至ax mov dx,00h mov si,data_k div si mov di,ax ;将商保存至bx mov ax,dx ;将余数保存至ax lea bx,led add ax,bx mov bx,ax mov ax,bxoutput1: mov dx,d8279 ;8279数据端口 out dx,al dec cx cmp cx,0 ja continu1 jmp next1continu1: jmp first1next1: mov cx,6 mov ax,00h mov dx,d8279cycle: out dx,al loop cycle ret display endp;初始化8255init8255 proc near mov dx,port_cs8255 ;8255控制口地址 mov al,controlmode8255 ;8255方式字 out dx,al retin

温馨提示

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

评论

0/150

提交评论