硬件综合实验报告.docx
《硬件综合实验报告.docx》由会员分享,可在线阅读,更多相关《硬件综合实验报告.docx(38页珍藏版)》请在冰点文库上搜索。
![硬件综合实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/29/d30fa97e-9047-48f2-8349-4394faa5c5d6/d30fa97e-9047-48f2-8349-4394faa5c5d61.gif)
硬件综合实验报告
综合实验报告
(2009--2010年度第2学期)
名称:
硬件设计与实践
题目:
交通信号灯
院系:
班级:
学号:
学生姓名:
指导教师:
设计周数:
两周
成绩:
日期:
2010年07月08日
《硬件》综合实验
任务书
一、目的、要求
1.掌握8255的工作方式,掌握用8255集成电路芯片的接口电路硬件设计与连接,编写程序使实验台上的红、绿、黄发光二极管按照十字路口交通信号灯的规律变化,同时用二组2位数码管表示南北、东西方向交通信号灯的时间。
2、掌握8259的工作方式,掌握中断程序设计的基本方法和技能,掌握用汇编语言的调试和运行程序的方法。
设计急救车到达时,两个方向交通信号灯全变红,以便让急救车通过。
二、主要内容
1、通过8255,8259可编程接口芯片,利用实验台模拟实现十字路口交通信号灯的变化。
2、画出流程图,硬件连接,编制程序,调试运行。
3、实现十字路口交通信号灯的正常交替变化以及人工指挥交通。
4、特殊情况下急救车紧急通过。
三、进度计划
序号
综合实验内容
完成时间
备注
1
任务需求分析
2010年6月29日
2
软件及硬件设计
2010年7月1日
3
调试运行
2010年7月9日
4
验收,并写课程设计报告
2010年7月10日
四、综合实验成果要求
1.课程设计报告,包括硬件连线图,程序设计流程图,实验数据
2.软件程序,运行结果和结论
五、考核方式
1.分析设计报告(占50%)
2.实验结果验收(占50%)
学生姓名:
陈龙艳
指导教师:
2010年7月8日
一、实验的目的与要求
1.掌握8255的工作方式,掌握用8255集成电路芯片的接口电路硬件设计与连接,编写程序使实验台上的红、绿、黄发光二极管按照十字路口交通信号灯的规律变化,同时用二组2位数码管表示南北、东西方向交通信号灯的时间。
2.掌握8259的工作方式,掌握中断程序设计的基本方法和技能,掌握用汇编语言的调试和运行程序的方法。
设计急救车到达时,两个方向交通信号灯全变红,以便让急救车通过。
二、设计内容
设有一十字路口,其道路为南北方向和东西方向,南北东西各用一组发光二极管表示。
此路口交通信号灯的亮灭规律如下:
初态为南北、东西红灯全亮,禁止通行。
1)南北绿灯亮20s,东西红灯亮22s;
2)南北绿灯闪烁;
3)南北绿灯灭,黄灯亮2s;
4)南北黄灯灭,红灯亮22s,东西绿灯亮20s;
5)东西绿灯闪烁;
6)东西绿灯灭,黄灯亮2s;
7)东西黄灯灭;
8)转向1)循环执行。
9)若有急救车到达,两个方向灯全部变红。
急救车过后恢复正常运行。
说明:
南北、东西各用一组2位数码管显示指示灯的剩余时间(倒计时),绿灯闪烁的时间包含在绿灯亮的20s时间内。
三、设计主要思路
1)交通信号灯及数码管显示的控制可通过8255实现。
我们可编程设置8255的PA口为输出,且工作方式为方式0。
其中PA0、PA1、PA2控制南北方向的红、黄、绿灯,PA4、PA5、PA6控制东西方向的红、黄、绿灯;并且设置段码缓存,位码缓存,分别控制数码管的段码和位码。
2)交通信号灯亮、灭的时间及数码管显示的时间通过8253控制,主要用实验箱上F/4端子输出地时钟作为8253的CLK1的计数源,OUT1的输出作为CLK0的输入,使得8253每隔1s向8259发送一次中断请求,OUT0作为中断脉冲,8259实现具体的计数功能。
3)各芯片的主要工作原理和具体的功能:
8253定时/计数器:
其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0、CLK1是计数器0、1的时钟脉冲输入端,GATE0、GATE1是门控脉冲输入端,OUT0、OUT1是输出端。
本次实验设计的8253是工作在1MHZ的脉冲下,计时器的初值分别是100和10000,即每隔一秒发出一次信号。
8255可编程并行接口:
数据总线缓冲器:
这是一个双向三态的8位数据缓冲
器,它是8255A与微机系统数据总线的接口。
输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
三个端口A,B和C:
A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。
B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。
C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
A组和B组控制电路:
这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。
方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。
对C口按位复位命令字可对C口的每一位实现置位或复位。
A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。
读写控制逻辑:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
本实验主要是使用PA口控制LED显示灯,通过A口输出地二进制编码来实现某一时刻灯亮的情况,“1”表示灯亮,“0”表示灯灭。
8259中断控制器:
初始化命令字(ICW1—ICW4)操作命令字(OCW1—OCW3)程序初始化中分别对各命令字初始化:
ICW1EQU00010011B
ICW2EQU00100000B
ICW4EQU00000001B
OCW1EQU11111110B
CS8259AEQU0B000H
CS8259BEQU0B001H
置初始值
IINITPROCNEAR;中断初始化程序
MOVDX,CS8259A
MOVAL,ICW1
OUTDX,AL
MOVDX,CS8259B
MOVAL,ICW2
OUTDX,AL
MOVAL,ICW4
OUTDX,AL
MOVAL,OCW1
OUTDX,AL
RET
IINITENDP
四、流程图
设计的大体流程图为:
主要思路是,定义数据段,初始化8255,8253,8259芯片,8253芯片设计成每隔一秒钟发出一次信号。
出现紧急情况时,在状态位未复位时将一直保持着南北,东西全是亮红灯,当标志位复位后,将回到当前时间应该出现的状态。
主程序流程图
中断服务程序流程图
时间显示子程序流程图
LED灯显示程序流程图
主要电路图
五、实验心得体会及难点分析
本次实验基本达到了实验目的。
通过本次实验,我基本掌握了数码显示管的使用方法,并且进一步掌握了8253、8255、8259各芯片的使用,进一步熟悉了它们的工作方式以及各控制字的确定,编写,各芯片的初始化程序。
经过设计,更改基本上实现了模拟十字路口的交通信号,即东西红灯亮时南北绿灯亮,当南北绿灯亮的时间小于三秒时进行闪烁,同时,在基本上实现基本程序之后,我们加入了比较简单的紧急情况控制信号,虽然结果看上去并没有什么太难的,但在编写程序和设计时我们花了很多时间,其中遇到了很多问题,但通过同学和老师的帮助、讲解,都一一的解决了。
其中主要遇到的难点如下:
本次实验,我们设计时首先是先将所用到的基本子程序和中断服务程序,先实现基本的功能后,才加上其他的功能。
其中遇到了比较多的问题,首先,在实现数码管显示的时候遇到了问题,我们通过研究数码管显示的实验初步了解了段码和位码,知道了显示数据的方法之一,但是在我们设计程序时是先确定位码,后确定段码的,但是实验显示上出现了一定的问题,主要是因为我们的显示程序中选择段码和位码并不是同步的,在上一次位码中显示了段码的数据后,选择下一个位码时仍然会显示该段码的数据,然后在显示新读入的数据,从而造成了有阴影的结果,我们知道,如果改成使用缓存将数据全部读入再同时显示在数码显示管中,将会解决此问题,但经过更改,程序出现了比较大的错误,未能调试成功。
其次,我们程序中出现的错误也算是我们本次实验的一个难点,就是我们在实现实验时,因为有多个条件跳转语句,因此,我们在跳转上出现的错误比较多,有没跳转对的,有条件出现偏差的,但这些难点都通过重头到尾理一次程序更改过来了。
还有,在加入紧急情况下东西、南北全是红灯亮,时间照常进行,而当紧急信号结束时,为了让LED灯恢复到当前显示的时间所代表的状态下,我们在程序中加入了一些判断语句,但因为多次使用寄存器AX,从而开始的时候程序出现了显示错误,最后,我们在程序中加入了PUSH/POP语句,将其保存、释放,从而使得寄存器内的值不会改变。
具体代码实现为
PUSHAX
MOVDX,PB
INAL,DX
CMPAL,80H
JZDQ1
POPAX
MOVDX,PA
OUTDX,AL
JMPDQ2
DQ1:
POPAX
DQ2:
PUSHAX
.
.
.
T3:
CALLLEDDISP
POPAX
CMPTEMP,0
JZT1
RET
最后,感谢老师的耐心指导,让我们比较顺利的完成了本次实验。
附件:
实验程序代码:
DATASEGMENT
OUTBITEQU08002H
OUTSEGEQU08004H
CONTROLEQU9003H
COUNT0EQU9000H
COUNT1EQU9001H
COUNT2EQU9002H
MODEEQU082H
PAEQU0A000H
PBEQU0A001H
PCEQU0A002H
CTL8255EQU0A003H
ICW1EQU00010011B
ICW2EQU00100000B
ICW4EQU00000001B
OCW1EQU11111110B
CS8259AEQU0B000H
CS8259BEQU0B001H
TEMPDB0
NSRDW0
NSYDW0
NSGDW0
EWRDW0
EWYDW0
EWGDW0
DATAENDS
;*******************************************
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCNEAR
MOVDX,CTL8255
MOVAL,MODE
OUTDX,AL
CLI
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
MOVDX,OUTBIT
MOVAL,0
OUTDX,AL
moval,36h;00110110B;计数器0,16位,方式3,二进制
movdx,CONTROL
outdx,al
movax,10000
movdx,COUNT0
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
moval,76h;01110110B;计数器1,16位,方式3,二进制
movdx,CONTROL
outdx,al
movax,100
movdx,COUNT1
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
MOVAX,0
MOVDS,AX
MOVBX,4*ICW2
MOVAX,CODE
SHLAX,4
ADDAX,OFFSETIENTER
MOV[BX],AX
MOVAX,0
INCBX
INCBX
MOV[BX],AX
CALLIINIT
MOVAX,DATA
MOVDS,AX
STI
LP:
MOVDX,PB
INAL,DX
CMPAL,80H
JNZLY0
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
MOVAL,00010100B
JMPLY00
LY0:
moval,00010100B
movdx,PA
outdx,al
LY00:
MOVNSG,20
MOVEWR,22
CALLTIMEDISP
MOVDX,PB
INAL,DX
CMPAL,80H
JNZLY1
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
MOVAL,00010010B
JMPLY11
LY1:
moval,00010010B
movdx,PA
outdx,al
LY11:
MOVNSY,2
CALLTIMEDISP
MOVDX,PB
INAL,DX
CMPAL,80H
JNZLY2
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
MOVAL,01000001B
JMPLY22
LY2:
moval,01000001B
movdx,PA
outdx,al
LY22:
MOVNSR,22
MOVEWG,20
CALLTIMEDISP
MOVDX,PB
INAL,DX
CMPAL,80H
JNZLY3
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
MOVAL,00100001B
JMPLY33
LY3:
moval,00100001B
movdx,PA
outdx,al
LY33:
MOVEWY,2
CALLTIMEDISP
JMPLP
STARTENDP
IINITPROCNEAR;初始化子程序
MOVDX,CS8259A
MOVAL,ICW1
OUTDX,AL
MOVDX,CS8259B
MOVAL,ICW2
OUTDX,AL
MOVAL,ICW4
OUTDX,AL
MOVAL,OCW1
OUTDX,AL
RET
IINITENDP
IENTERPROCNEAR;中断服务程序
PUSHAX
PUSHDX
CMPNSG,3
JZL1
CMPNSG,2
JZL2
CMPEWG,3
JZL3
CMPEWG,2
JZL4
JMPCNS
L1:
MOVDX,PA
MOVAL,00010000B
OUTDX,AL
JMPCNS
L2:
MOVDX,PA
MOVAL,00010100B
OUTDX,AL
JMPCNS
L3:
MOVDX,PA
MOVAL,00000001B
OUTDX,AL
JMPCNS
L4:
MOVDX,PA
MOVAL,01000001B
OUTDX,AL
CNS:
CMPNSR,0
JNZC1
CMPNSY,0
JNZC2
CMPNSG,0
JNZC3
JMPCEW
C1:
DECNSR
JMPCEW
C2:
DECNSY
JMPCEW
C3:
DECNSG
CEW:
CMPEWR,0
JNZC4
CMPEWY,0
JNZC5
CMPEWG,0
JNZC6
JMPEXIT
C4:
DECEWR
JMPEXIT
C5:
DECEWY
JMPEXIT
C6:
DECEWG
EXIT:
MOVDX,PB
INAL,DX
CMPAL,80H
JNZJ
MOVAL,00010001B
MOVDX,PA
OUTDX,AL
J:
MOVDX,CS8259A
MOVAL,20H
OUTDX,AL
POPDX
POPAX
IRET
IENTERENDP
TIMEDISPPROCNEAR;时间显示子程序
MOVTEMP,0
T1:
PUSHAX
MOVDX,PB
INAL,DX
CMPAL,80H
JZDQ1
POPAX
MOVDX,PA
OUTDX,AL
JMPDQ2
DQ1:
POPAX
DQ2:
PUSHAX
MOVCH,0
CMPNSR,0
JNZTIME1
CMPNSY,0
JNZTIME2
CMPNSG,0
JNZTIME3
MOVTEMP,1
JMPTIME3
TIME1:
MOVAX,NSR
JMPT2
TIME2:
MOVAX,NSY
JMPT2
TIME3:
MOVAX,NSG
T2:
CMPEWR,0
JNZTIME4
CMPEWY,0
JNZTIME5
CMPEWG,0
JNZTIME6
MOVTEMP,1
JMPTIME6
TIME4:
MOVBX,EWR
JMPT3
TIME5:
MOVBX,EWY
JMPT3
TIME6:
MOVBX,EWG
T3:
CALLLEDDISP
POPAX
CMPTEMP,0
JZT1
RET
TIMEDISPENDP
LEDDISPPROCNEAR;数码管显示子程序
CALLSTOR
MOVAX,BX
CALLSTOR
RET
LEDDISPENDP
STORPROCNEAR
MOVCL,10
DIVCL
CALLCOMP
MOVAL,AH
CALLCOMP
RET
STORENDP
COMPPROCNEAR
cmpal,0
jzd0
cmpal,1
jzd1
cmpal,2
jzd2
cmpal,3
jzd3
cmpal,4
jzd4
cmpal,5
jzd5
cmpal,6
jzd6
cmpal,7
jzd7
cmpal,8
jzd8
cmpal,9
jzd9
d0:
calldisplay0
JMPEX
d1:
calldisplay1
JMPEX
d2:
calldisplay2
JMPEX
d3:
calldisplay3
JMPEX
d4:
calldisplay4
JMPEX
d5:
calldisplay5
JMPEX
d6:
calldisplay6
JMPEX
d7:
calldisplay7
JMPEX
d8:
calldisplay8
JMPEX
d9:
calldisplay9
EX:
RET
COMPENDP
display0procnear
cmpch,0
jzl01
cmpch,1
jzl02
cmpch,2
jzl03
cmpch,3
jzl04
l01:
movdx,8002h
moval,20h
outdx,al
JMPexit0
l02:
movdx,8002h
moval,10h
outdx,al
jmpexit0
l03:
movdx,8002h
moval,08h
outdx,al
JMPexit0
l04:
movdx,8002h
moval,04h
outdx,al
jmpexit0
exit0:
moval,3fh
movdx,8004h
outdx,al
INCCH
RET
display0endp
display1procnear
cmpch,0
jzl11
cmpch,1
jzl12
cmpch,2
jzl13
cmpch,3
jzl14
l11:
movdx,8002h
moval,20h
outdx,al
jmpexit1
l12:
movdx,8002h
moval,10h
outdx,al
jmpexit1
l13:
movdx,8002h
moval,08h
outdx,al
jmpexit1
l14:
movdx,8002h
moval,04h
outdx,al
jmpexit1
exit1:
moval,06h
movdx,8004h
outdx,al
INCch
RET
display1endp
display2procnear
cmpch,0
jzl21
cmpch,1
jzl22
cmpch,2
jzl23
cmpch,3
jzl24
l21:
movdx,8002h
moval,20h
outdx,al
jmpexit2
l22:
movdx,8002h
moval,10h
outdx,al
jmpexit2
l23:
movdx,8002h
moval,08h
outdx,al
jmpexit2
l24:
movdx,8002h
moval,04h
outdx,al
jmpexit2
exit2:
moval,5bh
movdx,8004h
outdx,al
INCch
RET
display2endp
display3procnear
cmpch,0
jzl31
cmpch,1
jzl32
cmpch,2
jzl33
cmpch,3
jzl34
l31:
movdx,8002h
moval,20h
outdx,al
jmpexit3
l32:
movdx,8002h
moval,10h
outdx,al
jmpexit3
l33:
movdx,8002h
moval,08h
outdx,al
jmpexit2
l34:
movdx,8002h
moval,04h
outdx,al
jmpexit3