1、计程车计价器设计 目 录1. 绪论2课题背景和意义22. 设计方案22.1设计思路22.1.1硬件设计22.1.2软件设计32.2系统按键操作说明32.3操作方法说明33. 硬件模块简介43.1可编程定时/计数器825443.1.1 8254基本功能43.1.2 8254工作方式43.1.3 8254方式控制字43.1.4 8254初始化43.1.5 8254工作原理图:53.2可编程并行I/O接口芯片8255A53.2.1 8255A工作方式53.2.2 8255A控制字53.2.3 8255A初始化63.2.4 8255A的中断应用:73.3中断控制器8259A73.3.1 8259初始化
2、命令字73.3.2 8259初始化83.4 LED显示9数码管字型编码表:94. 硬件电路设计10总体方案与框图105. 软件程序设计115.1系统的主程序设计11系统的主程序流程图115.2系统的各子程序设计13键盘扫描子程序136. 软硬件联调147. 总结(含分工)147.1分工147.2心得体会14参考文献17附录一:程序代码181. 绪论课题背景和意义在学习计算机硬件技术基础的过程中,我们学习了80486微处理器的指令系统,学习了汇编语言的程序设计,学习了输入/输出方式与接口芯片,还学习了外设接口技术,并结合课程实验,熟悉了汇编语言在计算机硬件中的应用,并对8254、8255A、82
3、59A等器件或单独、或配合使用有了一定的了解,还对显示器、键盘等设备的运用有了初步的掌握。在这种背景下,并考虑到计算机硬件技术在自动化专业后续工作学习中的重要地位,进行一次综合性的课程设计的意义自然不言而喻,将所学的知识综合运用起来,既是对这么课程本身的一次复习,更加是对学生个人能力的一次提升。本小组的课题是计程车计价器设计,相比较基于单片机的出租车计价器而言,本次设计是基于实验室的试验箱来进行的原理性实验,最终的实物没有基于单片机的计价器直观,但是却能充分体现出设计的原理与功能,这与汇编语言能够让程序员更加清晰地体现设计思路的初衷是不谋而合的。2. 设计方案2.1设计思路2.1.1硬件设计根
4、据任务书的要求,计程车的启停、起步价、每公里单价、行驶过程中车速的调整、白天以及夜间价格的切换、乘客上课时目标公里数的输入都可以用键盘来完成。要将键盘的按键信息输入的系统中,自然需要用到I/O接口芯片,实验箱上自然是选择8255A。需要将价格等信息实时显示出来,要用到三色LED以及单色LED。车费的计算方式是三公里内算起步价,三公里以上起步价+单价*超出部分的距离,超出部分的距离或者说距离可以由一个由键盘输入的车速*运行时间来实现,因此必须要用到定时/计数器8254,另外通过使用8254能实现计价过程中每停车5s总费用增加一次单价。在计费过程中,通过键盘改变速度时,需要用到中断控制器8259A
5、。2.1.2软件设计通过硬件部分的分析可以很快发现,主体程序为计价,在这个过程中,需要用到键盘扫描程序,更改速度程序,输入起步价与单价程序,计价程序,中断程序,延时程序,初始化程序。定时/计数程序,LED显示程序,为了使程序更加灵活,可以用键盘的按键来改变起步价、单价、速度、目标公里数。2.2系统按键操作说明K0 EQU 0EEH ; 白天计价,按下三色LED显示为红色K4 EQU 0DEH ; 夜间计价,按下三色LED显示为绿色K1 EQU 0EDH ; 起步价加1K5 EQU 0DDH; 起步价减1K9 EQU 0BDH ; 单价加1KD EQU 7DH; 单价减1K2 EQU 0EBH;
6、 速度增加K6 EQU 0DBH; 速度减少KA EQU 0BBH; 距目的地公里数加1KE EQU 7BH; 距目的地公里数减1K3 EQU 0E7H; 开始计价K7 EQU 0D7H; 停车KB EQU 0B7H; 停止计价2.3操作方法说明第一步:按K0/K4键来选择计费模式,即白天还是夜间。第二步:按K1/K5键设置想要的起步价;按K9/KD键设置单价。第三步:按KA/KE键设置目标公里数。第四步:按K3键开始计价。第五步:按K2/K6键设置速度。第六步:按K7键停车。第七步:按KB键停止计价。3. 硬件模块简介3.1可编程定时/计数器82543.1.1 8254基本功能 有3个独立的
7、16位计数器。每个计数器可按二进制或十进制(BCD)计数。每个计数器可编程工作于6种不同工作方式。8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)。 8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。 计数脉冲可以是有规律的时钟信号,也可以是随机信号。3.1.2 8254工作方式 方式0:计数到0结束输出正跃变信号方式。 方式1:硬件可重触发单稳方式。 方式2:频率发生器方式。 方式3:方波发生器。 方式4:软件触发选通方式。 方式5:硬件触发选通方式。 3.1.3 8254方式控制字 图1 8254方式控制字3.1.4 8
8、254初始化向控制寄存器端口写入控制字,对使用的计数器规定其工作方式。向使用的计数器端口写入计数初值。3.1.5 8254工作原理图: 图2 8254定时/计数器原理图3.2可编程并行I/O接口芯片8255A3.2.1 8255A工作方式8255内部有三个I/O端口,A口可以工作在方式0、方式1或方式2;B口可以工作在方式0或方式1;C口可以工作在方式0.方式0是基本型输入/输出。用这种方式和外设交换数据时,8255端口与外设之间不使用联络线。方式1为选通型输入/输出。用这种方式和外设交换数据时,端口和外设之间要有联络信号。方式2是双向数据传送,仅A口有此功能。当A口工作在方式2时,B口仍可以
9、工作在方式0或方式1,但此时的B口方式1只能用查询方式与CPU交换信息。3.2.2 8255A控制字a.方式选择命令字的格式及每位作用: 图3 方式选择控制字b.C口置1/置0命令字的格式及每位的作用如下图所示: 图4 8255C口置1/置0命令字的格式3.2.3 8255A初始化8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:向8255控制寄存器写入“方式选择控制字”,从而预置端口工作方式。当端口预置为方式1或者方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断 允许触发器置0,从而禁止中断,或者使相应端口的中断允许触
10、发器置1,从而允许端口提出中断请求。3.2.4 8255A的中断应用: 图5 中断允许触发器与控制位对照表3.2.5 8255并口模块原理图:图6 8255并口模块原理图3.3中断控制器8259A3.3.1 8259初始化命令字a. ICW1格式和功能如下图所示,该命令字必须送偶地址端口 图7 ICW1格式和功能b. ICW2格式和功能如下图所示 图8 ICW2格式和功能c. ICW3格式和功能如下图所示 图9 ICW3格式和功能d. ICW4格式和功能如下图所示 图10 ICW4格式和功能3.3.2 8259初始化初始化过程就是按照严格的初始化步骤分别向ICW1ICW4写入初始化命令字,初始
11、化过程如下: 图11 8259初始化3.4 LED显示 数码管字型编码表:图12 数码管字型编码表3.5键盘接口技术 4x4键盘结构示意图: 图13 4x4键盘结构示意图4x4键盘作为输入装置,通过可编程并行I/O接口芯片8255A与CPU交换数据,如图示P10P13与P14P17分别与8255的端口连接。4. 硬件电路设计 总体方案与框图 图14 功能流程图该功能流程图依据任务书画出的,描述了基本功能与各模块之间的逻辑关系,概括了本次软硬件设计的基本思想。其中a. 路程算法一:计价过程中,出租车因红绿灯、堵车等情况暂停行驶,若停车时间大于5s,则每5s路程增加一公里。b. 路程算法二:出租车
12、未停车,路程=速度*行驶时间。c. 计价算法一:路程大于3公里,每增加一公里在起步价的基础上增加一次单价。由于需要精确到角,则可以每增加0.1公里增加十分之一次单价。d. 计价方法二:路程小于三公里,总价=起步价。e. 停止计价算法:按下停止计价键后,LED再显示5s后关闭。5. 软件程序设计5.1系统的主程序设计系统的主程序流程图 图15 系统主程序流程图5.2系统的各子程序设计 键盘扫描子程序 图16 键盘扫描子程序程序图6. 软硬件联调软件编写完成后,连接硬件电路,将程序经过编译连接后下载到实验装置。对硬件电路进行操作,观看实现现象。若未实现预想功能,或未达到预想的效果,则需要检查硬件电
13、路的连接,并检查软件是否出现问题。不断地调试,直到到达预想效果。7. 总结(含分工)7.1分工吴子宁:主要负责程序的编写,软件的设计,程序的调试。张纪炜:主要负责硬件电路的设计,协同编写程序与软硬件联调。杨健:主要负责前期相关资料的收集,流程图的绘画,部分子程序的编写与调试,后期设计报号的撰写。7.2心得体会XXX这两周的课程设计,我与张纪炜还有杨建一组。我们在两周的时间里完成了课程设计的基本要求,在这次试验中,我们不仅学到了许多书本中的知识,还掌握了许多以前未曾掌握的要点。两周的课程设计时间里,我主要负责汇编语言的编写,在编写的过程中,我遇到了许多许多的问题,例如,单色led灯在显示不同数字
14、的时候需要无限循环,但是无限循环怎么加在主程序中的问题。之后,我采用了跟键盘扫描一起,如果按键,则跳出循环,如果不按键,则继续循环的方法,达到可以同时显示不同数字的方法。但是这个方法在实际的操作中也遇到了许多问题。我们在把这段子程序放入主程序之后,总是产生乱码,无论我怎么改动参数,我们总是无法把他完善。后来,我们选择了只显示一位速度来解决的方法来实现单色LED的亮灭。这次的经历让我学到了很多,首先,如果我能考虑的更加周到,在编写程序的时候就考虑到出错的可能性,在每条程序后面都加上他意义的解释,那么,我在修改程序的时候就会轻松很多,也能发现很多以前不能发现的问题,说不定就能很好的解决这些看似难以
15、解决的问题。其次,我认为我的学习和生活,需要更多的耐心来帮助我们获得更多的机会去解决很多难以解决的问题,在现实的生活中,困难总是无处不在的,我们需要困难来磨砺我们的意志,只有在无限的困难磨砺之后,我们在能拥有在任何困境中不放弃的勇气。在生活中,我们绝不缺少勇气,但是我们缺少的是无时无刻,陷入绝望时还有的坚强勇气。生活的压力不会去观察我们的状态,换言之,我们不得不以各种各样的状态面对生活中的一切,无论是满分的身体情况还是濒死的身体情况,我们都不得不接受他的挑战,也就是说,在逆境中的勇气,才更能推动我们走向成功。说实话,这次的课程设计时间不算很长,但是他给予了我充足的时间去审视自己的学习状态,良好
16、的学习状态才能促使我不断的进步,不断的走向成功。未来的路还很长,只有安安静静的提升自己才是正道,希望我可以将从这次课程设计里面学到的知识用到我日后的生活中,为生活添彩。XXX两个星期的课程设计让我学到了很多东西,无论是精彩的专业知识还是与同学之间的沟通交流,都让我受益匪浅。这两周我跟杨健和吴子宁三个人一个小组,在短暂的分工之后,我们三个人就迅速开始了课程设计的工作。吴子宁与我两人主要负责汇编方面的问题,而杨建则主要负责整理综合之后编写实验报告部分的工作。班长发给我们的题目是“计价器”,我和吴子宁很快确定了编程的主体,在充分阅读了试验要求之后,我们选择了使用8255,8254,8259,单色LE
17、D灯以及三色LED灯。我们选择使用一片8255作为主体,用来控制单色LED灯和键盘。并且选择中断的方式加入计数。在实验的过程中,我认为我们学到更多了并不是课本知识,不光光是对计价器的了解。我认为,在这次试验中,我们收获更多的是自主学习的能力,以及面对问题的耐心程度。在试验中,我们很多次遇到写的程序没有错误,但是在硬件上实验的时候发生了错误的问题,这让我们十分的恼火,不得不一步步的检查程序的可行性,这花费了我们大量的时间,如果没有良好的耐心,我们很难完成这么多的任务。并且,这样的经历也告诉了我们,我们在编写程序的时候,一定要分成子程序一步步的来,这样可以方便我们在试验的过程过查错。因为在实验的过
18、程中,一个赋值的错误也可能引起整个功能的崩溃。实验中遇到的问题是非常的多的,而我们必须要有着迎难直上的勇气以及不放弃的精神,才能从困难中走出来。但是,虽然苦难让我们深受煎熬,但,他也是指引我们进步的唯一方法,如果没有困难的磨砺,我们也不会一次有一次的翻阅书籍,了解到自己的不足以及发现我们的潜力。生活中,我们肯定会遇到各种各样的问题,比如说,我们在答辩前的星期三,我们还有单色LED灯出错的问题,如果我们不能摆正心态,努力完成任务,我们也有可能就此放弃这个,导致我们课程设计的失败,也正是我们的加班加点,才让我们得意攻克一个个的难关。生活也是如此,他总是给我们开各种各样的玩笑,给我们各种各样不公平的
19、待遇,但是我们如果不能摆正心态,就无法在日后激烈的竞争中生存,也就是说,只有摆正心态,低调工作,才能让我们一步步的进步。课程设计非常的短暂,但是给与我的帮助也是非常多的,如果没有这次课程设计,我可能无法发现我的很多问题,也不会这么努力的向前进。希望我今后的生活可以更加精彩,遇到更多得以进步的故事。XXX这次课程设计开始的时候让我觉得很难,程序不会写,感觉很多东西都不会,我会编写的一些小程序,队友编得更快更好,于是一度让我怀疑我在这次课程设计中的意义,我想,既然我不会而队友又如此厉害,我干脆就不写了,只管后期的报告吧。但是我不能再骗自己,否则我将很难面对我以后的整个人生。傅雷说,与人交往首先是坦
20、白,其次还是坦白,于是我向胡青老师坦露这种想法以及困扰,胡青老师鼓励我试着继续编写程序,多跟队友讨论,即便是我写得没有队友好也要写,这样才能提高我的编程能力,才能体现这次课程设计的意义与目的所在。听了胡青老师的一席话,我不再感觉困扰与迷茫,于是继续开始了编写程序,键盘扫描不会?学啊!中断搞不懂?学习啊!哪里不会学哪里,妈妈再也不用担心我的学习,于是我就沉浸在这种将无知变为知识的快感中。上学期的电子安装设计我的课题也是出租车计价器,不过是基于单片机用 C 语言来实现的。但是这与本次的课程设计有很大的不同,因而上次的设计经验并未给我带来太多的经验帮助。在这次的课程设计中我终于意识到了程序流程图的重
21、要性,我们小组一开始没有明确的流程图,导致后期在写程序的时候思路并不是特别清晰,这大大地降低了效率,极大的影响了课程设计的进度。在编写程的过程中,我们解决了程序不兼容的问题,虽然我写得程序用到主程序中的不多,但是哪怕是只有一小段,也算是一种进步。后期我负责撰写设计报告,在写报告的过程中,我才真正领会到这种设计的精髓所在,一个产品的出现,一定是一个系统概念。大学四年,我学会的也就只有“控制”与“系统”二词。我觉得这次课程设计的我唯一也是最大的收获就是踏踏实实地完成了一次这种“设计”的过程。要做什么东西?具体要求是什么?需要在什么时间之前完成?拥有的开发条件是什么(有哪些硬件可以用)?设计思路是什
22、么(弄明白使用某个硬件的原因,选型的依据是什么)?硬件电路的设计是怎样的(学会图的思想,VISIO 是一款比较优秀的软件)?应该怎样去设计软件以符合硬件的要求(程序流程图)?在调试的过程出现问题应该怎么解决(产品的优化与提高)?此次课程设计让我意识到我的编程能力太差了,有一位我很敬重的前辈在大学前期的时候给我讲过,我们自动化专业的编程并不难,我没能领会其核心精神,不难不是意味着不需要花费功夫学习,更不是说不难就等于不重要,我想,这种意识上面的偏差是导致我大四的时候一做这种编程的题目就觉得我的人生很灰暗的主要原因吧。我不想再这样别编写程序折磨信心了,唯一的解决办法就是彻底征服它,否则我将很难面对
23、我的学习生涯,这将会对我的自信心造成极大的损害。所以我需要努力,将不会的而我又应该会的掌握,提高编程能力。最后,以清人彭端淑所写为学中的一句话自勉之。 “天下之事有难易者乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。为学 (清)彭端淑参考文献1杨天怡.计算机硬件技术基础.重庆:重庆大学出版社,20022黄勤.计算机硬件技术基础实验教程.重庆:重庆大学出版社,2002附录一:程序代码.486PORTA EQU 300H ;8255 A口PORTB EQU 304H ;8255 B口PORTC EQU 308H ;8255 C口CTRL EQ
24、U 30CH ;8255控制字ADDR0 EQU 340H ;8259偶地址ADDR1 EQU 348H ;8259奇地址INTQ EQU 40H ;中断类型号K0 EQU 0EEH ; 白天计价,按下三色LED显示为红色K4 EQU 0DEH ; 夜间计价,按下三色LED显示为绿色K1 EQU 0EDH ; 起步价加1K5 EQU 0DDH; 起步价减1K9 EQU 0BDH ; 单价加1KD EQU 7DH; 单价减1K2 EQU 0EBH; 速度增加K6 EQU 0DBH; 速度减少KA EQU 0BBH; 距目的地公里数加1KE EQU 7BH; 距目的地公里数减1K3 EQU 0E7
25、H; 开始计价K7 EQU 0D7H; 停车KB EQU 0B7H; 停止计价CODE SEGMENT USE16ASSUME CS:CODEORG 1000HTABLE3 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;三色LED字型码TABLE1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;单色LED字形码N DB 10NN DB 100HUNDRED DW 100;用于与超出的公里数做比较INIT_PRICE DW 0000H;起步价PRICE DW 0000H;每公里单价INIT_DISTAN
26、CE DW 0000H;距离目的地公里数SPEED DB 00H;行车速度TIME DB 00H;行车时间COST DW 0000H ;总价TOTAL_DIS DW 0000H ;总路程TEMP DW 0000H ;用于临时存储总路程减去3公里后的差值TEMP_DIS DW 0000H ;用于临时存储总路程与据目的地公里数作比较START: MOV DX,20CH MOV EAX,80808080H OUT DX,EAX MOV DX,200H ;初始化三色LED MOV EAX,0C0C0C0C0H OUT DX,EAX MOV DX,204H MOV EAX,0C0C0C0C0H OUT
27、DX,EAX MOV DX,208H MOV EAX,05050505H OUT DX,EAXINIT_8255: MOV DX,30CH ;8255 初始化 MOV AL,88H OUT DX,AL HH: ;显示速度 MOV AL,SPEED MOV BX,OFFSET TABLE1 MOV DX,300H XLAT OUT DX,AL MOV DX,304H MOV AL,01000001B ;最后一位控制蜂鸣器做报警用 OUT DX,AL KEY_SCAN: MOV BL,0F7H ;键盘扫描 NEXT_COL: MOV AL,BL MOV DX,PORTC OUT DX,AL MOV
28、 DX,PORTC IN AL,DX AND AL,0F0H CMP AL,0F0H JNZ FIND_KEY ROR BL,1 JC NEXT_COL JMP KEY_SCANFIND_KEY: SHL BL,4 SHR AL,4 OR BL,AL CALL DLYSKEYUP: MOV AL,0 MOV DX,PORTC OUT DX,AL MOV DX,PORTC IN AL,DX AND AL,0F0H CMP AL,0F0H JNZ KEYUP CMP BL,K3 ;按下3键开始计价 JZ START_CAL CMP BL,K7 ;按下7键停止计价 JZ PAUSE CMP BL,K
29、0 ;0键为白天颜色,红色 JZ DAY_COLOR CMP BL,K4 ;4键为夜间颜色,绿色 JZ NIGHT_COLOR CMP BL,K1 ;1键起步价增加 JZ INIT_PRICE_INC CMP BL,K5 ;5键起步价减少 JZ INIT_PRICE_DES CMP BL,K9 ;9键单价增加 JZ PRICE_INC CMP BL,KD ;D键单价减少 JZ PRICE_DES CMP BL,KA ;A键距目的地公里数增加 JZ INIT_DISTANCE_INC CMP BL,KE ;E键距目的地公里数增加 JZ INIT_DISTANCE_DES CMP BL,K2 ;2
30、键速度增加 JZ SPEED_INC CMP BL,K6 ;6键速度减少 JZ SPEED_DES JMP KEY_SCANSTART_CAL: MOV DX,32CH ;启动8254,让其工作在方式3 MOV AL,00110110B OUT DX,AL MOV DX,320H MOV AX,47000 OUT DX,AL MOV AL,AH OUT DX,AL ;初始化8259 MOV DX,ADDR0;写ICW1 MOV AL,00010011B OUT DX,AL MOV DX,ADDR1;写ICW2 MOV AL,40H OUT DX,AL MOV DX,ADDR1;写ICW4 MO
31、V AL,01H OUT DX,AL MOV DX,ADDR1;改写OCW1,开放IRQ0 IN AL,DX AND AL,0FEH OUT DX,AL ;装填中断向量 CLI MOV AX,0 MOV DS,AX LEA AX,INTPIS MOV DS:INTQ*4,AX MOV AX,SEG INTPIS MOV DS:INTQ*4+2,AX STIJMP KEY_SCANPAUSE: CLI JMP KEY_SCANDAY_COLOR: MOV DX,208H MOV EAX,05050505H OUT DX,EAX JMP KEY_SCANNIGHT_COLOR: MOV DX,20
32、8H MOV EAX,0A0A0A0A0H OUT DX,EAX JMP KEY_SCANPRICE_INC: INC PRICEMOV AX,PRICEDIV NMOV BX,OFFSET TABLE3MOV DX,200HXLATADD AL,80HOUT DX,ALMOV DX,204HMOV AL,AHXLATOUT DX,ALJMP KEY_SCAN PRICE_DES: DEC PRICEMOV AX,PRICEDIV NMOV BX,OFFSET TABLE3MOV DX,200HADD AL,80HXLATOUT DX,ALMOV DX,204HMOV AL,AHXLATOUT
33、 DX,ALJMP KEY_SCANINIT_DISTANCE_INC: INC INIT_DISTANCEMOV AX,INIT_DISTANCEDIV NMOV BX,OFFSET TABLE3MOV DX,201HXLATOUT DX,ALMOV DX,205HMOV AL,AHXLATOUT DX,ALJMP KEY_SCAN INIT_DISTANCE_DES: DEC INIT_DISTANCEMOV AX,INIT_DISTANCEDIV NMOV BX,OFFSET TABLE3MOV DX,2001HXLATOUT DX,ALMOV DX,205HMOV AL,AHXLATO
34、UT DX,ALJMP KEY_SCAN INIT_PRICE_INC: INC INIT_PRICE INC COSTMOV BX,OFFSET TABLE3 MOV AX,0MOV AX,INIT_PRICEDIV NNMOV DX,202HXLATOUT DX,ALSHR AX,8DIV NMOV DX,206HXLATADD AL,80HOUT DX,ALMOV DX,203HMOV AL,AHXLATOUT DX,ALJMP KEY_SCAN INIT_PRICE_DES: DEC INIT_PRICE DEC COSTMOV BX,OFFSET TABLE3 MOV AX,0MOV
35、 AX,INIT_PRICEDIV NNMOV DX,202HXLATOUT DX,ALSHR AX,8DIV NMOV DX,206HXLATADD AL,80HOUT DX,ALMOV DX,203HMOV AL,AHXLATOUT DX,ALJMP KEY_SCAN SPEED_INC: INC SPEED JMP HH SPEED_DES: DEC SPEED JMP HH DLYS PROC ;延时子程序 PUSH CX MOV CX,0FFHDLYS_AGN: NOP LOOP DLYS_AGN POP CX RETDLYS ENDP;中断子程序INTPIS PROC MOV AX
36、,0MOV AL,SPEEDMUL NADD TOTAL_DIS,AXMOV AX,TOTAL_DISCMP AX,300 JNG JUMPOUT;若小于3公里则显示起步价MOV TEMP,AXSUB TEMP,300 MOV AX,0MOV AX,HUNDRED ;判断大于多少个一百,即大于多少个一公里CMP TEMP,AXJNG JUMPOUTMOV AX,0MOV AX,COSTADD AX,PRICE ;当总路程大于3公里时,每超过1公里加一次单价MOV COST,AXMOV AX,COSTMOV BX,OFFSET TABLE3 ;以下显示总价DIV NNMOV DX,202HXLA
37、TOUT DX,ALSHR AX,8DIV NMOV DX,206HXLATADD AL,80HOUT DX,ALMOV DX,203HMOV AL,AHXLATOUT DX,ALADD HUNDRED,100MOV AX,TOTAL_DISMOV TEMP_DIS,AXMOV AX,INIT_DISTANCEMUL NNCMP TEMP_DIS,AX ;超出据目的地公里数后报警JNBE ALARM MOV AL,20H MOV DX,ADDR0 OUT DX,AL IRETALARM:MOV DX,304H ;报警 MOV AL,01000000B OUT DX,AL MOV PRICE,0 ;将单价归零,避免持续计价 JUMPOUT: MOV BX,OFFSET TABLE3 ;保持显示总价 MOV AX,0MOV AX,COSTDIV NNMOV DX,202HXLATOUT DX,ALSHR AX,8DIV NMOV DX,206HXLATADD AL,80HOUT DX,ALMOV DX,203HMOV AL,AHXLATOUT DX,AL MOV AL,20H MOV DX,ADDR0 OUT DX,AL IRETINTPIS ENDPCODE ENDSEND START 26
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922