资源描述
目 录
一、方案说明 …………………………………………………………… 3
1.1、硬件方面…………………………………………………………… 3
1.2、硬件连接图 ……………………………………………………… 3
1.3、接线说明 …………………………………………………………… 4
1.4、软件方面 …………………………………………………………… 4
1.5、流程图 ……………………………………………………………… 5
二、源程序代码 ……………………………………………………… 6
三、调试现象 ……………………………………………………………11
四、心得体会 ……………………………………………………………13
五、参考文献 ……………………………………………………………14
一、方案说明
1.1硬件方面:
8253的CLK0口由于输入一个2MHZ的脉冲所以要求采用串联的方式OUT0与CLK1连接,GATE0与GATE1一起连接到5V的电源上,最终使OUT1口产生1HZ的方波,脉冲输入到8259的IR1端,产生中断,调中断服务子程序。在加入紧急车道后,单脉冲连到8259的IRO端,产生一个优先级为高一级的中断请求信号。
1.2硬件连接图
8259
IR1
IR0
OUT0
GATE0
8253 CLK0
OUT1
GATE1
CLK1
5V
8位数码管
B
C
PA7
PA0
PB7
8255
PB0
PC7
PC0
. . . . .
.
5V
1.3连线说明:
C5区:CS、A0、A1
————
A3区:CS3、A0、A1
C5区:OUT0
————
C5区:CLK1
C5区:OUT1
————
B3区:IR1
C5区:GATE0
————
C5区:GATE1
C5区:GATE0
————
C1区:VCC
C5区:CLK0
————
B2区:2MHZ
B3区:CS、A0
————
A3区:CS2、A0
B3区:INT、INTA
————
ES8688:INTR、INTA
B3区:IR0
————
B2区:单脉冲()
B4区:CS、A0、A1
————
A3区:CS1、A0、A1
B4区:PA口、PB口
————
G5区:C口、B口
B4区:PC口
————
G6区:JP65(LED灯)
1.4软件方面:
主程序先对各个硬件初始化,在开CPU中断,然后空操作,等待中断。执行低级中断(IR1)时,8255的PA口负责选数码管,PB口负责显示数字,通过查表法查出0~9的数码管编码。
采用循环扫描方法,人眼即可看到连续的二位数。当倒计时减到零时,对红绿灯取反。若手动上下拨动单脉冲一次,则产生一个优先级高一级的中断(IR0),程序转而执行此中断处理程序,处理完后返回继续执行低级中断(IR1)。
1.5流程图
主程序
红绿灯取反输出
数码管显示0?
计数器自减1
是否有IR1
CPU开中断
数码管显示60
东西方向绿灯亮
南北方向红灯亮
调类型号n=9的程序
调8259初始化程序
8253初始化
CX=0?
4盏红灯闪烁
8255初始化
开始
N N
Y
Y
N
Y
紧急通行程序
继续处理未完成的低级中断
循环值出栈
结束中断服务程序
4盏红灯闪烁
循环值入栈
继续执行主程序
是否是IR0中断
主程序
二、源程序代码
DATA SEGMENT
IO8259_0 EQU 0E000H ;8259地址
IO8259_1 EQU 0E001H
K8255A EQU 0F000H ;8255地址
K8255B EQU 0F001H
K8255C EQU 0F002H
K8255K EQU 0F003H
ADD8253_0 EQU 0D000H ;8253地址
ADD8253_1 EQU 0D001H
ADD8253_2 EQU 0D002H
ADD8253_C EQU 0D003H
COUNTER EQU 60H ;倒计时数
RED_ON EQU CCH ;红灯亮
RED_OFF EQU 0FFH ;红灯灭
E_W EQU 066H ;东西方向通行
TAB2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
COUNT DB ?
SCAN DW 485 ;扫描次数
DATA ENDS
STCK SEGMENT STACK
DW 64 DUP(?)
STCK ENDS
CODE SEGMENT
ASSUME CS:CODE , DS:DATA,SS:STCK
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
NOP
MOV DX,K8255K ;写8255控制字,A,B,C均为输出,方式0
MOV AL,80H
OUT DX,AL
START1: MOV DX,K8255C ;C口输出,控制灯
MOV CX,4
FLASH: MOV AL,RED_ON ;红灯亮
OUT DX,AL
CALL DELAY ;调延时
MOV AL,RED_OFF ;红灯灭
OUT DX,AL
CALL DELAY
LOOP FLASH
START2: MOV DX,D003H ;写8253控制字
MOV AL,35H ;0#,方式2,BCD
OUT DX,AL
MOV AX,2000H ;写计数初值,根据输入设定,方波频率1HZ
MOV DX,D000H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,D003H ;写8253控制字
MOV AL,75H ;1#,方式2,BCD
MOV DX,AL
MOV AX,1000H
MOV DX,D000H
OUT DX,AL
MOV AL,AH
MOV DX,AL
CALL Init8259 ;调8259初始化子程序
CALL WriIntver_8 ;调写中断向量表子程序
CALL WriIntver_9 ;调写中断向量表子程序
MOV CL,E_W
MOV AL,CL
MOV DX,K8255C
OUT DX,AL
MOV COUNT,COUNTER ;写计数值(红绿灯变换的间隔时间)
STI
NOP
START3: JMP $ ;给出中断以外CPU的工作
Init8259 PROC NEAR ;8259初始化子程序
MOV DX,IO8259_0 ;写ICW1,边沿触发,单片,需写ICW4
MOV AL,13H
OUT DX,AL
MOV DX,IO8259_1 ;写ICW2,确定中断类型号
MOV AL,08H
OUT DX,AL
MOV AL,09H ;写ICW4
OUT DX,AL
MOV AL,0FCH ;写OCW1,除IR0、IR1全屏蔽
OUT DX,AL
RET
Init8259 ENDP
WriIntver_9 PROC NEAR ;写中断向量表子程序
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,24H ;中断类型号9,对应24H,25H,26H,27H四个单元
LEA AX,INT_9 ;取中断服务程序IP
STOSW
MOV AX,CS ;取中段服务程序CS
STOSW
POP ES
RET
WriIntver_9 ENDP
WriIntver_8 PROC NEAR ;写中断向量表子程序
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,20H ;中断类型号8,对应20H,21H,22H,23H四个单元
LEA AX,INT_8 ;取中断服务程序IP
STOSW
MOV AX,CS ;取中段服务程序CS
STOSW
POP ES
RET
WriIntver_8 ENDP
INT_9:MOV AL,COUNT
SUB AL,01H
DAS
MOV COUNT,AL ;中断服务程序
PUSH AX
PUSH DX
PUSH BX
PUSH CX
PUSH SCAN ;保护循环值,否则取数码管显示会破坏
LOO: MOV AL,55H
MOV DX, K8255A
OUT DX,AL
MOV AL,COUNT ;选高位数码管
MOV AH,AL ;暂存AH
MOV CL,4
SHR AL,CL
LEA BX,TAB2
XLAT ;十进制转数码管编码
MOV DX, K8255B
OUT DX,AL ;显数
CALL DL1ms ;调延时
MOV AL,0
OUT DX,AL ;清除
MOV AL,0AAH
MOV DX, K8255A
OUT DX,AL ;选低位数码管
MOV AL,AH
SHL AL,CL
SHR AL,CL
XLAT ;十进制转数码管编码
MOV DX, K8255B
OUT DX,AL ;显数
CALL DL1ms
MOV AL,0
OUT DX,AL ;清除
DEC SCAN
CMP SCAN,0
JNZ LOO ;循环扫描
POP SCAN
POP CX
CMP COUNT,0
JNZ STOP ;计数到零则重新置数,并将灯取反,未到零则直接结束中断子程序
MOV COUNT,COUNTER
NOT CL
MOV AL,CL
MOV DX,K8255C
OUT DX,AL
STOP: MOV DX,IO8259_0 ;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零
MOV AL,20H
OUT DX,AL
POP BX
POP DX
POP AX
IRET
INT_8:PUSH DX
PUSH AX
PUSH CX
MOV DX,K8255C ;C口输出,控制灯
MOV CX,4
A: MOV AL,RED_ON ;红灯亮
OUT DX,AL
CALL DELAY ;调延时
MOV AL,RED_OFF ;红灯灭
OUT DX,AL
CALL DELAY
LOOP A
MOV DX,IO8259_0 ;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零
MOV AL,20H
OUT DX,AL
POP CX
MOV DX,K8255C
MOV AL,CL
OUT DX,AL
POP AX
POP DX
IRET
DELAY PROC;延时子程序
PUSH BX
PUSH CX
MOV BX,05H
DELAY1:MOV CX,0FFFFH
LOOP $
DEC BX
JNZ DELAY1
POP CX
POP BX
RET
DELAY ENDP
DL1ms PROC NEAR
PUSH AX
PUSH CX
MOV AX,0100H
MOV CX,AX
LOOP $
POP CX
POP AX
RET
DL1ms ENDP
CODE ENDS
END START
\
三、调试现象
1、系统初始化:红灯闪烁5次后东西方向绿灯,南北方向红灯,数码管开始从60秒计时
2、数码管计时到00,南北方向变绿灯,东西方向变红灯,数码管复位成60,重新计时,如此循环
3、当道路发生紧急状况时,可拨动东西方向或南北方向紧急通行开关,则数码管停止计时(熄灭),交通灯变为4盏红灯闪烁4次后,再从熄灭时的计数开始继续计数
四、心得体会
通过这一周的课程设计我对微机原理有了进一步的了解和认识,而且对各种芯片例如:8053、8259、8253的认识,原来对于对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计才发现原来自己对微机的认识还很浅而且还有很多的问题存在,在课程设计中的问题例如:1、连线完成后程序运行时发现交通灯能够亮但是数码管没有数字显示检查发现接线连接正确程序中8259的IR0的入口地址不对应导致信号无法输入数码管中使数码管显示数据;2、数码管显示时要求两个数码管组合显示60s,就要求区分高位与低位,所以用PC口来控制先显示高位的数字再通过PB口清除再输入低位的数字再显示低位这样就可以完成60s,加入一个自减完成60s到00s的跳变;3、在数码管能够显示正常数字时发现显示数字时数字会闪烁通过检查程序发现可能由于扫描的次数小才导致同个数字发生闪烁现象,通过把扫描次数加大发现问题解决了; 4、由于加入了紧急交行开关把此中断接入了IR1口运行发现正常运行后第一次拨动开关交通灯可以恢复到最初的4盏红灯闪烁在开始从原来的数字开始继续下去但在此拨动开关时发现交通灯无反应,最后通过老师的提点发现IR0的优先级比IR1高,所以低级中断无法中断高级中断,之所以第一个可以发生中断时因为IR1的中断程序在IR0的程序后系统可以对此段程序可以执行到一次,通过把8259的IR1口与8253的OUT1口相连,而8259的IR0口接一个脉冲信号,在者在程序中把两段程序中的IR0与IR1的地址交换实现交通紧急通行的功能。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但这毕竟第一次自己设计一个程序,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固,同时对知识的理解和接受能力还不是太强。
这次课程设计任务终于顺利完成了,在设计中遇到了很多技术性的问题,最后在自己的钻研以及与同学之间和老师的探讨下,终于一个一个得解决了问题,当看到数码管和二极管按照自己编写的程序显示的时候,心情异常兴奋,好有成就感。这次课程设计在培养我们编程能力的同时,也让我学会了要完成一项任务,除了需要过硬的技术和能力之外,还要有不屈不挠的精神,有些同学就是没有耐心做下去,才没有好好的完成任务。所以,感谢我们的指导老师,谢谢!
五、参考文献
1、星研公司. Star ES8688使用说明书.
2、李继灿.新编16/32位微型计算机原理及应用(第4版).北京:清华大学出版社.
3、周秀清.微型计算机原理与接口技术.合肥:中国科学技术大学出版社.
南京工程学院
课程设计任务书
课 程 名 称 微机原理及应用A
院(系、部、中心) 康尼学院
专 业 电气工程及其自动化
班 级 K监控071
起 止 日 期 2010年5月31日~ 6月4日
指 导 教 师 李 升、徐懂理
1.课程设计应达到的目的
1)掌握8088应用系统的设计方法,掌握可编程接口芯片8255、8253、8259的应用和编程方法,做到理论联系实际。
2)进一步掌握8086/8088汇编语言程序设计方法。
2.课程设计题目及要求
见附页
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕
本次课程设计进行交通信号灯模拟控制系统的设计。
预习要求:
1) 预习星研公司《Star ES8688使用说明书》中实验仪硬件环境及星研集成环境软件的操作方法。
2) 预习《Star ES8688使用说明书》中第五章实验一8255控制交通灯实验。预习8255测试实验(见上课讲义),并在星研实验装置上调试实现。
3)预习本任务书,根据设计任务,预先画出电路原理图、程序流程图,编写程序。
设计报告要求:
1)画出接口部分电路原理图,并阐述系统工作原理。
2)绘制程序流程图(Visio绘制)、给出源程序清单。
3)调试过程描述和结果说明。
4)要求用WORD撰写报告,上交打印报告和电子稿(全班刻盘)。
4.主要参考文献
1、 星研公司. Star ES8688使用说明书.
2、 李继灿.新编16/32位微型计算机原理及应用(第4版).北京:清华大学出版社.
3、 周荷琴,吴秀清.微型计算机原理与接口技术.合肥:中国科学技术大学出版社.
5.课程设计进度安排
起 止 日 期
工 作 内 容
5月31日前
5月31日
6月1日~6月3日
6月4日
任务布置,预习,绘制程序流程图,编写源程序
在星研实验装置上调试预习实验内容
在星研实验装置上进行设计内容调试
验收答辩
6.成绩考核办法
实验表现占30%,验收答辩占30%,设计报告占40%。
教研室审查意见:
同意。
教研室主任签字: 鞠阳
2010年5月24日
院(系、部、中心)意见:
同意。
主管领导签字: 李先允
2010年 5月25日
附录:
课题名称 带数码管显示的交通灯模拟控制系统设计
一、概述
在STAR ES598PCI实验系统的基础上,应用可编程并行接口8255、定时/计数器8253、可编程中断控制器8259等I/O接口芯片,设计一个十字路口交通信号灯模拟控制系统。
二、设计目的
通过设计一个十字路口交通灯系统掌握8255、8253、8259等接口芯片的编程和应用方法,做到理论联系实际。
三、设计要求
要求绘制流程图、编写源程序,并在实验系统上调试通过程序。
四、设计内容
1、十字路口交通信号灯设置
某十字路口交通信号灯系统在4个路口均装设红、绿2个灯,并装设数码管显示倒计时。
图1 交通信号灯设置
实验时用LED(发光二极管)代替十字路口的红绿灯。
2、交通信号灯亮灭规律
交通信号灯系统初始状态为所有红灯闪烁N1秒钟(不必在数码管显示);之后东西向车行道绿灯亮,车辆放行N秒钟,此时南北向车行道红灯亮,之后转为南北向车行道放行N秒钟,如此循环重复。要求数码管能够显示倒计时。
参数选择:
N=20s/25s…85s/90s(每隔5s取一个秒数)
N1≤10s,闪烁次数为3~8次
每组自行选择N、N1(及闪烁次数)。
3、参考方案
采用8255、8253、8259组成系统,采用8253产生定时,运用8259采用中断法编写程序。
如果加入紧急车辆通过功能或其他任何先进功能,可根据具体情况加创新分。
五、设计报告要求
要求在报告中详细叙述所选方案的原理、特点及评价,给出硬件原理图、程序流程、源程序、调试结果描述(需安排实验系统运行照片)。
报告采用电力工程学院统一的标准格式书写。
最终上交的报告内容包括:1、任务书、2设计内容(正文)、3、心得体会
六、人员分组情况
1人1组.
18
15
展开阅读全文