




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东南大学吴键雄学院 微机实验及课程设计课程设计报告停车场出入管理系统姓 名: 学 号: 61011108 专 业: 电类强化班 实 验 室: 组 别: 同组人员: 郑夏雯 设计时间:2013 年 5月28日 2013年 6月 4 日评定成绩: 审阅教师: 目 录一 课程设计目的与要求2二方案论证与原理设计2三详细(机理)设计3四方案实现与测试(或调试)7五分析与总结8一. 课程设计目的与要求(含设计指标)1、设计项目名称:停车场出入管理系统2、目的:1 巩固已学的微机原理与接口的基本知识;2 加强个人编程能力,学会用汇编语言编写简单使用的系统3 学会对8086,8253,8255等芯片的综合应
2、用,实现对停车场的出入进行智能管理。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、拓展功能1 8*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;如果没有空车位就转向bjz btest a
6、l,08h;00001000jz goon1call testa1;a口开关1拨上,监测a口状态goon1: test al,04h;00000100jz goon2call testa2goon2: call testa3mov bh,a0mov bl,a1cmp bx,0909hjz loopsb:test al,02h;00000010jz goon3call testb1;b口开关1拨上,监测a口状态 goon3: test al,01h;00000001jz goon4call testb2 goon4: call testb3jmp loops exit: mov ah,4chin
7、t 21h入车程序控制,以A口为例 testa1 proc nearpush axpush dx ;a口开关1拨上,监测a口状态cmp state_a,00h ;空闲jz state_a1 cmp state_a,01h;a口状态前jz timecheck_a2sjmp exit1state_a1: mov dx,offset mess8;提示有车准备进入 mov ah,09h int 21hmov state_a,01hmov dx,io8253b;计数器通道1地址,计数器赋2smov al,00h out dx,almov al,08h ;clk1接的是out0,经过两次分频,得出两秒ou
8、t dx,aljmp exit1 timecheck_a2s: mov dx,io8255d ;8255B口地址in al,dxand al,02h ;00000010bjz exit1mov dx,offset mess3mov ah,09hint 21hmov state_a,02hmov dx,io8255b ;开灯(栏杆打开)mov al,0bh ;00001011(C的5号口对应于栏杆信号)out dx,al exit1: pop dxpop ax rettesta1 endp 出车程序控制,以A口为例 testb1 proc near;b口开关1拨上,监测a口状态push axpu
9、sh dxcmp state_b,00hjz state_b1cmp state_b,01hjz timecheck_b2sjmp exit4state_b1: mov dx,offset mess9;提示有车准备离开 mov ah,09h int 21hmov state_b,01hmov dx,io8253c ;计数器赋2smov al,00hout dx,almov al,08hout dx,aljmp exit4 timecheck_b2s: mov dx,io8255din al,dxand al,01hjz exit4mov dx,offset mess4mov ah,09hint
10、 21hmov state_b,02hmov dx,io8255b;开灯(栏杆打开)mov al,09hout dx,al exit4: pop dxpop 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 dx,al mov al,2 ;选择数码管,低位 mov dx,ioportb out dx,al mov al,byte ptrdi ;LED显示数字 mov dx,i
11、oporta 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,ioporta out dx,al mov cx,3000delay3: loop delay3 pop dx retdisp endp4. 方案实现与测试(或调试)1、用TD调试工具
12、对每个子程序模块进行单步断点测试,观察各寄存器,标志寄存器的状态是否正确,重点关注跳转指令处是否跳转正确。对中断服务子程序模块的调试重点检查断点的现场保护和现场的恢复,观察堆栈段的压栈和出栈的情况。2、整个程序连接起来,系统调试,对照流程图,确定各子程序的相互调用正确,条件转移正确,数码管的显示是否正确,是否能正常进入中断服务子程序和返回中断程序。一切正常后,对系统的功能逐一验证,检测每一项功能是否能正确执行。3、在程序的调试过程中,发现了原始程序中的一些小问题(如条件转移指令的跳转范围和修改计数值程序段等)并进行了更正。单步调试时程序很好的按照设计要求运行,各项要求均符合(除了精确延迟,因为
13、是单步调试),实现了预定的功能。但是在动态运行时却出现了问题,主要表现在计数值不稳定,实际进出一次车却出现了进出几次的记录等等。经过仔细分析发现可能是由于拨码开关存在抖动现象,而CPU的运行频率很高,因此微机实际捕捉到的开关状态跳转不止一次,这就导致了计数值的不稳定和记录的多次显示。 为此改用脉冲信号代替拨码开关进行光电信号的模拟(脉冲信号进行了消抖处理),动态运行程序后发现实验现象正常,各个功能均按要求得以实现。每产生一次脉冲信号,空位数都会相应的减一或加一,同时PC机上显示相应的记录。当按住脉冲开关不放时,对应的栅栏控制灯始终为暗(表示打开),同时计数值保持不变,PC机上不显示记录,这就表
14、明车正在进入(或驶出)中,直至其完全进入(或离开)才进行相关操作,符合设计者的意图。硬件实物图:Pc显示:五分析与总结 该系统已经能够基本完成所有的需求功能,且运行稳定,因此具有一定的价值。当然,程序中仍然有待改进的地方。主要如下:原来的基本要求是需要2s和3s的精确延迟。预先的设计也是如此。原本是想通过8253定时器产生精确地1s定时,具体的实现办法是通过双通道计数器的级联对1MHz的输入信号进行1000*1000分频,得到1Hz的信号,如此便可得到1s的精确定时。定时的结束不是通过中断处理,而是在计数过程中不断地对通道1的计数值进行检测,当其减小到0时表明一个周期结束。但在实际运行过程中却
15、出现问题,PC机警告程序中有无效的指令。在和辅导老师讨论了之后觉得可能是由于通道1计数值处于0的时间太短(实际差不多应为1ms,按理应该足够了),于是又将其out1端接至通道2计数器的时钟端,这样只要通道2的计数减一(可以再每次计数前对其赋值为1,则只需判断其是否为0即可),就表明一个周期结束,且由于通道2计数的保持时间有1s,CPU有足够的时间进行判断。但是在实际运行中PC机仍然是警告有无效指令。无奈之下只能利用指令的延迟来进行模拟(loop指令)。1 对于数码管的动态显示,由于需要不停地刷新数码管的片选信号,所以disp(显示)子程序就需要不停执行。但是程序中具有延迟片段(例如车进出时受到
16、了延误,程序则要不停地进行判断),若时间过长则动态显示就会被中断,只会显示一位。因此需要在程序段中不停地调用显示子程序(从源程序中可以看出)。这方面有待改进。2 对于系统的拓展功能,由于要求提的有点令人费解(如要求1、2),我没能理解,因此无法实现。另外,对于拓展功能3,将两个出入口改为四个出入口,其他要求不变,因此只需在程序中添加四出入口的控制转移程序(安排原理和双口差不多)和对应的进出控制程序(这个可以复制双出口程序的代码,只需稍加改动即可)。这里只需要注意一点,那就是C口8位需要全部用来作为输入,输入8个拨码开关的信号,因此8255的控制字要做对应的改变。这里可以改用B口的高四位作栅栏的
17、控制信号。参考书目: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地址io8253c equ ioport+282h ;计数器通道2地址io8253d equ ioport+283h ;8253控制寄存器地址io8255a equ
18、ioport+288h ;8255A口地址 io8255b equ ioport+28bh ;8255控制寄存器端口地址 io8255c equ ioport+28ah ;8255C口地址io8255d equ ioport+289h ;8255B口地址prothequ ioport+290h ;行选protlrequ ioport+298h ;红选protlyequ ioport+2a0h ;黄选num db 3,4 dup(0)a db 00h,00h ;用于存放空闲车位的十位和个位state_a db 00h ;标志a口状态,0表示空闲,1表示状态前,2标志状态中,3标志状态后state
19、_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 *',0DH,0AH DB '* version:2013-06-02 *',0DH
20、,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,'$'m
21、ess3 db 'The car is entering.',0dh,0ah,'$'mess4 db 'The car 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 c
22、ar 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,7fh,30h,18h,00h;箭头进 led_out db 00h,18h,0ch,0feh,0feh,0ch,18h,00h;箭头出led_no db 00h,03ch,5
23、ah,99h,99h,5ah,3ch,00h;禁止data endsstacks segment stackdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacksstart: mov ax,data ;初始化寄存器mov ds,axmov ax,stacksmov ss,axmov dx,io8253d ;计数器0工作方式3mov al,36h ;00110110,先写低字节再写高字节,方式3(方波发生器),二进制out dx,almov al,70h ;01110000,计数器1,工作方式0out dx,al
24、mov al,0b0h ;10110000,计数器2,工作方式0out dx,almov dx,io8253a ;计数器0初值1024(第一次分频)mov al,00hout dx,almov al,04hout dx,almov dx,io8255b ;8255设置为A口及C口高四位输出,B口及C口低四位出入mov al,83h ;10000011 设置A口及C口高四位输出,B口及C口低四位出入out dx,almov dx,offset copyrightmov ah,09hint 21hagain: mov dx,offset mess1 ;提示信息mov ah,09h ;系统调用,在电
25、脑屏幕上显示mess1int 21hmov dx,offset num ;系统调用,从键盘输入初始的"空车位数"到缓冲区mov ah,0ahint 21hmov al,num2 ;判断输入数值是否符合条件cmp al,30hjb errorcmp al,39hja errormov al,num3cmp al,30h ;小于0的话就转移到errorjb errorcmp al,39h ;大于9的话就转移到errorja errorsub al,36h ;将ASCII码转换为数字mov a1,almov al,num2sub al,36hmov a0,aljmp loopse
26、rror: mov dx,offset mess2mov ah,09hint 21hjmp againerror2:mov dx,offset mess10mov ah,09hint 21hjmp again;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
27、;>>>>>> loops: ;主循环call show ;调用数码管显示call disp_mat;点阵显示相关图示mov ah,01 ;系统调用int 16hjnz exitmov dx,io8255c;从8255C口读入数据in al,dx;-cmp al,0fh;排除不可能输入的干扰,增加健壮性jz error2;-mov bh,a0 ;数码管的高位mov bl,a1 ;数码管的低位cmp bx,0000h;如果没有空车位就转向bjz btest al,08h ;00001000jz goon1call testa1 ;a口开关1拨上,监测a口状态g
28、oon1:test al,04h;00000100jz goon2call testa2goon2: call testa3mov bh,a0mov bl,a1cmp bx,0909hjz loopsb:test al,02h ;00000010jz goon3call testb1 ;b口开关1拨上,监测a口状态goon3:test al,01h;00000001jz goon4call testb2goon4: call testb3jmp loopsexit: mov ah,4chint 21h;>>>>>>>>>>>&g
29、t;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> testa1 proc nearpush axpush dx ;a口开关1拨上,监测a口状态cmp state_a,00h ;空闲jz state_a1 cmp state_a,01h;a口状态前jz timecheck_a2sjmp exit1st
30、ate_a1: mov dx,offset mess8;提示有车准备进入mov ah,09hint 21hmov state_a,01hmov dx,io8253b;计数器通道1地址,计数器赋2smov al,00h out dx,almov al,08h ;clk1接的是out0,经过两次分频,得出两秒out dx,aljmp exit1timecheck_a2s: mov dx,io8255d;8255B口地址in al,dxand al,02h ;00000010bjz exit1mov dx,offset mess3mov ah,09hint 21hmov state_a,02hmov
31、 dx,io8255b;开灯(栏杆打开)mov al,0bh ;00001011(C的5号口对应于栏杆信号)out dx,alexit1: pop dxpop ax rettesta1 endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&
32、gt;>>>> testa2 proc nearpush axpush dxcmp state_a,02hjnz exit2mov dx,io8253b;计数器通道1地址mov al,00hout dx,almov al,04h ;计时1sout dx,almov state_a,03hexit2: pop dxpop axrettesta2 endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>&
33、gt;>>>>>>>>>>>>>>>>>>>>>>>>>>> testa3 proc nearpush axpush dxcmp state_a,03hjnz exit3mov dx,io8255d ;8255B口地址in al,dxand al,02hjz exit3 ;时间到mov al,a1mov ah,a0sub al,1aasmov a1,almov a0,ahmov state_a,00hmov dx,io8255bmov
34、 al,0ah ;C5=0关灯(栏杆闭合)out dx,almov dx,offset mess5;屏幕显示剩余车位mov ah,09hint 21hmov dl,a0add dl,30hmov ah,02hint 21hmov dl,a1add dl,30hmov ah,02hint 21hmov dl,0ah;回车mov ah,02hint 21hmov dl,0dh;换行mov ah,02hint 21hmov bh,a0mov bl,a1cmp bx,0000hjnz exit3mov dx,offset mess6mov ah,09hint 21hexit3: pop dxpop a
35、xrettesta3 endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> testb1 proc near ;b口开关1拨上,监测a口状态push axpush dxcmp state_b,00hj
36、z state_b1cmp state_b,01hjz timecheck_b2sjmp exit4state_b1: mov dx,offset mess9;提示有车准备离开mov ah,09hint 21hmov state_b,01hmov dx,io8253c;计数器赋2smov al,00hout dx,almov al,08hout dx,aljmp exit4timecheck_b2s: mov dx,io8255din al,dxand al,01hjz exit4mov dx,offset mess4mov ah,09hint 21hmov state_b,02hmov dx
37、,io8255b;开灯(栏杆打开)mov al,09hout dx,alexit4: pop dxpop ax rettestb1 endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> testb2
38、proc nearpush axpush dxcmp state_b,02hjnz exit5mov dx,io8253cmov al,00hout dx,almov al,0ch ;计时3sout dx,almov state_b,03hexit5: pop dxpop axrettestb2 endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&
39、gt;>>>>>>>>>>>>>>>>>> testb3 proc nearpush axpush dxcmp state_b,03hjnz exit6mov dx,io8255din al,dxand al,01hjz exit6mov al,a1mov ah,a0add al,1aaamov a1,almov a0,ahmov state_b,00hmov dx,io8255bmov al,08h ;关灯(栏杆关闭)out dx,almov dx,offset mess5;屏幕显示剩
40、余车位mov ah,09hint 21hmov dl,a0add dl,30hmov ah,02hint 21hmov dl,a1add dl,30hmov ah,02hint 21hmov dl,0ahmov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov bh,a0mov bl,a1cmp bx,0909hjnz exit6mov dx,offset mess7mov ah,09hint 21hexit6: pop dxpop axrettestb3 endp ;=show proc near push dxpush axpush si ;数码管显示mov dx,io8255b ;向8255的C口第六位写入0,低位mov al,0ch ;00001100,out dx,almov al,a0 mov ah,00hmov dx,io82
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容服务租赁合同范本
- 电气代维合同范本
- 产品销售合同范本格式2篇
- 厂房生活保障合同范本
- 兄弟房子转让合同范本
- 2025年卫生政策与管理知识测评试题及答案
- 知识竞赛题目及答案excel版
- 生物科技产业创新发展新趋势研究
- 2025年辅助判读题库及答案
- 2025年石油天然气开采行业安全生产考试题库及答案
- 2025年中国船舶集团校园招聘面试模拟题及答案
- 2025房屋租赁托管合同示范文本
- (2025年标准)股东合伙协议及分红协议书
- 污水处理厂设备安装施工方案
- 巴西白糖联营协议合同范本
- 2025年事业单位工勤技能-甘肃-甘肃护理员一级(高级技师)历年参考题库含答案解析(5卷)
- 通信技术的现状与发展
- 水稻全程机械化栽培技术
- 北京师大附中市级名校2026届中考适应性考试语文试题含解析
- 2025年秋季学期初中学校全面工作安排(含各周重点工作安排)
- 2025年山西省教师职称考试(理论知识)复习题及答案(新课标)-山西教师
评论
0/150
提交评论