ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:147.02KB ,
资源ID:25532517      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25532517.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机课程设计停车场出入管理系统.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机课程设计停车场出入管理系统.docx

1、微机课程设计停车场出入管理系统东南大学吴键雄学院 微机实验及课程设计课程设计报告停车场出入管理系统姓 名: 学 号: 61011108 专 业: 电类强化班 实 验 室: 组 别: 同组人员: 郑夏雯 设计时间:2013 年 5月28日 2013年 6月 4 日评定成绩: 审阅教师: 一 课程设计目的与要求2二方案论证与原理设计2三详细(机理)设计3四方案实现与测试(或调试)7五分析与总结8一. 课程设计目的与要求(含设计指标) 1、设计项目名称:停车场出入管理系统2、目的:1巩固已学的微机原理与接口的基本知识;2加强个人编程能力,学会用汇编语言编写简单使用的系统3学会对8086,8253,8

2、255等芯片的综合应用,实现对停车场的出入进行智能管理。3、基本要求: 设计实现一停车场实时管理系统。要求实时显示车位空闲情况(初值可修改,最多99辆),并分别控制A、B两个出入口。每个出入口需要控制进出栏杆,并检测车辆进出,修改统计、显示车位空闲情况,并根据空闲情况控制进入。用2*2个开关模拟两个出入口的车辆进出光电信号,2个LED灯模拟栏杆输出控制(亮代表有效,禁止出入)。允许A口进B口出,反之亦是。4、设计指标1要求用两个数码管实时显示车位空闲数目(0099);2当有空位时,如有车辆到来,则在检测到信号(有效)后2秒钟打开进入栏杆,待车进入(信号无效)后1秒钟放下栏杆,空车位数减1修改;

3、若无空位,则车辆等待,直至有车位空出;3当有车出停车场时则在检测到信号后2秒钟打开出车栏杆,带车离开3秒钟放下栏杆,空车位数加1修改;4车位发生变化时,PC上同步显示记录。 5、拓展功能18*8点阵显示进出箭头,有车辆进出空时绿色,满时红色;2自动记录车将进出时间和属性;3考虑A、B、C、D四个出入口同时控制的情况,自动显示空位数,控制车辆二.方案论证与原理设计(或基本原理)对上述基本要求和设计指标进行需求分析,并基于所有的硬件资源,我们可以采用如下办法进行实现:对于光电信号的采集(开关模拟)可以通过8255C口输入并进行判断,对于栏杆的控制同样可通过8255C口进行输出控制;对于双数码管的显

4、示,可以采用动态显示的方法,利用8255A口输出数码管的七段译码,B口输出数码管的动态片选信号。实时的空车位保存于通用寄存器中(如BX,BH表示十位,BL表示个位);对于等待时间的控制,可以通过微机内部的延迟得到,但若想要得到精确地时间,则可以利用8253定时器实现,具体做法是利用双通道计数器的级联实现对1MHz时钟信号的1000*1000分频,得到1HZ的信号,即可得到1s精确延迟。程序的基本框架如下:1、对系统进行初始化,显示当前空车位数;2、利用输入指令从8255C口低四位输出光电信号。若检测到有效信号,则对其判断端口和进出性质;若无有效信号,则继续检测信号;3、对有效信号的性质进行判定

5、:若为出信号,则执行出车程序(跳转指令实现);若为进信号,则先判断是否有空位(判断BX是否为0),若有空位,则执行进车程序,否则等待并检测是否有出车信号,至有空位出现;4、出车时首先需要一定得延迟,然后输出控制打开栅栏信号,经过一定的延迟之后,检测出车信号是否无效(表明车已经出去),无效则输出关闭栅栏信号,修改计数值并显示,否则继续等待,重复检测。进车和出车的流程差不多。三.详细(机理)设计 1、系统工作流程图(如下所示) 2、关键部分程序片段 端口信号的检测和判断控制 mov bh,a0 ;数码管的高位 mov bl,a1 ;数码管的低位 cmp bx,0000h ;如果没有空车位就转向b

6、jz b test al,08h ;00001000 jz goon1 call testa1 ;a口开关1拨上,监测a口状态goon1: test al,04h ;00000100 jz goon2 call testa2goon2: call testa3 mov bh,a0 mov bl,a1 cmp bx,0909h jz loopsb: test al,02h ;00000010 jz goon3 call testb1 ;b口开关1拨上,监测a口状态 goon3: test al,01h ;00000001 jz goon4 call testb2 goon4: call test

7、b3 jmp loops exit: mov ah,4ch int 21h入车程序控制,以A口为例 testa1 proc near push ax push dx ;a口开关1拨上,监测a口状态 cmp state_a,00h ;空闲 jz state_a1 cmp state_a,01h ;a口状态前 jz timecheck_a2s jmp exit1state_a1: mov dx,offset mess8 ;提示有车准备进入 mov ah,09h int 21h mov state_a,01h mov dx,io8253b ;计数器通道1地址,计数器赋2s mov al,00h ou

8、t dx,al mov al,08h ;clk1接的是out0,经过两次分频,得出两秒 out dx,al jmp exit1 timecheck_a2s: mov dx,io8255d ;8255B口地址 in al,dx and al,02h ;00000010b jz exit1 mov dx,offset mess3 mov ah,09h int 21h mov state_a,02h mov dx,io8255b ;开灯(栏杆打开) mov al,0bh ;00001011(C的5号口对应于栏杆信号) out dx,al exit1: pop dx pop ax rettesta1

9、endp 出车程序控制,以A口为例 testb1 proc near ;b口开关1拨上,监测a口状态 push ax push dx cmp state_b,00h jz state_b1 cmp state_b,01h jz timecheck_b2s jmp exit4state_b1: mov dx,offset mess9 ;提示有车准备离开 mov ah,09h int 21h mov state_b,01h mov dx,io8253c ;计数器赋2s mov al,00h out dx,al mov al,08h out dx,al jmp exit4 timecheck_b2s

10、: mov dx,io8255d in al,dx and al,01h jz exit4 mov dx,offset mess4 mov ah,09h int 21h mov state_b,02h mov dx,io8255b ;开灯(栏杆打开) mov al,09h out dx,al exit4: pop dx pop ax ret testb1 endp 两位数码管动态显示程序 disp proc near;显示子程序 push dx mov di,offset led mov byte ptr bz,bl add di,bz mov al,00 mov dx,ioporta out

11、 dx,al mov al,2 ;选择数码管,低位 mov dx,ioportb out dx,al mov al,byte ptrdi ;LED显示数字 mov dx,ioporta out dx,al mov cx,3000delay2: loop delay2 mov di,offset led mov byte ptr bz,bh add di,bz mov al,00 mov dx,ioporta out dx,al mov al,4 ;选择数码管,高位 mov dx,ioportb out dx,al mov al,byte ptrdi ;LED显示数字 mov dx,ioport

12、a out dx,al mov cx,3000delay3: loop delay3 pop dx retdisp endp四. 方案实现与测试(或调试)1、用TD调试工具对每个子程序模块进行单步断点测试,观察各寄存器,标志寄存器的状态是否正确,重点关注跳转指令处是否跳转正确。对中断服务子程序模块的调试重点检查断点的现场保护和现场的恢复,观察堆栈段的压栈和出栈的情况。2、整个程序连接起来,系统调试,对照流程图,确定各子程序的相互调用正确,条件转移正确,数码管的显示是否正确,是否能正常进入中断服务子程序和返回中断程序。一切正常后,对系统的功能逐一验证,检测每一项功能是否能正确执行。3、在程序的调

13、试过程中,发现了原始程序中的一些小问题(如条件转移指令的跳转范围和修改计数值程序段等)并进行了更正。单步调试时程序很好的按照设计要求运行,各项要求均符合(除了精确延迟,因为是单步调试),实现了预定的功能。但是在动态运行时却出现了问题,主要表现在计数值不稳定,实际进出一次车却出现了进出几次的记录等等。经过仔细分析发现可能是由于拨码开关存在抖动现象,而CPU的运行频率很高,因此微机实际捕捉到的开关状态跳转不止一次,这就导致了计数值的不稳定和记录的多次显示。 为此改用脉冲信号代替拨码开关进行光电信号的模拟(脉冲信号进行了消抖处理),动态运行程序后发现实验现象正常,各个功能均按要求得以实现。每产生一次

14、脉冲信号,空位数都会相应的减一或加一,同时PC机上显示相应的记录。当按住脉冲开关不放时,对应的栅栏控制灯始终为暗(表示打开),同时计数值保持不变,PC机上不显示记录,这就表明车正在进入(或驶出)中,直至其完全进入(或离开)才进行相关操作,符合设计者的意图。硬件实物图:Pc显示:五分析与总结 该系统已经能够基本完成所有的需求功能,且运行稳定,因此具有一定的价值。当然,程序中仍然有待改进的地方。主要如下:原来的基本要求是需要2s和3s的精确延迟。预先的设计也是如此。原本是想通过8253定时器产生精确地1s定时,具体的实现办法是通过双通道计数器的级联对1MHz的输入信号进行1000*1000分频,得

15、到1Hz的信号,如此便可得到1s的精确定时。定时的结束不是通过中断处理,而是在计数过程中不断地对通道1的计数值进行检测,当其减小到0时表明一个周期结束。但在实际运行过程中却出现问题,PC机警告程序中有无效的指令。在和辅导老师讨论了之后觉得可能是由于通道1计数值处于0的时间太短(实际差不多应为1ms,按理应该足够了),于是又将其out1端接至通道2计数器的时钟端,这样只要通道2的计数减一(可以再每次计数前对其赋值为1,则只需判断其是否为0即可),就表明一个周期结束,且由于通道2计数的保持时间有1s,CPU有足够的时间进行判断。但是在实际运行中PC机仍然是警告有无效指令。无奈之下只能利用指令的延迟

16、来进行模拟(loop指令)。1对于数码管的动态显示,由于需要不停地刷新数码管的片选信号,所以disp(显示)子程序就需要不停执行。但是程序中具有延迟片段(例如车进出时受到了延误,程序则要不停地进行判断),若时间过长则动态显示就会被中断,只会显示一位。因此需要在程序段中不停地调用显示子程序(从源程序中可以看出)。这方面有待改进。2对于系统的拓展功能,由于要求提的有点令人费解(如要求1、2),我没能理解,因此无法实现。另外,对于拓展功能3,将两个出入口改为四个出入口,其他要求不变,因此只需在程序中添加四出入口的控制转移程序(安排原理和双口差不多)和对应的进出控制程序(这个可以复制双出口程序的代码,

17、只需稍加改动即可)。这里只需要注意一点,那就是C口8位需要全部用来作为输入,输入8个拨码开关的信号,因此8255的控制字要做对应的改变。这里可以改用B口的高四位作栅栏的控制信号。参考书目:1杨素行,微型计算机系统及应用,清华大学出版社,北京,2007年11月2东南大学微机系统与接口课程组,微机实验及课程设计教程(试用版2.0),东南大学初出版社,南京,2009年2月附录:data segmentioport equ 0ec00h-280h ;tpc卡中设备的io地址io8253a equ ioport+280h ;计数器通道0地址io8253b equ ioport+281h ;计数器通道1地

18、址io8253c equ ioport+282h ;计数器通道2地址io8253d equ ioport+283h ;8253控制寄存器地址io8255a equ ioport+288h ;8255A口地址 io8255b equ ioport+28bh ;8255控制寄存器端口地址 io8255c equ ioport+28ah ;8255C口地址io8255d equ ioport+289h ;8255B口地址proth equ ioport+290h ;行选protlr equ ioport+298h ;红选protly equ ioport+2a0h ;黄选num db 3,4 dup

19、(0)a db 00h,00h ;用于存放空闲车位的十位和个位state_a db 00h ;标志a口状态,0表示空闲,1表示状态前,2标志状态中,3标志状态后state_b db 00h ;标志b口状态,0表示空闲,1表示状态前,2标志状态中,3标志状态后 led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;八段LEDcopyright DB *,0DH,0AH DB * southeast university *,0DH,0AH DB *- *,0DH,0AH DB * system on parking lot management *,0D

20、H,0AH DB * version:2013-06-02 *,0DH,0AH DB *- *,0DH,0AH DB * Yangyang Zhengxiawen *,0DH,0AH DB * 61011108 61011308 *,0Dh,0Ah DB *,0Dh,0Ah,$ mess1 db Please decide the parks scale with input num(0099): ,0dh,0ah,$mess2 db Illegal input! ,0dh,0ah,$mess3 db The car is entering.,0dh,0ah,$mess4 db The car

21、 is leaving.,0dh,0ah,$mess5 db Space available:,0dh,0ah,$mess6 db Sorry,the park has no space!,0dh,0ah,$mess7 db No car,0dh,0ah,$mess8 db A car wants to enter,0dh,0ah,$mess9 db A car wants to leave,0dh,0ah,$mess10 db error input signals, please check 8255 inport,0dh,0ah,$led_in db 00h,18h,30h,7fh,7f

22、h,30h,18h,00h ;箭头进 led_out db 00h,18h,0ch,0feh,0feh,0ch,18h,00h ;箭头出led_no db 00h,03ch,5ah,99h,99h,5ah,3ch,00h ;禁止data endsstacks segment stack db 100 dup (?)stacks endscode segment assume cs:code,ds:data,ss:stacksstart: mov ax,data ;初始化寄存器 mov ds,ax mov ax,stacks mov ss,ax mov dx,io8253d ;计数器0工作方式3

23、 mov al,36h ;00110110,先写低字节再写高字节,方式3(方波发生器),二进制 out dx,al mov al,70h ;01110000,计数器1,工作方式0 out dx,al mov al,0b0h ;10110000,计数器2,工作方式0 out dx,al mov dx,io8253a ;计数器0初值1024(第一次分频) mov al,00h out dx,al mov al,04h out dx,al mov dx,io8255b ;8255设置为A口及C口高四位输出,B口及C口低四位出入 mov al,83h ;10000011 设置A口及C口高四位输出,B口

24、及C口低四位出入 out dx,al mov dx,offset copyright mov ah,09h int 21hagain: mov dx,offset mess1 ;提示信息 mov ah,09h ;系统调用,在电脑屏幕上显示mess1 int 21h mov dx,offset num ;系统调用,从键盘输入初始的空车位数到缓冲区 mov ah,0ah int 21h mov al,num2 ;判断输入数值是否符合条件 cmp al,30h jb error cmp al,39h ja error mov al,num3 cmp al,30h ;小于0的话就转移到error jb

25、 error cmp al,39h ;大于9的话就转移到error ja error sub al,36h ;将ASCII码转换为数字 mov a1,al mov al,num2 sub al,36h mov a0,al jmp loopserror: mov dx,offset mess2 mov ah,09h int 21h jmp againerror2:mov dx,offset mess10 mov ah,09h int 21h jmp again; loops: ;主循环 call show ;调用数码管显示 call disp_mat ;点阵显示相关图示 mov ah,01 ;系

26、统调用 int 16h jnz exit mov dx,io8255c ;从8255C口读入数据 in al,dx;- cmp al,0fh ;排除不可能输入的干扰,增加健壮性 jz error2;- mov bh,a0 ;数码管的高位 mov bl,a1 ;数码管的低位 cmp bx,0000h ;如果没有空车位就转向b jz b test al,08h ;00001000 jz goon1 call testa1 ;a口开关1拨上,监测a口状态goon1: test al,04h ;00000100 jz goon2 call testa2goon2: call testa3 mov bh

27、,a0 mov bl,a1 cmp bx,0909h jz loopsb: test al,02h ;00000010 jz goon3 call testb1 ;b口开关1拨上,监测a口状态goon3: test al,01h ;00000001 jz goon4 call testb2 goon4: call testb3 jmp loopsexit: mov ah,4ch int 21h; testa1 proc near push ax push dx ;a口开关1拨上,监测a口状态 cmp state_a,00h ;空闲 jz state_a1 cmp state_a,01h ;a口

28、状态前 jz timecheck_a2s jmp exit1state_a1: mov dx,offset mess8 ;提示有车准备进入mov ah,09hint 21h mov state_a,01h mov dx,io8253b ;计数器通道1地址,计数器赋2s mov al,00h out dx,al mov al,08h ;clk1接的是out0,经过两次分频,得出两秒 out dx,al jmp exit1timecheck_a2s: mov dx,io8255d ;8255B口地址 in al,dx and al,02h ;00000010b jz exit1 mov dx,offset mess3 mov ah,09h

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1