出租车计价器微机接口课程设计.docx
《出租车计价器微机接口课程设计.docx》由会员分享,可在线阅读,更多相关《出租车计价器微机接口课程设计.docx(21页珍藏版)》请在冰点文库上搜索。
出租车计价器微机接口课程设计
信息科学与技术学院
微机原理与接口技术
课程设计报告
题目名称:
出租车计价器
学生姓名:
王彪
学号:
2010508115
专业年级:
电信10级
(2)班
指导教师:
刘恩博老师
时间:
2012.12.31
4.1程序框图———————————————————————6
4.2各模块程序分析————————————————————7
5.1程序运行——————————————————————10
5.2评价分析——————————————————————11
6心得体会———————————————————————12
1.课程设计综述
1.1课程设计的目的
微机原理与接口技术是一门理论结合实践的专业基础课,同时也是考研的考察科目。
可以毫不夸张的说,学好学精微机原理,在就业时就有了非常大的优势。
为了让我们更好的掌握汇编语言和各种芯片的特点和功能,安排了我们这次课程设计。
8086CPU及其相应的外围可编程芯片实现对计价器主体功能的实现是本次试验的目的。
1.2课程设计的题目
出租车计价器
1.3题目要求
(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.1整体电路图
3.2各模块功能原理分析
3.2.1CPU模块
选定8086工作在最小模式下,地址选通信号连接两片74LS373用于地址锁存,RD和WR信号连接3片8255的RD和WR引脚。
3.2.274LS373模块
CPU的总线连到两片74LS373的输入端,AD0~AD7接第一片用于三片8255和8253的A1、A0的选择控制,AD8~AD15接第二片用于连到74LS138并对三片8255和8253的CS片选信号进行选择。
LE信号连接CPU的地址选通引脚ALE,OE信号固定接地使之一直能够把锁存器中的数据传送到输出端。
3.2.374LS138模块
74LS138为常用的三线八线译码器,我们用它来进行3片8255和8253的选择,设置E1、E2、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
3.2.48253模块
8253是定时计数器,使计时器0工作在模式3,我们设置为60次记0.1公里。
实现了车轮转速和公里数的转换。
3.2.58255模块
8255是通用的并行接口,在本次设计中,我们把PA口当做输入,PB和PC口当做输出,PB0~7和PC1~4连接LED灯做控制和显示作用。
由于三片8255的连线一致,所以我们把控制字统一设置为90H,使PA口做输入,工作在方式0,PB口做输出,亦工作在方式0,PC的高四位和低四位都工作在输出状态。
3.2.67段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.程序设计与分析
4.1程序框图
4.2各模块程序分析
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.系统评价
5.1程序运行
整个程序能够正常运行和显示,运行图如下所示:
(1)开始运行
(2)公里数增加
(3)手动设置单价
5.2评价分析
本设计针对出租车计价器还有许多不足之处,并不是现今流行的出租车计价器,即一定公里数内为定价,超出公里数后开始计价,只完成了题目的初步要求。
本设计的特点在于可以手动设置单价
整个电路其实并不用太多的8255芯片,可以把两片对应于4位7段LED数码管的显示部分进行精简,即用一个8255芯片控制两个数码管,让他们公用输出端口,只要输出时正确选择位选信号即可。
对单价做减价处理时,单价为0时不再做减1处理,但运行时发现有不稳定显示现象,即在按钮按住不放时显示不正确,可能是对各个寄存器的处理并不到位,处理方法可以是做好各个寄存器的保护工作。
系统只设置了单价从0到99,总价和公里从0到99.9,若超出则会出现乱码现象,我们可以在计数器之后设置判断和跳转指令,即超出显示范围时对计数器赋0处理。
总体来说,本次设计基本完成了题目要求。
6.心得体会
通过本次课程设计,让我受益颇丰。
拿到题目时,我即联想到了实验课上老师给我们演示的显示系统,之后,我翻阅了微机接口的有关图书资料后,对设计整体思路有了大概把握。
查阅了7段LED数码管的工作原理,由于在实验时忽略了共阴极和共阳极的区别,所以在位选时出了很多差错,但最后得到了解决,共阴极的位选信号是0有效,共阳极的位选信号是1有效。
对于8255和8253芯片的使用也得到了进一步的提升,对于最初的地址设置步骤也得到了进一步练习,即可以通过锁存器对地址进行锁存,译码器对地址进行译码转换,让CPU的地址线得到扩展。
本次实验最大的收获是学会了如何正确使用7段LED数码管以及对程序设计的总体分析及把握。
程序在刚开始运行时存在很多错误,经过多次重新更改和测试得到了改善,对于汇编的很多细节得到了更好的认识,例如16位的数字若开头是字母则应该在字母前面加0来表示16进制。
对于PROTEUS的使用也得到了进一步的熟练,使我能够更加得心应手的使用这款软件,在翻阅资料的过程中发现PROTEUS是设计单片机的重要软件,许多单片机设计都在该软件中设计,这使我明确了接下来的学习方向以及对PROTEUS的重视,这款软件还有许多其他的分析仿真功能等待我们去使用,应该努力学习,为之后的单片机课程打下基础。
本次实验的成功也使得我对学习微机原理和单片机的热情高涨,不足和不懂之处还有许多,望老师能够多加指导。
参考文献:
[1]戴梅萼史嘉权•微型计算机技术及应用(第4版)•清华大学出版社,2008
[2]宋廷强等•32位微机原理与接口技术实验指导•化学工业出版社,2009
[3]佘新平等•数字电路设计仿真测试•华中科技出版社,2011
[4]周润景等•基于PROTEUS的电路及单片机设计与仿真(第2版)•北京航空航天大学,2010