




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】微机实验及课程设计课程设计报告出租车自动计价器修订版东南大学自动化学院《微机实验及课程设计》课程设计报告综合测试题六:出租车自动计价器姓名:刘策学号:08014116专业:自动化实验室:金智楼五楼组别:同组人员:设计时间:2016年06月1日——2016年6月16日评定成绩:审阅教师:目录一.课程设计目的与要求..…………………..二.方案论证与原理设计....………....………三.实验流程与测试结果…........……………四.实验总结……...………….五.附录....................................................................................................................................一.课程设计目的与要求1、课程设计目的(1)总结、应用前面八个实验中积累的微机实验经验;(2)熟悉8253、8255等芯片的使用方法;(3)结合课堂中所学的汇编语言基础知识,进行系统的编程,培养动手操作能力(4)锻炼了查找错误,修正错误的能力2、课程设计要求设计一个出租车自动计价器,计费包括起步价、行车里程计费、等待时间计费三部分,用三只数码管显示总金额,最大值为99.9元,起步价8.0元,3公里之内按起步价计费,超过3公里,往返双程可设每1公里1.2元,单程每公里1.8元,等待时间每分钟0.2元。用两位数码管显示总里程数,最大值99km,用两位数码管显示等待时间(分钟),最大值99分钟。用直流电机模拟出租车行驶,里程数与脉冲个数成正比,每1km脉冲数100个(可设定),低于每小时5公里时作为等待状态。(1)基本要求i假设有计数比较器测定停车与行车状态,转换成开关信号。开关输入行车状态,并用LED灯显示;同时有空车信号,可用于启动计价并用LED灯显示;ii记录里程数,等待时间,计算总金额,并实时显示;iii模拟刹车和启动动作,动作后立即停车/行车;iv简单的标定和检错功能。(2)进一步设计要求i打印输出功能,在屏幕上打印上下车时间、里程、价格;ii保存最近5次数据,可选择打印在屏幕上以便检查;iii有语音提示功能。二.方案论证与原理设计 整个出租车自动计价器系统是由主程序控制模块、计价模块、显示模块三部分组成。1、主程序控制模块总控制模块的作用是控制出租车的行车状态以及控制数码管的显示内容,包括如下几点:判断是否选中单程或双程判断出租车是否处于等待判断数码管显示内容判断系统是否开始行驶具体的规划如下:以8255芯片为例,将A口定义为方式0输入,A0连接8253定时器的OUT1输出,以便用来检测是否存在1s定时。后面相继的1-5分别接到逻辑电平开关K1-K5,K6接某个与门右引脚控制直流电机的开关。而K7开关接到一个LED灯上,检验判断是处于开始计价还是空车状态。开关名称K1K2K3K4K5K6K7对应口PA1PA2PA3PA4PA5与门右引脚PA7功能K=0停止状态单程K3K4K5显示功能关闭直流电机空车状态K=1计费状态双程01X时间打开直流电机开始计价1XX里程000费用低位001费用高位计数模块计算路程、计算时间两个,通过计数模块可以获得出租车目前行驶的路程以及已经行驶的时间,该模块的数据应用到计费模块可以行驶及等待过程的总费用。其原理是根据直流电机每秒中输出的脉冲数分情况,预先设定好一个脉冲阈值(本实验用的是10),当直流电机每秒输出的脉冲数大于10时,出租车处于行车状态,此时里程=历史里程+脉冲数/100。当直流电机每秒输出的脉冲数小于10时,出租车处于等待状态,此时等待时间加1。8253定时器功能分配如下:计数器0设置成方式3,计数器1设置成方式0,计数器0、1的计数初值均设置为1000,然后将两个计数器级联,计数器0输入1MHz的时钟信号,利用out1产生的1S的周期信号来产生1S的定时中断。计数器2设置成方式0,将直流电机的脉冲输入到CLK2,用来计数直流电机的脉冲数。计费模块计费模块利用计数模块提供的时间以及路程等信息,通过条件等操作针对不同的情况采用不同的计费方式,最终得到总费用。计费公式如下:显示模块根据设计要求我们可以将显示模块主要分为屏幕显示和数码管显示两个部分。第一部分是屏幕显示,在屏幕上显示里程数、等待时间和总费用,最近5次费用等等,可以通过调用DOS中断显示数据;第二部分是通过数码管显示,由于数码管只有两个,我们组合使用K3、K4、K5选择显示当前里程数、等待时间和总费用的高低位,数码管位选和段选分别用8255芯片的C口PC0和PC1、B口PB0~PB7控制。而空车信号由LED灯显示,只需将K7连接LED灯上即可显示空车状态。其中8255B口设置成方式0输出,用于控制八位数码管的段选。8255C口设置为方式0输出方式。三.实验流程与测试结果判断单双程从8255A口读入开关开始判断单双程从8255A口读入开关开始数值显示更新数值显示更新初始化程序数值显示更新数值显示更新初始化程序数码管显示数码管显示NNPA1=1PA1=1YYNNPA0=1PA0=1YY系统启动系统启动调用显示模块调用显示模块NNPA7=1PA7=1YY计价更新模块计价更新模块DJK6DJK6直流电机5直流电机分析与总结按照题目的实验要求,我一共完成了5个基本要求和提高要求的(1)、(2)两部分。通过机械开关控制出租车的状态,LED灯L7显示行车状态:L7灭表示空车,L7亮表示车里有人且自动计价器在计价。可以通过调节控制直流电机的电位器来切换出租车的行驶状态。在屏幕上将动态显示出当前的路程、等待时间和费用,数码管的显示数据则可以通过开关来切换。经过多次检验和验证,本项目能正确地计算出租车行驶的费用,实现了出租车自动计价器的基本功能和部分扩展功能。在实验中我熟悉了8253、8255的操作过程和原理,了解了直流电机、数码管的使用方法,对汇编语言的书写、编辑能力有了进一步提高。事实上我的设计过程并不是一帆风顺。一开始在查找资料后我发现了一个比较简单的思路,即把汽车实时数据预先存储在数据段的字符串里面,通过8253定时得到的时间、8253获得的直流电机脉冲数目,计算出等待时间、行驶路程等重要参数,间接的从预存数据中取得费用等,显示在屏幕和数码管上。由于现实行车中不会出现太长的等待时间,出租车也不可能每客都行驶数十公里,所以我觉得可行性还是相当高的。但是后来因为其中的几个问题一直得不到解决,且这些问题由很重要,所以不得不放弃原来的思路,参考去往届学长成熟的经验方法,最终比较成功的实现了各功能。老师提出了等待脉冲阈值设定的问题,原来的脉冲阈值设定为50,太高不符合现实情况,后来进行了更改,改为10。除此之外直流电机转速过快会使屏来不及更新数据,在咨询学长后在调整速度又恢复正常。在测试代码时,调试数码管相对来说比较麻烦,程序中的算法存在一点点漏洞,会对显示造成很多影响,最终我们也发现数码管显示值会比屏幕显示出来的值小数个采样,通过调整代码也没有解决它。这次实验让我对微机系统各组成部分的工作原理有了更加清晰的认识,了解了微机乃至以后单片机的一些设计和应用的方法。这是很宝贵的收获。附录cursormacrorow,clm;***********移动光标位置到(row,clm)*******************io8255c第三口接LED灯用来表示行车等待pushax pushbx pushdx movah,2 ;INT10功能号为2时,置光标位置 movbh,0 ;页号为0 movdh,row movdl,clm int10h popdx popbx popaxendmdatasegment ioportequ0ec00h-0280h io8253aequioport+280h ;8253计数器0地址 io8253bequioport+281h ;8253计数器1地址 io8253cequioport+282h ;8253计数器2地址 io8253dequioport+283h ;8253控制寄存器地址 io8255aequioport+288h ;8255A口地址 io8255cequioport+28ah ;8255C口地址 io8255bequioport+289h;8255B口地址 io8255dequioport+28bh ;8255控制寄存器地址 onekmequ100 ;一公里对应的脉冲数 waitnumequ10 ;参考脉冲数,小于此值即为等待 startpequ80 ;起步价8元 pricedb12 ;行车计费,1.2元/公里 waitpequ2 ;等待计费,0.2元/分钟 str0db'',0dh,0ah,'$'str1db'****************Taxicalculatingfeemachine**************',0dh,0ah,'$'str6db'*********************08013226**************************',0dh,0ah,'$'str2db'*********PRICE:1.80yuan/km0.2yuan/min***************',0dh,0ah,'$'str12db'*********PRICE:1.20yuan/km0.2yuan/min***************',0dh,0ah,'$'str3db'TIME:0(M)',0dh,0ah,'$'str4db'DIST:0(KM)',0dh,0ah,'$'str5db'COST:0(YUAN)',0dh,0ah,'$'str7db'Fivecost:',0dh,0ah,'$'str11db'GETOFFTHETAXIend_time:00:00:00',0dh,0ah,'$'str14db'start_time:00:00:00',0dh,0ah,'$'pnumdw0 ;总脉冲数 distdb0 ;总里程 timedb0 ;等待时间 totaldw0000h ;总费用 flag db11h xdk db0feeBufferdw0000h,0000h,0000h,0000h,0000h ;五次费用 feeCountdb0 leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码buffer1db6,5h;存放要显示的个位和十位bzdw?;位码dataendsstackssegmentstack db100dup(?)stacksendscodesegment assumecs:code,ds:data,ss:stacksmainprocstart: movax,data movds,ax movax,stacks movss,ax movdx,io8255a inal,dx testal,04h ;0代表单程,1代表双程 jzbb movbl,55h ;作为单程还是双程的标志,等于55h则为双程 movflag,bl movbl,12;十进制,表示往返双程则为1.2元/公里 movprice,bl bb: callini ;调用初始化子程序 calldisp;调用数值更新程序begin1: movdi,offsetbuffer1;设di为显示缓冲区calllll;;调用数码管显示程序 movdx,io8255ainal,dx testal,02h ;0代表计费状态,1代表结束 jnzexittestal,01h ;判断是否有1秒钟定时中断信号,1为start启动 jzbegin1;为0则重新调用数码管显示程序 callbegin ;启动计费movbx,total moval,bl callextendBcd;调用二进制转换为BCD码程序,输入为八位的al,返回值为16位的ax movwordptr[buffer1],ax;将低位价格BCD码存入要显示的数字的内存区 movdx,io8255a inal,dx testal,00001000b jzshowl1 ;K3=0,不显示里程数 moval,dist callextendBcd movwordptr[buffer1],ax;将里程数对应的BCD码存入要显示的数字的内存区 jmpshowl3showl1: movdx,io8255a inal,dx testal,00010000bjzshowl2 ;K4=0,不显示等待时间 moval,time callextendBcd movwordptr[buffer1],ax;将等待时间对应的BCD码存入要显示的数字的内存区jmpshowl3showl2:movdx,io8255a inal,dx testal,00100000bjzshowl3 ;K5=0,不显示价格高两位 movbx,total moval,bh callextendBcd movwordptr[buffer1],ax;将高位价格BCD码存入要显示的数字的内存区showl3: movdx,io8255a inal,dx jzbegin1 ;每过一秒钟则判断一下是否停止等等 callgains ;每过一秒钟则调用一次计费模块 movbl,feeCount cmpbl,9 jaaboveCount jmpbelowCountaboveCount:movbl,0;五个一循环belowCount:movax,total movbh,0 movfeeBuffer[bx],ax incbl incbl movfeeCount,bl jmpbegin1exit:calloff_texicursor11,0 movah,4ch ;退出程序 int21hmainendp;*********************扩展BCD码***************************extendBcdprocpushbx pushcxmovbl,al movcl,4 shral,cl;取高四位 movah,al andbl,00001111b moval,bl;取低四位 popcx popbx retextendBcdendp;*********************数码管显示程序***************************lllprocpushdipushbx pushax pushsi movbh,2ll:movbyteptrbz,bh pushdi decdi adddi,bz movbl,[di];bl为要显示的数 popdimoval,0movdx,io8255c;消隐,全部关闭outdx,al movbh,0 movsi,offsetled;置led数码表偏移地址为SI addsi,bx;求出对应的led数码地址 moval,byteptr[si] movdx,io8255b;自8255B口输出段码 outdx,al moval,byteptrbz;使相应的数码管亮 oral,xdk movdx,io8255c outdx,al;自8255C口输出位码movcx,3000delay: loopdelay;延时 movbh,byteptrbz shrbh,1 jnzll;右移一位判断显示的高地位,若为高位,回ll继续显示低位popsi popax popbx popdi retlllendp;*********************计价更新程序***************************gainsproc pushax pushbx pushcx pushdx movax,total andax,ax jzreturn2;总价是0,则返回主程序 movdx,io8253c ;读取脉冲数 inal,dx ;将直流电机的脉冲输入到CLK2,用来计数直流电机的脉冲数 movbl,al movdx,io8253a ;计数器0重新计数 movax,1000 outdx,al moval,ah outdx,al movdx,io8253b movax,1000 ;计数器1重新计数outdx,al moval,ah outdx,al moval,0 movdx,io8253c ;计数器2重新计数 outdx,al moval,0ffh ;计算脉冲数 subal,bl incal cmpal,waitnum ;脉冲数小于参考值则为等待状态,否则为行车状态 jbwgain movah,00000100b movxdk,ah movah,0 addpnum,ax ;计算总的脉冲数 movax,pnum movbl,100 divbl callnum2bcds ;计算行驶里程数并转化为2位压缩BCD码 movdist,al jmpnewcost;更新总费用wgain:moval,0 movxdk,al moval,time ;判断为等待状态,等待时间加1 callbcd2num;将2位压缩BCD码转换成十进制数字 incal callnum2bcds;再将二进制转换为压缩BCD码,方便数码管显示 movtime,al jmpnewcostreturn2:jmpreturnnewcost:moval,dist ;计算当前总金额 callbcd2num;BCD转换为10进制 movtotal,startp cmpal,3 jbecost2;路程小于三公里 subal,3 movah,0 movbl,price mulbl addtotal,ax;总费用cost2: moval,time ;开始等待计费 callbcd2num movah,0 movbl,waitp mulbl addax,total;ax中等待费用加上total中路程费用 callnum2bcdl;转换为4位压缩BCD格式 movtotal,ax calldisp;数值更新显示程序return: popdx popcx popbx popaxretgainsendp;*********************2位压缩BCD码转换为十进制数***************************bcd2numproc pushbx pushcx movbh,al movcl,4 shral,cl movbl,10 mulbl andbh,00001111b addal,bh popbx popcx ret bcd2numendp;**********************************小数点显示程序*********************commaproc pushax pushdx movah,2 movdl,'.' int21h popdx popax retcommaendp;*********************************显示程序*******************************showproc callshow1 cmpdl,1 ;是否显示小数点的标志 jnzdown callcommadown: callshow11 ret showendp;****************************显示子程序1*************************************show1proc pushdx pushcx pushax movdl,al ;显示程序用的是al寄存器 movcl,4 shrdl,cl ;保留高四位,清除低四位 adddl,30h ;dl存的是所显示字符的ASCII码,若显示数字,则需将其数值加上30h movah,02h int21h popax popcx popdx retshow1endp;**************************显示子程序2*********************************** show11proc pushdx pushax movdl,al anddl,00001111b ;保留低四位,清除高四位 adddl,30h movah,02h int21h popax popdx retshow11endp;***************************数值更新显示程序 *******************************dispproc pushax pushbx pushdx pushsi movdl,0 cursor3,6 moval,time callshow;显示等待时间 movdl,0 cursor4,6 moval,dist callshow;显示行驶里程 movdl,0 cursor5,6 movbx,total moval,bh callshow;显示总金额前两位 movdl,1 ;使show子程序调用comma moval,bl callshow;显示总金额第三位以及小数点后的值 movsi,0movdl,0 cursor7,12 movbx,feeBuffer[si] moval,bh callshow movdl,1 moval,bl callshow;显示前五次的总金额————1incsi incsi movdl,0 cursor7,21 movbx,feeBuffer[si] moval,bh callshow movdl,1 moval,bl callshow;显示前五次的总金额————2incsi incsi movdl,0 cursor7,30 movbx,feeBuffer[si] moval,bh callshow movdl,1 moval,bl callshow;显示前五次的总金额————3incsi incsi movdl,0 cursor7,39 movbx,feeBuffer[si] moval,bh callshow movdl,1 moval,bl callshow;显示前五次的总金额————4 incsi incsi movdl,0 cursor7,48 movbx,feeBuffer[si] moval,bh callshow movdl,1 moval,bl callshow;显示前五次的总金额————5;loppend popsi popdx popbx popax retdispendp;*********************************8位二进制码转2位压缩BCD码*****************num2bcdsproc pushbx pushcx pushdx cmpal,9 jbe_out1;小于9,不用转换 movah,0 movbl,10 divbl cmpal,10 jaeerror1;数值比100大,则错误 movcl,4 shlal,cl andah,0fh addal,ah_out1: popdx popcx popbx reterror1:cursor11,0 movsi,offsetstr7 movdx,si movah,09h int21h movah,4ch int21hnum2bcdsendp;*********************************16位二进制码转4位压缩BCD码*****************num2bcdlproc pushbx pushcx pushdx cmpax,9999 jaerror2 cmpax,0009h jbe_out2 movdx,ax movbl,100 divbl movbh,ah callnum2bcds;低8位转换为压缩BCD movbl,al moval,bh callnum2bcds;高8位转换为压缩BCD movah,bl_out2: popdx popcx popbx reterror2: cursor11,0 movsi,offsetstr7 movdx,si movah,09h int21h movah,4ch int21hnum2bcdlendp;*****************************************初始化程序***********************iniproc pushax pushdx pushsi movbh,7 ;窗口底部卷入行属性 movdx,314fh ;窗口右下角行号列号 movax,0600h ;al=0表示清窗口 movcx,0 ;窗口左上角行号列号 int10h ;清屏幕 cursor0,0 movax,0 movpnum,ax movdist,al movtime,al movtotal,ax ;相关存储单元内容清零 movdx,io8255d outdx,al movdx,offsetstr1;在屏幕上显示提示语“Taxicalculatingfeemachine” movah,09h int21h movdx,offsetstr6;显示08014116 movah,09h int21h cmpflag,55h ;作为单程还是双程的标志 jzbbb movdx,offsetstr2;比较,flag不是55h,单程,显示1.8yuan/km jmpbbbb bbb:movdx,offsetstr12;比较,flag为55h,双程,显示1.2yuan/km bbbb:movah,09h int21h movdx,offsetstr3;显示TIME:0(M) movah,09h int21h movdx,offsetstr4;显示DIST:0(KM) movah,09h int21h movdx,offsetstr5;显示COST:0(YUAN) movah,09h int21h movdx,offsetstr14;显示start_time:00:00:00 movah,09h int21h movdx,offsetstr7;显示Fivecost: movah,09h int21h popsi popdx popax ret iniendp;*********************************启动计费*********************************beginproc pushax pushbx pushcx pushdx movax,total andax,ax jnzrettt ;判断本身是否是0,不等于就直接退出;*********************************get_start_time********************************** movah,2ch int21h ;取时间,ch小时,cl分钟,dh秒 movdl,0 moval,ch callnum2bcds cursor6,11 callshow moval,cl callnum2bcds cursor6,14 callshow moval,dh callnum2bcds cursor6,17 callshow;******************************************************************************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 销售人员月工作总结与计划(16篇)
- 行政组织理论的未来视野试题及答案
- 数据库系统中的缓存机制试题及答案
- 个人房屋买卖合同范文(17篇)
- 施工现场管理试题及答案
- 行政决策过程中的实验与实证研究试题及答案
- 小学语文减负提质总结(5篇)
- 行政理论在新形式下的应用考题及答案
- 行政管理中的资源配置效率研究试题及答案
- 数据库数据交互与实时性试题及答案
- 新版中日交流标准日本语初级下同步测试卷及答案(第30课)
- 保赔协会–历史,承保内容和组织
- 建筑物的防雷及安全用电电子教案
- 中国近现代史社会实践报告-2000字
- 系杆拱桥工程测量施工方案
- ISA-300+使用-300技术使用说明书
- 高层建筑“一栋一册”消防安全档案
- 柳洲学校学生仪容仪表日常检查记录表
- 经纬仪检测报告(共3页)
- 人造草坪技术参数
- 浅谈歌曲《我的祖国》
评论
0/150
提交评论