微机课程设计任务书.docx
- 文档编号:12878349
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:32
- 大小:173.86KB
微机课程设计任务书.docx
《微机课程设计任务书.docx》由会员分享,可在线阅读,更多相关《微机课程设计任务书.docx(32页珍藏版)》请在冰豆网上搜索。
微机课程设计任务书
摘要
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的
作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
本课程设计是基于微机原理与接口技术的简单应用。
运用所学的微机原理和接口技术知识完成交通灯系统。
通过硬件与软件的结合,用我们刚刚学过的汇编语言编写程序模拟分析了现代城市交通控制与管理问题的现状,结合交通的实际情况阐述了交通灯控制系统的工作原理,给出了一种简单实用的交通灯控制系统的硬件、软件电路设计方案。
该系统适用于单主干道的十字路口。
现假定其主干道为东西方向,次干道为南北方向。
该功能能实现加中断控制和手动控制的方式进行,红绿灯切换时有闪烁功能以警示车辆和行人将进行红绿灯切换。
交通灯的时间控制显示,以固定时间值预先“固化”,每次只是以一定周期交替变化。
但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。
采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。
它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。
关键词:
交通灯硬件电路软件编程模拟系统
十字路口交通信号灯模拟
1.设计方案及其比较
本十字路口交通灯控制系统的设计可以采用两种方法,即硬件电路设计和软件编程来模拟交通灯控制系统的情况,硬件电路是通过LED灯来模拟十字路口的交通灯,而软件编写程序则是通过软件的演示界面来模拟十字路口交通灯不同时刻的变化情况;硬件电路的设计中我们需要用到可编程控制芯片8255A和计数器芯片8254,此电路的设计中我们需要先买来各种芯片和一些必要的元器件,弄清楚各个管脚的名称及其相应的功能,再通过电路的接线和调试,直到调试成功并能够完成相应的功能,另一方面,如果我们们使用软件编程,我们首先需要在软件的演示界面上显示出三种不同颜色的LED灯,再通过编程来控制其亮灭,达到延时的效果,此过程主要是要用到BIOS中断及其功能调用和DOS中断及其功能调用,此外不同颜色LED灯的显示还要借助查询工具书来实现,虽然此过程比较复杂,但这是适合现阶段我们的一种设计方法,毕竟买各种芯片和元器件再来连接电路模拟交通灯系统的情况比较困难,难以实现。
下面,我首先介绍一下交通灯控制系统的硬件电路的实现过程,再介绍通过软件编程的实现过程,编程之前首先需要查阅相应的资料,画出整个系统的流程图,编程并进行调试,直到最终得到满意的效果。
2.硬件电路的设计
2.1交通灯电路的设计要求
根据老师给我的设计任务书,我可以得出十字路口交通灯的变化规律如下:
(1)南北路口的绿灯、东西路口的红灯同时亮30秒。
(2)南北路口的黄灯闪烁3次,同时东西路口的红灯继续亮。
(3)南北路口的红灯、东西路口的绿灯同时亮30秒。
(4)南北路口的红灯继续亮,同时东西路口的黄灯闪烁3次。
(5)转1重复。
2.2可编程芯片8255的结构和工作原理
2.2.1可编程芯片8255的内部结构
图2-18255芯片的内部结构图
(1)数据总线缓冲器:
这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。
输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
(2)三个端口A,B和C:
A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。
B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。
C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
(3)A组和B组控制电路:
这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。
方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。
对C口按位复位命令字可对C口的每一位实现置位或复位。
A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。
(4)读写控制逻辑:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2.2.2芯片8255的引脚
8255A的引脚如图2-2所示,分为数据线、地址线、读/写控制线、输入/输出端口线和电源线。
D7~D0(数据线):
三态、双向数据线,与CPU数据总线连接,用来传送数据。
CS:
片选信号线,低电平有效时,芯片被选中。
A1,A0(portaddress):
地址线,用来选择内部端口。
RD:
读出信号线,低电平有效时,允许数据读出。
WR:
写入信号线,低电平有效时,允许数据写入。
RESET:
复位信号线,高电平有效时,将所有内部寄存器清0。
PA7~PA0(端口A):
A口输入/输出信号线。
PB7~PB0(端口B):
B口输入/输出信号线。
PC7~PC0(端口C):
C口输入/输出信号线。
VCC:
+5V电源。
GND:
电源地线。
图2-2芯片8255引脚图
2.2.3芯片8255的工作方式
芯片8255A主要有三种工作方式
方式0---基本输入输出方式;
方式1---选通输入输出方式;
方式2---双向选通输入输出方式。
2.3设计思路和电路原理图
2.3.1设计思路
设有一个十字路口,1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮;之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。
延迟30秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁。
闪烁3次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车。
延迟30秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。
闪烁3次后,再切换到1、3路口方向;之后,重复上述过程。
交通灯系统如图2-3所示。
图2-3十字路口交通灯系统示意图
通过8254计数,每1ms刷新一次,CX计数不为零,计数值减1,刷新1000次,持续一秒钟;使用8254实现了PA7~PA0控制二极管的亮灭,PB7~PA0控制数码管的显示。
通过设置控制字,使8255的C口高四位输出,低四位输入,PC4和PC5对数码管进行位控,让两位十进制数同时显示。
2.3.2红黄绿灯的表示
在设计的过程中我们采用了六个灯,但是需要连接了8根线,所以做了如下的规定:
R表示红灯,G表示绿灯,Y表示黄灯,E表示方向东,W表示方向西,S表示方向南,N表示方向北。
所以在设计中采用如下的规定:
A7~A5分别代表东西方向红黄绿灯,A4~A2分别代表南北方向红黄绿灯,A1~A0无意义。
2.3.3硬件电路的接线图
整个系统硬件电路的接线图如图2-4所示。
图2-4系统硬件电路接线图
8255连接说明如下:
8255数据端口连接系统总线数据段D0~D7
8255RD连接系统IOR
8255WD连接系统IOW
8255CS连接IOY3
8255寄存器地址输入信号A0A1连接系统总线A0A1
8255PA端连接外设二极管(PA端A7~A2对应二极管D7~D2),作为输出
A7~A5分别代表东西方向红黄绿灯,A4~A2分别代表南北方向红黄绿灯,A1~A0无意义。
8255PB端连接外设LED,作为输出
8255PC端低位输入高位输出C0连接8254OUT端作为输入;C4~C5连接X1~X2作为输出,控制LED显示十位个位
8254连接说明如下:
8254数据端口连接系统总线数据段D0~D7
8254RD连接系统IOR
8254WD连接系统IOW
8254CS连接IOY2
8254寄存器地址输入信号A0A1连接系统总线A0A1
8254CLK0连接1KHZ
8254GATE0连接+5V
8254OUT0连接8255C0端
.3软件编程模拟交通灯控制系统
3.1编程软件MF2KP
本次编写程序用到的主要是老师给我们的那个小程序,也就是MF2KP,这个软件里面本身也有一些经典的程序,我在编写程序之前先是看了一下这些程序,感觉里面的一些程序模块也是挺有用的,有的也可以借鉴一下;此软件编写程序之后,运行之前需要先看一下程序中出错的地方,按照下面的提示将错误的地方改正过来,这样才能生成相应的文件,否则根本无法调试运行,此软件使用起来比较方便,但是存储容量比较小,有一些比较大的程序不能够在里面运行,这是该软件的缺点。
3.2程序流程图
本次软件编程的程序流程图如图3-1所示。
N
图3-1程序流程图
3.3编程技巧与主要知识点
本次用汇编语言进行编程,下面是编写过程中主要涉及的知识点:
1、视频显示程序设计:
一般由DOS或BIOS调用来完成。
有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。
用INT10H即可建立某种显示方式。
用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT21H来实现调用。
2、键盘扫描程序设计:
检测键盘状态,有无输入,并检测输入各值。
例:
利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器。
3、定时器中断处理程序:
在此中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。
例:
在系统定时中断处理程序中,有一条中断指令INT1CH指令,在ROMBIOS中,1CH的处理仅一条IRET指令,实际上它并没有做任何工作而只是为用户提供了一个软中断类型号,所以INT1CH指令每秒也将执行18.2次,设计中可用这个定时周期性工作的处理程序来代替原有的1CH程序,实现定时。
4、显示时间子程序:
将计时单元的二进制转换为十进制数加以显示。
3.4源程序清单
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
MOV[DI],AL
INCDI
MOV[DI],AH
POPAX
POPBX
ENDM
DELAYMACRO;延时一秒
LOCALDLOOP;利用INT1AH/00H取得中断次数(DX),
PUSHAX
PUSHBX
PUSHDX
MOVAH,00H;BIOS调用
INT1AH;55ms引起一次中断,作为定时信号。
ADDDL,18;定时1S,需要18个定时单位
MOVBL,DL
INCBL
DLOOP:
MOVAH,00H
INT1AH
CMPDL,BL;是否累计到1S
JNZDLOOP;没到,继续读
POPDX
POPBX
POPAX
ENDM
DATASEGMENT
TIME_YDB2
TIMEDB10
TIME0DB7
TIME_GDB30
TIME_RDB33
BUF0DB0FH
BUF_XDB'00';定义交通路口
BUF_YDB'00'
BUFDB'00'
TABLE01DB''
TABLE02DB'‘
TABLE03DB
TABLE04DB'',0B3H,'|',0B3H,'|'
TABLE05DB'',0B3H,'',0B3H,'|'
TABLE06DB'',0B3H,'|',0B3H,'|'
TABLE07DB'',0B3H,'N',0B3H,'|'
TABLE08DB'',0B3H,'|',0B3H,'|'
TABLE09DB'',0B3H,'',0B3H,'|'
TABLE10DB13DUP(0C4h),0D9h,'',0C0h,11DUP(0c4h),'|
TABLE11DB'|'
TABLE12DB'',0FH,'|'
TABLE13DB'|'
TABLE14DB'----E--',0FH,'',0FH,'--W---|---------------------------------------------------------------'
TABLE15DB'|'
TABLE16DB'',0FH,'|'
TABLE17DB'|'
TABLE18DB13DUP(0C4H),0BFh,'',0DAH,11DUP(0C4H),'|
TABLE19DB'',0B3H,'',0B3H,'|'
TABLE20DB'',0B3H,'|',0B3H,'|---------------------------------------------------------'
TABLE21DB'',0B3H,'S',0B3H,'|'
TABLE22DB'',0B3H,'|',0B3H,'|
TABLE23DB'',0B3H,'',0B3H,'|'
TABLE24DB'',0B3H,'|',0B3H,'|
STRDB'PleaseinputtimesR:
;G:
;Y:
;[Y/N]'
STR1DB'CHANGETIME'
STR2DB'DOBY'
STR3DB'NIGHT'
STR4DB'Quitsystem[Q]'
STR5DB'NORMAL'
STR6DB'1.Quitsystem[Q]'
STR7DB'2.BacktoNORMAL[B]'
STR8DB'EMERGEN'
STR9DB'X--G,Y--R:
[X];X--R,Y--G:
[Y]'
STRCLDB''
STR10DB':
'
FLGDB0
FLG0DB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
MOVAX,DATA
MOVDS,AX
MOVES,AX
FUNCT:
MOVAH,01H;清除光标
MOVCX,2000H
INT10H
CALLINITIAL
N1:
CALLSHOWTIME
CALLGETCHAR
CMPAL,'C';调整时间
JNELOOP1
CALLCHANGTIME
JMPFUNCT
LOOP1:
CMPAL,'D';手动/自动控制状态
CALLDOBY
LOOP4:
CMPAL,'Q';退出
JNEN1
ESC:
MOVAH,4CH
INT21H
DOBYPROCNEAR;开关子函数
MOVFLG,0
OP:
CALLDO
OP4:
CALLGETCHAR;调用输入控制字符
CMPAL,'Y';手动控制下开
JNEOP1
MOVFLG,1
JMPOP
OP1:
CMPAL,'X';手动控制下关
JNEOP2
MOVFLG,2
JMPOP
OP2:
CMPAL,'Q'
JNEOP3;退出
JMPESC
OP3:
CMPAL,'B'
JNEOP4;手动/自动控制
JMPFUNCT
RET
DOBYENDP
DOPROCNEAR;开关子函数
CMPFLG,0
JADO0;
SHOWLINEBUF,0,2,0A12H,000EH;黄灯
SHOWLINEBUF,0,2,1212H,000EH;黄灯
SHOWLINEBUF,0,2,0E0CH,000EH;黄灯
SHOWLINEBUF,0,2,0E18H,000EH;黄灯
JMPDO2
DO0:
CMPFLG,1
JNEDO1
SHOWLINEBUF,0,2,0A12H,0002H;
SHOWLINEBUF,0,2,1212H,0002H;
SHOWLINEBUF,0,2,0E0CH,0004H;
SHOWLINEBUF,0,2,0E18H,0004H;
JMPDO2
DO1:
SHOWLINEBUF,0,2,0A12H,0004H;
SHOWLINEBUF,0,2,1212H,0004H;
SHOWLINEBUF,0,2,0E0CH,0002H;
SHOWLINEBUF,0,2,0E18H,0002H;
SHOWLINEBUF0,0,1,0C12H,0004H
SHOWLINEBUF0,0,1,1013H,0004H
SHOWLINEBUF0,0,1,0E0FH,0002H
SHOWLINEBUF0,0,1,0E16H,0002H
JMPDO3
DO2:
CMPFLG,0
JNEDO4
SHOWLINEBUF0,0,1,0C12H,000EH
SHOWLINEBUF0,0,1,1013H,000EH
SHOWLINEBUF0,0,1,0E0FH,000EH
SHOWLINEBUF0,0,1,0E16H,000EH
JMPDO3
DO4:
CMPFLG,1
JNEDO3
SHOWLINEBUF0,0,1,0C12H,0002H
SHOWLINEBUF0,0,1,1013H,0002H
SHOWLINEBUF0,0,1,0E0FH,0004H
SHOWLINEBUF0,0,1,0E16H,0004H
DO3:
SHOWLINESTR9,0,30,112AH,000FH;
SHOWLINESTR2,0,10,1038H,000FH;
SHOWLINESTR6,0,25,122CH,000FH;
SHOWLINESTR7,0,25,132CH,000FH;
RET
DOENDP
CHANGTIMEPROCNEAR
CALLCHAN
SHOWLINESTR10,0,1,113AH,000FH
MOVAH,01H
INT21H
SUBAL,30H;将输入时间值转化成
MOVBL,10;输出十进制值
MULBL
MOVTIME_R,AL
MOVAH,01H
INT21H
SUBAL,30H
ADDTIME_R,AL
SHOWLINESTR10,0,1,113FH,000FH
MOVAH,01H
INT21H
SUBAL,30H;将输入时间值转化成
MOVBL,10;输出十进制值
MULBL
MOVTIME_G,AL
MOVAH,01H
INT21H
SUBAL,30H
ADDTIME_G,AL
SHOWLINESTR10,0,1,1144H,000FH
MOVAH,01H
INT21H
SUBAL,30H;将输入时间值转化成
MOVBL,10;输出十进制值
MULBL
MOVTIME_Y,AL
MOVAH,01H
INT21H
SUBAL,30H
ADDTIME_Y,AL
CH1:
CALLGETCHAR
CMPAL,'Y'
JECH2
CMPAL,'N'
JNECH1
MOVBL,10
MOVTIME_R,BL
MOVBL,5
MOVTIME_G,BL
MOVBL,4
MOVTIME_Y,BL
CH2:
RET
CHANGTIMEENDP
CHANPROCNEAR
SHOWLINESTR,0,40,1126H,000FH
SHOWLINESTR1,0,10,1038H,000FH
SHOWLINETABLE17,0,25,122CH,000FH
SHOWLINEBUF,0,2,0A12H,000EH;黄灯
SHOWLINEBUF,0,2,1212H,000EH;黄灯
SHOWLINEBUF,0,2,0E0CH,000EH;黄灯
SHOWLINEBUF,0,2,0E18H,000EH;黄灯
SHOWLINEBUF0,0,1,0C12H,000EH
SHOWLINEBUF0,0,1,1013H,000EH
SHOWLINEBUF0,0,1,0E0FH,000EH
SHOWLINEBUF0,0,1,0E16H,000EH
RET
CHANENDP
SHOWTIMEPROCNEAR
XORAL,AL
MOVFLG,AL
MOVFLG0,AL
XORAL,AL
MOVAL,TIME_R
MOVTIME,AL
MOVAL,TIME_G
MOVTIME0,AL
S1:
MOVAH,01H
INT16H
JNZS3
DELAY;延时一秒
DECTIME
CMPTIME,-1
JNES2;不等于-1,显示,否则··
CMPFLG,2
JES
CMPFLG,1
JES0
MOVAL,TIME_G
MOVTIME,AL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 课程设计 任务书