资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
硬件课程设计
实验报告
课题名称 交通灯指挥系统
学院 计算机科学与技术学院
交通灯指挥系统
1、 设计任务与要求
编写一个交通灯控制程序, 实现东西路口与南北路口状态灯的转换和紧急处理。采用8253芯片计数, 输出1S的时钟脉冲, 并使用8255接口芯片控制LED亮灭, 同时让8279芯片显示倒计时, 键盘控制紧急处理按键, 以此实现交通灯指挥控制系统。
2、 总体方案与说明
①南北红灯, 东西绿灯, 亮6秒, 且数码管9秒倒计时显示。
②南北红灯, 东西黄灯, 亮3秒。
③南北绿灯, 东西红灯, 亮6秒, 且数码管6秒倒计时显示。
④南北黄灯, 东西红灯, 亮3秒, 且数码管3秒倒计时显示。
⑤转①重复
l 按键盘1键, 则南北红灯, 东西绿灯; 按键盘0键, 恢复原状态。
l 按键盘2键, 则南北绿灯, 东西红灯; 按键盘0键, 恢复原状态。
l 按键盘4键, 则东西南北方向全亮红灯, 按键盘0键, 恢复原状态。
l 按键盘5键, 则东西南北方向全亮绿灯, 按键盘0键, 恢复原状态。
l 按键盘6键, 则东西南北方向全亮黄灯, 按键盘0键, 恢复原状态。
交通指挥系统正常运行时间表
南北方向
红灯
绿灯
黄灯
时间
9s
6s
3s
东西方向
绿灯
黄灯
红灯
时间
6s
3s
9s
3、 硬件框图与说明
l 芯片8253原理
简介: 8253内部有三个计数器, 分别成为计数器0、 计数器1和计数器2, 她们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字, 互相之间工作完全独立。每个计数器经过三个引脚和外部联系, 一个为时钟输入端CLK, 一个为门控信号输入端GATE, 另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器, 还有一个16位的计数初值寄存器CR、 一个计数执行部件CE和一个输出锁存器OL。
工作原理: 8253具有3个独立的计数通道, 采用减1计数方式。在门控信号有效时, 每输入1个计数脉冲, 通道作1次计数操作。当计数脉冲是已知周期的时钟信号时, 计数就成为定时。
工作方式: 8253中各通道可有6种可供选择的工作方式, 以完成定时、 计数或脉冲发生器等多种功能。本次实验中, 采用了工作方式3( 方波发生器) 。
•方式0——计数结束产生中断 一次定时或计数,重写初值,启动新一轮的计数
•方式1——可编程的单脉冲(单稳)触发器 GATE边沿触发,启动新一轮计数
•方式2——分频器(速度波发生器) 具有计数初值重装能力
•方式3——方波发生器 具有计数初值重装能力
•方式4——软件触发的选通信号发生器一次定时,重写初值,启动新一轮的计数
•方式5——硬件触发的选通信号发生器GATE边沿触发新一轮计数
8253具体的控制字格式如下:
l 芯片原理8255
简介: 一个并行输入/输出的LSI芯片, 多功能的I/O器件, 可作为CPU总线与外围的接口。具有24个可编程设置的I/O口, 即使3组8位的I/O口为PA口, PB口和PC口。它们又可分为两组12位的I/O口, A组包括A口及C口(高4位, PC4~PC7), B组包括B口及C口(低4位, PC0~PC3)。A组可设置为基本的I/O口, 闪控(STROBE)的I/O闪控式, 双向I/O3种模式; B组只能设置为基本I/O或闪控式I/O两种模式, 而这些操作模式完全由控制寄存器的控制字决定。
l 芯片原理8279
简介: 8279是可编程的键盘、 显示接口芯片。它既具有按键处理功能, 又具有自动显示功能, 在单片机系统中应用很广泛。8279内部有键盘FIFO( 先进先出堆栈) /传感器, 双重功能的8*8=64B RAM, 键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示RAM容量为16*8, 即显示器最大配置可达16位LED数码显示。
工作方式: ( 1) 键盘工作方式。8279在键盘工作方式时, 可设置为双键互锁方式和N键循回方式。双键互锁方式: 若有两个或多个键同时按下时, 不论按键先后顺序如何, 只能识别最后一个被释放的键, 并把该键值送入FIFO RAM中。N键循回方式: 一次按下任意个键均可被识别, 按键值按扫描次序被送入FIFO RAM中。( 2) 显示方式。8279的显示方式又可分为左端入口和右端入口方式。显示数据只要写入显示RAM, 则可由显示器显示出来, 因此显示数据写入显示RAM的顺序, 决定了显示的次序。左端入口方式即显示位置从显示器最左端1位( 最高位) 开始, 以后显示的字符逐个向右顺序排列; 右端入口方式即显示位置从显示器最右端1位( 最低位) 开始, 已显示的字符逐个向左移位。但无论左右入口, 后输入的总是显示在最右边。
l 硬件连线图
l 硬件连线实物图
4、 软件主要模块流程图
l 8255模块流程图
l 8253模块流程图
l 8279显示模块流程图
l 8279键盘输入及判断模块流程图
l 总流程图
5、 源程序清单与注释
Z8279 EQU 212H
D8279 EQU 210H
CODE SEGMENT
ASSUME CS:CODE DS:DATA
DATA SEGMENT
A DB 1 DUP(?)
B DB 1 DUP(?)
C DB 1 DUP(?)
DATA ENDS
START:
MOV DX,20BH
MOV AL,00110111B
OUT DX,AL
MOV DX,208H
MOV AL,00H
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,20BH
MOV AL,01110111B
OUT DX,AL
MOV DX,209H
MOV AL,00H
OUT DX,AL
MOV AL,02H
OUT DX,AL ;8253初始化
MOV DX,203H
MOV AL,10010000B
OUT DX,AL ;8255初始化
L0: MOV A,09H ; 设置计数初值9s
MOV B,06H ; 设置计数初值6s
MOV C,03H ; 设置计数初值3s
L1: MOV DX,201H
MOV AL,01111011B ;南北红, 东西绿
OUT DX,AL
MOV CL,A
CALL SHOW ; 调用显示模块
CALL LOK ; 调用检测上升沿子程序
CALL KZ ; 调用键盘检测及特殊键判断子程序
DEC A
CMP A,03H
JNZ L1
PP: MOV DX,201H
MOV AL,01110111B;南北红, 东西黄
OUT DX,AL
MOV CL,A
CALL SHOW ; 调用显示模块
CALL LOK ; 调用检测上升沿子程序
CALL KZ ; 调用键盘检测及特殊键判断子程序
DEC A
CMP A,00H
JNZ PP
L4: MOV DX,201H
MOV AL,11001111B ;南北绿, 东西红
OUT DX,AL
MOV CL,B
CALL SHOW ; 调用显示模块
CALL LOK ; 调用检测上升沿子程序
CALL KZ ; 调用键盘检测及特殊键判断子程序
DEC B
CMP B,00H
JNZ L4
L5: MOV DX,201H
MOV AL,10101111B ;南北黄, 东西红
OUT DX,AL
MOV CL,C
CALL SHOW ; 调用显示模块
CALL LOK ; 调用检测上升沿子程序
CALL KZ ; 调用键盘检测及特殊键判断子程序
DEC C
CMP C,00H
JNZ L5
JMP L0
LOK PROC NEAR ; 检测上升沿子程序
L2:MOV DX,200H
IN AL,DX
CMP AL,00H
JNZ L2
L3:IN AL,DX
CMP AL,01H
JNZ L3
RET
LOK ENDP
SHOW PROC NEAR ; 显示模块
MOV DX,Z8279
MOV AL,00H
OUT DX,AL
MOV AL,38H
OUT DX,AL;初始化 8279
MOV DX,D8279
MOV AL,00H
OUT DX,AL
OUT DX,AL
OUT DX,AL
OUT DX,AL
OUT DX,AL
OUT DX,AL
OUT DX,AL
OUT DX,AL ; 熄灭8279数码管
MOV AL,CL
MOV AH,0
MOV DL,10
DIV DL ;AX/DL=BL...BH
MOV BL,AH ; 将余数( 即秒的个位) 放在BL中
MOV BH,AL ; 将商( 即秒的十位) 放在BH中
CALL TRANS ; 调用8279显示秒的个位
MOV BL,BH
CALL TRANS ; 调用8279显示秒的十位
RET
SHOW ENDP
TRANS PROC NEAR ;数码管显示数值程序
ONE:
CMP BL,1
JNZ TWO
MOV AL,00000110B
TWO:
CMP BL,2
JNZ TRI
MOV AL,01011011B
TRI:
CMP BL,3
JNZ FOR
MOV AL,01001111B
FOR:
CMP BL,4
JNZ FIV
MOV AL,01100110B
FIV:
CMP BL,5
JNZ SIX
MOV AL,01101101B
SIX:
CMP BL,6
JNZ SEV
MOV AL,01111101B
SEV:
CMP BL,7
JNZ EIT
MOV AL,00000111B
EIT:
CMP BL,8
JNZ NIN
MOV AL,01111111B
NIN:
CMP BL,9
JNZ ZRO
MOV AL,01101111B
ZRO:
CMP BL,0
JNZ SHW
MOV AL,00111111B
SHW:
MOV DX,D8279
OUT DX,AL
RET
TRANS ENDP
KZ PROC NEAR ; 键盘检测及判断模块
MOV DX,Z8279
IN AL,DX
AND AL,0FH
CMP AL,00H
JE JIESHU
MOV AL,40H
OUT DX,AL
MOV DX,D8279
IN AL,DX
NHDL:
CMP AL,02D
JNZ NLDH
MOV DX,201H;8255B
MOV AL,01111011B;南北红东西绿
OUT DX,AL
CALL HUIFU
NLDH:
CMP AL,10D
JNZ HH
MOV DX,201H;8255B
MOV AL,11001111B;南北绿东西红
OUT DX,AL
CALL HUIFU
HH:
CMP AL,01D
JNZ LL
MOV DX,201H;8255B
MOV AL,01101111B;东西南北全红
OUT DX,AL
CALL HUIFU
LL:
CMP AL,09D
JNZ YY
MOV DX,201H;8255B
MOV AL,11011011B;东西南北全绿
OUT DX,AL
CALL HUIFU
YY:
CMP AL,33D
JNZ JIESHU
MOV DX,201H;8255B
MOV AL,10110111B;东西南北全黄
OUT DX,AL
CALL HUIFU
JIESHU:
RET
KZ ENDP
HUIFU PROC NEAR ; 恢复键0判断
WAITS:
MOV DX,Z8279
IN AL,DX
AND AL,0FH
CMP AL,00H
JE WAITS
MOV AL,40H
OUT DX,AL
MOV DX,D8279
IN AL,DX
CMP AL,03D
JNZ WAITS
RET
HUIFU ENDP
CODE ENDS
END START
6、 问题分析与解决方案
l 8279数码管显示
问题分析:
经过查阅大量8279资料初步对8279有了一定的了解, 在8279数码管显示数字的过程中遇到了诸多问题, 如: 数码管控制字、 显示出错、 RAM清零等重要操作无法正常实现。
解决方案:
①采用键盘/显示控制字00000000B, 时钟编程控制字00111000B, 各数字对应的LED八段显示数据;
②8279数据口和控制口混淆, 数据输出至控制口中而出现显示错误;
③清楚显示RAM和FIFO后无法正常显示数据, 采用输出”00H”逐个LED熄灭的方式熄灭LED, 达到清零目的。
l 8279键盘输入及判断
问题分析:
①判断键盘是否有按键按下;
②怎样判断按下的按键对应的键码值;
③代码冗余复杂
④特殊键按下后恢复问题
解决方案:
①读8279控制口, 让得到的状态字和0FH相与, 其结果再用CMP和00H比较, 以此判断是否有键按下;
②经过测试每一个按键, 确定各个键码值;
③采用子程序并调用子程序的方式, 重复利用了相同的代码, 减少了代码的行数;
④在进入特殊状态下不断地循环检测是否有恢复键”0键”按下。
l 各芯片之间的组合
问题分析: 调用子程序和循环的顺序混乱
解决方案: 首先实现单个芯片的各项功能, 再将每个芯片加入到总程序中, 使总程序过程清晰明了。
7、 结论与体会
经过这次硬件课程设计, 我们对汇编语言和各个接口芯片8253、 8255、 8279有了更深入的了解。在实验中, 经过和同学交流, 开阔了自己的思路, 改进了程序的方法, 使程序明晰易懂、 更加高效。在这次实验中, 我们自主学习了8279芯片, 并遇到了诸多问题和困难。发现将书本中的理论性知识运用在实际中还是有一定困难的, 需要经过大量的阅读资料、 实践、 学习代码实例, 才能不断地更正以前的错误思想、 改进代码, 完成所选择的课题。
在整个课程设计中, 我们得到了许多老师和同学的热心帮助、 鼓励, 这让我们更加相信团队的力量不可忽视, 只有同心协力、 分工明确才能高效地完成任务。
8、 设备与环境
硬件: 微机原理与接口技术试验箱
软件: Windows XP及以上的操作系统
Microsoft Office Visio
Microsoft Word
HK88TE
9、 参考资料
1.《微型计算机原理与接口技术》第4版 周荷琴 吴秀清著
中国科学技术大学出版社
2.《汇编语言》第2版 王爽著 清华大学出版社
展开阅读全文