当前位置:文档之家› 微机原理课程设计--汽车倒车测距仪

微机原理课程设计--汽车倒车测距仪

微机原理与接口技术课程设计——汽车倒车测距仪题目:汽车倒车测距仪指导老师:日期: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进制数子程序 (18)5. LED显示子程序 (19)八、程序代码 (19)九、设计难点 (25)十、心得体会 (25)十一、参考文献 (27)汽车倒车测距仪设计一设计目的1、运用微机原理及接口技术理论课中学习的8086、8255等芯片,以及数码管等元件进行课程设计,做到学以致用。

2、通过课程设计提高自己的动手能力,分析问题的能力、解决问题的能力。

3、提高自己运用汇编语言的能力,使自己的思维更加发散,提高创新能力。

4、通过整个课程设计,提高综合运用能力,及提高对硬件的认识和布线能力。

二、设计内容1、设计一个微机控制的汽车倒车测距仪,能测量并显示车辆后部障碍物离车辆的距离,同时用间歇的“嘟嘟”声发出警报,“嘟嘟”声间隙随障碍物距离缩短而缩短,驾驶员不但可以直接观察到检测的距离,还可以凭听觉判断车后障碍物离车辆距离的远近;①开机后先显示“———”,并有开机指示灯。

② CPU发射超声波1ms,然后显示60ms;即1ms+60ms为一个工作周期,等待回波,在次周期内完成一次探测。

③根据距离远近发出报警声并显示距离。

障碍物距离小于1m,距离值变化5cm更换显示,否则不更换;距离在1m以上,新值与原显示值之差大于10cm更换,否则不更换。

④用三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介绍Intel 8086微处理器是由美国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类型:80868253地址分配:4H、5H、6H、7H8255地址分配:0CH、0DH、0EH、0FH8259地址分配:8H 、9H时钟信号频率:1.193MHz2.超声波发射电路:超声波发射电路主要由两部分组成:超声波发射控制电路及超声波产生电路超声波发射控制电路图超声波发射控制电路采用一片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_RECV EQU 01C8H ;INTR对应的中断矢量地址INTR_OCW1 EQU 9H ;INTR对应的8259内部OCW1地址INTR_OCW2 EQU 8H ;INTR对应的8259内部ICW2地址INTR_ICW1 EQU 8H ;INTR对应的8259内部ICW1地址INTR_ICW4 EQU 9H ;INTR对应的8259内部ICW2地址MY8253_COUNT0 EQU 4H ;8253计数器0端口地址MY8253_COUNT1 EQU 5H ;8253计数器1端口地址MY8253_COUNT2 EQU 6H ;8253计数器2端口地址MY8253_MODE EQU 7H ;8253的控制寄存器地址MY8255_A EQU 0CH ;8255的A口地址MY8255_B EQU 0DH ;8255的B口地址MY8255_C EQU 0FH ;8255的C口地址MY8255_MODE EQU 0EH ;8255的控制寄存器地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDS ;堆栈段初始化DATA SEGMENT ;数据段初始化DTABL1 DB 40H,07H,5CH,50H,67H,6EH,7EH,28H,80H,70H;1管使用的段码(带小数点)DTABL2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,27H,7FH,6FH;2、3管使用的段码X1 DW 1 DUP(0) ;存放距离的百位(单位cm)X2 DW 1 DUP(0) ;存放距离的十位(单位cm)X3 DW 1 DUP(0) ;存放距离的个位(单位cm)DATA ENDSCODE SEGMENT ;代码段初始化 ASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DX,AXMOV AX,0000HMOV DX,AX ;数据段清零M8255:MOV DX,MY8255_MODE 0CH ;初始化8255 MOV AL,80H ;工作方式0,A口和B口输出OUT DX,ALMOV DX,MY8255_A ;写A口发出的起始数据MOV AL,7H ;选择LED数码管前三个管OUT DX,ALMOV DX,MY8255_B ;写B口发出的起始数据MOV AL,30H ;显示“———"OUT DX,ALM8259:MOV DX,INTR_OCW1 ;初始化8259 MOV AL,7FH ;开8259中断7OUT DX,ALMOV DX,INTR_ICW1MOV AL,13H ;连接方式为单片,边沿触发OUT DX,ALMOV DX,INTR_ICW4MOV AL,1H ;CPU为8086OUT DX,ALMOV SI,INTR_RECV ;填8259中断7中断矢量MOV AX,OFFSET IRQ7;取中断程序入口地址(相对地址)MOV ES:[DI],AX ;设置中断程序入口偏移地址ADD DI,2MOV AX,SEG IRQ7MOV ES:[DI],AX ;设置中断程序入口段地址SEND: MOV DX,MY8253_MODE ;初始化8253MOV AL,30H ;计数器0,方式0OUT DX,ALMOV DX,MY8253_COUNT0MOV AL,0A9H ;装入计数初值1193D,发射超声波1msOUT DX,ALMOV AL,4HOUT DX,ALMOV DX,MY8253_MODEMOV AL,0B0H ;计数器2,方式0OUT DX,ALSTI ;打开中断MOV DX,MY8253_COUNT2MOV AL,0FFH ;装入计数初值,开始计时OUT DX,ALMOV AL,0FFH OUT DX,ALWAIT1:MOV AH,1 ;判断是否有按键按下INT 16HJZ WAIT1QUIT1:CLI ;关闭中断MOV AX,4C00HINT 21HIQR7 PROC NEAR ;中断处理程序IQR7MOV BX,0H ;置零BXMOV DX,MY8253_MODEMOV AL,80H ;设定“飞读”OUT DX,ALIN AL,MY8253_COUNT2 ;读取计数器2当前计数值MOV CL,ALIN AL,MY8253_COUNT2MOV CH,ALMOV BX,CX ;保存当前计数值COUNT:MOV AX,0FFFFH ;计算差值SUB AX,CXCMP AX,0DBDH ;比较是否大于一米JA ONE1 ;大于则转移到ONE1SUB AX,BXCMP AX,0AFH ;比较是否比5cm大JNA BACK;不大于5cm则转移到BACKMOV DX,MY8253_MODEMOV AX,74H ;计数器1,方式2OUT DX,AXMOV DX,MY8253_COUNT1MOV AX,BXOUT DX,AX ;刷新报警声音频率MOV CX,0AFHDIV CX ;计算距离CALL TRAN ;调用10进制调整程序CALL DISP ;调用显示程序MOV DX,MY8253_MODE ;初始化8253MOV AL,30H ;计数器0,方式0OUT DX,ALMOV DX,MY8253_COUNT0MOV AL,0A9H ;装入计数初值1193D,发射超声波1msOUT DX,ALMOV AL,4HOUT DX,ALMOV DX,MY8253_MODEMOV AL,0B0H ;计数器2,方式0OUT DX,ALSTI ;打开中断MOV DX,MY8253_COUNT2MOV AL,0FFH ;装入计数初值,开始计时OUT DX,ALMOV AL,0FFH OUT DX,ALOVER: MOV DX,INTR_OCW2 ;向CUP发出中断结束命令MOV AL,20HOUT DX,ALIRETIRQ7 ENDPONE1: SUB AX,BXCMP AX,15EH ;比较是否比10cm大JNA BACK ;不大于10cm则转移到BACKMOV DX,MY8253_MODEMOV AX,74H ;计数器1,方式2OUT DX,AXMOV DX,MY8253_COUNT1MOV AX,BXOUT DX,AX ;刷新报警声音频率MOV CX,15EHDIV CX ;计算距离,舍去余数(已小于5cm)CALL TRAN ;调用10进制调整程序CALL DISP ;调用显示程序JMP OVER ;返回BACK:CALL DELAY1JMP OVERTRAN PROC NEAR ;距离(单位cm)10进制调整子程序PUSH BX ;把BX压栈 CLC ;进位标志位置零MOV CL,5HMUL CLMOV DX,0HMOV BX,0HA1: MOV CX,100HMUL CXMOV X3,AXA2: MOV AL,AH ;取出余数 MOV CL,0AHDIV CLMOV CX,0HMOV CL,AHMOV X3,CX ;取出个位 MOV CL,10HMUL CLMOV X2,AX ;取出十位MOV AX,X1MOV BX,X2ADD AX,BXMOV BX,X3ADD AX,BXMOV BX,AXAND BX,100HSAR BX,2 ;右移两位MOV X3,BXMOV BX,X2AND BX,10HSAR BX,1 ;右移一位MOV X2,BXPOP BX ;BX出栈RETTRAN ENDPDISP PROC NEARMOV DX,MY8255_AMOV AL,1H ;选择LED数码管1OUT DX,ALMOV DX,MY8255_BMOV BX,OFFSET DTABL1MOV AX,X1ADD BX,AXMOV AL,[BX] ;导入十进制数字X1对应的段码1 OUT DX,AL ; 显示数值CALL DELAY1 ;调用显示延时程序MOV DX,MY8255_AMOV AL,2H ;选择LED数码管2OUT DX,ALMOV DX,MY8255_BMOV BX,OFFSET DTABL2MOV AX,X2ADD BX,AXMOV AL,[BX] ;导入十进制数字X2对应的段码2 OUT DX,AL ;显示数值CALL DELAY1 ;调用显示延时程序MOV DX,MY8255_AMOV AL,4H ;选择LED数码管3OUT DX,ALMOV DX,MY8255_BMOV BX,OFFSET DTABL2MOV AX,X3ADD BX,AXMOV AL,[BX] ;导入十进制数字X3对应的段码2OUT DX,AL ;显示数值CALL DELAY1 ;调用显示延时程序RETDISP ENDPDELAY1 PROC NEARPUSH CX ;延时接近60msMOV CX,0FFFFHD1 :DEC CXLOOP D1POP CXRETDELAY1 ENDPCODE ENDSEND STATR九、设计难点设计难点主要在于控制发射超声波的时间,控制报警电路的报警频率变化,以及将计数值转化为所需要的十进制数显示距离,为此,我们小组进行了多次讨论,包括8253计数器的计数方式的选择,电路的连接,以及转化的算法,但是由于时间和能力有限,报警电路还是有些问题,直接用8253的计数器控制,一次报警的时长太短,需要在计数器与报警电路之间再加入相关环节来改变一次报警时长,此部分我们未能如期完成。

相关主题