微机原理课程设计汽车倒车测距仪.docx
- 文档编号:27895301
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:28
- 大小:460.10KB
微机原理课程设计汽车倒车测距仪.docx
《微机原理课程设计汽车倒车测距仪.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计汽车倒车测距仪.docx(28页珍藏版)》请在冰豆网上搜索。
微机原理课程设计汽车倒车测距仪
微机原理与接口技术课程设计
——汽车倒车测距仪
题目:
汽车倒车测距仪
指导老师:
日期:
2013年1月13日
目录
一、设计目的4
二、设计内容4
三、设计任务4
四、问题分析及方案选择5
1.总体思路5
2.超声的波发射5
3.测距原理5
4.显示原理6
5.报警原理6
五、所需元件6
1.8086介绍6
2.8259A介绍7
3.8255介绍8
4.8253介绍8
5.地址锁存器74LS138介绍9
六、硬件接线图11
1.总电路图11
2.超声波发射电路:
11
3.超声波接收电路12
4.数码管显示电路14
5.蜂鸣报警电路14
七、主程序流程图15
1.中断子程序17
2.延时子程序17
3.距离计算子程序18
4.十六进制转10进制数子程序19
5.LED显示子程序19
八、程序代码20
九、设计难点25
十、心得体会26
十一、参考文献28
汽车倒车测距仪设计
一设计目的
1、运用微机原理及接口技术理论课中学习的8086、8255等芯片,以及数码管等元件进行课程设计,做到学以致用。
2、通过课程设计提高自己的动手能力,分析问题的能力、解决问题的能力。
3、提高自己运用汇编语言的能力,使自己的思维更加发散,提高创新能力。
4、通过整个课程设计,提高综合运用能力,及提高对硬件的认识和布线能力。
二、设计内容
1、设计一个微机控制的汽车倒车测距仪,能测量并显示车辆后部障碍物离车辆的距离,同时用间歇的“嘟嘟”声发出警报,“嘟嘟”声间隙随障碍物距离缩短而缩短,驾驶员不但可以直接观察到检测的距离,还可以凭听觉判断车后障碍物离车辆距离的远近;
1开机后先显示“———”,并有开机指示灯。
2CPU发射超声波1ms,然后显示60ms;即1ms+60ms为一个工作周期,等待回波,在次周期内完成一次探测。
3根据距离远近发出报警声并显示距离。
障碍物距离小于1m,距离值变化5cm更换显示,否则不更换;距离在1m以上,新值与原显示值之差大于10cm更换,否则不更换。
4用三LED位数码管显示障碍物距离
2、硬件电路原理图和软件框图;
3编写控制程序,写出设计任务书(总结报告)。
三、设计任务
1、选用8088和适当的存储器及接口芯片完成相应的功能。
2、用LED显示器显示电子锁的当前状态。
3、画出详细的硬件连接图。
4、给出程序设计思路、画出软件流程图。
5、给出地址分配表。
6、给出所有程序清单并加上必要注释。
7、完成设计说明书(列出参考文献,所用器件型号)。
四、问题分析及方案选择
1.总体思路:
要实现测距、报警、显示,则倒车测距仪必须由以下几部分组成:
超声波发射、接受电路,显示电路以及报警电路,超声波发射电路用于发射时长1ms的超声波,接受电路在接受到超声波后立即产生中断,触发中断程序。
显示电路及报警电路用于指示距离。
2.超声的波发射:
超声波发射电路需考虑的问题是如何控制超生波发射时间以及超声波的发射功率,由于本次课程设计主要针对微机的控制原理,顾不在本次课设中考虑发射功率的问题。
发射时间由8253的一个计数器控制,设置合适的计数初值,使输出刚好能够产生1ms控制脉冲。
3.测距原理:
测量距离则需要发射电路与接收电路的配合,同样使用8253的另一个计数器,使其在超声波发射时开始计数,接收到超声波回波后立即停止计数,计算已计的计数值,然后根据声波速度、计数频率算出时间。
此次设计采用的时钟频率为1.193MHz,声速340m/s,故每cm的计数次数为n=1.193M÷340÷100,但是计数差值是声波来回行程的差值,故车辆与障碍物的距离每cm的实际计数次数为N=2×n。
4.显示原理:
由于数码管只有3个,而显示的灵敏度最高只需cm,所以选择第一个数码管为百位,第二个为十位,第三个为个位,单位cm。
取计数差值,并将其值除以N,得到距离的16进制数(单位cm),需编辑相应的程序将16进制数转为10进制数,并逐个取出百位、十位、个位,并对应LED管的段码后输入到8255控制LED显示。
5.报警原理:
报警电路采用8253的第三个计数器来控制报警频率,声音的产生则用一个蜂鸣发声器。
因为距离越近,计算时间的计数值越小,所以我们可以用这个计数值乘上相应的系数来作为第三个计数器的计数初值,从而改变报警的频率。
五、所需元件
主要元件介绍:
1.8086介绍
Intel8086微处理器是由美国Intel公司1987年推出的一种高性能的16位微处理器,是第三代微处理器的代表。
它有20条地址线,直接寻址能力达1MB,具有16条数据总线,内部总线和ALU均为16位,可进行8位和16位操作。
具有丰富的指令系统,采用多级中断技术,多重寻址方式,多重数据处理形式,段式存储器结构,硬件乘除法运算电路,增加了预取指令的队列寄存器等,分为总线借口部件ALU和执行部件EU。
2.
8259A介绍
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。
8259A有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
3.8255介绍
8255是Intel公司生产的一种通用的可编程并行I/O接口芯片,它有三个并行I/O口,又可通过编程设置多种工作方式,价格低廉,使用方便,可以直接与Intel系列的芯片连接使用,在IBM—PC/XT系列微机中,8255接口用于接受键盘输入的扫描码和系统配置的DPI开关状态,以及用于扬声器控制和储存器奇偶校验。
4.8253介绍
intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
5.地址锁存器74LS138介绍
74LS138为3线-8线译码器,其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。
若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
其功能表为
六、硬件接线图
1.总电路图
CPU类型:
8086
8253地址分配:
4H、5H、6H、7H
8255地址分配:
0CH、0DH、0EH、0FH
8259地址分配:
8H、9H
时钟信号频率:
1.193MHz
2.超声波发射电路:
超声波发射电路主要由两部分组成:
超声波发射控制电路及超声波产生电路
超声波发射控制电路图
超声波发射控制电路采用一片8253芯片,计数器0设置为计数方式0,控制计数时间为1ms,并在OUT0端加上非门,则可在OUT0得到1ms的高电平。
计数器2也设置为计数方式0,用于计算超声波从发出到接收回来的时间。
超声波产生电路图
OUT0、fout端为控制端,只要在fout端加上恒定控制电源,就可以由OUT0来控制Q1的导通,从而控制超声波的发射。
3.超声波接收电路
超声波接收电路也由两部分组成:
中断产生电路和超声波采集电路
中断产生电路图
中断产生电路主要由一片8259构成,当超声波采集电路收集到超声波后,IR7引脚会输入一个高电平,从而产生中断,进行显示、报警等后续操作。
超声波采集电路图
超声波采集电路主要选用了一片LM567通用锁相环电路音调译码器,当超声波接收换能器接收到超声波后,INTR7端会产生一个高电平,用作中断响应电路的IR7中断输入信号。
4.数码管显示电路
数码管显示电路图
数码管显示电路采用一片8255来控制三个数码管的显示,A口选管,B口输出显示内容,A、B口都为基本输入输出方式,显示时间近似60ms。
5.蜂鸣报警电路
蜂鸣报警电路亦由两部分组成:
报警频率控制电路和蜂鸣产生电路
报警频率控制电路图
频率的控制由8253的计数器1完成,计数方式为方式2,计数初值根据障碍物距离而定,距离越小,计数初值越小,产生负脉冲的频率越高,经过非门变为一个正脉冲,输入给蜂鸣产生电路,脉冲长度由所接时钟决定,可根据实际合理选择蜂鸣器一次发声长。
蜂鸣产生电路图
蜂鸣产生电路采用一个蜂鸣器和多谐振荡接法的555定时器,当控制信号输入时,555控制蜂鸣器发出的音调。
七主程序流程图
1.中断子程序
2.延时子程序
3.距离计算子程序
4.十六进制转10进制数子程序
5.LED显示子程序
八、程序代码
INTR_RECVEQU01C8H;INTR对应的中断矢量地址
INTR_OCW1EQU9H;INTR对应的8259内部OCW1地址
INTR_OCW2EQU8H;INTR对应的8259内部ICW2地址
INTR_ICW1EQU8H;INTR对应的8259内部ICW1地址
INTR_ICW4EQU9H;INTR对应的8259内部ICW2地址
MY8253_COUNT0EQU4H;8253计数器0端口地址
MY8253_COUNT1EQU5H;8253计数器1端口地址
MY8253_COUNT2EQU6H;8253计数器2端口地址
MY8253_MODEEQU7H;8253的控制寄存器地址
MY8255_AEQU0CH;8255的A口地址
MY8255_BEQU0DH;8255的B口地址
MY8255_CEQU0FH;8255的C口地址
MY8255_MODEEQU0EH;8255的控制寄存器地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS;堆栈段初始化
DATASEGMENT;数据段初始化
DTABL1DB40H,07H,5CH,50H,67H,6EH,7EH,28H,80H,70H
;1管使用的段码(带小数点)
DTABL2DB3FH,06H,5BH,4FH,66H,6DH,7DH,27H,7FH,6FH
;2、3管使用的段码
X1DW1DUP(0);存放距离的百位(单位cm)
X2DW1DUP(0);存放距离的十位(单位cm)
X3DW1DUP(0);存放距离的个位(单位cm)
DATAENDS
CODESEGMENT;代码段初始化
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDX,AX
MOVAX,0000H
MOVDX,AX;数据段清零
M8255:
MOVDX,MY8255_MODE0CH;初始化8255
MOVAL,80H;工作方式0,A口和B口输出
OUTDX,AL
MOVDX,MY8255_A;写A口发出的起始数据
MOVAL,7H;选择LED数码管前三个管
OUTDX,AL
MOVDX,MY8255_B;写B口发出的起始数据
MOVAL,30H;显示“———"
OUTDX,AL
M8259:
MOVDX,INTR_OCW1;初始化8259
MOVAL,7FH;开8259中断7
OUTDX,AL
MOVDX,INTR_ICW1
MOVAL,13H;连接方式为单片,边沿触发
OUTDX,AL
MOVDX,INTR_ICW4
MOVAL,1H;CPU为8086
OUTDX,AL
MOVSI,INTR_RECV;填8259中断7中断矢量
MOVAX,OFFSETIRQ7;取中断程序入口地址(相对地址)
MOVES:
[DI],AX;设置中断程序入口偏移地址
ADDDI,2
MOVAX,SEGIRQ7
MOVES:
[DI],AX;设置中断程序入口段地址
SEND:
MOVDX,MY8253_MODE;初始化8253
MOVAL,30H;计数器0,方式0
OUTDX,AL
MOVDX,MY8253_COUNT0
MOVAL,0A9H;装入计数初值1193D,发射超声波1ms
OUTDX,AL
MOVAL,4H
OUTDX,AL
MOVDX,MY8253_MODE
MOVAL,0B0H;计数器2,方式0
OUTDX,AL
STI;打开中断
MOVDX,MY8253_COUNT2
MOVAL,0FFH;装入计数初值,开始计时
OUTDX,AL
MOVAL,0FFH
OUTDX,AL
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1
QUIT1:
CLI;关闭中断
MOVAX,4C00H
INT21H
IQR7PROCNEAR;中断处理程序IQR7
MOVBX,0H;置零BX
MOVDX,MY8253_MODE
MOVAL,80H;设定“飞读”
OUTDX,AL
INAL,MY8253_COUNT2;读取计数器2当前计数值
MOVCL,AL
INAL,MY8253_COUNT2
MOVCH,AL
MOVBX,CX;保存当前计数值
COUNT:
MOVAX,0FFFFH;计算差值
SUBAX,CX
CMPAX,0DBDH;比较是否大于一米
JAONE1;大于则转移到ONE1
SUBAX,BX
CMPAX,0AFH;比较是否比5cm大
JNABACK;不大于5cm则转移到BACK
MOVDX,MY8253_MODE
MOVAX,74H;计数器1,方式2
OUTDX,AX
MOVDX,MY8253_COUNT1
MOVAX,BX
OUTDX,AX;刷新报警声音频率
MOVCX,0AFH
DIVCX;计算距离
CALLTRAN;调用10进制调整程序
CALLDISP;调用显示程序
MOVDX,MY8253_MODE;初始化8253
MOVAL,30H;计数器0,方式0
OUTDX,AL
MOVDX,MY8253_COUNT0
MOVAL,0A9H;装入计数初值1193D,发射超声波1ms
OUTDX,AL
MOVAL,4H
OUTDX,AL
MOVDX,MY8253_MODE
MOVAL,0B0H;计数器2,方式0
OUTDX,AL
STI;打开中断
MOVDX,MY8253_COUNT2
MOVAL,0FFH;装入计数初值,开始计时
OUTDX,AL
MOVAL,0FFH
OUTDX,AL
OVER:
MOVDX,INTR_OCW2;向CUP发出中断结束命令
MOVAL,20H
OUTDX,AL
IRET
IRQ7ENDP
ONE1:
SUBAX,BX
CMPAX,15EH;比较是否比10cm大
JNABACK;不大于10cm则转移到BACK
MOVDX,MY8253_MODE
MOVAX,74H;计数器1,方式2
OUTDX,AX
MOVDX,MY8253_COUNT1
MOVAX,BX
OUTDX,AX;刷新报警声音频率
MOVCX,15EH
DIVCX;计算距离,舍去余数(已小于5cm)
CALLTRAN;调用10进制调整程序
CALLDISP;调用显示程序
JMPOVER;返回
BACK:
CALLDELAY1
JMPOVER
TRANPROCNEAR;距离(单位cm)10进制调整子程序
PUSHBX;把BX压栈
CLC;进位标志位置零
MOVCL,5H
MULCL
MOVDX,0H
MOVBX,0H
A1:
MOVCX,100H
MULCX
MOVX3,AX
A2:
MOVAL,AH;取出余数
MOVCL,0AH
DIVCL
MOVCX,0H
MOVCL,AH
MOVX3,CX;取出个位
MOVCL,10H
MULCL
MOVX2,AX;取出十位
MOVAX,X1
MOVBX,X2
ADDAX,BX
MOVBX,X3
ADDAX,BX
MOVBX,AX
ANDBX,100H
SARBX,2;右移两位
MOVX3,BX
MOVBX,X2
ANDBX,10H
SARBX,1;右移一位
MOVX2,BX
POPBX;BX出栈
RET
TRANENDP
DISPPROCNEAR
MOVDX,MY8255_A
MOVAL,1H;选择LED数码管1
OUTDX,AL
MOVDX,MY8255_B
MOVBX,OFFSETDTABL1
MOVAX,X1
ADDBX,AX
MOVAL,[BX];导入十进制数字X1对应的段码1
OUTDX,AL;显示数值
CALLDELAY1;调用显示延时程序
MOVDX,MY8255_A
MOVAL,2H;选择LED数码管2
OUTDX,AL
MOVDX,MY8255_B
MOVBX,OFFSETDTABL2
MOVAX,X2
ADDBX,AX
MOVAL,[BX];导入十进制数字X2对应的段码2
OUTDX,AL;显示数值
CALLDELAY1;调用显示延时程序
MOVDX,MY8255_A
MOVAL,4H;选择LED数码管3
OUTDX,AL
MOVDX,MY8255_B
MOVBX,OFFSETDTABL2
MOVAX,X3
ADDBX,AX
MOVAL,[BX];导入十进制数字X3对应的段码2
OUTDX,AL;显示数值
CALLDELAY1;调用显示延时程序
RET
DISPENDP
DELAY1PROCNEAR
PUSHCX;延时接近60ms
MOVCX,0FFFFH
D1:
DECCX
LOOPD1
POPCX
RET
DELAY1ENDP
CODEENDS
ENDSTATR
九、设计难点
设计难点主要在于控制发射超声波的时间,控制报警电路的报警频率变化,以及将计数值转化为所需要的十进制数显示距离,为此,我们小组进行了多次讨论,包括8253计数器的计数方式的选择,电路的连接,以及转化的算法,但是由于时间和能力有限,报警电路还是有些问题,直接用8253的计数器控制,一次报警的时长太短,需要在计数器与报警电路之间再加入相关环节来改变一次报警时长,此部分我们未能如期完成。
计数差值转化为十进制距离时,令我们感到十分头痛,计数值除以N时,若计数值太大,可能会产生丢失,所以我们在此改为先除以一个比较大的数(N的整倍数),再乘以倍数,得到所需要的值,但会损失一定的精确度,在交报告前,我们未能作出更好的算法。
十、心得体会
这次课程设计我们选择了比较难的一个题目,汽车倒车测距仪,希望在运用微机课程知识和提高自己的能力同时,给自己多一些锻炼和挑战。
看到其他有些同学草草地改了一些课程设计就上交了,我们并没有因此心浮气躁,而是继续专心研读相关资料,结合题目和课本进行倒车测距仪的设计。
花了一个多星期,兢兢业业,挥汗洒泪,终于完成了本次课程设计。
真是“十年辛苦不寻常,字字看来皆是血”啊!
下面我们就分软件和硬件进行阐述:
1、硬件部分
此次题目硬件部分是难点,因为我们虽然学习和掌握了8253,8259,8255等等相关知识,但是综合运用起来却显得捉襟见肘,因为此外还要配套地加上一些其它的电路,比如超声波的发射和接收电路等,于是我们上网查阅了很多资料,在掌握了相关的原理的基础上,整合修改了一些电路,使我们的课程设计所要求的功能能够完整而正确地实现。
我们小组一起研究学习了proteus软件,学会了如何绘制电路图和仿真,在这其中也碰到了许多困难,但是我们相互讨论,并通过搜索网络,查阅书籍等解决了硬件上遇到的很多问题。
2、软件部分
软件部分是在我们的硬件基础上进行功能实现,由于汇编语言的基础性,不像我们所学的高级语言那样易于掌握。
相比于C++这样的高级编程语言,汇编语言可以说是相当复杂的一个工程。
因为老师曾跟我们说,编程最重要是设计的思想和算法,而语法上的东西相较而言反而显得次要些,因此要把思路理清,表达出来,还要画流程图。
虽然这次设计的思路看似简单,但编写起来依然感到吃力,因为有个元件我第一次编程的——8259,加上中断程序的编写,假若用的是C,确实可以很快搞定,用汇编,不仅要写处理程序,还要写现场保护和现场恢复,之前还要写入口地址。
对于陌生的东西,最好就是参考,于是我就反复看课本上关于中断程序的例子,从中参透,加上上网查找资料和请教师兄,最终完成理论的程序。
3、团队协作
老师让我们两个人一队合作完成此次课程设计,应该就是让我们能够有团队协作的意识。
这次我和搭档合作,主要是因为我们曾经有过合作的经验,互相比较了解对方。
所以在合作的过程中还是比较顺利的。
当一个人出现些许问
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 汽车 倒车 测距仪
![提示](https://static.bdocx.com/images/bang_tan.gif)