微机接口技术课程设计.docx
《微机接口技术课程设计.docx》由会员分享,可在线阅读,更多相关《微机接口技术课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
微机接口技术课程设计
摘要
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
在本文中将运用微机原理及接口技术,介绍几种不同的方式,分别从硬件的思维与软件的思维,来实现简单的十字路口交通情况模拟。
同时,本文还将介绍8086CPU最小系统相关硬件芯片及其特点,还有一些简单有用的汇编知识。
关键词:
交通灯汇编程序模拟
十字路口交通信号模拟
1设计任务及要求分析
1.1初始条件
在屏幕上模拟十字路口交通情况,红灯或绿灯各亮30秒,其间黄灯闪3秒,绿灯方向有车通过,红灯方向车停止等待。
按Q退出程序。
1.2题目分析
有一条主干道和一条次干道的城市交叉路口,每边都设置红、绿、黄色信号灯,红灯亮表示禁止通行;绿灯亮表示可以通过;在绿灯亮转变为红灯亮之前,先要求黄灯亮几秒钟,以便让交叉路口停车线以外的车辆停止运行。
每一边的红、绿、黄色信号灯亮的顺序是红→绿→黄→红→绿→黄……。
主干道红灯亮时,对应次干道的绿灯、黄灯亮;主干道绿灯、黄灯亮时,对应次干道的红灯亮。
这样就要求主干道红灯亮的时间,应等于次干道绿灯亮与黄灯亮的时间之和;同理,次干道红灯亮的时间,应等于主干道绿灯亮与黄灯亮的时间之和。
红、绿、黄色信号灯亮的时间,要求采用倒计时的方式,用十进制数字显示出来。
1.3设计要求:
设有一个十字路口,S、N分别为南、北方向,E、W为东、西方向,初始态为2个路口的红灯亮以及另2个路口绿灯亮。
之后,S、N路口的绿灯亮,转向红灯亮。
E、W路口的红灯亮,转向绿灯亮。
E、W路口方向通车,S、N路口可以转向。
30秒后,E、W路口的绿灯熄灭,而E、W路口的黄灯开始亮。
黄灯亮后,E、W路口的红灯亮,转向绿灯亮。
同时S、N路口的绿灯亮,转向红灯亮。
S、N路口方向开始通车,E、W方向可以转向。
30秒时间后,S、N路口的绿灯熄灭,而黄灯开始亮。
黄灯亮后,再切换到E、W路口方向。
之后,重复上述过程。
即为:
(1)该设计能控制东、西、南、北四个路口的红、黄、绿信号灯正常工作。
(2)当东西方向放行、南北方向禁行时,东西方向绿灯亮30s,然后黄灯亮3s;南北方向红灯亮33s。
(3)当南北方向放行、东西方向禁行时,南北方向绿灯亮30s,然后黄灯亮3s;东西方向红灯亮33s。
(4)C键可以改变时间参数,Q键可以退出程序。
2方案比较及选择
分析题意,红,黄,绿灯可分别接在8255的A口,B口和C口上,灯的亮灭可直接由8086输出0与输出1控制。
30秒延时及闪烁可以由8253控制。
方法有两种方案:
2.1设计方案一
设8253各口地址分别为:
设8253基地址即通道0地址为04A0H;通道1为04A2H;通道2为04A4H;命令控制口为04A6H。
黄灯闪烁的频率为1HZ,所以想到由8253产生一个1HZ的方波,8255控制或门打开的时间,在或门打开的时间内,8253将方波信号输入或门使黄灯闪烁。
由于计数值最大为65535,不能超过这个范围,而1MHZ/65536的值远大于2HZ,所以采用两个计数器级联的方式,8253通道0的CLK0输入由分频器产生的1MHZ时钟脉冲,工作在方式3即方波发生器方式,理论设计输出的周期为0.01s的方波。
1MHZ的时钟脉冲其重复周期为T=1/1MHZ=1µs,因此通道0的计数初值为10000=2710H。
由此方波分别作为CLK1和CKL2的输入时钟脉冲,所以通道1和通道2的输入时钟频率为100HZ,通道1作计数器工作在方式1,计数初值3000=BB8H,既30s,计数到则输出一个高电平到8255的PA7口,8255将A口数据输入到8086,8086检测到高电平既完成30s定时。
通道2工作在方式3需输出一个1HZ的方波,通过一个或门和8086共同控制黄灯的闪烁,因此也是工作在方波发生器方式,其计数初值为100=64H,将黄灯的状态反馈到8255的端口PB7和PC7,同样输入到8086,8086通过两次检测端口状态可知黄灯的状态变化,计9次状态变化可完成5次闪烁。
三个通道的门控信号都未用,均接+5V即可。
2.2设计方案二
考虑到题目要求黄灯闪烁的频率为1HZ,既每秒1次,那么前0.5秒黄灯亮,后0.5秒黄灯灭,所以最小的定时单位为0.5秒,频率为2HZ,30秒即为60个0.5秒。
显然与方案一相同,由一个计数器是无法完成,所以采用两个计数器级联的方式,将计数器0的输出OUT0接到计数器1的输入端CLK1,CLK0=1MHZ,计数值为50000=C350H,OUT0=20HZ,CLK1=20HZ,记数值为10,OUT1=2HZ。
并且计数器0工作于方式3用于产生方波信号,计数器1工作方式2,产生负脉冲信号,计数器1的输出端OUT1接入8255芯片的PC5口,用于读取负脉冲个数,以完成计时功能。
8086及8255设置同方案一,8086则每隔0.5秒变换一次黄灯的状态,持续五次,完成闪烁的功能。
经比较,方案二8086在黄灯闪烁时需频繁发送数据到8255加重了系统的负担。
2.3设计方案三
汇编语言中,视频显示程序设计的方法一般是由DOS或BIOS调用来完成。
有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。
用INT10H即可建立某种显示方式。
用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT21H来实现调用,例:
要输出多于一个字符时,利用DOS功能调用9。
而键盘扫描程序设计的方法是:
检测键盘状态,有无输入,并检测输入各值。
例:
利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器。
此时,定时器需要中断,在中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。
例:
在系统定时中断处理程序中,有一条中断指令INT1CH指令,在ROMBIOS中,1CH的处理仅一条IRET指令,实际上它并没有做任何工作而只是为用户提供了一个软中断类型号,所以INT1CH指令每秒也将执行18.2次,设计中可用这个定时周期性工作的处理程序来代替原有的1CH程序,实现定时。
还有可以显示时间子程序,即将计时单元的二进制转换为十进制数加以显示。
可以使用DOS调用,是数字显示在屏幕上。
比较上面提到的三种方案,前面两种是采用硬件及软件相互配合,来完成任务要求,而方案三则仅仅使用软件来编程实现。
因此,采用方案三是最为快捷简单,且较为经济。
3系统原理
LED灯的分布:
N路口有灯L1,E路口为绿有灯L2,W路口有灯L3,S路口有灯L4。
如图3-1所示:
N
计数
L1
L4
计数
S
L3计数W
E计数L2
图3-1红黄绿灯分布图
8086工作在最小模式,低八位端口AD0~AD7接到8255的D0~D7,通过地址锁存器8282,接到三八译码器,译码后分别连到8255的CS片选端。
8255的B口控制南北街交通灯。
8255三个口全部工作在方式0既基本输入输出方式,红绿灯的转换由软件编程实现。
3.1硬件思想
由于8255与8086CPU是以低八位数据线相连接的,所以应该是8255的
、
线分别与8086CPU的
、
线相连,而将8086的
线作为选通信号。
如果是按8255内部地址来看,CS为8255片选信号
的首地址。
3.1.1关于8086CPU
Intel8086是16位的微处理器,它采用HMOS工艺40条引脚封装。
8086工作时使用5V电源,时钟频率5MHz它有20根地址线,故可寻址的内存空间为1MB。
下面,分析8086各个引脚的连接方法。
(1)
引脚:
通常用此引线产生片选信号,当为
=1,
=0编码时,在数据总线低8位和偶地址之间进行字节传送(
~
)。
(2)CLK(Clock)时钟信号(输入):
CLK为CPU和总线控制器提供基本的定时脉冲。
(3)
(+5V),GND(地):
CPU所需电源
=+5V。
GND为地线。
(4)RESET:
复位信号,输入,高电平有效。
(5)MN/
(Minimun/Maximun):
最小、最大工作模式选择信号,输入。
此时MN/
接+5V,构成单处理器系统,系统控制信号由CPU提供。
3.1.2关于8255
下面介绍8255芯片:
8255引脚功能RESET:
复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:
读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
A1、A0:
端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。
图3-2为8255的控制字:
图3-28255的控制字
图3-3为端口C按位置1/复0控制:
图3-3端口C按位置1/复0控制
3.1.3关于8253
8253的三个计数器按照各工作方式寄存器中控制字的设置进行工作。
可以选择的工作方式有六种。
这里要用到的两种工作方式是:
方式2:
比率发生器。
编程后重复地循环计数。
计数到终点时输出一个时钟周期宽度的低电平脉冲,自动初始化后继续计数。
用GATE的上升沿初始化,并开始计数。
GATE为低电平时停止计数。
方式3:
方波发生器。
这种方式是在编程后重复地循环计数,输出波形为方波。
如果初始计数值为偶数,每个时钟输入脉冲使计数器减2,达到计数终点时输出电平改变。
用GATE的上升沿初始化并开始计数,GATE为低电平时停止计数。
3.1.4硬件原理
采用硬件思维完成设计任务,硬件连接如图3-4硬件原理图所示。
8253的CLK0口由于输入一个1MHZ的脉冲所以要求采用串联的方式OUT0与CLK1连接,GATE0与GATE1一起连接到5V的电源上,最终使OUT1口产生1HZ的方波,脉冲产生中断,调中断服务子程序。
定时器0:
输入信号设为1KHZ,工作在方式3,输出为1000HZ方波,OUT0和计数器1的相连,作为计数器1的输入信号。
定时器1:
输入信号为OUT0,工作站方式3,计数初值为1000,输出为1HZ方波
8253计数器1的OUT1口产生1HZ的方波,脉冲产生中断,调中断服务子程序。
8253
图3-4硬件原理图
3.2软件思想
使用软件实现任务,需要用到汇编语言。
设计程序时,首先需要对程序进行初始化;然后定义宏功能,定义能够读取键盘输入的时间的子程序,定义延时程序,避免出现结果但无法观测的现象;接着对数据进行定义,为后面主程序做好准备,同时,需要在屏幕界面中显示的文字及图像也在此时定义;后面就是编写主程序,主程序中最重要的是进行运算及循环;最后,配合一些改变时间的子程序和屏幕显示的子程序,整个程序就完成了。
下面介绍几种常用的调用汇编语句。
3.2.1DOS系统功能调用
DOS系统功能调用(INT21H)。
1、显示
(1)显示单个字符
入参:
AH=02H
DL=字符ASCII值
出参:
无
(2)显示字符串
入参:
AH=09H
DS:
DX寄存器指向内存中字符串的首地址,字符串以$结束。
出参:
无
2、键盘
(1)检查键盘状态
入参:
AH=0BH
出参:
AL=00H无输入0FFH有一字符
(2)读键盘字符
入参:
AH=08H
出参:
AL=字符ASCII值
3、其它
(1)退出程序,返回系统
入参:
AH=4CH
出参:
无
(2)取中断矢量
入参:
AH=35H
AL=中断类型号
出参:
ES:
BX中断矢量,ES为段地址,BX为偏移地址
(3)置中断矢量
入参:
AH=25H
AL=中断类型号
DS:
DX中断矢量,DS为段地址,DX为偏移地址
出参:
AL=字符ASCII值
3.2.2BIOS屏幕功能调用
BIOS屏幕功能调用(INT10H)。
1、清屏操作
MOVAX,0600H
MOVCX,0000H
MOVDX,184FH
MOVBH,07H
INT10H
2、移动光标
MOVAH,02H
MOVDH,**;**为目的地行数(0-24)
MOVDL,**;**为目的地列数(0-79)
MOVBH,00H
INT10H
3、禁止光标显示
MOVAH,01H
MOVCX,2000H
INT10H
4、恢复光标显示
MOVAH,01H
MOVCX,0C0DH
INT10H
3.2.3图像显行设计
10H中断调用共有16个功能。
功能号为0~15。
(1)设置显示方式(0号功能)
入口参数:
AH=0(功能号)
AL=设置方式(0~7)。
出口参数:
无。
(2)设置光标类型(1号功能)
入口参数:
AH=1(功能号)
CH=光标开始行
CL=光标结束行。
出口参数:
无。
根据CX给出光标的大小。
(3)设置光标位置(2号功能)
入口参数:
AH=2(功能号)
BH=页号
DH=行号
DL=列号。
出口参数:
无。
根据DX确定了光标位置。
(4)读当前光标位置(3号功能)
入口参数;AH=3(功能号)
BH=页号。
出口参数:
DH=行号
DL=列号
CX=光标大小。
(5)初始窗口或向上滚动(6号功能)
入口参数:
AH=6
AL=上滚行数
CX=上滚窗口左上角的行、列号
DX=上滚窗口右下角的行、列号
BH=空白行的属性。
出口参数:
无。
当滚动后,底部为空白输入行。
(6)初始窗口或向下滚动(7号功能)
入口参数:
AH=7
AL=下滚行数
CX=下滚窗口左上角的行、列号
DX=下滚窗口右下角的行、列号
BH=空白行的属性。
出口参数:
无。
当滚动后,顶部为空白输入行。
(7)读当前光标位置的字符与属性(8号功能)
入口参数:
AH=08H
BH=页号。
出口参数:
AL为读出的字符
AH为字符属性。
3.2.4程序流程图
南北绿,东西红
开始
调用延时程序
南北绿灭
N
南北黄灯亮,东西继续红灯
Y
南北黄灭
N
Y
南北红灯亮,东西绿灯亮
调用延时程序
东西绿灭
N
Y
南北继续红灯,东西黄灯亮
东西黄灭
N
Y
结束
图3-5程序流程图
3.3程序运行调试结果
1、东西方向的红灯和南北方向的绿灯同时点亮30秒钟,见图3-6程序运行结果示意图1。
图3-6程序运行结果示意图1
2、30秒钟后,南北方向的黄灯亮3秒钟,此时东西方向仍维持红灯点亮,见图3-7程序运行结果示意图2。
图3-7程序运行结果示意图2
3、南北方向的黄灯亮3秒钟后,转为东西方向的绿灯和南北方向的红灯同时点亮30秒钟,见图3-8程序运行结果示意图3;
图3-8程序运行结果示意图3
4、30秒钟后,转为东西方向的黄灯亮3秒钟,此时南北方向仍维持红灯点亮,见图3-9程序运行结果示意图4。
图3-9程序运行结果示意图4
5、东西方向的黄灯亮,共3秒钟后,南北方向的绿灯和东西方向的红灯同时点亮30秒钟,见图3-10程序运行结果示意图5。
如此循环重复。
图3-10程序运行结果示意图5
6、红灯时数码管显示倒计时32~0。
7、绿灯时数码管显示倒计时29~0。
8、黄灯时数码管显示倒计时2~0。
9、需要注意的是,在时间设置中,红灯亮的时间应该设为绿灯亮的时间与黄灯亮的时间之和,否则会引起交通信号灯的紊乱,出现同时为红灯亮或同时为绿灯亮的情况。
3.4硬件与软件设计的比较
在电路和程序设计过程中,涉及到软件实现和硬件实现两种方式,各有利弊。
软件方式用时间的复杂度代替了空间的复杂度。
硬件方式反之。
需要针对具体情况选择最佳方案。
对于本次交通信号模拟,对这两种思维方式进行比较与区别,而表1对时间控制的两种实现方式作出了性能评估。
表1硬件与软件的比较
性能比较
软件
硬件
硬件电路复杂度
无需多余硬件,电路简单
电路比较复杂
软件复杂度
设定循环参数,用LOOP语言实现
定时,编写简单
要对计数器初始化,还要
编写中断服务程序,较复杂
可靠性
受CPU处理速度、状态等多因素影
响,可靠性较差
完全由计数器单独控制,
可靠性高
实时性
效率低、实时性较差
效率低、实时性好
使用场合
对时间精确要求不高,在专用微机
上使用的情况下常常用该方式
对时间精确要求高、程序要
求通用的情况下,应适用硬
件定时
4总结与心得
微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维。
具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
同时,这门课所用的语言,不同于其他机器语言,在编写程序是,应该学会放下其他机器语言习惯,注意语言格式。
这次课设很有趣,但是一开始我无从下手,主要的困难来自对程序的理解及编写。
功夫不负有心人,经过与他人的合作和努力,我们最后对实验的原理有了清晰的认识。
虽然只能完成最基本的任务,但我还是很开心。
这次课设却让我们对汇编程序有了足够的了解,让我们知道了汇编程序的用法;而且它还让我们对自己动手写程序有了一定的基础。
虽然只是一个小型的课程设计,但是通过学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
实验中个人的力量是不及群体的力量的,做事的效率高了很多。
对于查资料,分析、删选有用资料的能力也有了很大的提高。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。
感谢老师的悉心指导。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。
于是,我坚持了下来。
同时,我发现软件能够将问题简单化,而且程序简单易读,结构清楚,最重要的是成本低。
在设计一个系统,除了达到所要求的性能指标以外,成本也是很重要的一个指标。
成本的高低也决定了产品的适用性。
因此,这次课程设计让我对软件程序有了新的认识。
参考资料
[1]钱晓捷.微机原理与接口技术(第四版).湖北:
机械工业出版社,2008
[2]洪永强.微机原理与接口技术.北京:
科学出版社,2004
[3]钱晓捷.新版汇编语言程序设计.北京:
清华大学出版社,2004
[4]徐爱芸,向华.汇编语言程序设计教程与实验.北京:
清华大学出版社,2005
[5]洪永强.微机原理与接口技术.北京:
科学出版社,2004
[6]朱定华.微机原理、汇编与接口技术.北京:
清华大学出版社,2005
附录:
程序代码
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
;//******************************************************************//
;功能:
显示宏定义
;//******************************************************************//
SHOWLINEMACROSTR,STA,LEN,POS,COL;显示字符串宏
PUSHDX
PUSHBX
PUSHAX
MOVBP,OFFSETSTR;显示起始位置
ADDBP,STA;第几个开始
MOVDX,POS;位置
MOVCX,LEN;长度
MOVBX,COL;颜色
MOVAX,1301H;字符串显示中断
INT10H
POPAX
POPBX
POPDX
ENDM
;//******************************************************************//
;宏功能:
读取时间子程序
;//******************************************************************//
TIMEBUF0MACROTIME,BUF;显示字符串宏
PUSHBX
PUSHAX
MOVDI,OFFSETBUF
MOVAL,TIME;读取时间
MOVBL,0AH
MOVAH,00H
DIVBL
ADDAL,30H
ADDAH,30H;转换成ASCⅡ码
MOV[DI],AL
INCDI
MOV[DI],AH;送入程序
POPAX
POPBX
ENDM
;//******************************************************************//
;功能:
延时一秒宏定义,8253每秒中断18.2次
;//******************************************************************//
DELAYMACRO;延时一秒
LOCALDLOOP;取得中断次数(DX),
PUSHAX
PUSHBX
PUSHDX
MOVA