出租车计价器微机接口课程设计.docx
《出租车计价器微机接口课程设计.docx》由会员分享,可在线阅读,更多相关《出租车计价器微机接口课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
![出租车计价器微机接口课程设计.docx](https://file1.bdocx.com/fileroot1/2023-3/30/127f561e-4e2d-4e99-b63e-313e7936c5d6/127f561e-4e2d-4e99-b63e-313e7936c5d61.gif)
出租车计价器微机接口课程设计
信息科学与技术学院
微机原理与接口技术
课程设计报告
题目名称:
出租车计价器
学生姓名:
王彪
学号:
15
专业年级:
电信10级
(2)班
指导教师:
刘恩博老师
时间:
程序框图———————————————————————6
各模块程序分析————————————————————7
程序运行——————————————————————10
评判分析——————————————————————11
6心得体会———————————————————————12
1.课程设计综述
课程设计的目的
微机原理与接口技术是一门理论结合实践的专业基础课,同时也是考研的考察科目。
能够毫不夸张的说,学勤学精微机原理,在就业时就有了超级大的优势。
为了让咱们更好的把握汇编语言和各类芯片的特点和功能,安排了咱们这次课程设计。
8086CPU及其相应的外围可编程芯片实现对计价器主体功能的实现是本次实验的目的。
课程设计的题目
出租车计价器
题目要求
(1)、实现计价功能。
(2)、实现手动设计单价。
(3)、实现显示里程、单价与总价。
(4)、扩展功能:
实现自动依照时刻设定单价。
2.方案选择
依照题目要求,需要一个显示单价的显示器,并能够手动调整大小,要有一个千米显示器,来显示行走的路程,还有一个总价显示器,来达到计价功能。
翻阅大量资料后得知千米显示器的增加需要一个固定的脉冲或霍尔式脉冲信号,咱们用一个8253来设置脉冲。
把单价起始值设为5,设置一个加1和一个减1按钮,实现对单价的手动设置。
最后通过代码的相乘运算,把结果送到总价显示器,完成初步的实验目的。
为了显示以上三个数值,咱们选用了三片8255芯片、1个2位7段LED数码管和2个4位7段LED数码管,CPU选用8086,地址总线通过两片74LS373进行地址锁存,一片连接74LS138连通3片8255的片选信号CS,一片连接各个8255的操纵端口A1和A0。
通过3个单脉冲开关按钮实现对整个电路的操纵。
原理框图如下所示:
3.硬件原理电路图的设计及分析
整体电路图
各模块功能原理分析
3.2.1CPU模块
选定8086工作在最小模式下,地址选通信号连接两片74LS373用于地址锁存,RD和WR信号连接3片8255的RD和WR引脚。
74LS373模块
CPU的总线连到两片74LS373的输入端,AD0~AD7接第一片用于三片8255和8253的A一、A0的选择操纵,AD8~AD15接第二片用于连到74LS138并对三片8255和8253的CS片选信号进行选择。
LE信号连接CPU的地址选通引脚ALE,OE信号固定接地使之一直能够把锁存器中的数据传送到输出端。
74LS138模块
74LS138为经常使用的三线八线译码器,咱们用它来进行3片8255和8253的选择,设置E一、E二、E3为有效电平使之工作,CBA为三线输入,000选择Y0端口输出,001选择Y1端口,010选择Y2端口,100选择Y4端口。
由此,三片8255和8253的端口地址已经能够确信,如下表所示:
端口
IOA/OUT0
IOB/OUT1
IOC/OUT2
IOCON/CON1
8255A0
8000H
8002H
8004H
8006H
8255A1
9000H
9008H
9010H
9018H
8255A2
0A000H
0A020H
0A040H
0A060H
8253A
0C000H
0C002H
0C004H
0C006H
8253模块
8253是按时计数器,使计时器0工作在模式3,咱们设置为60次记千米。
实现了车轮转速和千米数的转换。
8255模块
8255是通用的并行接口,在本次设计中,咱们把PA口当做输入,PB和PC口当做输出,PB0~7和PC1~4连接LED灯做操纵和显示作用。
由于三片8255的连线一致,因此咱们把操纵字统一设置为90H,使PA口做输入,工作在方式0,PB口做输出,亦工作在方式0,PC的高四位和低四位都工作在输出状态。
7段LED数码管显示模块
7段LED数码管分为共阳极和共阴极两种,本次设计咱们采纳共阴极,ABCDEFG是每一段LED的引脚,1234为位选通信号,由于是共阴极,因此是低电平有效,采纳动态显示的方式显示每一名数码管。
由此能够取得数字0~9相对的ABCDEFG电平,如下表所示:
0
1
2
3
4
5
6
7
8
9
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
假设要加入小数点显示,那么十六进制的第二位全数加8即可,具体如下表所示:
0
1
2
3
4
5
6
7
8
9
0BFH
86H
0DBH
0CFH
0E6H
0EDH
0FDH
87H
0FFH
0EFH
4.程序设计与分析
程序框图
各模块程序分析
DATASEGMENT
COUNTDB05;单价计数器,初值为5
COUNT1DB00;公里计数器,初值为0
SHIWEIDB?
;单价十位
GEWEIDB?
;单价个位
BAIWEI1DB?
;公里百位
SHIWEI1DB?
;公里十位
GEWEI1DB?
;公里个位
BAIWEI2DB?
;总价百位
SHIWEI2DB?
;总价十位
GEWEI2DB?
;总价个位
TEMPDB0;以下三个为按钮判断值
TEMP1DB0
TEMP2DB0
SEGTABDB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
;不带小数点的7段LED数码管码制
SEGTAB1DB0BFH,86H,0DBH,0CFH,0E6H
DB0EDH,0FDH,87H,0FFH,0EFH
;带小数点的7段LED数码管码制
DATAENDS
CODESEGMENT;
ASSUMECS:
CODE,DS:
DATA
IOAEQU8000H;各个端口的端口地址
IOBEQU8002H
IOCEQU8004H
IOCONEQU8006H
IOA1EQU9000H
IOB1EQU9008H
IOC1EQU9010H
IOCON1EQU9018H
IOA2EQU0A000H
IOB2EQU0A020H
IOC2EQU0A040H
IOCON2EQU0A060H
JSQ0EQU0C000H
JSQ1EQU0C002H
JSQ2EQU0C004H
CON1EQU0C006H
START:
MOVAX,DATA
MOVDS,AX
MOVAL,90H;设置8255控制字
MOVDX,IOCON
OUTDX,AL;输出到三个控制端口
MOVDX,IOCON1
OUTDX,AL
MOVDX,IOCON2
OUTDX,AL
MOVAL,16H;设置8253控制字
MOVDX,CON1
OUTDX,AL
MOVAL,60
MOVDX,JSQ0
OUTDX,AL
START1:
MOVDX,IOA
INAL,DX;接收来自PA口的脉冲信号
NOTAL;接收为低电平,变为高电平
ANDAL,01H;屏蔽其它位,只接收PA0口
CMPAL,TEMP
JZSTART2
MOVTEMP,AL
;与判定值相较,假设不同那么不跳转,假设相同则说明长按或者没按,直接跳转到START2
ADDAL,COUNT
MOVCOUNT,AL;对单价计数器加1
START2:
MOVDX,IOA2
INAL,DX
NOTAL
ANDAL,01H
CMPAL,TEMP2
JZSTART3
MOVTEMP2,AL
CMPCOUNT,0;若单价为0则不再减1
JZSTART3
SUBAL,COUNT
MOVCOUNT,AL;对单价计数器减1
START3:
MOVDX,IOA1
INAL,DX
NOTAL
ANDAL,01H
CMPAL,TEMP1
JZFENJIE
MOVTEMP1,AL
ADDAL,COUNT1
MOVCOUNT1,AL;对公里计数器加1
FENJIE:
;对单价计数器的值进行分解
MOVAL,COUNT
MOVAH,0
MOVCL,10
DIVCL
MOVSHIWEI,AL;分成十位和个位
MOVGEWEI,AH
FENJIE1:
;对公里计数器进行分解
MOVAL,COUNT1
MOVAH,0
MOVCL,10
DIVCL
MOVGEWEI1,AH
MOVAH,0
DIVCL
MOVSHIWEI1,AH
MOVBAIWEI1,AL;分百位十位和个位
FENJIE2:
;对总价进行分解
MOVAL,COUNT
MOVAH,0
MOVCL,COUNT1
MOVCH,0
MULCX;单价和公里数相乘得总价
MOVCL,10
DIVCL
MOVGEWEI2,AH
MOVAH,0
DIVCL
MOVSHIWEI2,AH
MOVBAIWEI2,AL;分百位十位和个位
DISP:
;三个值的显示程序
MOVAL,00000110B
;单价显示器是二位7段LED数码管,因此只屏蔽两位位选信号,1是未选中
MOVDX,IOC
OUTDX,AL
MOVAL,00011110B
;总价和总千米用四位7段LED数码管
MOVDX,IOC1
OUTDX,AL
MOVDX,IOC2
OUTDX,AL
;显示千米百位
XORAX,AX
MOVAL,BAIWEI1
MOVSI,AX
MOVAL,SEGTAB[SI];数码管码制转换
MOVDX,IOB1
OUTDX,AL;输出百位
MOVAL,00011010B;开百位位选信号
MOVDX,IOC1
OUTDX,AL
CALLYS
;输出后执行延时,让该位短暂显示
;总价百位
XORAX,AX
MOVAL,BAIWEI2
MOVSI,AX
MOVAL,SEGTAB[SI]
MOVDX,IOB2
OUTDX,AL
MOVAL,00011010B
MOVDX,IOC2
OUTDX,AL
CALLYS
;显示后继续全数关闭
MOVAL,00000110B
MOVDX,IOC
OUTDX,AL
MOVAL,00011110B
MOVDX,IOC1
OUTDX,AL
MOVDX,IOC2
OUTDX,AL
;单价十位
XORAX,AX
MOVAL,SHIWEI
MOVSI,AX
MOVAL,SEGTAB[SI]
MOVDX,IOB
OUTDX,AL
MOVAL,00000100B
MOVDX,IOC
OUTDX,AL
CALLYS
;千米十位
XORAX,AX
MOVAL,SHIWEI1
MOVSI,AX
MOVAL,SEGTAB1[SI]
;用带小数点显示十位
MOVDX,IOB1
OUTDX,AL
MOVAL,00010110B
MOVDX,IOC1
OUTDX,AL
CALLYS
;总价十位
XORAX,AX
MOVAL,SHIWEI2
MOVSI,AX
MOVAL,SEGTAB1[SI]
;用带小数点显示十位
MOVDX,IOB2
OUTDX,AL
MOVAL,00010110B
MOVDX,IOC2
OUTDX,AL
CALLYS
;显示后继续全数关闭
MOVAL,00000110B
MOVDX,IOC
OUTDX,AL
MOVAL,00011110B
MOVDX,IOC1
OUTDX,AL
MOVDX,IOC2
OUTDX,AL
;单价个位
XORAX,AX
MOVAL,GEWEI
MOVSI,AX
MOVAL,SEGTAB[SI]
MOVDX,IOB
OUTDX,AL
MOVAL,00000010B
MOVDX,IOC
OUTDX,AL
CALLYS
;总千米个位
XORAX,AX
MOVAL,GEWEI1
MOVSI,AX
MOVAL,SEGTAB[SI]
MOVDX,IOB1
OUTDX,AL
MOVAL,00001110B
MOVDX,IOC1
OUTDX,AL
CALLYS
;总价个位
XORAX,AX
MOVAL,GEWEI2
MOVSI,AX
MOVAL,SEGTAB[SI]
MOVDX,IOB2
OUTDX,AL
MOVAL,00001110B
MOVDX,IOC2
OUTDX,AL
CALLYS
JMPSTART1;完成一次显示后继续
YSPROCNEAR
MOVCX,500
DELY:
NOP
LOOPDELY
RET
YSENDP
CODEENDS
ENDSTART
5.系统评判
程序运行
整个程序能够正常运行和显示,运行图如下所示:
(1)开始运行
(2)千米数增加
(3)手动设置单价
评判分析
本设计针对出租车计价器还有许多不足的地方,并非是现今流行的出租车计价器,即必然千米数内为定价,超出千米数后开始计价,只完成了题目的初步要求。
本设计的特点在于能够手动设置单价
整个电路其实并非用太多的8255芯片,能够把两片对应于4位7段LED数码管的显示部份进行精简,即用一个8255芯片操纵两个数码管,让他们公用输出端口,只要输出时正确选择位选信号即可。
对单价做减价处置时,单价为0时再也不做减1处置,但运行时发觉有不稳固显示现象,即在按钮按住不放时显示不正确,可能是对各个寄放器的处置并非到位,处置方式能够是做好各个寄放器的爱惜工作。
系统只设置了单价从0到99,总价和千米从0到,假设超出那么会显现乱码现象,咱们能够在计数器以后设置判定和跳转指令,即超出显示范围时对计数器赋0处置。
整体来讲,本次设计大体完成了题目要求。
6.心得体会
通过本次课程设计,让我受益颇丰。
拿到题目时,我即联想到了实验课上教师给咱们演示的显示系统,以后,我翻阅了微机接口的有关图书资料后,对设计整体思路有了可能把握。
查阅了7段LED数码管的工作原理,由于在实验时忽略了共阴极和共阳极的区别,因此在位选时出了很多过失,但最后取得了解决,共阴极的位选信号是0有效,共阳极的位选信号是1有效。
关于8255和8253芯片的利用也取得了进一步的提升,关于最初的地址设置步骤也取得了进一步练习,即能够通过锁存器对地址进行锁存,译码器对地址进行译码转换,让CPU的地址线取得扩展。
本次实验最大的收成是学会了如何正确利用7段LED数码管和对程序设计的整体分析及把握。
程序在刚开始运行时存在很多错误,通过量次从头更改和测试取得了改善,关于汇编的很多细节取得了更好的熟悉,例如16位的数字假设开头是字母那么应该在字母前面加0来表示16进制。
关于PROTEUS的利用也取得了进一步的熟练,使我能够加倍驾轻就熟的利用这款软件,在翻阅资料的进程中发觉PROTEUS是设计单片机的重要软件,许多单片机设计都在该软件中设计,这使我明确了接下来的学习方向和对PROTEUS的重视,这款软件还有许多其他的分析仿真功能等待咱们去利用,应该尽力学习,为以后的单片机课程打下基础。
本次实验的成功也使得我对学习微机原理和单片机的热情高涨,不足和不懂的地方还有许多,望教师能够多加指导。
参考文献:
[1]戴梅萼史嘉权•微型运算机技术及应用(第4版)•清华大学出版社,2020
[2]宋廷强等•32位微机原理与接口技术实验指导•化学工业出版社,2020
[3]佘新平等•数字电路设计仿真测试•华中科技出版社,2020
[4]周润景等•基于PROTEUS的电路及单片机设计与仿真(第2版)•北京航空航天大学,2020