课程设计任务书
课 程 名 称 微机原理及应用A 院(系、部、中心) 电力学院 专 业 电气工程及其自动化 班 级 电力093
起 止 日 期 2012.6.4 ~ 2010.6.12 指 导 教 师 鞠 阳 徐懂礼
1
1.课程设计应达到的目的 通过课程设计加深理解课堂教学内容,掌握微机原理的基本应用方法。通过实验熟悉微机基本接口芯片的外型、引脚、编程结构,掌握汇编语言程序设计和微机基本接口电路的设计、应用方法,做到理论联系实际。 2.课程设计题目及要求 题目:交通信号灯模拟控制系统的设计 利用STAR ES598PCI实验仪的硬件资源设计一个“带时间显示的交通信号灯模拟控制系统”。所有输入该装置信号采用STAR ES598PCI实验仪上的状态输入开关,东西、南北方向的红绿黄灯采用实验仪上的LED发光二极管模拟,东西、南北方向的信号灯变化,通行倒计时时间用数码管显示。 1、功能要求: 1) 假设在一个A道(东西方向)和B道(南北方向)交叉的十字路口安装有自动信号灯。当A道和B道均有车辆要求通过时,A道和B道轮流放行。A道放行10秒钟,B道再放行10秒钟,依次轮流。绿灯转换红灯前黄灯亮4秒钟。 2) 夜间工作时A道(东西方向)和B道(南北方向)的黄灯闪烁,绿灯和红灯不亮(实验时用开关K8控制)。 3) 开关K8=0,则工作在以上功能(1);开关K8=1,则工作在以上功能(2)。 2、难度要求: 1) 基本要求:采用8255 PA口输出控制信号灯,8255 PC0输入K8控制开关信号,用循环程序软件定时实现功能要求;(60分) 2) 中级要求:采用8255 PA口输出控制信号灯,8255 PC0输入K8控制开关信号,用8253硬件定时,软件查询方式实现功能要求;(80分) 3) 高级要求:在中级要求的基础上,增加用8255 PB口动LED数码显示器显示绿灯倒计时秒数,从9倒计数到0,倒计数到4时黄灯亮。(100分)
2
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕 设计要求 1、预习要求: 1)预习《STAR ES598PCI实验仪 微机原理实验指导书》附录三: 2)预习《STAR ES598PCI实验仪 微机原理实验指导书》附录二之 2.7 B2区;2.9 B4区;2.15 C5区;2.36 G5区;2.37 G6区。 3)预习《STAR ES598PCI实验仪 微机原理实验指导书》之“实验九8255控制交通灯实验”和“实验十 8253方波实验”。 4)预习本任务书,根据设计任务,预先画出电路原理图、程序流程图,编写出实验程序。 2、设计报告要求: 1)画出接口部分电路原理图,并阐述系统工作原理。 2)绘制程序流程图和源程序清单。 3)调试过程和结果。 4)要求用WORD撰写课程设计报告,上交打印版和电子稿。 3、课程设计说明书装订顺序及主要内容如下: 1)封面、目录 2)任务书 3)正文:设计思路与功能描述;电路原理图及其说明。应标示并说明每一个输入/输出信号的含义;结构框图;系统调试中的问题和解决办法;运行情况和结论;源程序清单。 4)参考资料 4.主要参考文献 [1] 李干林. 《STAR ES598PCI实验仪 微机原理实验指导书》[M] .南京工程学院,2008. [2] 李继灿.新编16/32微型计算机原理及应用[M].北京:清华大学出版社,2004 [3] 郑学坚,周斌. 微型计算机原理及应用[M] . 北京:清华大学出版社,2001. [4] 朱定华等. 微型计算机原理及应用[M]. 北京:电子工业出版社,2005. 3
5.课程设计进度安排 起 止 日 期 工 作 内 容 2012年6月4日(第16周)预习消化理解设计任务,设计程序流程图,编写源程序。 之前 第16周,星期一 第16周,星期二、三 第16周,星期四 第16周,星期五 第16周,星期六 6.成绩考核办法 总评成绩由三部分组成,分别是:成果演示占40%,测试成绩占30%,设计报告占30%。 1、成果演示(根据程序运行演示确定基础分); 2、口试或笔试测验(与本设计有关的问题,目的是考查设计成果是否经过自己思考独立完成); 3、课程设计报告(格式、内容、质量)。 教研室审查意见: 预习星研微机实验系统的仿真调试操作界面 学习STAR86/88实验系统的使用和操作, 进行实验8255测试和8253测试基本实验 完成基本要求的内容 完成中级和高级要求的内容 验收 撰写课程设计报告 教研室主任签字: 年 月 日 院(系、部、中心)意见: 主管领导签字: 年 月 日
4
设计说明书
课程设计要求:
设计一个十字路口的交通信号灯。采用8255 PA口输出控制信号灯,8255 PC0输入K8控制开关信号,用8253硬件定时,软件查询方式实现如下功能。
白天模式:①东西方向和南北方向各放行10秒。绿灯转红灯前黄灯闪烁4秒。
②LED数码显示器显示倒数计时,从9倒数到0;倒数到4时黄灯亮。
夜间模式:两个方向黄灯闪烁,绿灯和红灯不亮。
1、设计思路与功能描述 (1)设计思路 ①8255
交通信号灯的灯光变化和数码显示通过8255实现控制。
8255是一种具有多种功能的可编程并行通信接口电路芯片。芯片包括A、B、C三个数据端口、A组控制部件、B组控制部件、读写逻辑控制电路、数据总线缓冲器。8255有三种工作方式,其中方式0是基本输入/输出方式,适用于无条件传送和查询方式的接口电路。
本设计中,PA口用于输出信号控制灯光的变化(D6D5=00,D4=0),PB口用于输出信号控制数码管的显示(D2=0,D1=0),PC0用于输入K8的控制开关信号,PC1用于输入用于硬件延时的方波信号(D0=1)。PC7用于输出控制数码管工作/不工作的信号(D3=0)。故写入方式控制字为10000001B=81H。
8255A输入/输出信号接线方案如下表所示: 8255-PB输出方式 引脚 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 输出信号 PB7—DP段 PB6—G段 PB5—F段 PB4—E段 PB3—D段 PB2—C段 PB1—B段 PB0—A段 PCH输出方式 引脚 输出信号 数码管的位码选择 PC7=0,则该位选中 8255-PA输出方式 引脚 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 输出信号 不用(灭) 南北红灯 南北黄灯 南北绿灯 不用(灭) 东西红灯 东西黄灯 东西绿灯 PC3 PC2 PC1 PC0 8253-OUT0 开关K8输入 引脚 PCL输入方式 输入信号 PC7 a.灯光显示:送低电平则灯亮,送高电平则灯灭。 东西绿灯,南北红灯:PA0~PA7应输出01111101B=7DH
东西闪灯,南北红灯:黄灯亮,红灯亮PA0~PA7应输出10111101B=0BDH 黄灯灭,红灯亮PA0~PA7应输出11111101B=0FDH 东西红灯,南北绿灯:PA0~PA7应输出11010111B=0D7H
东西红灯,南北黄闪:红灯亮,黄灯亮PA0~PA7应输出11011011B=0DBH 红灯亮,黄灯灭PA0~PA7应输出11011111B=0DFH 两个路口都黄灯闪烁:两个黄灯亮:PA0~PA7应输出10111011B=0BBH 两个黄灯灭:PA0~PA7应输出11111111B=0FFH b.LED数码显示:数码管采用共阴极接法,位选信号为0则数码管工作。 a~dp段发亮条件:对应位输入1,见下表所示:
5
显示数字 PB输出 0 3FH 1 06H 2 5BH 3 4FH 4 66H 5 6DH 6 7DH 7 07H 8 7FH 9 6FH 白天模式:数码管工作,PC7送0,即应输入0×××××××B,例如送01111111B=7FH 夜天模式:数码管工作,PC7送1,即应输入1×××××××B,例如送10000000B=80H ②8253
交通信号灯亮、灭的时间及数码管的倒计时间隔都通过8253控制。
8253可编程定时/计数器是Intel公司生产的通用外围接口芯片,它有三个独立的16位计数器,计数范围为0~2MHz。8253有6种工作方式,其中方式三是方波发生器方式。
本设计中选用通道0,CLK0接1953HZ的时钟信号,GATE0接高电平VCC,OUT0接8255的PC1。因为需要产生周期为0.5s的方波,即产生2Hz的方波而固有频率为1953Hz,故分频系数N=1953/2=976。由于选用了通道0(SC1 SC0=00),工作在方式3(M2 M1 M0=011),对计数器进行读写/操作时,先送低8位,再送高8位(RW1 RW0=11),计数器的数值采用10进制(BCD=1),故初始化时命令字为00110111B=37H。 ③白天和夜间模式的切换
通过8255读取PC0的状态后,用软件判断是执行白天还是夜间模式。
使用IN指令,将PC的状态送入寄存器AL,将PC70状态送入了AL的D0中。由于只需判断PC0的值,故将AL同00000001B相与。使用JZ判断,若结果为1,即PC0为0,则转白天模式,否则顺序执行夜间模式。
通过使用循环语句,使得每执行完一次白天或夜间模式,都重新对PC0的状态进行一次判断。一旦拨动切换开关K8,就能及时切换交通灯运行模式。 ④硬件延时
由于本设计中,每次倒数计时的间隔为1秒;而黄灯闪烁一次用时共计1秒,其中前0.5秒为黄灯亮,后0.5秒为黄灯灭。故8253选用通道0,CLK0接1953HZ的时钟信号,分频系数设为976,OUT0输出周期为0.5s的方波。主程序通过查询8255的PC1接收到的状态,获知准确的定时信息。
读取PC1的状态,判断是否为0,直到发生跳变为1,此过程执行时间为半个周期即0.25s。继续读取PC1的状态,判断是否为1,直到发生跳变为0,此过程执行时间为半个周期即0.25s。故判断PC1发生两次跳变的程序执行一次所用时间就为0.5s。将此作为延迟子程序,实现延时的效果。
(2)功能描述
①开关K8拨到0,实现白天模式:东西方向和南北方向各放行10秒。
a.东西亮绿灯,南北亮红灯,数码管从9倒数计时到4 b.东西闪黄灯,南北亮红灯,数码管从3倒数计时到0 c.东西亮红灯,南北亮绿灯,数码管从9倒数计时到4 d.东西亮红灯,南北闪黄灯,数码管从3倒数计时到0 如此a->b->c->d作为一组循环。
每组白天模式的循环结束后重新查询开关K8的状态,可实现模式的切换。 ②开关K8拨到1,实现夜间模式:
两个路口都是黄灯闪烁。数码管没有数字显示。 黄灯每闪烁一次为1s,作为一组循环。
每组夜间模式的循环结束后重新查询开关K8的状态,可实现模式的切换。
6
2、电路图 (1)电路原理图
说明:
7
5255:PA口,输出,控制LED灯
PB口,输出,控制数码管显示数字 PC0,输入,反映开关状态
PC1,输入,送入8253产生的2Hz方波 PC7,输出,控制数码管工作与否 8253:OUT0,输出,输出方波给8255 CLK0,输入,送入固有频率3906Hz (2)实物图
3、结构框图 (1)延时子程序
输入PC1PC1=0?YN输入PC1PC1=1?YN返回 8
(2)主程序 8255、8253初始化
Y
PC0 = 0? N
黄灯闪烁
南北绿灯,东西红灯 显示“9”
延时1秒子程序 显示“8”
延时1秒子程序 。 。
显示“4” 延时1秒子程序
南北黄灯,东西黄灯 省略部分 显示“3”
延时1秒子程序 。 。 显示“0”
延时1秒子程序 南北红灯,东西绿灯
9
4、运行情况和结论 (1)实际情况
判断拨到0开关K8东西绿灯南北红灯东西黄闪南北红灯东西红灯南北绿灯东西红灯南北黄闪拨到1两个黄灯闪烁一次
运行时的图片
10
(2)结论
①本设计基本完成了任务书中所要求的功能。
a.白天模式:①东西方向和南北方向各放行10秒。绿灯转红灯前黄灯闪烁4秒。
②LED数码显示器显示倒数计时,从9倒数到0;倒数到4时黄灯亮。
b.夜间模式:两个方向黄灯闪烁,绿灯和红灯不亮。
②有待改进之处:
a.夜间模式能在1s内切换到白天模式。但在白天模式必须等一个循环结束后才能切换。 b.1s延时程序不精确,最大存在0.5s的误差。
5、系统调试中的问题和解决办法
遇到的问题:不能立刻从白天模式切换到夜晚模式
解决的方法:修改了代码,在白天每次灯闪烁的后面判断是否切换,如果切换就跳到黄灯循环模式,由于程序长度限制,需要每隔一段设置一个中间点jmp.
6、源程序清单
code segment assume cs:code
go:mov al,10000001b ;8255初始化 mov dx,0f003h out dx,al
mov al,00110111b ;8253初始化,产生2HZ方波 mov dx,0e003h out dx,al mov al,53h mov dx,0e000h out dx,al mov al,19h out dx,al
l: mov dx,0f002h ;判断工作状态 in al,dx and al,01h cmp al,0h je ll
mov dx,0f002h ;数码管灭 mov al, 80h out dx,al
mov al,10111011b ;使灯全都亮 mov dx,0f000h out dx,al
11
call delay ;延时
mov al,11111111b ;使灯全都亮 mov dx,0f000h out dx,al call delay jmp l
ll: mov dx,0f002h ;数码管灭 mov al,7fh out dx,al
mov al,01101111b ; mov dx,0f000h out dx,al call a
call b ; mov al,11010111b ; mov dx,0f000h out dx,al call a
call c ; jmp l
mov ah,4ch int 21h
delay proc ;8253 m: mov dx,0f002h in al,dx and al,02h jz m
n: mov dx,0f002h in al,dx and al,02h jnz n ret delay endp
aa: jmp l ;
a proc
mov al,6fh ; mov dx,0f001h out dx,al call delay
call delay ;
南北绿灯,东西红灯 南北黄灯,东西红灯 南北红灯,东西绿灯 南北红灯,东西黄灯 延时0.5秒钟 中间点aa,跳回l 数码管显示\"9\" 延时两个0.5秒,即1秒12
mov dx,0f002h ;判断工作状态 in al,dx and al,01h cmp al,0h
jnz l ;跳回l
mov al,7fh ;数码管显示\"8\" mov dx,0f001h out dx,al call delay call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h
jnz aa ;
mov al,07h ; mov dx,0f001h out dx,al call delay call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz aa
mov al,7dh ; mov dx,0f001h out dx,al call delay call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz aa jmp z
bb: jmp aa ;
跳回中间点aa 数码管显示\"7\" 数码管显示\"6\" 中间点bb,跳回aa 13
z: mov al,6dh ;数码管显示\"5\" mov dx,0f001h out dx,al call delay call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz aa
mov al,66h ; mov dx,0f001h out dx,al call delay call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz bb ret a endp
b proc
mov al,4fh ; mov dx,0f001h out dx,al
mov al,10101111b ; mov dx,0f000h out dx,al
call delay ; mov al,11101111b ; mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz bb
数码管显示\"4\" 数码管显示\"3\" 南北黄灯亮 延时0.5秒
南北黄灯灭 14
mov al,5bh ;数码管显示\"2\" mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
call delay
mov al,11101111b mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz bb jmp y
cc:jmp bb ;
y: mov al,06h ; mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
call delay
mov al,11101111b mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz cc
mov al,3fh ; mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
中间点cc,跳回bb 数码管显示\"1\" 数码管显示\"0\" 15
call delay
mov al,11101111b mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz cc ret b endp
c proc
mov al,4fh ; mov dx,0f001h out dx,al
mov al,10101111b ; mov dx,0f000h out dx,al
call delay ; mov al,11101111b ; mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz cc jmp x
ddd: jmp cc ;
x:mov al,5bh ; mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
call delay
mov al,11101111b mov dx,0f000h
数码管显示\"3\" 东西黄灯亮 延时0.5秒 东西黄灯亮 中间点ddd,跳回cc 数码管显示\"2\" 16
out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz ddd
mov al,06h ;数码管显示\"1\" mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
call delay
mov al,11101111b mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz ddd
mov al,3fh ; mov dx,0f001h out dx,al
mov al,10101111b mov dx,0f000h out dx,al
call delay
mov al,11101111b mov dx,0f000h out dx,al call delay
mov dx,0f002h in al,dx and al,01h cmp al,0h jnz ddd ret
数码管显示\"0\" 17
c endp
code ends end go
7、心得体会
通过为期三天的课程设计,我觉得收获了很多,对汇编程序的认识也大大加强了。
一开始的难题就是程序的设计思路。万事开头难,在最初设计时,我们小组感觉很难理清一个整体的思路,后来在老师的讲解下,我们画出了整个程序的流程图,明白了先做什么、后做什么,慢慢开始实现任务书中所要求的功能。有了思路后,为了编写出完整的程序,我们小组三人在图书馆奋战了一个晚上,直到阿姨大喊“锁门了”,才基本编写完成。
其次是要对课程设计中用到的两个主要的芯片有比较深的认识。在设计过程中,我发现我对课上所讲的一个个知识点的理解程度还不够,概念比较模糊。通过一遍遍研究讲义上的例题、查找相关的资料,我总算对8253和8255有了一定的认识。通过程序编写,我对芯片的初始化和命令字也有了更深刻的认识,对口地址和控制口的理解也更加深入。
程序的调试是最后的步骤。刚上机编译的时候,星研软件报了16个错。我们小组通过一一改正,终于通过了编译。改错的过程中,我发现有些是比较低级的错误,有些就是对语句的不熟悉。比如说使用AND时,第一个操作数不能为立即数;比如说JMP无条件转移的长度是64K,超出64K就会溢出。所以,编写程序一定要严谨和仔细,不能有一丝差错,当然,上机调试是必不可少的。
参考资料
[1] 李干林. 《STAR ES598PCI实验仪 微机原理实验指导书》[M] .南京工程学院,2008. [2] 李继灿.新编16/32微型计算机原理及应用[M].北京:清华大学出版社,2004 [3] 郑学坚,周斌. 微型计算机原理及应用[M] . 北京:清华大学出版社,2001. [4] 朱定华等. 微型计算机原理及应用[M]. 北京:电子工业出版社,2005.
18
因篇幅问题不能全部显示,请点此查看更多更全内容